一、项目的整体情况
项目的数据导向:

系统:Ubuntu/Debian
推荐配置:
| 项目 | 配置 |
|---|---|
| CPU | 2核以上 |
| 内存 | 2GB以上 |
| 磁盘 | 20GB以 |
端口开放:
| 组件 | 默认端口 | 用途 |
|---|---|---|
| Node Exporter | 9100 | 采集本机 metrics |
| Prometheus | 9090 | 数据查询 Web UI |
| Grafana | 3000 | 监控仪表盘 |
二、组件的安装
2.1、Node Exporter的安装
主要负责采集Linux系统指标和相关参数的。
定位:运行在每台被监控主机上的指标采集 Agent。
Node Exporter 是 Prometheus 官方提供的 Linux/Unix 系统指标采集器,以 HTTP 服务形式暴露主机硬件和操作系统的原始指标,监听端口 :9100 ,路径 /metrics。
工作机制:Node Exporter 本身不推送数据,只是把数据"摆在那里",等 Prometheus 来拉。它是被动暴露,不主动上报。
2.1.1 安装node exporter程序
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
#这个地址可能会生效,因为github上的项目可能路径修改或者release弃用

2.1.2 解压node exporter包
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64
./node_exporter
#解压完成后切换到如上目录下,然后执行 ./node_exporter 输出如下则证明正常

2.1.3 给node exporter添加配置文件
sudo vim /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/root/node_exporter-1.7.0.linux-amd64/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target

2.1.4 重新加载并启动node 服务
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
sudo systemctl status node_exporter

2.1.5 验证node exporter程序
curl http://localhost:9100/metrics | head -50
#localhost写你的部署程序的IP地址

