InfluxDB 是 Go 语言开发的一个开源分布式时序数据库,非常适合存储指标、事件、分析等数据(同类型的数据库还有:OpenTSDB、KairosDB、MonnetDB、druid);collectd 是C 语言写的一个系统性能采集工具;Grafana 是纯 Javascript 开发的前端工具,用于访问 InfluxDB,自定义报表、显示图表等。三者结合是这样的:采集数据(collectd)-> 存储数据(InfluxDB) -> 显示数据(Grafana)。

一、软件安装

influxdb和grafana官方提供的都有rpm包,下载安装即可,这里以最新版本的为例:

1wget  https://dl.influxdata.com/influxdb/releases/influxdb-1.1.0.x86_64.rpm
2rpm -ivh  influxdb-1.1.0.x86_64.rpm
3wget https://grafanarel.s3.amazonaws.com/builds/grafana-3.1.1-1470047149.x86_64.rpm
4rpm -ivh grafana-3.1.1-1470047149.x86_64.rpm

collectd软件官方提供的rpm包感觉有点老了,这里给主机上配置上epel 源,epel 源里可以直接yum -y install collectd 安装。

二、整合配置

1、collectd配置

collectd有许多模块默认是注释的,可以根据自己需要开启即可。当然还有一些扩展插件如mysql、drdb、ceph、amqp、rrdtool、virt等的,也可以根据自己需要安装相应的rpm包即可。由于这些和本篇关系不大,这里主要还是说如何将数据发往influxdb 。编辑collectd的配置文件,开启如下内容:

1# vim /etc/collectd/collectd.conf
2...
3LoadPlugin network
4...
5
6        Server "10.212.52.253" "25826"

这里的server地址是influxdb服务器的地址和端口,如是需要influxdb主机开启了认证,也可以使用如下方式进行配置:

1SecurityLevel Encrypt
2Username "user"
3Password "secret"
4Interface "eth0"
5ResolveInterval 14400

2、influxdb配置

InfluxDB 现在自带一个 collectd 插件来获取 collectd 客户端发来的数据,如果是0.8.4 以前的版本只能通过 influxdb-collectd-proxy 这样的第三方程序来连接 collectd 和 InfluxDB 。具体修改其配置开启如下部分即可:

1# vim /etc/influxdb/influxdb.conf
2[[collectd]]
3  enabled = true
4  bind-address = ":25826"
5  database = "collectd"

这里的数据库无需在influxdb里事先创建好,collectd在向influxdb发送数据的时候会自动创建该数据库。这里重启influxdb服务,会发现其会开启一个UDP的25826端口用来接收数据 。

三、grafana配置

按如下操作,启动三个服务。通过http://IP:3000可以进入grafana的配置界面。

1systemctl enable collectd
2systemctl start collectd
3systemctl enable  influxdb
4systemctl start influxdb
5systemctl enable grafana
6systemctl start grafana

确认influxdb中有数据写入后,开始登录grafana界面自定义图形配置 。

1、配置数据源

grafana不仅支持influxdb,还支持zabbix等其他数据源的导入。具体可以通过data source进行配置,见下图:

grafana-source
grafana-source

2、自定义dashboard或导入

通过dashboards ---new create或import模板,如下图:

grafana-dashboard
grafana-dashboard

导入的模板为json格式 ,官方也提代了一些常用模板:https://grafana.net/dashboards ,可以直接下载import导入使用。如果使用新建模板,需要使用add row设计界面、图形及influxdb查询的select语句。

3、自定义模板

以流量为例,对应的sql 模板语句如下:

1SELECT derivative(mean(value), 1s)*8 FROM "interface_rx" WHERE "type"='if_octets' AND "host" =~ /^$host$/ AND $timeFilter GROUP BY time($interval), instance fill(null)
2SELECT derivative(mean(value), 1s)*8 FROM "interface_tx" WHERE "type"='if_octets' AND "host" =~ /^$host$/ AND $timeFilter GROUP BY time($interval), instance fill(null)

这里derivative和mean为数学计算函数,具体可以参看grafana官方文档。上面的SQL语句分别查询了了各个接口收、发的网络并进行展示,对应显示的图形界面如下:

4、别名设置

默认显示出的名称都是influxdb对应的字段名称,由于influxdb相对应的字段大都是英文显示的,显得不够友好,也可以通过别名设置显示中文标记,如下图所示,配置1\5\15分钟的load:

grafana-alias
grafana-alias

同样,出图的样式,如柱状图、点图、线图等都可以在display里进行设置和选取。也可以将多个指标值放在一起。如左边Y轴显示的是IO使用的百分比,右边Y轴用于显示具体的读写速度 xxx KB/S 。

四、总结

在总结之前,先给一个整体显示的图看下效果(点击图片查看大图):

grafana-system
grafana-system

三者在监控和展示方面的结合是比较强大的,而且也可以自由定制多个dashboard界面,而且grafana可以支持多数据源的导入 。出图界面也比较漂亮快捷 。其还支持通过grafana-influx-dashboard插件将多台主机的某个指标在一屏展示出来。但是三个结合起来有一个不完美的地方,就是无法及时进行告警输出,虽然influxdb公司有kapacitor组件可以进行查询并告警,不过感觉TICKscript与我们经常接触到的语言差距比较大,使用起来感觉不够顺手。

参考文档:

grafana官方手册

利用collectd, influxdb和grafana进行简单的负载预警