大数据监控

大数据场景下的监控相比传统更为复杂,需要兼顾服务和应用两种监控,本文从metrics导出,metrics抓取,metrics展示三个层面理解监控

前言

大数据监控的技术栈有很多,比如ELK,围绕ES的技术栈,logstash提供数据抓取导入到ES,再通过Kibana展现;还有TICK,围绕着influxdb的技术栈,telegraf提供数据抓取导入到influxdb,Chronograf提供实时分析数据的能力,Kapacitor提供数据展现。本文基于grafana组件展开,涉及jmxTrans以及influxdb。

grafana

grafana是一款开源的数据展现软件,有丰富的dashboard组件。

下载grafana

首先去官网下载对应操作系统的压缩包,官网也支持rpm包,这里用tar.gz作为案例
grafana官网

启动grafana

解压后可以直接运行
nohup ./bin/grafana-server >>log.out 2>&1 &

检验

通过curl访问grafana
curl http://localhost:3000

添加sources

grafana只是一个dashboards,而其所有的数据都依赖其他数据库。grafana支持很多数据库,比如常见的mysql,sqlserver,时序数据库influxdb,opentsdb等,这里考虑部署环境简单,并且支持数据量大的源,influxdb。
针对influxdb相关文档
有了数据库后,还需要将数据抓取到数据库,这里又有一个数据抓取工具的概念,常见的监控数据抓取工具有jmxTrans,下面依次介绍influxdb和jmxTrans

其他

添加完sources之后,就可以通过界面自定义dashboards了

安装influxdb

influxdb是一个时序数据库,没条数据都必须包含一个时间戳,并且不支持更新

下载influxdb

选择你喜欢的版本下载

启动influxdb

解压后可以直接运行
nohup ./usr/bin/influxd run >> log.out 2>&1 &

创建一个库

使用influxdb自带的cli,/usr/bin/influx
进入cli后,创建数据库,influxdb的语法和sql差不多
create database testdb

jmxTrans

jmxTrans是一款能够抓取jmx数据,并写入到其他存储介质的开源项目。其支持的存储很多,influxdb,opentsdb等

部署

下载地址

1
2
wget http://central.maven.org/maven2/org/jmxtrans/jmxtrans/270/jmxtrans-270-dist.tar.gz
tar -zxvf jmxtrans-270-dist.tar.gz

配置json

基于两个案例

  • 从jmx中获取jvm数据,并打印到控制台

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    {
    "servers" : [ {
    "port" : "1099",
    "host" : "ip",
    "queries" : [ {
    "outputWriters" : [ {
    "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
    "settings" : {
    }
    } ],
    "obj" : "java.lang:type=Memory",
    "attr" : [ "HeapMemoryUsage", "NonHeapMemoryUsage" ]
    }, {
    "outputWriters" : [ {
    "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
    "settings" : {
    }
    } ],
    "obj" : "java.lang:name=CMS Old Gen,type=MemoryPool",
    "attr" : [ "Usage" ]
    }, {
    "outputWriters" : [ {
    "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter",
    "settings" : {
    }
    } ],
    "obj" : "java.lang:name=ConcurrentMarkSweep,type=GarbageCollector",
    "attr" : [ "LastGcInfo" ]
    } ],
    "numQueryThreads" : 2
    } ]
    }
  • 获取kafka的io/s数据,写出到influxdb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
{
"servers": [{
"port": "9999",
"host": "ip",
"queries": [{
"obj": "kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec",
"attr": [
"Count",
"OneMinuteRate"
],
"resultAlias": "BytesInPerSec",
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url": "http://10.37.16.163:8086/",
"username": "admin",
"password": "admin",
"database": "testdb",
"tags": {
"application": "BytesInPerSec"
}
}]
}, {
"obj": "kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec",
"attr": [
"Count",
"OneMinuteRate"
],
"resultAlias": "BytesOutPerSec",
"outputWriters": [{
"@class": "com.googlecode.jmxtrans.model.output.InfluxDbWriterFactory",
"url": "http://10.37.16.163:8086/",
"username": "admin",
"password": "admin",
"database": "testdb",
"tags": {
"application": "BytesOutPerSec"
}
}]
}]
}]
}

启动

./bin/jmxtrans.sh start xxx.json

参考
官方文档

ulysses wechat
订阅+