Grafana+InfluxDB+Collectd搭建三网监控

by LALA

荒岛 / 2019-02-07 08:19

前言

前两天水了一篇Grafana+Prometheus搭建三网监控平台的文章,其实Prometheus最擅长的领域是监控K8S集群,监控PING值这些只是它附带的一些功能,并且在之前的实际使用过程中也可以发现通过blackbox_exporter采集到的ICMP数据使用Grafana展示出来有一些问题。

综合上述,其实有一个更好的方案可以实现三网监控,那就是InfluxDB+Collectd。InfluxDB是一个时间序列数据库,它的专长就是存储此类监控所产生的数据。而Collectd则扮演着数据采集的角色,它可以实时监控机器内的各项指标。

我们要做的就是通过Collectd采集到机器的ICMP数据,然后使用InfluxDB存储这些数据,最后通过Grafana绘制出这些数据的可视化图表并美观的展现出来。每个软件都发挥自己最擅长的领域,各尽其责,这套方案看上去就很美~

上两张监控图,你可以看到这套组合比使用Prometheus展现出来的图表数据更精准,另外经过一些DIY后还能展现出标准差/丢包率:

三款软件的安装

一般情况下,我们都是把Granfana和InfluxDB安装在同一台机器内,本文也是如此。

Granfana安装:

CentOS7:

wget https://dl.grafana.com/oss/release/grafana-5.4.3-1.x86_64.rpm      sudo yum localinstall grafana-5.4.3-1.x86_64.rpm

Debian9:

wget https://dl.grafana.com/oss/release/grafana_5.4.3_amd64.deb      sudo dpkg -i grafana_5.4.3_amd64.deb

启动:

systemctl start grafana-server     systemctl enable grafana-server

InfluxDB安装:

CentOS7:

wget https://dl.influxdata.com/influxdb/releases/influxdb-1.7.3.x86_64.rpm     sudo yum localinstall influxdb-1.7.3.x86_64.rpm

Debian9:

wget https://dl.influxdata.com/influxdb/releases/influxdb_1.7.3_amd64.deb     sudo dpkg -i influxdb_1.7.3_amd64.deb

启动:

systemctl start influxd     systemctl enable influxd

Collectd则是看你的需求来安装,你要监控本机就在本机装,要监控多台机器就在每台机器上都安装:

CentOS7:

yum -y install epel-release     yum -y install collectd*

Debian9:

apt -y install collectd

启动:

systemctl start collectd     systemctl enable collectd

配置InfluxDB

安全在任何时候都是第一要素,首先我们需要给influxdb内的collectd插件新建一个身份验证文件:

mkdir -p /etc/collectd/ && echo "imlala: 设置你的密码" > /etc/collectd/auth_file

接着编辑influxdb的配置文件:

nano /etc/influxdb/influxdb.conf

找到collectd这段,将里面的配置信息修改为我这样的:

[[collectd]]        enabled = true        bind-address = ":25826"        database = "collectd"        security-level = "sign"        auth-file = "/etc/collectd/auth_file"        batch-size = 5000        batch-pending = 10        batch-timeout = "10s"        read-buffer = 0

接着找到http段,开启HTTPAPI以及启用身份验证:

[http]        enabled = true        bind-address = ":8086"        auth-enabled = true

注:在上面的这两个配置中我们分别启用了两个身份验证,第一个身份验证是用于collectd向influxdb写数据用的,如果不配置这个身份验证,那么只要有人知道你的influxdb数据库地址,任何人都可以通过collectd往你的数据库内写数据,这样会造成滥用。第二个身份验证是用于influxdb的HTTPAPI,不配置的话任何人都可以对你的数据库进行操作。

配置完成之后重启influxdb:

systemctl restart influxd.service

执行如下命令进入到数据库的查询shell:

influx

首先我们创建influxdb的管理员账户,这个也就是HTTPAPI身份验证的账户:

CREATE USER "imlala" WITH PASSWORD '设置你的密码' WITH ALL PRIVILEGES

接着我们创建一个名为collectd的数据库,用于存放监控数据:

CREATE DATABASE "collectd"

再创建一个名为collectd的普通用户:

CREATE USER "collectd" WITH PASSWORD '设置你的密码'

将普通用户授权给之前的collectd数据库:

GRANT ALL ON "collectd" TO "collectd"

完成之后quit退出来,influxdb的配置就完成了。

配置Collectd

现在你需要在每台安装了Collectd的机器上修改配置文件,不同发行版存放的配置文件路径不同,Debian9:

nano /etc/collectd/collectd.conf

CentOS7:

nano /etc/collectd.conf

首先在这个配置文件内去掉如下两个插件的注释:

LoadPlugin network     LoadPlugin ping

因为默认的Collectd的配置文件注释掉了大部分内容,我们可以接着直接跳到文件的末尾,添加如下插件配置:

注:因WordPress编辑器转义,我在配置内插入了“去掉我”,你们配置的时候删掉这部分即可。

                                SecurityLevel Encrypt                     Username "imlala"                     Password "之前配置的Collectd插件密码"                  
           Host "111.177.18.254"             Host "125.65.80.5"             Host "113.59.224.1"             Host "122.194.78.21"             Host "103.24.228.1"             Host "140.206.244.241"             Host "117.174.59.1"             Host "120.210.204.1"             Host "221.131.68.129"             Interval 1.0             Timeout 0.9     

注:一个Host代表一个监控点,你想写多少就写多少,友情提示我这些IP都来自IPIP.NET

完成之后重启:

systemctl restart collectd.service

接着你可以试着使用下面的命令去验证一下InfluxDB和Collectd的工作是否正常:

如果正常的话,你就应该可以查询到数据库内的PING数据了:

Grafana配置

在之前我们已经把InfluxDB和Collectd都配置完成,那么现在就到了把数据展现出来的时候了。

Grafana在安装完成之后默认的访问端口是3000,默认的管理员账号密码均是admin,这些就不多说了。直接来到添加数据源这里,选择influxdb:

按照如图填写配置:

注:BasicAuth就是influxdb的HTTPAPI管理员账户。

如果正常点击保存测试后可以回显出如图内容:

接下来创建新的面板并绘制图表,这个绘制方法和Prometheus是完全不同的,InfluxDB的方法是类似于SQL查询语句,比如我现在要把之前的PING数据都展示出来,那么正确的语句应该是:

这部分太灵活了,说实话不好讲,反正你最好懂一点SQL相关的知识就行。实在不会就按照我上面这张图一个个对着选吧。

接下来有多少个监控项就添加几个查询语句,全部完成之后如图所示:

接着点击Axes,修改Left Y轴单位为ms:

其他选项你需要就设置,我建议在Legend内把Avg勾上,这样可以显示出平均值,不需要的话,直接保存就完成了一个图表的绘制了:

如果是要绘制标准差则修改对应的语句为:ping_stddev

如果是绘制丢包率则修改对应的语句为:ping_droprate,并修改Left Y轴单位为:percent(0.0-1.0)。如果勾选了Avg记得取消掉。

参考文献:

https://collectd.org/wiki/index.php/Networking_introduction
https://collectd.org/wiki/index.php/Plugin:Ping
https://docs.influxdata.com/influxdb/v1.7/administration/authentication_and_authorization/

Shared via Inoreader