Collectd+Influxdb+Grafana打造监控系统
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进行配置,见下图:
2、自定义dashboard或导入
通过dashboards ---new create或import模板,如下图:
导入的模板为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:
同样,出图的样式,如柱状图、点图、线图等都可以在display里进行设置和选取。也可以将多个指标值放在一起。如左边Y轴显示的是IO使用的百分比,右边Y轴用于显示具体的读写速度 xxx KB/S 。
四、总结
在总结之前,先给一个整体显示的图看下效果(点击图片查看大图):
三者在监控和展示方面的结合是比较强大的,而且也可以自由定制多个dashboard界面,而且grafana可以支持多数据源的导入 。出图界面也比较漂亮快捷 。其还支持通过grafana-influx-dashboard插件将多台主机的某个指标在一屏展示出来。但是三个结合起来有一个不完美的地方,就是无法及时进行告警输出,虽然influxdb公司有kapacitor组件可以进行查询并告警,不过感觉TICKscript与我们经常接触到的语言差距比较大,使用起来感觉不够顺手。
参考文档:
捐赠本站(Donate)
如您感觉文章有用,可扫码捐赠本站!(If the article useful, you can scan the QR code to donate))
- Author: shisekong
- Link: https://blog.361way.com/collectd-influxdb-grafana/5296.html
- License: This work is under a 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议. Kindly fulfill the requirements of the aforementioned License when adapting or creating a derivative of this work.