简介
在当今的云原生监控领域,Grafana + Prometheus + Node Exporter 构成的黄金三角为开发者提供了完整的系统监控解决方案。这三个开源项目各司其职,形成了「数据采集→存储查询→可视化展示」的完整链路:
Grafana - 可视化呈现专家
作为业界领先的开源数据可视化平台,不直接参与数据采集和存储的核心环节,而是通过对接多种数据源(支持 Prometheus、SQL 数据库等 30+ 数据源类型),将原始监控指标转换为精美的时序数据看板。其特色功能包括:
多层级权限认证体系
可交互式的动态仪表盘变量
支持模板化的告警策略配置
800+ 官方/社区插件生态
Prometheus - 时序数据引擎
采用主动拉取(Pull)模型的分布式监控系统,基于 HTTP 协议定期抓取监控目标暴露的指标接口。核心优势体现在:
内建高效的时间序列数据库 (TSDB)
PromQL 查询语言实现多维数据聚合
Alertmanager 模块支持多通道告警推送
原生服务发现机制适配动态云环境
Node Exporter - 主机监控探针
作为 Prometheus 生态的标准采集代理,部署在被监控节点后能够收集 500+ 细粒度指标,涵盖:
CPU/Memory 资源使用率
磁盘IO与文件系统状态
网络接口流量统计
硬件设备健康状态(通过 IPMI)
(完整指标清单详见官方 GitHub 仓库)
三者通过标准化接口形成松耦合架构:Exporters 标准化数据采集 → Prometheus 统一存储处理 → Grafana 按需查询展示,这种解耦设计使得每个组件都能弹性扩展,适应从单节点到 Kubernetes 集群的不同规模场景。
部署流程
1.安装 Prometheus(服务端)
以下两种方法,任选其一即可
a)使用一键脚本
wget -qO- 'https://raw.githubusercontent.com/kaze-kaze/Prometheus-NodeExporter/refs/heads/main/script/prometheus-install.sh' | sudo bash
若运行结束后,出现 active (running) ,则安装成功。
通过 http://ip_addr:9090
访问 Prometheus Web 界面和仪表板。将 ip_addr
替换为监控服务器的地址。
b)手动安装
下载地址:Download | Prometheus ,复制最新LTS版本的下载地址。
下面脚本自动获取最新版本,并下载安装。一键复制,粘贴到终端执行即可。
# 获取 Prometheus 最新版本
github_project="prometheus/prometheus"
tag=$(wget -qO- -t1 -T2 "https://api.github.com/repos/${github_project}/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g')
# echo ${tag}
# tag2=${tag#*v}
# 下载 Prometheus 最新版本并解压
wget https://github.com/prometheus/prometheus/releases/download/${tag}/prometheus-${tag#*v}.linux-amd64.tar.gz && \
tar xvfz prometheus-*.tar.gz && \
rm prometheus-*.tar.gz && cd prometheus-*.linux-amd64
# 将 Prometheus 可执行文件放入通用的系统目录下
sudo mv prometheus promtool /usr/local/bin/
# /etc/prometheus 放Prometheus配置文件。 /var/lib/prometheus 存应用程序数据
sudo mkdir -p /etc/prometheus /var/lib/prometheus && \
sudo mv prometheus.yml /etc/prometheus/prometheus.yml
sudo mv consoles/ console_libraries/ /etc/prometheus/
# 清理
cd .. && rm -r prometheus-*.linux-amd64
将
prometheus
和promtool
目录移动到/usr/local/bin/
目录。这使得所有用户都可以访问 Prometheus。prometheus.yml
是配置文件consoles
和console_libraries
目录包含创建自定义控制台所需的资源。此功能更为高级,本文未介绍。但是,这些文件也应移至etc/prometheus
目录,以备需要时使用。
使用以下命令验证 Prometheus 是否已成功安装:
prometheus --version
创建一个系统用户 prometheus
sudo useradd -rs /bin/false prometheus
所有权分配
sudo chown -R prometheus: /etc/prometheus /var/lib/prometheus
将 Prometheus 配置为服务
使用 systemd
守护进程,它能实现程序的后台运行、开机自启、崩溃重启等。
创建 prometheus.service
文件:
sudo vim /etc/systemd/system/prometheus.service
复制进去
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
Restart=on-failure
RestartSec=5s
ExecStart=/usr/local/bin/prometheus \
--config.file /etc/prometheus/prometheus.yml \
--storage.tsdb.path /var/lib/prometheus/ \
--web.console.templates=/etc/prometheus/consoles \
--web.console.libraries=/etc/prometheus/console_libraries \
--web.listen-address=0.0.0.0:9090 \
--web.enable-lifecycle \
--log.level=info
[Install]
WantedBy=multi-user.target
说明:
ExecStart
:就是在终端时开启程序的命令,只不过要用绝对路径。config.file
将 Prometheus 配置文件的位置为/etc/prometheus/prometheus.yml
。storage.tsdb.path
告诉 Prometheus 将程序数据存储在/var/lib/prometheus/
中。web.listen-address
设置为0.0.0.0:9090
,允许 Prometheus 侦听所有网络接口上的连接。web.enable-lifecycle
选项允许用户在不重新启动Prometheus的情况下重新加载配置文件。
重新加载 systemctl
守护进程。
sudo systemctl daemon-reload
设置开机自启,并立即启动运行
sudo systemctl enable --now prometheus
查看状态
sudo systemctl status prometheus
sudo systemctl start prometheus
如果 prometheus
服务无法正常启动,请运行命令 journalctl -u prometheus -f --no-pager
并检查输出是否有错误。
2.安装Node Exporter(客户端)
配置UFW规则
这一步务必不要省略,不然任何人都能连入你的9100端口获取到数据
一键配置脚本:
sudo bash -c "$(curl -fsSL https://raw.githubusercontent.com/kaze-kaze/Prometheus-NodeExporter/main/script/ufw-setup.sh)"
注意这个脚本会覆盖你现有的ufw规则,放开全部端口,仅指定端口设置白名单。
如果你本来就有ufw规则,建议你手动配置ufw策略
配置Node Exporter
以下两种方法,任选其一即可
a)一键脚本
wget -qO- 'https://raw.githubusercontent.com/kaze-kaze/Prometheus-NodeExporter/refs/heads/main/script/nodeexporter.sh' | sudo bash
若运行结束后,出现 active (running) ,则安装成功。
b)手动安装
略(脚本又没加密,自己点开链接看。。。)
3.配置Prometheus
客户端节点现在已准备好进行监控。要将客户端添加到 prometheus.yml
,按照以下步骤操作即可:
在运行Prometheus的服务器上,打开 prometheus.yml
进行编辑。
vim /etc/prometheus/prometheus.yml
找到 scrape_configs
,里面是作业列表。当前有一个名为 prometheus
的作业。此作业监视端口 9090
上的本地 Prometheus 任务。
在 prometheus
作业下方,添加第二个作业,其 job_name
为 node_exporter
。包括以下信息。
设置抓取时间间隔:
scrape_interval: 10s
添加要监控的 IP 和 端口号
:9100
,使用逗号分隔每个条目。要启用对本地服务器的监视,请将
localhost:9100
条目添加到列表中,并在本地安装 Node Exporter。
该条目应类似于以下示例。将 remote_addr
替换为客户端的实际IP地址。
...
- job_name: "node_exporter"
scrape_interval: 10s
static_configs:
- targets: ["remote_addr:9100"]
labels:
instance: 'Server HK'
- targets: ["remote_addr_2:9100"]
labels:
instance: 'Server US'
编辑完重启服务
sudo systemctl restart prometheus
配置Grafana
前面完成了监控和数据采集工作。但是很明显人不是计算机,采集完成后的数据你没法直接看,所以还需要安装一个可视化面板Geafana。建议可以将Grafana和Prometheus放在一台服务器上。
1.安装Grafana
a)使用一键脚本
sudo bash -c "$(curl -sSfL https://raw.githubusercontent.com/kaze-kaze/Prometheus-NodeExporter/main/script/grafana-install.sh)"
b)手动部署
安装一些必需的实用程序
sudo apt-get install -y apt-transport-https software-properties-common
导入 Grafana GPG 密钥
sudo wget -q -O /usr/share/keyrings/grafana.key https://apt.grafana.com/gpg.key
添加 Grafana“稳定版本”存储库。
echo "deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
安装 Grafana 的开源版本。
sudo apt-get update && sudo apt-get install grafana
要安装 Grafana 企业版,请使用命令
sudo apt-get install grafana-enterprise
。
重新加载
systemctl
守护进程。
sudo systemctl daemon-reload
sudo systemctl enable --now grafana-server.service
sudo systemctl status grafana-server
sudo systemctl start grafana-server
关联 Grafana 和 Prometheus
所有系统组件现已安装,但 Grafana 和 Prometheus 尚未关联。剩下的可以使用 Grafana Web 界面完成。
要集成 Grafana 和 Prometheus,请按照以下步骤操作:
浏览器访问监控服务器的
3000
端口。例如,输入http://ip_addr:3000
,将ip_addr
替换为实际 IP 地址。Grafana 显示登录页面。使用用户名和默认密码 都是
admin
。当出现提示时,将密码更改为更安全的值。成功更改密码后,Grafana 将显示 Grafana 仪表板。要将 Prometheus 添加为数据源,请单击齿轮符号(代表配置),然后选择数据源。
在下一个显示中,单击“添加数据源”按钮。
选择Prometheus作为数据源。
对于本地 Prometheus 源,将 URL 设置为
http://localhost:9090
。大多数其他设置可以保留默认值。对设置满意后,选择屏幕底部的【Save & test】按钮。
如果所有设置均正确,Grafana 会确认
Data source is working
。
导入 Grafana 仪表板
可以创建自定义仪表板。然而,Prometheus 已经创建了一个仪表板来支持 Node Exporter,名为 Node Information
,下面是导入的流程。
要创建自定义仪表板,请单击仪表板按钮,该按钮类似于四个正方形。然后选择+新建仪表板。有关更多信息,请参阅 Grafana 构建仪表板指南。
访问 Grafana 仪表板库: https://grafana.com/grafana/dashboards/ 。输入
Node Information
作为搜索词。选择
Node Exporter CN
条目。右下角查看 ID 号。该板的 ID 当前为
22869
。(英文版为22403)返回 Grafana 仪表板。选择由四个正方形组成的仪表板图标
右上角选择【New】-【Import】。
然后在 【Import via grafana.com】, 输入上一步中的 ID
22869
。然后选择【Load】。在下一个屏幕确认导入详细信息。选择
Prometheus
作为数据源,然后单击【Import】按钮。Node Information
仪表板立即生效。它显示客户端节点的性能指标和状态,包括内存、RAM 和 CPU 详细信息。
ps:硬件要求 (个人经验)
10台机器在 1C / 1G内存 / 10G硬盘 的环境下堪堪够用,如果需要监控更多机器,需考虑更高的主机配置
进阶玩法
Media Unlock Monitor实现流媒体解锁监控
1.项目介绍
该项目实际系MediaUnlockTest下的一个子项目,MediaUnlockTest基于lmc的全能检测脚本的思路使用golang重构,提供更快的检测速度。
MediaUnlockTest:https://github.com/nkeonkeo/MediaUnlockTest
lmc的全能检测脚本:https://github.com/lmc999/RegionRestrictionCheck
Media Unlock Monitor:https://github.com/nkeonkeo/MediaUnlockTest/tree/main/monitor
2.部署流程
(1)监控端
首先我们在需要被监控的VPS上,安装Monitor服务,运行以下命令即可:
bash <(curl -Ls unlock.moe/monitor) -service
默认监控国际主流流媒体,如果需要监控指定区域的流媒体情况,运行上面命令的时候加上后缀即可:
-hk
Hong Kong
-jp
Japan
-mul
Multination (default true)
-na
North America
-sa
South America
-tw
Taiwan
或者安装后,修改service:
vi /etc/systemd/system/multi-user.target.wants/unlock-monitor.service
在下面这行加上后缀即可:
ExecStart=/usr/bin/unlock-monitor -特定区域2字母代码
(2).配置Prometheus
在prometheus.yml 中添加job:
- job_name: checkmedia
scrape_interval: 30s
static_configs:
- targets:
- <your ip/domain>:9101
- <your ip/domain>:9101
- ... ##有多台Monitor就继续写下去
(3).Grafana配置
建议自己可视化编辑,如果要抄作业的话可以复制这个json,自己填入自己的配置信息
{
"datasource": {
"type": "prometheus",
"uid": "d5dc8985-25a8-4199-921e-c64ce62fb93d"
},
"description": "",
"fieldConfig": {
"defaults": {
"custom": {
"lineWidth": 3,
"fillOpacity": 100,
"spanNulls": false,
"insertNulls": false,
"hideFrom": {
"tooltip": false,
"viz": false,
"legend": false
}
},
"color": {
"mode": "continuous-GrYlRd"
},
"mappings": [],
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "green",
"value": null
}
]
}
},
"overrides": [
{
"matcher": {
"id": "byValue",
"options": {
"op": "neq",
"reducer": "allValues",
"value": 0
}
},
"properties": [
{
"id": "mappings",
"value": [
{
"options": {
"0": {
"color": "dark-blue",
"index": 8,
"text": "Unknown"
},
"1": {
"color": "semi-dark-green",
"index": 0,
"text": "YES"
},
"2": {
"color": "dark-yellow",
"index": 1,
"text": "Restricted"
},
"3": {
"color": "dark-red",
"index": 2,
"text": "NO"
},
"4": {
"color": "dark-orange",
"index": 3,
"text": "BANNED"
},
"5": {
"color": "#494949",
"index": 4,
"text": "FAILED"
},
"6": {
"color": "purple",
"index": 5,
"text": "UNEXPECTED"
},
"-1": {
"color": "light-red",
"index": 6,
"text": "NET ERR"
},
"-2": {
"color": "semi-dark-red",
"index": 7,
"text": "ERROR"
}
},
"type": "value"
}
]
}
]
}
]
},
"gridPos": {
"h": 20,
"w": 6,
"x": 0,
"y": 1
},
"id": 1,
"options": {
"mergeValues": true,
"showValue": "auto",
"alignValue": "center",
"rowHeight": 0.9,
"legend": {
"showLegend": true,
"displayMode": "list",
"placement": "bottom"
},
"tooltip": {
"mode": "single",
"sort": "none",
"maxHeight": 600
}
},
"pluginVersion": "10.1.1",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "d5dc8985-25a8-4199-921e-c64ce62fb93d"
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "media_unblock_status{node=\"hk-1\"}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false,
"legendFormat": "{{region}} {{mediaName}}",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "HK-1",
"type": "state-timeline"
}
评论