本文最后更新于 2024-05-13,文章原本内容可能已经过时,请查看是否有更新内容。

前言

介绍

GrafanaPrometheusNode Exporter 是一套流行的开源监控工具,用于收集,存储,查询系统和应用程序的各种使用率,并可视化显示。每个工具都有特定的功能:

  1. Grafana:是一款可视化程序,提供开源版和企业版。 Grafana 不从客户端收集任何数据,也不存储,它的功能是以直观且优美的格式显示 Prometheus 或其他数据源(SQL 等)收集的数据。 它允许用户自定义面板,支持警报、注释、仪表板变量、插件和身份验证。
  2. Prometheus:是一个开源的系统监控和警告程序,它使用 HTTP 协议轮询客户端以获取所需数据。维护结果的时间序列数据库,以预定义的时间间隔轮询每个客户端,进而能够构建客户端长期性能的概览。
  3. Node Exporter:在客户端节点上能使用各种收集器,但 Prometheus 推荐使用自己的 Node Exporter 工具。 它收集大量硬件和内核指标,如 CPU,磁盘 I/O,内存,网络等,收集的可用指标的完整列表可以在 Node Exporter GitHub page 页面上找到。
  4. Fping Exporter:类似于mynodequery的ping历史

Grafana 的 GitHub: grafana/grafana: The open and composable observability and data visualization platform. Visualize metrics, logs, and traces from multiple sources like Prometheus, Loki, Elasticsearch, InfluxDB, Postgres and many more. (github.com)

Prometheus 的 GitHub: prometheus/prometheus: The Prometheus monitoring system and time series database. (github.com)

Node Exporter 的 GitHub: prometheus/node_exporter: Exporter for machine metrics (github.com)

Fping-Exporter:fping-exporter-Docker

资源使用

因为本探针相对比哪吒、mynodequery、uptime等等复杂得多,所以不少朋友会有疑问,什么配置最好

Grafana 和 Prometheus 部署好后,内存使用量增加了 200MB 多;监控的客户端为 3 个的情况下,在运行一天之后,内存占用达到 300MB 。总的来说,资源消耗量较大,适合 2g 内存、20GB 磁盘空间的机子作为监控服务器。

而对于被监控端来说,node_exporter 占用了大约 20 MB 内存。并不影响

部署

⚠️ 本文使用的vps均没有开任何防火墙,所以如果你有的话,请自行放行
Grafana Web 界面使用端口 3000 访问,而 Prometheus 使用端口 9090 ,Node Exporter 使用端口 9100,fping-exporter使用端口9605

监控面板端

安装Grafana

依次输入以下命令即可

sudo apt-get install -y software-properties-common 

sudo wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - 

# 输入之后会需要回车一次
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"  

sudo apt-get update 

# 输入 Y 即可
sudo apt-get install grafana
sudo systemctl daemon-reload

sudo systemctl enable --now grafana-server.service

sudo systemctl status grafana-server

出现下图即为成功

CleanShot 2024-05-12 at 21.55.48@2x.png

安装Prometheus

输入以下命令即可

wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-prometheus.sh' | sudo bash

如果想要手戳可以去这位佬的博客看看探针 Grafana + Prometheus 之比 Docker 更简单的部署流程 - 承飞之咎(不建议,太麻烦)

输入命令后出现下图即为成功

CleanShot 2024-05-12 at 22.02.09@2x.png

可以在浏览器输入http://你的vps的ip:9090来查看

如下图

CleanShot 2024-05-12 at 22.04.12@2x.png

关联Grafana 和 Prometheus

现在浏览器输入http://你的vps的ip:3000打开Grafana

CleanShot 2024-05-12 at 22.14.48@2x.png

用户和密码都是admin,输入之后会要求你更新密码

CleanShot 2024-05-12 at 22.15.52@2x.png

输入之后进入面板,先改语言

CleanShot 2024-05-12 at 22.17.50@2x.png


CleanShot 2024-05-12 at 22.18.45@2x.png

接下来关联Grafana 和 Prometheus,如下图

选择 连接-添加新链接-搜索框输入Prometheus-选择Prometheus

CleanShot 2024-05-12 at 22.20.22@2x.png

