Grafana + Prometheus 系列一 搭建
本文最后更新于 2024-05-13,文章原本内容可能已经过时,请查看是否有更新内容。
前言
介绍
Grafana,Prometheus 和 Node Exporter 是一套流行的开源监控工具,用于收集,存储,查询系统和应用程序的各种使用率,并可视化显示。每个工具都有特定的功能:
- Grafana:是一款可视化程序,提供开源版和企业版。 Grafana 不从客户端收集任何数据,也不存储,它的功能是以直观且优美的格式显示 Prometheus 或其他数据源(SQL 等)收集的数据。 它允许用户自定义面板,支持警报、注释、仪表板变量、插件和身份验证。
- Prometheus:是一个开源的系统监控和警告程序,它使用 HTTP 协议轮询客户端以获取所需数据。维护结果的时间序列数据库,以预定义的时间间隔轮询每个客户端,进而能够构建客户端长期性能的概览。
- Node Exporter:在客户端节点上能使用各种收集器,但 Prometheus 推荐使用自己的 Node Exporter 工具。 它收集大量硬件和内核指标,如 CPU,磁盘 I/O,内存,网络等,收集的可用指标的完整列表可以在 Node Exporter GitHub page 页面上找到。
- Fping Exporter:类似于mynodequery的ping历史
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
出现下图即为成功
安装Prometheus
输入以下命令即可
wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-prometheus.sh' | sudo bash
如果想要手戳可以去这位佬的博客看看探针 Grafana + Prometheus 之比 Docker 更简单的部署流程 - 承飞之咎(不建议,太麻烦)
输入命令后出现下图即为成功
可以在浏览器输入http://你的vps的ip:9090
来查看
如下图
关联Grafana 和 Prometheus
现在浏览器输入http://你的vps的ip:3000
打开Grafana
用户和密码都是admin
,输入之后会要求你更新密码
输入之后进入面板,先改语言
接下来关联Grafana 和 Prometheus,如下图
选择 连接-添加新链接-搜索框输入Prometheus-选择Prometheus
按图来
然后在红框输入http://localhost:9090
,因为这两个都是搭建在同一VPS的
之后下滑,找到Save & test
,点击之后,出现红框的字即为成功
到这里,监控面板端已经差不多了,之后还需要导入模版
疑难杂症
如果在浏览器输入http://你的vps的ip:9090
后,出现以下问题,如截图
原因是你正在使用的设备和你的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上搭建
大概等15s左右,可以用以下命令确认是否成功
curl http://127.0.0.1:9605/probe?target=8.8.8.8
如图
更改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编辑
刚打开是这样
在最后添加以下内容
- 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,如图,如上所述,只需要改红框框处就行
一定一定要注意缩进对齐,如图
然后保存,并重启Prometheus
sudo systemctl restart prometheus
添加模版
接下来打开http://你的监控面板vps的ip:3000
,回到Grafana
然后打开Zenitsu.io%20-%20VPS%20Ping%20Template.json,下载这个文件
导入
然后会出现这样的情况
不用担心,是uid的问题,毕竟是用的别人的模版,所以uid没法改
现在需要重新创建一个仪表板,把里面的uid复制到你这里就行
然后按照图示,找到uid,把它复制一下
接下来回到原来那个仪表板
然后到这个位置
用查找替换工具,把所有uid全部更改,然后保存更改,接着刷新网页就行
如图,成功
Node Exporter
安装
在被监控端用以下一键命令
wget -qO- 'https://raw.githubusercontent.com/AhFeil/bash-script/main/install-node_exporter.sh' | sudo bash
我在aliyun hk上尝试,如图所示即为成功
输入http://被监控vps的ip:9100
,可以看到
更改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
里加一个,如图,注意对齐
然后保存,并重启Prometheus
sudo systemctl restart prometheus
添加模版
和上面Fping-Exporter不太一样
直接选导入
在这里输入1860
,并点加载
如图选择prometheus
成功
现在,我成功的监控了我apernet hk和dmit hk的ping历史,以及aliyun hk的状态信息
预告
系列二是一些细节改进,caddy反代,免登录分享面板
鸣谢
探针 Grafana + Prometheus 之比 Docker 更简单的部署流程