0%

kafka流量监控

kafka集群越来越多,每次问题出来了很挠头,并不能第一时间定位到问题,也没有多少有效数据,所以对整个集群状态做个有效的记录是十分必要的。
所以选择用jmxtrans+influxdb+grafana这三个开源组件做个监控。jmxtrans通过JMX(Java Management Extensions)收集每个kafka实例监控数据,把数据导入到influxDB,然后再grafana集中展示,展示的时候可以按照broker或者集群。

influxdb安装

截止到2017-09-26 16:17:35 influxdb已经更新到V1.3.5,但是新的版本改动很大把Web Admin Interface取消了。都融合到了Chronograf,功能似乎是增强了,但是,,Chronograf需要独立安装,而且,,Chronograf安装时似乎还要依赖Kapacitor,Telegraf,我不知道这是不是捆绑经营,所以我选择装之前版本,本来还想拥抱最新版的,看起来现在不是时候。

V1.2.0安装过程

wget http://dl.influxdata.com/influxdb/releases/influxdb-1.2.0.x86_64.rpm
yum install influxdb-1.2.0.x86_64.rpm
service influxdb start

修改 /etc/influxdb/influxdb.conf

1
2
3
4
5
6
[admin]
# Determines whether the admin service is enabled.
enabled = true

# The default bind address used by the admin service.
bind-address = ":8083"

influx 用户root 默认密码 root
修改密码

SET PASSWORD FOR root = ‘root’

后面的初始化我们可以到http://localhost:8083完成。还可以借助旁边Query Template

比如创建用户

CREATE USER “root” WITH PASSWORD ‘123456’ WITH ALL PRIVILEGES

新建库
CREATE DATABASE “db_name”

grafana安装

grafana必须最新版

wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.5.2-1.x86_64.rpm
yum install grafana-4.5.2-1.x86_64.rpm
service grafana start

配置DataSource

记得把admin用户禁用或者改密码,依稀还记得之前公司请了个白帽子扫公司环境,就是因为grafana默认端口,admin用户还是用的默认密码,我们小米监控数据图都在grafana上,这令我一度十分尴尬。所以,禁用admin吧。。

jmxtrans安装

wget http://central.maven.org/maven2/org/jmxtrans/jmxtrans/266/jmxtrans-266.rpm
yum install jmxtrans-266.rpm  
/etc/init.d/jmxtrans start 

下面我们需要在/var/lib/jmxtrans/文件下增加json格式的配置文件,因为jmxtrans每次都是从这个目录读取json文件的。
参考influxDBwriter

格式类似

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"servers" : [ {
"port" : "1099",
"host" : "w2",
"queries" : [ {
"obj" : "kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=*",
"attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ],
"resultAlias":"jvmMemory",
"outputWriters" : [ {
"@class" : "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url" : "http://127.0.0.1:8086/",
"username" : "admin",
"password" : "admin",
"database" : "jmxDB",
"tags" : {"application" : "kafka"}
} ]
} ]
} ]
}

对其中重要项目做一下解读:

  • obj - 对应jmx的ObjectName,监控指标后面加上topic=*之后可以按照每个topic收集,否则不会
  • resultAlias - This is used as the measurement container in the database(influxdb)相当于表名
  • tags - 对应InfluxDb的tag功能,对与存储在同一个MEASUREMENTS里面的不同监控指标可以做区分,相当于带索引的字段

关于kafka jmx metrics 请移步官网传送门

metrics采集参考
https://blog.serverdensity.com/how-to-monitor-kafka/

问题处理参考
https://www.cloudera.com/documentation/kafka/latest/topics/kafka_metrics.html

metric

集群状态相关

  • kafka.server:type=ReplicaFetcherManager,name=MaxLag,clientId=Replica,topic=* 副本最大延时(message个数)
  • kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions 不可用分区数
  • kafka.controller:type=KafkaController,name=ActiveControllerCount leader of broker
  • kafka.network: type=SocketServer, name=RequestHandlerAvgIdlePercent 请求平均处理率
  • kafka.server:type=ReplicaManager,name=PartitionCount partition数量
  • java.lang:type=Threading java线程数
  • java.lang:type=GarbageCollector,name=* javaGC频率
  • java.lang:type=Memory Java内存使用情况

网络流量相关

  • kafka.network:type=RequestMetrics,name=RequestsPerSec,request=*
  • kafka.network:type=RequestMetrics,name=TotalTimeMs,request=*
  • kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=* 流入流量
  • kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic=* 流出流量
  • kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec,topic=* 拒绝流量
  • kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=* 流入消息量

最终效果图
可以加一些template变量,更方便查看



也可以自己制作一些报表

问题发现及处理

grafana绘图不完全的问题

问题描述:

当我绘制每个集群中所有Topic的流量图的时候,到一个比较大的集群的时候,会出现某个Topic显示不全这种情况。比如说集群中有300个Topic,当你group by的时候,只会显示几十个,但是当你在自己设置的变量中去特意选没有出现的Topic的时候,该Topic曲线也能被绘制出来。

问题分析:

我一度以为并深信这是grafana的问题,并试图去给grafana增加系统资源,到处搜索”grafana graph query limit”然而并没有什么结果,终于,几天之后当我展示最近30分钟的数据的时候,所有的Topic都被展示出来了,我才意识到这锅并不是grafana的,应该是influx的。然后去看了一下influxdb的配置文档,终于有所发现..

influxdb.conf中的[http]模块有个默认的配置
max-row-limit = 10000
这条配置的意思是每次查询,最大返回一万条数据,我们每分钟一个点,一天的数据,几百个Topic,很容易就达到了也就是说七个Topic就回达到这个阈值,所以要把这个值改的大一点。如果改的特别大之后别忘了给influxdb增加一些系统资源,省的出问题。

参考
http://navyaijm.blog.51cto.com/4647068/1958376