按图来

CleanShot 2024-05-12 at 22.21.12@2x.png

然后在红框输入http://localhost:9090,因为这两个都是搭建在同一VPS的

CleanShot 2024-05-12 at 22.21.38@2x.png

之后下滑,找到Save & test,点击之后,出现红框的字即为成功

CleanShot 2024-05-12 at 22.22.51@2x.png

到这里,监控面板端已经差不多了,之后还需要导入模版

疑难杂症

如果在浏览器输入http://你的vps的ip:9090后,出现以下问题,如截图

CleanShot 2024-05-12 at 22.06.27@2x.png

原因是你正在使用的设备和你的vps时间对不上

你可以在vps输入以下命令

timedatectl

对比一下里面出现的时间和你的系统时间

Prometheus依赖于精确的时间,而时间漂移可能会导致意外的查询结果,也就是说到时候ping图历史时间对不上

解决方法如下

先将时区改到东八区

sudo timedatectl set-timezone Asia/Shanghai

安装并启用 NTP 服务来自动同步时间

sudo apt-get install ntp
sudo systemctl enable ntp

sudo systemctl start ntp

检查ntp是否正常工作

ntpq -p

现在再打开http://你的vps的ip:9090,应该已经正常了

被监控端

提醒

前排提醒,请先安装docker

apt-get update && apt-get -y upgrade

curl -fsSL https://get.docker.com | bash -s docker

apt-get install docker-compose-plugin -y

docker compose version

systemctl enable docker

接下来是可选的,fping-exporter是ping图,Node Exporter是系统信息,看自己需求

我以我的apernet和dmit hk为例子

Fping-Exporter

安装

使用以下命令,用docker搭建,之后卸载也方便

docker run -d --name fping-exporter --restart=always --privileged --privileged --network="host" -p 9605:9605 xiaoleizhang/fping-exporter:4.2 fping-exporter --fping=/usr/sbin/fping -c 15 -p 15

我现在在两台的vps上搭建

CleanShot 2024-05-12 at 22.36.42@2x.png


CleanShot 2024-05-12 at 22.36.58@2x.png

大概等15s左右,可以用以下命令确认是否成功

curl http://127.0.0.1:9605/probe?target=8.8.8.8

如图

CleanShot 2024-05-12 at 22.39.35@2x.png


CleanShot 2024-05-12 at 22.39.25@2x.png

更改prometheus.yml

打开监控面板端vps ssh连接

现在需要改一下监控面板端的Prometheus配置

来到如下路径/etc/prometheus,找到prometheus.yml并编辑,可以用nano或者vim

那就是

# 用vim编辑
sudo vim /etc/prometheus/prometheus.yml

# 用nano编辑
sudo nano /etc/prometheus/prometheus.yml

我选择直接sftp编辑

刚打开是这样

CleanShot 2024-05-12 at 22.44.30@2x.png

在最后添加以下内容

- job_name: 你的vps的名字

metrics_path: /probe

static_configs:

- targets:

- "58.215.210.220"

- "122.96.235.165"

- "36.156.92.132"

- "183.36.23.111"

- "112.90.211.100"

- "183.240.65.191"

- "101.227.191.14"

- "59.81.65.42"

- "183.194.219.220"

- "220.181.173.35"

- "202.108.29.159"

- "222.35.73.1"

- "8.8.8.8"

relabel_configs:

- source_labels: [__address__]

target_label: __param_target

- source_labels: [__param_target]

target_label: instance

- target_label: __address__

replacement: 你是vps的ip:9605

注意,只需要改vps的名字和最下面的vps的ip这两处就行,中间那部分ip是江苏、北上广的三大运营商ip,如果要更改的话,需要连同模版一起改,不建议动

因为我把两台vps都搭上了fping-exporter

所以这里我加两个job,如图,如上所述,只需要改红框框处就行

CleanShot 2024-05-12 at 22.48.22@2x.png

一定一定要注意缩进对齐,如图

CleanShot 2024-05-12 at 22.49.32@2x.png

然后保存,并重启Prometheus

sudo systemctl restart prometheus

添加模版

接下来打开http://你的监控面板vps的ip:3000,回到Grafana

