教你搭建一个高逼格的VPS三网监控平台

by LALA

荒岛 / 2019-02-03 17:39

前言

手里小鸡多了,想变着法子玩点稀奇古怪的东西?用Prometheus+Grafana搭建一个VPS三网监控平台似乎还不错的样子。先简要介绍一下Prometheus和Grafana。

prometheus号称下一代监控神器,基于GO语言开发。这东西现在多数都是被运维人员拿来监控K8S集群的,功能强大到你无法想象。而Grafana是一款现代化的数据展示平台,它可以把多个软件的数据当作数据源进行美观的展现。

上张成品图,觉得还行才有折腾的动力对吧~

Prometheus安装

基于GO语言官方又打包好了二进制文件,安装自然异常简单:

cd /usr/bin     wget https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz     tar -xzvf prometheus-2.7.1.linux-amd64.tar.gz     mv prometheus-2.7.1.linux-amd64 prometheus     rm -rf prometheus-2.7.1.linux-amd64.tar.gz

把Prometheus配置成systemd服务:

nano /etc/systemd/system/prometheus.service

写入:

[Unit]     Description=Prometheus Server     After=network-online.target          [Service]     User=root     Group=root     ExecStart=/usr/bin/prometheus/prometheus --config.file=/usr/bin/prometheus/prometheus.yml     Restart=on-abort          [Install]     WantedBy=multi-user.target

使用下面的命令管理:

systemctl start prometheus     systemctl enable prometheus

blackbox_exporter安装

什么是blackbox_exporter?之前你没提过啊?你可以把我们之前安装的Prometheus当作是服务端,而Prometheus要采集数据是通过其他各种各样的exporter完成的。那么现在这个blackbox_exporter就是用来采集HTTP/HTTPS/DNS/TCP/ICMP(PING)数据的,我们要搭建三网监控,那肯定就得用到这个blackbox_exporter里面的ICMP数据采集功能。

blackbox_exporter可以安装在服务端也可以安装在被监控端,这取决于你的需要,可以灵活多变。这里我需要监控服务端(本机)以及其他3台机器,所以我需要在4台机器内都安装,安装方法同样很简单:

cd /usr/bin     wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.13.0/blackbox_exporter-0.13.0.linux-amd64.tar.gz     tar -xzvf blackbox_exporter-0.13.0.linux-amd64.tar.gz     mv blackbox_exporter-0.13.0.linux-amd64 blackbox_exporter     rm -rf blackbox_exporter-0.13.0.linux-amd64.tar.gz

还是老样子配置成systemd服务:

nano /etc/systemd/system/blackbox_exporter.service

写入:

[Unit]     Description=Blackbox Exporter Server     After=network-online.target          [Service]     User=root     Group=root     ExecStart=/usr/bin/blackbox_exporter/blackbox_exporter --config.file=/usr/bin/blackbox_exporter/blackbox.yml     Restart=on-abort          [Install]     WantedBy=multi-user.target

管理命令:

systemctl start blackbox_exporter     systemctl enable blackbox_exporter

Grafana安装

Grafana一般情况下我们都是和Prometheus的服务端部署在一起,Debian执行下面的命令即可完成安装:

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

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

同样的管理方法还是使用systemd,只是不需要我们自己去写服务文件了,Grafana已经为我们准备就绪:

systemctl start grafana-server     systemctl enable grafana-server

配置Prometheus

首先我们进入到Prometheus根目录内:

cd /usr/bin/prometheus

编辑prometheus.yml(需遵循yaml语法):

nano prometheus.yml

我在这里写好了两份配置文件,一份是配置单点监控的,一份是多点监控,单点监控的配置如下:

  - job_name: 'GCP台湾'         scrape_interval: 1m         metrics_path: /probe         params:           module: [icmp]         static_configs:          - targets:             - 119.147.56.37            labels:              instance: 电信          - targets:             - 121.31.40.97            labels:              instance: 联通         relabel_configs:           - source_labels: [__address__]             target_label: __param_target           - target_label: __address__             replacement: 35.234.51.36:9115

