基于jmxtrans+influxdb+grafana实现对canal监控
最近在调研canal数据同步系统的监控方案,网上关于jmxtrans+influxdb+grafana监控kafka的文档很多,没有监控canal的。通过几天的摸索,大致明白了来龙去脉。监控流程基本是一样的,只在个别配置的地方稍有差异。记录一下,供别人参考,也顺便总结一下。
监控系统一般分为3部分,数据采集、数据存储、分析展示,分别对应于jmxtrans+influxdb+grafana的一部分
1、下载安装包
1.1 jmxtrans
jmxtrans是一个通过jmx采集java应用的数据采集器,只要java应用开启了JMX端口,就可以进行采集
jmxtrans的github地址
https://github.com/jmxtrans/jmxtrans
下载rpm包的地址我直接贴出来了
wget http://central.maven.org/maven2/org/jmxtrans/jmxtrans/268/
1.2 influxdb
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.4.2.x86_64.rpm
1.3 grafana
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.2-1.x86_64.rpm
下载如下三个包
2、启动
rmp -ivh packagename
安装jmxtran需要你的虚拟机提前安装jdk1.7以上
默认安装路径 /usr/share
默认配置文件路径/var/lib/
默认日志路径 /var/log/
默认启动脚本路径 /etc/init.d
2.1 先启动influxdb
./influxdb start
进入influxdb
创建用户和数据库
CREATE USER "root" WITH PASSWORD '123456' WITH ALL PRIVILEGES
创建完成influxdb的用户和数据库暂时就够用了,其它简单操作如下,后面会用到
#创建数据库
create database "db_name"
#显示所有的数据库
show databases
#删除数据库
drop database "db_name"
#使用数据库
use db_name
#显示该数据库中所有的表
show measurements
#创建表,直接在插入数据的时候指定表名
insert test,host=127.0.0.1,monitor_name=test count=1
#删除表
drop measurement "measurement_name"
#退出
quit
2.2 启动jmxtrans
./jmxtrans start 就可以启动了
具体监控哪些内容,它会去默认地址 /var/lib/jmxtrans/ 下找json,这些json就是配置监控内容的
如果没有json,就不会监控任何内容,那么启动jmxtrans是没有任何意义的
接下来学习如何书写json
首先明白一点,jmxtrans是一个通过jmx采集java应用的数据采集器
所以非java应用,jmxtrans监控不了;而且不开启JMX端口,jmxtrans也监控不了
2.2.1 开启JMX端口
这是要添加的配置
-Dcom.sun.management.jmxremote
-Djava.rmi.server.hostname=10.0.209.216
-Dcom.sun.management.jmxremote.port=22222
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false”
注意:有的文章中没有第二条配置,不加的话是会报错的
找到canal启动脚本start.sh,在JAVA_OPTS后加上这些配置
重启canal
查看22222端口是否开启
2.2.2 配置json
jmxtrans的github上有一段示例配置
{
"servers" : [ {
"port" : "22222",
"host" : "10.10.49.11",
"queries" : [ {
"obj" : "java.lang:type=Memory",
"attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ],
"resultAlias":"jvmMemory",
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://10.0.209.216:8086/",
"username" : "root",
"password" : "123456",
"database" : "test",
"tags" : {"application" : "canal_server"}
} ]
} ]
} ]
}
host:欲监控的canal机器
port:jmx端口,22222
queries为监控的具体内容,这些内容我们需要一个工具去了解
jdk的bin目录下,有一个工具jconsole.exe,双击,canal不在本地,所以选择远程,连接jmx端口
MBean下为所有的监控项,queries可配置的内容从这里查找
obj和attr分别对应MBean中内容如下:
resultAlias:自定义表名,收集到的数据会存入influxdb的定义的表中
outputWriters为连接influxdb的配置
@class不需要修改
url:influxdb的机器+端口,默认端口8086
username和password:influxdb的用户和密码
database:influxdb数据库
tags:暂时不知道干什么用的
这样就可以启动jmxtrans了。
2.2.3 检查jmxtrans是否启动成功
进入influxdb,检查是否创建了表jvmMemory,表中是否有数据
默认1分钟收集一次数据
如果没有创建表,可能jmxtrans启动有问题,去 /var/log/jmxtrans下查看日志
以下为本人遇到过的一个错误,是因为json格式问题。所以最好使用github给出的格式,不要自己书写
INFO | jvm 1 | 2017/12/07 16:46:16 | WrapperSimpleApp: Encountered an error running main: com.googlecode.jmxtrans.exceptions.LifecycleException: com.googlecode.jmxtrans.exceptions.LifecycleException: Error parsing json: /var/lib/jmxtrans/canal_server.json
INFO | jvm 1 | 2017/12/07 16:46:16 | com.googlecode.jmxtrans.exceptions.LifecycleException: com.googlecode.jmxtrans.exceptions.LifecycleException: Error parsing json: /var/lib/jmxtrans/canal_server.json
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.start(JmxTransformer.java:191)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.doMain(JmxTransformer.java:157)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.main(JmxTransformer.java:138)
INFO | jvm 1 | 2017/12/07 16:46:16 | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
INFO | jvm 1 | 2017/12/07 16:46:16 | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
INFO | jvm 1 | 2017/12/07 16:46:16 | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
INFO | jvm 1 | 2017/12/07 16:46:16 | at java.lang.reflect.Method.invoke(Method.java:498)
INFO | jvm 1 | 2017/12/07 16:46:16 | at org.tanukisoftware.wrapper.WrapperSimpleApp.run(WrapperSimpleApp.java:240)
INFO | jvm 1 | 2017/12/07 16:46:16 | at java.lang.Thread.run(Thread.java:748)
INFO | jvm 1 | 2017/12/07 16:46:16 | Caused by: com.googlecode.jmxtrans.exceptions.LifecycleException: Error parsing json: /var/lib/jmxtrans/canal_server.json
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.ConfigurationParser.parseServers(ConfigurationParser.java:62)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.processFilesIntoServers(JmxTransformer.java:354)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.startupSystem(JmxTransformer.java:322)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.JmxTransformer.start(JmxTransformer.java:187)
INFO | jvm 1 | 2017/12/07 16:46:16 | ... 8 more
INFO | jvm 1 | 2017/12/07 16:46:16 | Caused by: com.fasterxml.jackson.core.JsonParseException: Unexpected character ('"' (code 34)): was expecting comma to separate Object entries
INFO | jvm 1 | 2017/12/07 16:46:16 | at [Source: /var/lib/jmxtrans/canal_server.json; line: 4, column: 10]
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.core.JsonParser._constructError(JsonParser.java:1702)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportError(ParserMinimalBase.java:558)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.core.base.ParserMinimalBase._reportUnexpectedChar(ParserMinimalBase.java:456)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.core.json.UTF8StreamJsonParser.nextFieldName(UTF8StreamJsonParser.java:1042)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:221)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeArray(JsonNodeDeserializer.java:272)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.deser.std.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.java:232)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:69)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.deser.std.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.java:15)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.fasterxml.jackson.databind.ObjectMapper.readTree(ObjectMapper.java:2447)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.util.ProcessConfigUtils.parseProcess(ProcessConfigUtils.java:61)
INFO | jvm 1 | 2017/12/07 16:46:16 | at com.googlecode.jmxtrans.ConfigurationParser.parseServers(ConfigurationParser.java:55)
INFO | jvm 1 | 2017/12/07 16:46:16 | ... 11 more
STATUS | wrapper | 2017/12/07 16:46:18 | <-- Wrapper Stopped
2.3 grafana
2.3.1 启动&登录
/etc/init.d/grafana-server start
启动后可以通过3000端口访问web控制台,登录用户名和密码都是admin
2.3.2 创建数据源
添加数据库配置
2.3.3 创建监控面板
创建dashboard,面板中可以添加图、表、文本等内容,以Graph为例
编辑图表,General处修改表头
Merics设置监控项,首先选择数据源,其次选择监控项,表达式类似如下的sql,【ALIAS BY】修改图例,支持一个图中多查询
Axes修改坐标轴显示
legend完善图例
右上角选择时间序列
最后的图表就是如下的样式
基于jmxtrans+influxdb+grafana实现对canal监控的更多相关文章
- 基于telegraf+influxdb+grafana进行postgresql数据库监控
前言 随着公司postgresql数据库被广泛应用,尤其是最近多个项目在做性能测试的时候都是基于postgresql的数据库,为了确定性能瓶颈是否会出现在数据库中,数据库监控也被我推上了日程.在网上找 ...
- JMXtrans + InfluxDB + Grafana实现Zookeeper性能指标监控
一.总体效果图 这里是将集群全部放在一起,可以根据自己的审美看怎么放 二.监控指标 其中有些指标与第一篇Zookeeper通过四字命令基础监控(Zabbix)的四字命令的指标是有重复的,二者选一个则可 ...
- Kafka使用jmxtrans+influxdb+grafana监控JMX指标
最近在搞Kafka集群监控,之前也是看了网上的很多资料.之所以使用jmxtrans+influxdb+grafana是因为界面酷炫,可以定制化,缺点是不能操作Kafka集群,可能需要配合Kafka M ...
- [转帖] 基于telegraf, influxdb, grafana 建立 esxi 监控
[系统集成] 基于telegraf, influxdb, grafana 建立 esxi 监控 https://www.cnblogs.com/hahp/p/7677420.html 之前在 nagi ...
- struts2视频学习笔记 22-23(基于XML配置方式实现对action的所有方法及部分方法进行校验)
课时22 基于XML配置方式实现对action的所有方法进行校验 使用基于XML配置方式实现输入校验时,Action也需要继承ActionSupport,并且提供校验文件,校验文件和action类 ...
- Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
Telegraf+InfluxDB+Grafana快速搭建实时监控系统 监控postgresql
- 使用 Metrics.net + influxdb + grafana 搭建项目自动化监控和预警方案
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/qq_25042791/article/d ...
- 搭建jmeter+influxdb+grafana压测实时监控平台(超详细,小白适用)
1.前言 在使用jmeter做性能测试的时候,监控系统性能的时候,无论是使用插件还是报告生成,都没法实现实时监控.使用JMeter+Influxdb+Grafana可以实现实时监控. 本次环境搭建各软 ...
- [系统集成] 基于telegraf, influxdb, grafana 建立 esxi 监控
之前在 nagios 上建立了 esxi 监控,指标少.配置麻烦.视觉效果差.最近我把 esxi 监控迁移到了 influxdb+grafana 平台上,无论是监控指标.可操作性还是视觉效果都有了很大 ...
随机推荐
- JS UNIX 时间戳与时间格式转换
上代码,不多说了,这个没啥说的,记录一下: var date = new Date() // Date 2019-03-05T13:50:39.775Z // 获取1970 至今的毫秒数 var ti ...
- koajs项目之memcached实现session共享
在做nodejs服务的负载时要考虑到session共享的问题,一般常用的就是memcached方式实现的,本文主要介绍通过npm社区的几个模块轻松实现这个功能. 做koa的session一般会想到用k ...
- cf1102F. Elongated Matrix(状压dp)
题意 题目链接 Sol \(n \leqslant 16\)可以想到状压 我们可以预处理出任意两行之间每列的最小值以及相邻两列的最小值 然后枚举一个起点,\(f[sta][i]\)表示走过了\(sta ...
- js-ES6学习笔记-Reflect
1.Reflect对象与Proxy对象一样,也是 ES6 为了操作对象而提供的新 API.Reflect对象的设计目的有这样几个. 将Object对象的一些明显属于语言内部的方法(比如Object.d ...
- 新飞电器的BI建设案例
一.河南新飞电器简介 河南新飞电器在制造行业内属于领先地位,其信息化程度较高,面对系统多且杂乱的情况,一个集中展示数据的平台就显得尤为重要.使用BI就是为了在一个相对统一的平台展示需要查看的数据,供决 ...
- 树莓派 温度监控 PWM 控制风扇 shell python c 语言
Mine: 图中圈出来的是三极管 和滤波电容 依赖库: wiringPi sudo apt-get install wiringpi Shell脚本 本文介绍使用Shell脚本在树莓派上启用软件PWM ...
- Mariadb MySQL逻辑条件判断相关语句、函数使用举例介绍
MySQL逻辑条件判断相关语句.函数使用举例介绍 By:授客 QQ:1033553122 1. IFNULL函数介绍 IFNULL(expr1, expr2) 说明:假如expr1 不为NULL,则 ...
- Ajax如何设置cookie
普通的Ajax请求很遗憾不能返回服务器端设置的cookie 如何实现不刷新页面返回服务器设置的Cookie呢? 可以使用<script>或者<image>的src属性发起一个请 ...
- iOS 开发多线程 —— GCD(1)
本文是根据文顶顶老师的博客学习总结而来,如有不妥之处,还望指出.http://www.cnblogs.com/wendingding/p/3807716.html 概览: /* 纯c语言,提供了非常多 ...
- UWP开发细节记录:判断文件类型
StorageFile.ContentType 属性,是 string 类型,用来表示文件内容的 MIME 类型.例如,音乐文件可能有 "audio/mpeg" MIME 类型.( ...