2.2、Prometheus的安装
定位:时序数据库 + 数据抓取引擎,整个监控体系的核心。 Prometheus 是 CNCF 毕业项目,采用 Pull 模型------它定时(默认 15s)主动去各个 target(比如 Node Exporter)拉取指标数据,存入内置的时序数据库(TSDB)。监听端口 :9090。
核心概念:
-
Scrape :Prometheus 定时抓取 target 的
/metrics接口,这个动作叫 scrape。 -
TSDB :数据以时间戳+标签的形式落盘,默认保留 15 天,数据存在
/var/lib/prometheus/。 -
PromQL:Prometheus 自带的查询语言,支持过滤、聚合、计算函数。Grafana 的 Dashboard 本质上是一堆 PromQL 查询语句。
-
配置驱动 :所有监控目标写在
/etc/prometheus/prometheus.yml的static_configs.targets里,支持热加载(curl -X POSThttp://localhost:9090/-/reload)。
2.2.1 下载安装Prometheus
sudo apt-get install -y prometheus
2.2.2 配置Prometheus
vim /etc/prometheus/prometheus.yml
#写入如下的内容
global:
scrape_interval: 15s # 抓取间隔
evaluation_interval: 15s # 规则评估间隔
scrape_configs:
- job_name: 'node_exporter'
static_configs:
- targets: ['localhost:9100']
2.2.3 配置为系统的服务器
sudo vim /etc/systemd/system/prometheus.service
#写入如下的内容
[Unit]
Description=Prometheus
After=network.target
[Service]
Type=simple
User=root
ExecStart=/root/prometheus-2.48.0.linux-amd64/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus \
--web.console.libraries=/root/prometheus-2.48.0.linux-amd64/consoles \
--web.console.templates=/root/prometheus-2.48.0.linux-amd64/prometheus consoles
Restart=on-failure
[Install]
WantedBy=multi-user.target
2.2.4 创建数据目录并启动服务
sudo mkdir -p /var/lib/prometheus
sudo systemctl daemon-reload
sudo systemctl enable prometheus
sudo systemctl start prometheus
sudo systemctl status prometheus

2.2.5 验证Prometheus
curl http://localhost:9090/api/v1/targets
#正常情况下应该会返回如下的结果信息

2.3、Grafana的安装
定位:可视化层 + 告警平台,负责把 Prometheus 里的数据变成人能看懂的图表。
Grafana 是独立的可视化工具,支持对接几十种数据源(Prometheus、InfluxDB、MySQL 等)。在 Prometheus 监控栈里,它作为前端展示层,监听端口 :3000,通过浏览器访问。
2.3.1 下载安装Grafana组件
# 1. 导入 Grafana 官方 GPG 密钥(验证包完整性,长期有效),不使用Grafana的官方源,下载速度特别慢
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
# 2. 添加清华镜像源(永久地址,国内访问速度快)
echo "deb https://mirrors.tuna.tsinghua.edu.cn/grafana/apt/ stable main" | sudo tee /etc/apt/sources.list.d/grafana.list
# 3. 更新源列表,加载清华镜像
sudo apt update
# 4. 安装最新稳定版 Grafana
sudo apt install -y grafana
2.3.2 启动Grafana服务器
sudo systemctl daemon-reload
sudo systemctl enable grafana-server
sudo systemctl start grafana-server
sudo systemctl status grafana-server

2.3.3 登录访问
使用,IP地址+3000第一次登录都会让我们修改密码,默认的账户密码是admin,admin


登录进来后我们这里是english,如果英语不好的可以调整为汉语
点击头像--->选择Profile--->Preferences--->Language--->中文--->然后 save preferences

2.3.4 添加 Prometheus 数据源
在左侧的导航窗口可以看到一些选项,我们打开连接,我们需要选择进行数据流展示的源数据 1、点击打开【连接】,选择【数据源】 2、点击【添加新数据源】 3、有很多的数据库可以进行连接,我们选择我们需要的【Prometheus】

4、进入后填写【Connection】,输入如下内容,然后保存并测试
http://10.2.21.163:9090
#根据你自己的IP进行调整

5、出现如下的代表成功了

2.3.5 导入仪表盘
1、点击【仪表板】,然后选择右上角的【新建】,选择【导入】 2、输入 1860(官方 Node Exporter 面板 ID)点击加载,点击【import】 3、然后出现如下的内容代表成功

三、补充
1、说明
我当前的部署文档只针对我这个服务器,只针对本机,如果有小规模集群,需要改动新增一些东西 还有就是仪表盘这个,你可以进行自己创建编写你需要的数据,本文档,只为方便选择导入现成的仪表板
2、小规模集群部署
2.2.1 部署node exporter服务
每台服务器上执行,可以通过ansible批量执行,感兴趣的自己去了解
wget https://ghproxy.com/https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
tar xvf node_exporter-1.7.0.linux-amd64.tar.gz
cd node_exporter-1.7.0.linux-amd64
2.2.2 添加配置文件
sudo tee /etc/systemd/system/node_exporter.service > /dev/null << 'EOF'
[Unit]
Description=Node Exporter
After=network.target
[Service]
Type=simple
User=root
ExecStart=/root/node_exporter-1.7.0.linux-amd64/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable node_exporter
sudo systemctl start node_exporter
#每台服务器都执行如上的
2.2.3 验证node 程序
curl http://localhost:9100/metrics | head -5
2.2.4 修改Prometheus配置文件
在主监控主机上修改,不要在被监控的主机上修改
sudo vim /etc/prometheus/prometheus.yml
#输入如下的内容
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# 监控 Prometheus 自身
- job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
# 监控所有主机(本机 + 三台远程主机)
- job_name: 'node_exporter'
static_configs:
- targets:
- 'localhost:9100' # 本机
- '10.2.21.165:9100' # 主机 165
- '10.2.21.166:9100' # 主机 166
- '10.2.21.167:9100' # 主机 167
2.2.5 验证完整性
执行如下的内容验证是否生效
curl -X POST http://localhost:9090/-/reload #热加载
#然后在Prometheus主机上执行如下:测试连通性,看是否正常,有无报错
curl http://10.2.21.165:9100/metrics | head -3
curl http://10.2.21.166:9100/metrics | head -3
curl http://10.2.21.167:9100/metrics | head -3
2.2.6 数据流向
