基于 Prometheus + Alertmanager + Grafana + Loki 的可视化监控与告警系统搭建实战
一、环境与前提
1.1 系统环境
| 主机 | IP | 角色 | 系统 |
|---|---|---|---|
| master | 192.168.10.21 | 监控中心(Prometheus、Alertmanager、Grafana、Loki) | CentOS 7 |
| node01 | 192.168.10.22 | 被监控节点 | CentOS 7 |
| node02 | 192.168.10.23 | 被监控节点 | CentOS 7 |
1.2 软件版本
| 软件 | 版本 |
|---|---|
| Prometheus | 3.5.0 |
| Alertmanager | 0.28.1 |
| Node Exporter | 1.8.1 |
| Grafana | 10.4.2 |
| Loki | 2.8.2 |
| Promtail | 2.8.2 |
1.3.邮件告警配置
-
邮箱:。。。。。。@163.com
-
SMTP:
smtp.163.com:465 -
授权码:通过网易邮箱设置生成(已启用 POP3/SMTP 与 IMAP/SMTP)
-
告警方式:邮件发送
二、 Prometheus
在 master(192.168.10.21)安装并验证
1.1 解包与目录准备(在 master 上执行)
cd /usr/local/src
tar -zxvf prometheus-3.5.0.linux-amd64.tar.gz
mv prometheus-3.5.0.linux-amd64 /usr/local/prometheus
cd /usr/local/prometheus
1.2 创建目录(data、rules)
mkdir -p /usr/local/prometheus/{data,rules}
1.3 配置 prometheus.yml(/usr/local/prometheus/prometheus.yml)
将下面完整内容写入(注意 targets 包含三台机器):
global:scrape_interval: 15sevaluation_interval: 15salerting:alertmanagers:- static_configs:- targets: ['localhost:9093'] # Alertmanager 在本机rule_files:- "rules/alert.rules.yml"- "rules/alert_test.rules.yml"scrape_configs:- job_name: 'prometheus'static_configs:- targets: ['localhost:9090']- job_name: 'node'static_configs:- targets: ['192.168.10.21:9100','192.168.10.22:9100','192.168.10.23:9100']
1.4 添加一个用于测试的告警规则 rules/alert_test.rules.yml
groups:
- name: test-alertrules:- alert: TestInstanceDownexpr: up == 0for: 1mlabels:severity: criticalannotations:summary: "测试告警:实例宕机"description: "主机 {{ $labels.instance }} 已经宕机超过 1 分钟"
1.5 配置systemd 服务(Prometheus)
创建 /etc/systemd/system/prometheus.service
内容:
[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target[Service]
User=root
Type=simple
ExecStart=/usr/local/prometheus/prometheus --config.file=/usr/local/prometheus/prometheus.yml --storage.tsdb.path=/usr/local/prometheus/data
Restart=on-failure[Install]
WantedBy=multi-user.target
加载并启动
systemctl daemon-reload
systemctl enable --now prometheus
1.6 验证 Prometheus 是否运行
ss -tulnp | grep 9090
curl -sS http://127.0.0.1:9090/-/ready # should return "Prometheus is ready." or HTTP 200
# 在浏览器打开 http://192.168.10.21:9090

如果启动报错,查看日志:
journalctl -u prometheus -f
tail -n 100 /usr/local/prometheus/prometheus.log # 如果用 nohup 启动则查看该文件
三 、Node-export
在三台机器安装并启动 Node Exporter(采集指标)
在 master、node01、node02 都执行下面步骤(包在 master 的 /usr/local/src,也请把 node_exporter-1.8.1.linux-amd64.tar.gz 上传到每台主机的 /usr/local/src)
3.1、关闭防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# setenforce 0
[root@localhost ~]# ls
anaconda-ks.cfg node_exporter-1.8.1.linux-amd64.tar.gz
3.2、解压软件包
[root@localhost ~]# tar -zxvf node_exporter-1.8.1.linux-amd64.tar.gz
node_exporter-1.8.1.linux-amd64/
node_exporter-1.8.1.linux-amd64/NOTICE
node_exporter-1.8.1.linux-amd64/LICENSE
node_exporter-1.8.1.linux-amd64/node_exporter
[root@localhost ~]# mv node_exporter-1.8.1.linux-amd64 node_exporter
[root@localhost ~]# mv node_exporter /usr/local/node-exporter
3.3、配置systemd服务
[root@localhost ~]# vi /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target[Service]
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure[Install]
WantedBy=multi-user.target
3.4、重新加载并且使其开机自启
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable --now node_exporter
Created symlink from /etc/systemd/system/multi-user.target.wants/node_exporter.service to /etc/systemd/system/node_exporter.service.
在 Prometheus Web UI(http://192.168.10.21:9090 → Status → Targets)确认三台 node_exporter 为 UP。
四 、Alertmanager
4.1、配置并启动 Alertmanager
(使用网易邮箱发送告警)
1、解包与目录准备(在 master)
[root@localhost ~]# tar -zxvf alertmanager-0.28.1.linux-amd64.tar.gz
alertmanager-0.28.1.linux-amd64/
alertmanager-0.28.1.linux-amd64/LICENSE
alertmanager-0.28.1.linux-amd64/alertmanager
alertmanager-0.28.1.linux-amd64/alertmanager.yml
alertmanager-0.28.1.linux-amd64/amtool
alertmanager-0.28.1.linux-amd64/NOTICE
[root@localhost ~]# mv alertmanager-0.28.1.linux-amd64 alertmanager
[root@localhost ~]# mv alertmanager /usr/local/
[root@localhost ~]# ls /usr/local/
alertmanager bin etc games include lib lib64 libexec node_exporter prometheus sbin share src
[root@localhost ~]# mkdir -p /usr/local/alertmanager/data
2、编辑 alertmanager.yml
(/usr/local/alertmanager/alertmanager.yml)
**重要:**把 SMTP_AUTH_PASSWORD 占位符替换为你本地主机上真实授权码(不要将授权码粘贴到任何公共/远程聊天记录中)。
示例配置(使用 163 的 SSL/TLS 端口):
[root@localhost ~]# vi /usr/local/alertmanager/alertmanager.yml
global:smtp_smarthost: 'smtp.163.com:465'smtp_from: '。。。。。。。@163.com'smtp_auth_username: '。。。。。。。。@163.com'smtp_auth_password: 'SMTP_AUTH_PASSWORD'smtp_require_tls: false # 禁用 STARTTLS,因为465端口已经是SSLroute:receiver: emailgroup_wait: 5sgroup_interval: 10srepeat_interval: 1mreceivers:- name: emailemail_configs:- to: '。。。。。。。@163.com'send_resolved: true
3、配置systemd 服务
(/etc/systemd/system/alertmanager.service)
[root@localhost ~]# vi /etc/systemd/system/alertmanager.service
[Unit]
Description=Alertmanager
Wants=network-online.target
After=network-online.target[Service]
User=root
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data
Restart=on-failure[Install]
WantedBy=multi-user.target
4、加载并开机自启
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable --now alertmanager
Created symlink from /etc/systemd/system/multi-user.target.wants/alertmanager.service to /etc/systemd/system/alertmanager.service.
4.2、验证 Alertmanager
浏览器访问:http://192.168.10.21:9093

查看日志:journalctl -u alertmanager -f(观察是否有 SMTP 错误如 authentication failed / TLS errors)
1、 测试
Prometheus → Alertmanager → 邮箱 告警链路(触发测试)
2、 确认 Prometheus 已加载规则
在 master 上查看 Prometheus web UI:http://192.168.10.21:9090/rules,确认 test-alert 组存在。
3、 触发告警
在任一 node 上停止 node_exporter(比如 node01):
# 在 node01 (192.168.10.22) 上:
systemctl stop node_exporter
http://192.168.10.21:9093,可以看到告警;Alertmanager 会尝试发送邮件。


五 、Grafana
在 master 上安装 Grafana(用于可视化)
我建议使用预编译二进制包(无须 Node.js),在 CentOS7 上最稳妥。
5.1、下载并解压(在 master)
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-10.4.2.linux-amd64.tar.gz
[root@localhost ~]# tar -zxvf 软件包
[root@localhost ~]# mv grafana-v10.4.2/ grafana
[root@localhost ~]# ls
alertmanager-0.28.1.linux-amd64.tar.gz grafana node_exporter-1.8.1.linux-amd64.tar.gz
anaconda-ks.cfg grafana-10.4.2.linux-amd64.tar.gz prometheus-3.5.0.linux-amd64.tar.gz
[root@localhost ~]# mv grafana /usr/local/
[root@localhost ~]# mkdir -p /usr/local/grafana/data /usr/local/grafana/logs /usr/local/grafana/plugins
5.2、配置systemd服务
1. 创建 systemd 服务文件
sudo vim /etc/systemd/system/grafana.service
然后把下面的内容粘进去:
[Unit]
Description=Grafana
After=network.target[Service]
Type=simple
User=root
Group=root
ExecStart=/usr/local/grafana/bin/grafana-server \--homepath=/usr/local/grafana \--config=/usr/local/grafana/conf/defaults.ini \--packaging=tar \cfg:default.paths.data=/usr/local/grafana/data \cfg:default.paths.logs=/usr/local/grafana/logs \cfg:default.paths.plugins=/usr/local/grafana/plugins
Restart=on-failure
LimitNOFILE=10000[Install]
WantedBy=multi-user.target
2. 重新加载 systemd 守护进程
sudo systemctl daemon-reload
3. 设置开机自启并启动 Grafana
sudo systemctl enable grafana
sudo systemctl start grafana
4. 查看运行状态
sudo systemctl status grafana
5. 访问地址
浏览器访问:
http://localhost:3000
默认账户:admin / admin
5.3、添加数据源(Data Source)
Grafana 本身不存数据,它需要连接 Prometheus、MySQL、Loki 等「数据源」才能显示监控指标。
✅ 以 Prometheus 为例:
(最常见的数据源类型)
1️⃣ 左侧菜单栏 → 点击 ⚙️ Configuration(齿轮) → Data Sources
2️⃣ 点击右上角 “Add data source”
3️⃣ 在列表中选择 Prometheus
4️⃣ 在 HTTP → URL 填写 Prometheus 地址,例如:
http://localhost:9090
(如果 Prometheus 跑在其他服务器,就改为对应 IP)
5️⃣ 点击底部的 “Save & Test”
若出现绿色提示:
Data source is working
说明 Grafana 已成功连接 Prometheus
六 、配置 Loki 日志
6.1、安装并启动Loki
1. 创建目录并解压安装包
mkdir -p /usr/local/loki
unzip loki-linux-amd64.zip
mv loki-linux-amd64 /usr/local/loki/loki
ls -l /usr/local/loki
2. 创建 Loki 主配置文件
编辑配置文件:
vi /usr/local/loki/loki-config.yml
粘贴以下内容 👇
auth_enabled: falseserver:http_listen_port: 3100grpc_listen_port: 9096common:path_prefix: /usr/local/lokistorage:filesystem:chunks_directory: /usr/local/loki/chunksrules_directory: /usr/local/loki/rulesreplication_factor: 1ring:instance_addr: 127.0.0.1kvstore:store: memberlistmemberlist:join_members: []schema_config:configs:- from: 2025-01-01store: boltdb-shipperobject_store: filesystemschema: v11index:prefix: loki_index_period: 24hstorage_config:boltdb_shipper:active_index_directory: /usr/local/loki/indexcache_location: /usr/local/loki/cacheshared_store: filesystemfilesystem:directory: /usr/local/loki/chunkslimits_config:reject_old_samples: truereject_old_samples_max_age: 168hretention_period: 720h
3、创建目录与权限
mkdir -p /usr/local/loki/{chunks,index,cache,rules}
chown -R root:root /usr/local/loki
chmod -R 755 /usr/local/loki
4、启动 Loki 服务测试
手动启动 Loki 验证配置是否正确:
/usr/local/loki/loki --config.file=/usr/local/loki/loki-config.yml
如果输出中没有报错,并且最后出现:
level=info msg="Loki started"
则说明 Loki 启动成功。
5、Web 页面验证
在浏览器中访问以下地址:
http://192.168.10.21:3100/ready
如果返回:
ready
表示 Loki 运行正常 ✅
6、配置 Systemd 服务管理
编辑服务文件:
vi /etc/systemd/system/loki.service
写入以下内容 👇
[Unit]
Description=Loki Log Service
After=network.target[Service]
ExecStart=/usr/local/loki/loki --config.file=/usr/local/loki/loki-config.yml
Restart=on-failure
RestartSec=5[Install]
WantedBy=multi-user.target
7、启动并验证服务
sudo systemctl daemon-reload
sudo systemctl start loki
sudo systemctl enable loki
sudo systemctl status loki -l
如果状态显示:
Active: active (running)
则表示 Loki 已成功注册为系统服务并在运行中 ✅
6.2、配置 Promtail 收集日志
1️⃣ 创建目录并配置文件
在每台虚拟机上:
解压并设置目录
unzip promtail-linux-amd64.zip
sudo mkdir -p /usr/local/promtail
sudo mv promtail-linux-amd64 /usr/local/promtail/promtail
sudo chmod +x /usr/local/promtail/promtail
编辑 promtail-config.yml 文件
[root@localhost ~]# sudo vi /usr/local/promtail/promtail-config.yml
server:http_listen_port: 9080grpc_listen_port: 0positions:filename: /tmp/positions.yamlclients:- url: http://192.168.10.21:3100/loki/api/v1/pushscrape_configs:- job_name: systemstatic_configs:- targets:- localhostlabels:job: varlogshost: ${HOSTNAME}__path__: /var/log/*.log
2创建 Promtail 的 systemd 服务
[root@localhost ~]# sudo vim /etc/systemd/system/promtail.service
[Unit]
Description=Promtail service
After=network.target[Service]
Type=simple
ExecStart=/usr/local/promtail/promtail --config.file=/usr/local/promtail/promtail-config.yml
Restart=always[Install]
WantedBy=multi-user.target
3、启动 Promtail
sudo systemctl daemon-reload
sudo systemctl start promtail
sudo systemctl status promtail -l
sudo systemctl enable promtail
6.3、🧭 Grafana 添加 Loki 数据源步骤
一、登录 Grafana 控制台
浏览器访问:
http://192.168.10.21:3000
默认账号密码:
用户名:admin 密码:admin
首次登录会提示修改密码,可自行更改。
二、进入数据源配置页面
在 Grafana 左侧菜单栏中依次点击:
「⚙️ Configuration(配置)」 → 「Data Sources(数据源)」 → 「Add data source(添加数据源)」
三、选择 Loki 数据源
在数据源列表中找到 Loki,点击进入配置页面。
四、填写 Loki 服务地址
在配置页面中填写 Loki 的地址(与之前的 Loki 服务端口一致):
http://192.168.10.21:3100
🔹 注意:如果 Grafana 与 Loki 部署在同一台主机上,也可直接写
http://localhost:3100
五、保存并测试连接
点击页面底部的 「Save & Test」 按钮。
若出现提示:
Data source is working
✅ 表示连接成功。
六、验证数据源
点击左侧菜单中的 Explore(探索):
-
在顶部下拉框选择刚刚添加的 Loki 数据源;
-
在查询栏中输入:
{job="varlogs"}然后点击 Run query。
若能看到日志流输出(系统日志或 Promtail 推送的内容),说明 Loki 数据源工作正常 ✅。
七、可选操作
-
可以在「Dashboards → Import」中导入 Loki 相关模板,也可以自定义;
-
或者在「Alerting」中结合 Loki 实现基于日志内容的告警。

