有可能方便的把java空指针异常的异常输出到influxdb吗

springboot2输出metrics到influxdb丶一个站在Java后端设计之路的男青年个人博客网站java使用influxDB数据库的详细代码
&更新时间:日 09:28:31 & 作者:java开发鼻祖
这篇文章主要为大家介绍了java使用influxDB数据库的详细代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
本文实例为大家分享了java使用influxDB数据库的具体代码,供大家参考,具体内容如下
1.pom.xml中导入jar包依赖
&!-- 引入influxdb依赖
&dependency&
&groupId&org.influxdb&/groupId&
&artifactId&influxdb-java&/artifactId&
&version&2.5&/version&
&/dependency&
2.编写influxDB工具类:
package com.hontye.parameter.
import org.influxdb.InfluxDB;
import org.influxdb.InfluxDBF
import org.influxdb.dto.P
import org.influxdb.dto.Point.B
import org.influxdb.dto.Q
import org.influxdb.dto.QueryR
import java.util.M
* 时序数据库 InfluxDB 连接
* @author Dai_LW
public class InfluxDbUtil {
private static String openurl = "http://127.0.0.1:8086";//连接地址
private static String username = "root";//用户名
private static String password = "root";//密码
private static String database = "PARAMTER_DB";//数据库
private static String measurement = "tw_parameter_tb";//表名
private InfluxDB influxDB;
public InfluxDbUtil(String username, String password, String openurl, String database){
this.username =
this.password =
this.openurl =
this.database =
public static InfluxDbUtil setUp(){
//创建 连接
InfluxDbUtil influxDbUtil = new InfluxDbUtil(username, password, openurl, database);
influxDbUtil.influxDbBuild();
influxDbUtil.createRetentionPolicy();
influxDB.deleteDB(database);
influxDB.createDB(database);
return influxDbU
/**连接时序数据库;获得InfluxDB**/
public InfluxDB influxDbBuild(){
if(influxDB == null){
influxDB = InfluxDBFactory.connect(openurl, username, password);
influxDB.createDatabase(database);
return influxDB;
* 设置数据保存策略
* defalut 策略名 /database 数据库名/ 30d 数据保存时限30天/ 1 副本个数为1/ 结尾DEFAULT 表示 设为默认的策略
public void createRetentionPolicy(){
String command = String.format("CREATE RETENTION POLICY \"%s\" ON \"%s\" DURATION %s REPLICATION %s DEFAULT",
"defalut", database, "30d", 1);
this.query(command);
* @param command 查询语句
public QueryResult query(String command){
return influxDB.query(new Query(command, database));
* @param tags 标签
* @param fields 字段
public void insert(Map&String, String& tags, Map&String, Object& fields){
Builder builder = Point.measurement(measurement);
builder.tag(tags);
builder.fields(fields);
influxDB.write(database, "", builder.build());
* @param command 删除语句
* @return 返回错误信息
public String deleteMeasurementData(String command){
QueryResult result = influxDB.query(new Query(command, database));
return result.getError();
* 创建数据库
* @param dbName
public void createDB(String dbName){
influxDB.createDatabase(dbName);
* 删除数据库
* @param dbName
public void deleteDB(String dbName){
influxDB.deleteDatabase(dbName);
public String getUsername() {
public void setUsername(String username) {
this.username =
public String getPassword() {
public void setPassword(String password) {
this.password =
public String getOpenurl() {
public void setOpenurl(String openurl) {
this.openurl =
public void setDatabase(String database) {
this.database =
public class QuatyServiceImpl{
private InfluxDbUtil influxDB;
public void intoDb() {
influxDB = InfluxDbUtil.setUp();
Map&String, String& tags = new HashMap&&();
Map&String, Object& fields = new HashMap&&();
tags.put("TAG_NAME",info.getKey());
fields.put("TAG_VALUE",code);
fields.put("TIMAMPEST", df.format(new Date()));
influxDB.insert(tags, fields);
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具JMXtrans + InfluxDB + Grafana 实现 Kafka 性能指标监控
一般系统监控通常分为3部分:
分析与转换
展现(可视化)
对于前端应用,一般需要埋点,对用户的行为进行记录。 如果不埋点,则需要通过 Pagespeed、PhantomJS 这样的工具去模拟用户行为进行测试。后端的系统通常有自己的性能指标。我们可以通过命令/脚本的方式进行采集。
JMX(Java Management Extensions,即 Java 管理扩展)是一个为应用程序、设备、系统等管理功能的框架,通常可以用来监控和管理 Java 应用系统。
Kafka 做为一款Java应用,已经定义了丰富的性能指标,(可以参考 Kafka监控指标),通过 JMX 可以轻松对其进行监控。
首先需要在 Kafka 上打开 JMX
1.修改 ${kafka_home}/bin/kafka-server-start.sh , 增加一个 JMX_PORT 的配置,指定一个端口用于接受外部连接,注意如部署、运行在非 root 用户下,必须指定 1024以上端口
if[ "x$KAFKA_HEAP_OPTS"= "x"]; then export KAFKA_HEAP_OPTS= "-Xmx1G -Xms1G"export JMX_PORT= "9999"fi
2.重启kafka
bin/kafka-server-stop.sh bin/kafka-server-start.sh config/server.properties &
3.重启后观察可以发现JMX已经启动了
$ps -ef | grep kafka www 5106510Nov03 ? 00: 08: 20/opt/vdian/java/bin/java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPauseMillis= 20-XX:InitiatingHeapOccupancyPercent= 35-XX:+DisableExplicitGC -Djava.awt.headless= true-Xloggc: /home/www/kafka_2 .11- 0.10.0.1/bin/../logs/kafkaServer-gc.log -verbose:gc -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintGCTimeStamps -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate= false-Dcom.sun.management.jmxremote.ssl= false-Dcom.sun.management.jmxremote.port= 9999-Dkafka.logs.dir= /home/www/kafka_2 .11- 0.10.0.1/bin/../logs -Dlog4j.configuration=file:bin/../config/log4j.properties -cp : /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/aopalliance-repackaged- 2.4.0-b34.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/argparse4j- 0.5.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/connect-api- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/connect-file- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/connect-json- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/connect-runtime- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/guava- 18.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/hk2-api- 2.4.0-b34.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/hk2-locator- 2.4.0-b34.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/hk2-utils- 2.4.0-b34.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson-annotations- 2.6.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson-core- 2.6.3.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson-databind- 2.6.3.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson-jaxrs-base- 2.6.3.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson-jaxrs-json-provider- 2.6.3.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jackson- module-jaxb-annotations- 2.6.3.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javassist- 3.18.2-GA.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javax.annotation-api- 1.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javax.inject- 1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javax.inject- 2.4.0-b34.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javax.servlet-api- 3.1.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/javax.ws.rs-api- 2.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-client- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-common- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-container-servlet- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-container-servlet-core- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-guava- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-media-jaxb- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jersey-server- 2.22.2.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-continuation- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-http- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-io- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-security- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-server- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-servlet- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-servlets- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jetty-util- 9.2.15.v.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/jopt-simple- 4.9.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka-clients- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka-log4j-appender- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka-streams- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka-streams-examples- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka-tools- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka_2 .11- 0.10.0.1-sources.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka_2 .11- 0.10.0.1-test-sources.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/kafka_2 .11- 0.10.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/log4j- 1.2.17.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/lz4- 1.3.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/metrics-core- 2.2.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/osgi-resource-locator- 1.0.1.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/reflections- 0.9.10.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/rocksdbjni- 4.8.0.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/scala-library- 2.11.8.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/scala-parser-combinators_2 .11- 1.0.4.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/slf4j-api- 1.7.21.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/slf4j-log4j12- 1.7.21.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/snappy-java- 1.1.2.6.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/validation-api- 1.1.0.Final.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/zkclient- 0.8.jar: /home/www/kafka_2 .11- 0.10.0.1/bin/../libs/zookeeper- 3.4.6.jar kafka.Kafka config/server.properties $ netstat -an | grep 9999tcp 00::: 9999:::* LISTEN
4.在安装了java的主机上运行jconsole,就会弹出一个控制台,在可以看到MBean中的性能指标
传统的数据采集方案,一般是先开发数据采集的脚本,然后借助 nagios、zabbix 这样的监控软件来调度执行,并将采集到的数据进行上报。对于 java 应用,给大家介绍一个新朋友 jmxtrans。
读取 json 或 yaml 格式的配置文件,通过 jmx 采集 java 性能指标。支持输出到 Graphite、InfluxDB、RRDTool 等。
1.首先下载 jmxtrans 的 RPM 包,地址
2.安装 jdk1.8
yum install -y java- 1.8.0-openjdk.x86_64 java- 1.8.0-openjdk-devel.x86_64
3.设置 JAVA_HOME 和 PATH 环境变量
export JAVA_HOME= /usr/lib/jvm/java- 1.8.0-openjdk- 1.8.0.65- 0.b17.el6_7.x86_64 export PATH=$JAVA_HOME/bin: /usr/share/jmxtrans/bin:$PATH
4.编写配置文件
下文是一段测试用的配置,采集的数据会输出到日志中显示。
"servers": [ {
"port": "jmx端口",
"host": "IP地址",
"queries": [ {
"outputWriters": [ {
"@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"} ],
"obj": "java.lang:type=Memory",
"attr": [ "HeapMemoryUsage", "NonHeapMemoryUsage"] }, {
"outputWriters": [ {
"@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"} ],
"obj": "java.lang:name=CMS Old Gen,type=MemoryPool",
"attr": [ "Usage"] }, {
"outputWriters": [ {
"@class": "com.googlecode.jmxtrans.model.output.StdOutWriter"} ],
"obj": "java.lang:name=ConcurrentMarkSweep,type=GarbageCollector",
"attr": [ "LastGcInfo"] } ],
"numQueryThreads": 2} ] }
5.配置文件编辑完成后,将其放在/var/lib/jmxtrans/目录中
6.启动 jmxtrans
jmxtrans start
jmxtrans 会以后台 deamon 的形式运行,每隔1分钟采集一次数据
由于 jmx 是通过网络连接的,因此 JMXtrans 的部署方案有 2 种
集中式,在一台服务器上部署一个 JMXtrans,分别连接至所有的 Kafka 实例,并将数据吐到 InfluxDB。为了减少网络传输,可以考虑部署到 InfluxDB 的服务器上
分布式,每个 Kafka 实例部署一个 JMXtrans
这里我们采用了方案2
P.S 如果 JMX 能够支持 UNIX socket 方式连接方案就更完美了。socket 连接较 TCP 连接开销更小,效率更高,非常适合同一台服务器上2个进程之间的通信
分析与转换
由于 Kafka 的性能数据非常全面,大部分指标已经做了分析了。
类似上述,指标的直方图,次数,最大最小、标准方差都已经计算好了,因此我们不再对数据再做加工。
这里只取了每项指标的 Mean 项(中位数) 做为指标值写入 InfluxDB 当中。
Grafana 是一款非常强大的纯前端的画图软件,可以说画什么图,动动鼠标就可以配出来。
设置变量模版
支持变量模版,例如下图,我们将展现的指标所属的实例定义为变量
之后在图表的左上角就可以通过下拉框的方式选择要查看的实例的图表,支持多选
支持前端对数据进行加工
例如 CPU 使用率数据,我们采集到的数据实际是一个计数器,记录了采集时的 CPU 时间。
使用率我是这样定义的, 采集 2 次
CPU使用率 = (结束数据-开始数据)/采集间隔时间
这里通过配置的方式实现了数据加工与展现。
最后图表页面是这样一个效果,是不是非常炫酷呢
Tomcat、JBoss 这类的JAVA应用都支持 JMX,下面的还用我说么?
SFDC 大会北京站还剩最后 90 张门票,感兴趣的小伙伴赶紧来参加。
点击「阅读原文」即可。
责任编辑:
声明:该文观点仅代表作者本人,搜狐号系信息发布平台,搜狐仅提供信息存储空间服务。
今日搜狐热点influxdb 端口、数据结构、写数据 - 蝈蝈俊 - 博客园
posts - 491, comments - 181, trackbacks - 0, articles - 0
InfluxDB 是一个开源,分布式,时间序列,事件,可度量和无外部依赖的数据库。
InfluxDB有三大特性:
Time Series (时间序列):你可以使用与时间有关的相关函数(如最大,最小,求和等) Metrics(度量):你可以实时对大量数据进行计算 Events(事件):它支持任意的事件数据 端口暴露 influxdb会监听4个端口: tcp&&&&&&& 0&&&&& 0 0.0.0.0:8099&&&&&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&&&&& LISTEN&&&&& 29458/influxdbtcp&&&&&&& 0&&&&& 0 0.0.0.0:8083&&&&&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&&&&& LISTEN&&&&& 29458/influxdbtcp&&&&&&& 0&&&&& 0 0.0.0.0:8086&&&&&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&&&&& LISTEN&&&&& 29458/influxdbtcp&&&&&&& 0&&&&& 0 0.0.0.0:8090&&&&&&&&&&&&&&& 0.0.0.0:*&&&&&&&&&&&&&&&&&& LISTEN&&&&& 29458/influxdb 其中单机使用只需要用到两个,另外两个是分布式部署时采用的
8083& WEB 管理界面 8086 HTTP API 接口服务 & 数据结构 在 influxdb 中 database 、 series、point 分别类似于数据库系统中的 数据库、表、列的概念。 所有的数据项在创建时都会自动增加两个字段:
time 数据创建的时间,时间戳类型 sequence_number 字段是 influxdb 数据库维护的,类似于mysql的 主键概念。 比如我们用下面数据创建一个 Series
他就会产生下面数据格式的数据存储:
这里可以看到,系统自动增加了2个字段: time 和 sequence_number 。 接口协议 InfluxDB 支持两种api方式:
HTTP API ,已经提供 Protobuf API, 计划提供 如何使用 http api 进行操作? 比如对于foo_production这个数据库,插入一系列数据,可以发现POST 请求到 /db/foo_production/series?u=some_user&p=some_password, 数据放到body里。 数据看起来是这样的: 下面的"name": "events", 其中"events"就是一个series,类似关系型数据库的表table[
"name": "events",
"columns": ["state", "email", "type"],
"points": [
["ny", "paul@influxdb.org", "follow"],
["ny", "todd@influxdb.org", "open"]
"name": "errors",
"columns": ["class", "file", "user", "severity"],
"points": [
["DivideByZero", "example.py", "someguy@influxdb.org", "fatal"]
格式是json,可以在一个POST请求发送多个 series, 每个 series 里的 points 可以是多个,但索引要和columns对应。
上面的数据里没有包含time 列,InfluxDB会自己加上,不过也可以指定time,比如:[
"name": "response_times",
"columns": ["time", "value"],
"points": [
[, 234.3],
[, 120.1],
time 在InfluxDB里是很重要的,毕竟InfluxDB是time series database在InfluxDB里还有个sequence_number字段是数据库维护的,类似于mysql的 主键概念
当然 sequence_number 也是可以指定的,类似如下:[
"name": "log_lines",
"columns": ["time", "sequence_number", "line"],
"points": [
[8, 1, "this line is first"],
[8, 2, "and this is second"]
InfluxDB 增删更查都是用http api来完成,甚至支持使用正则表达式删除数据,还有计划任务。
发送POST请求到 /db/:name/scheduled_deletes, body如下,{
"regex": "stats\..*",
"olderThan": "14d",
"runAt": 3
这个查询会删除大于14天的数据,并且任何以stats开头的数据,并且每天3:00 AM运行。
参考资料:
InfluxDB 开源分布式时序、事件和指标数据库
开源监控利器grafana拒绝访问 | www.colabug.com | 百度云加速
请打开cookies.
此网站 (www.colabug.com) 的管理员禁止了您的访问。原因是您的访问包含了非浏览器特征(44e037dcff5d43a1-ua98).
重新安装浏览器,或使用别的浏览器

我要回帖

更多关于 java虚拟机安卓版apk 的文章

 

随机推荐