多点监控:

  - job_name: 'GCP台湾'         scrape_interval: 1m         metrics_path: /probe         params:           module: [icmp]         static_configs:          - targets: ['111.177.18.254', '125.65.80.5', '113.59.224.1', '119.147.56.37']            labels:              group: '电信'          - targets: ['122.194.78.21', '103.24.228.1', '140.206.244.241', '121.31.40.97']            labels:              group: '联通'          - targets: ['117.174.59.1', '120.210.204.1', '221.131.68.129', '221.176.23.110']            labels:              group: '移动'         relabel_configs:           - source_labels: [__address__]             target_label: __param_target           - source_labels: [__param_target]             target_label: ping           - target_label: __address__             replacement: 35.234.51.36:9115

上面这两份配置部分信息需要修改成你们自己的,比如replacement的IP和端口。另外你要添加几个监控项目就写几个这样的配置文件,一个job_name代表一个监控项目。

看到这里你可以发现无论是Prometheus还是Grafana,都是安装简单但配置麻烦,尤其是Prometheus的配置,因为官方的文档写的太蛋疼,再加上这个程序本身太灵活多变,想写出一份可以正常工作的配置文件实属不易。我接下来采用多点监控的配置进行演示。

prometheus给我们准备了一个配置文件检查工具,在你写完配置文件后应该使用下面的命令检查一下当前的配置是否全部正确无误:

./promtool check config prometheus.yml

确认无误后重启prometheus,使新的配置生效:

systemctl restart prometheus

配置blackbox_exporter

在上面我们把prometheus的服务端配置好了,现在就要来配置blackbox_exporter了,你需要在每台安装了blackbox_exporter的机器内编辑配置文件:

cd /usr/bin/blackbox_exporter/blackbox.yml

在文件的末尾加上:

  icmp:         prober: icmp         timeout: 2s         icmp:           preferred_ip_protocol: "ip4"

在每台机器上重启blackbox_exporter使新的配置生效:

systemctl restart blackbox_exporter

现在你应该打开Prometheus的服务端IP+端口9090来检查一下配置是否正常,初次打开这个界面按如图选择:

确保你在Prometheus配置的监控项目全部都是UP状态:

这样就说明你的Prometheus和blackbox_exporter都正常工作。

配置Grafana

在上面我们已经将Prometheus服务端和blackbox_exporter数据采集插件部署完成,下面我们就要把Prometheus采集到的数据通过Grafana展示出来。在之前我们已经安装好了Grafana,默认的访问地址是:

http://你的服务器公网IP:3000,默认的账号密码均为:admin,初次访问到的登录界面:

登录进去之后首先会提示让你修改一个管理员密码:

进到面板内后,我们点击Add data source添加数据源:

选择Prometheus:

这里我是把Prometheus和Grafana部署在一台服务器内,所以这里直接填写本地的地址即可:

点击保存并进行测试,如果正常会回显给你如下图所示的内容:

现在我们回到面板的首页,开始添加一个新的监控页:

监控类型选择Graph:

然后Grafana就会生成出一个图表了,在这个图表点击标题然后点击编辑:

首先我们给这个图表修改个名字:

Grafana先暂时配置到这里,现在我们需要打开Prometheus服务端的页面,点击Graph,并搜索如下表达式:

probe_duration_seconds

如图:

它会给你列出目前所有可用的表达式:

现在我们回到Grafana内,点击Metrice,将之前的表达式全部复制粘贴到这里,并设置Data Soure为Prometheus以及设置图表间隔展示时间为2m(你可以定义为更长的时间但不建议更短,因为时间太短会导致图表展示的数据太过于密集不方便查看):

接着我们点击Axes,在这里看到Left Y下面的Unit,它默认是设置的short:

我们需要把这个单位修改一下:

接着我们点击Legend,勾选上Avg,作用是展示出平均值:

全部完成之后,点击右上角的保存按钮:

给这个新监控页命名:

在查看图表的时候,我们可以在监控页右上角选择展示时间:

当你需要再添加一个新的图表时,不需要去重复做这些步骤,你可以点击原先已经有的图表复制一份:

接下来你只需要修改一下Metrice内的表达式即可。

最后

其实这个blackbox_exporter在采集ICMP数据的时候没有考虑到数据包loss的问题,比如在某些高丢包率的线路中,我们在配置文件内设置了超时时间为2s,超过2s都没有接收到数据包时,Prometheus会判断这次数据采集失败,但在Grafana中这个时间点展示的数据就会不准确,一般会显示为1.5s,所以我们在看图表的时候看到这种超高延迟的记录就说明这个点是丢包了而不是真正PING值到了1500MS。

Shared via Inoreader