CleanShot 2024-05-12 at 22.59.14@2x.png


CleanShot 2024-05-12 at 23.00.16@2x.png

然后打开Zenitsu.io%20-%20VPS%20Ping%20Template.json,下载这个文件

导入

CleanShot 2024-05-12 at 23.05.59@2x.png


CleanShot 2024-05-12 at 23.06.58@2x.png

然后会出现这样的情况

CleanShot 2024-05-12 at 19.50.03@2x.png

不用担心,是uid的问题,毕竟是用的别人的模版,所以uid没法改

现在需要重新创建一个仪表板,把里面的uid复制到你这里就行

CleanShot 2024-05-12 at 23.09.20@2x.png


CleanShot 2024-05-12 at 23.09.28@2x.png


CleanShot 2024-05-12 at 23.09.37@2x.png


CleanShot 2024-05-12 at 23.09.54@2x.png


CleanShot 2024-05-12 at 23.11.01@2x.png

然后按照图示,找到uid,把它复制一下

CleanShot 2024-05-12 at 23.11.44@2x.png


CleanShot 2024-05-12 at 23.11.54@2x.png

接下来回到原来那个仪表板

CleanShot 2024-05-12 at 23.12.10@2x.png

然后到这个位置

用查找替换工具,把所有uid全部更改,然后保存更改,接着刷新网页就行

CleanShot 2024-05-12 at 23.19.02@2x.png

如图,成功

CleanShot 2024-05-12 at 23.22.45@2x.png

Node Exporter

安装

在被监控端用以下一键命令

wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-node_exporter.sh' | sudo bash

我在aliyun hk上尝试,如图所示即为成功

CleanShot 2024-05-13 at 21.24.54@2x.png

输入http://被监控vps的ip:9100,可以看到

CleanShot 2024-05-13 at 21.31.57@2x.png

更改prometheus.yml

和上面Fping-Exporter一样,打开监控面板端vps ssh连接

来到如下路径/etc/prometheus,找到prometheus.yml并编辑,可以用nano或者vim

# 用vim编辑
sudo vim /etc/prometheus/prometheus.yml

# 用nano编辑
sudo nano /etc/prometheus/prometheus.yml

我选择直接sftp编辑

和上面的流程一样,把下面的命令复制到prometheus.yml,也一定要注意缩进对齐,不同的是,这个不管有多少vps,都只要这一个job就行了,具体看下面的参数解释

  - job_name: "remote_collector"
    scrape_interval: 10s
    static_configs:
      - targets: ["被监控vps的ip:9100", "被监控vps的ip_2:9100"]

参数解读

  • 设置抓取时间间隔: scrape_interval: 10s
  • 添加要监控的 IP 和 端口号 :9100 ,使用逗号分隔每个条目。
  • 如果有多个VPS,请直接在targets里用相同格式加,并用,分开。
  • 要启用对本地服务器的监视,请将 localhost:9100 条目添加到列表中,并在本地安装 Node Exporter。

这里我只有aliyun一台要监控,所以我只需要在targets里加一个,如图,注意对齐

CleanShot 2024-05-13 at 21.48.49@2x.png

然后保存,并重启Prometheus

sudo systemctl restart prometheus

添加模版

和上面Fping-Exporter不太一样

直接选导入

CleanShot 2024-05-13 at 21.33.42@2x.png

在这里输入1860,并点加载

CleanShot 2024-05-13 at 21.34.04@2x.png

如图选择prometheus

CleanShot 2024-05-13 at 21.34.34@2x.png

CleanShot 2024-05-13 at 21.34.46@2x.png

成功

CleanShot 2024-05-13 at 21.55.40@2x.png


CleanShot 2024-05-13 at 22.06.38@2x.png

现在,我成功的监控了我apernet hk和dmit hk的ping历史,以及aliyun hk的状态信息

预告

系列二是一些细节改进,caddy反代,免登录分享面板

鸣谢

Grafana

探针 Grafana + Prometheus 之比 Docker 更简单的部署流程

Grafana + Prometheus + fping-exporter 搭建网络监控

Grafana+Prometheus监控系统|末晨的小站