前两天水了一篇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内的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的机器上修改配置文件,不同发行版存放的配置文件路径不同,Debian9:
nano /etc/collectd/collectd.conf
CentOS7:
nano /etc/collectd.conf
首先在这个配置文件内去掉如下两个插件的注释:
LoadPlugin network LoadPlugin ping
因为默认的Collectd的配置文件注释掉了大部分内容,我们可以接着直接跳到文件的末尾,添加如下插件配置:
注:因WordPress编辑器转义,我在配置内插入了“去掉我”,你们配置的时候删掉这部分即可。
<去掉我Plugin "network"> <去掉我Server "InfluxDB数据库IP" "25826"> SecurityLevel Encrypt Username "imlala" Password "之前配置的Collectd插件密码" <去掉我/Server> <去掉我/Plugin>
<去掉我Plugin "ping"> 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 <去掉我/Plugin>
注:一个Host代表一个监控点,你想写多少就写多少,友情提示我这些IP都来自IPIP.NET。
完成之后重启:
systemctl restart collectd.service
接着你可以试着使用下面的命令去验证一下InfluxDB和Collectd的工作是否正常:
如果正常的话,你就应该可以查询到数据库内的PING数据了:
在之前我们已经把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/
最新评论
5211314
能不能教我 一点不会