prometheus+alertmanager+prometheusalert+qq邮箱+阿里云短信,搭建监控系统
一、确定时钟所涉及主机的时钟一致。
参考:linux时钟服务ntp和chronyd-CSDN博客
二、安装prometheus服务:
功能:接收被监控主机通过_exporter服务向外发送的监控指标,以时间序列存储所有指标,以供监控和告警使用。
安装包下载地址(x86_64):
安装命令:
tar xvfz prometheus-*.tar.gz
cd prometheus-* ; ll
配置prometheus.yml文件:
vim Prometheus.yml
|
global: scrape_interval: 15s ##默认拉取频率 evaluation_interval: 15s ##执行规则频率 scrape_timeout: 5s ##拉取超时时间 alerting: alertmanagers: - static_configs: - targets: ["192.168.48.128:9093"] ##alertmanager服务地址端口指定 path_prefix: /root/alertmanager-0.28.0.linux-amd64 rule_files: - "alert.yml" ##告警规则文件地址文件名指定 scrape_configs: ##具体的拉取数据的相关配置 - job_name: "prometheus" static_configs: - targets: ["localhost:9090"] - job_name: "node-exporter" static_configs: - targets: ["192.168.48.129:9100"] ##被监控主机的ip:port labels: group: 'linux' ##自定义标签 - targets: ['192.168.48.131:9182'] labels: group: 'win10' |
配置告警规则:
vim alert.yml
|
groups: |
配置服务单元:
vim /etc/system/system/prometheus.service
|
[Unit] Description=prometheus After=network.target [Service] WorkingDirectory=/root/prometheus-3.2.1.linux-amd64 ##工作路径 ExecStart=/root/prometheus-3.2.1.linux-amd64/prometheus \ --config.file="prometheus.yml" \ ##配置文件指定 --web.listen-address=:9090 \ ##运行端口指定 --storage.tsdb.path /root/prometheus-3.2.1.linux-amd64/data ##数据存储路径指定 StandardOutput=append:/var/log/prometheus.log StandardError=append:/var/log/prometheus_error.log [Install] WantedBy=default.target |
启动服务:
systemctl daemon-reload
systemctl start prometheus.service
systemctl status prometheus.service
systemctl enable prometheus.service
三、安装node-exporter服务
功能:通过读取系统日志,内存中的文件系统和执行相应指令获得对应监控指标的值,通过指定端口向外发送。
安装包下载地址:https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
https://github.com/prometheus/node_exporter/releases/download/v1.9.0/node_exporter-1.9.0.linux-amd64.tar.gz
安装命令:
tar xvfz node_exporter-*.tar.gz
cd node_exporter-* ; ll
配置服务单元:
vim /etc/system/system/node_exporter.service
|
[Unit] Description=Prometheus Node Exporter After=network.target [Service] Type=simple User=root Group=root ExecStart=/root/node_exporter-1.9.0.linux-amd64/node_exporter \ --collector.systemd \ --collector.textfile.directory=/root/node_exporter-1.9.0.linux-amd64/textfiles \ --web.listen-address=:9100 StandardOutput=append:/var/log/node_exporter.log StandardError=append:/var/log/node_exporter_error.log SyslogIdentifier=node_exporter Restart=always [Install] WantedBy=default.target |
启动服务:
systemctl daemon-reload
systemctl enable --now node_exporter.service
systemctl status node_exporter.service
配置自定义监控指标:
例如:监听sshd进程状态,crontab定时通过textfile.sh脚本获取进程状态,以一定格式输出到textfile指定的采集目录/root/node_exporter-1.9.0.linux-amd64/textfiles/中的process_pid.prom文件中。
mkdir -R /root/node_exporter-1.9.0.linux-amd64/textfiles/
mkdir -R /root/node_exporter-1.9.0.linux-amd64/scripts/
touch /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom
自定义监控生成脚本:
vim /root/node_exporter-1.9.0.linux-amd64/scripts/textfile.sh
|
#!/bin/bash # 设置你要监控的进程名称 PROCESSNAME="sshd" # 使用pgrep找到进程ID,注意这里可能返回多个PID,取决于是否有多个实例运行 PIDS=$(pgrep -f "$PROCESSNAME") # 一个进程名称对应多个进程时,对进程进行编号区分 PROCESSNUM=0 # 清空历史数据 cat /dev/null > /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom # 为每个PID创建一个临时文件,格式符合Prometheus文本格式 for PID in $PIDS; do ((PROCESSNUM++)) echo "process_"$PROCESSNAME"_$PROCESSNUM{process=\"$PROCESSNAME\", instance=\"$HOSTNAME\"} $PID" >> /root/node_exporter-1.9.0.linux-amd64/textfiles/process_pid.prom done |
自定义脚本定时任务:
crontab -l > ./crontab-20250310.bak
crontab -e
* * * * * /root/node_exporter-1.9.0.linux-amd64/scripts/textfile.sh > /dev/null 2>&1
四、windows_exporter配置
功能:采集windows操作系统层面的监控指标
安装包下载地址:
或
图形化安装:

使用管理员模式启动powershell,配置config.yaml文件:
|
enabled: cpu,cpu_info,exchange,iis,logical_disk,logon,memory,net,os,performancecounter,process,remote_fx,service,system,tcp,time,terminal_services,textfile textfile_collector: directory: C:\Program Files\windows_exporter\textfile_inputs log: level: warn format: logfmt file: C:\Program Files\windows_exporter\log\windows_exporter.log” > config.yaml |
重启windows_exporter:
sc.exe stop windows_exporter
sc.exe start windows_exporter
命令行安装命令:
|
sc.exe create windows_exporter binPath=""E:\windows_exporter\windows_exporter-windows_exporter-0.30.4-amd64.exe" --collectors.enabled="cpu,cpu_info,exchange,iis,logical_disk,logon,memory,net,os,performancecounter,process,remote_fx,service,system,tcp,time,terminal_services,textfile" --web.listen-address :9182 --collector.textfile.directories="E:\windows_exporter\textfile_inputs" --log.file "E:\windows_exporter\log\windows_exporter.log" --log.format logfmt --log.level debug" start=auto obj="NT AUTHORITY\LocalService" 注: --web.listen-address :9182 #监听地址和端口 --collector.textfile.directories="E:\\windows_exporter\\textfile" #textfile指标文件目录 --log.file "E:\windows_exporter\log\windows_exporter.log" #日志输出目标 --log.format logfmt #日志格式(logfmt、json、text) --log.level info" #日志级别(info、debug、warn) |
启动服务:
sc.exe start windows_exporter
删除服务:
sc.exe stop windows_exporter
sc.exe delete windows_exporter
验证服务:
sc.exe query windows_exporter
查看日志:Get-Content C:\logs\windows_exporter.log -Wait
端口检查:netstat -ano | findstr :9182
bat脚本自动生成textfile采集文件,使用任务计划程序定时启动脚本:
1、创建bat脚本process_statu_monitor.bat
|
@echo off setlocal enabledelayedexpansion :: ---------------------------------------- :: 配置区域(根据实际环境修改) :: ---------------------------------------- set TEXTFILE_DIR="E:\windows_exporter\textfile_inputs" set PROCESS_NAME=PowerShell set LOG_FILE= "E:\windows_exporter\log\textfile.log" set process_status=2 :: ---------------------------------------- :: 检测PowerShell进程状态(0=未运行,1=运行) :: ---------------------------------------- tasklist /FI "IMAGENAME eq %PROCESS_NAME%*" 2>nul | find /i "%PROCESS_NAME%" >nul if %errorlevel% equ 0 ( set process_status=1 ) else ( set process_status=0 ) :: 确保目录存在并赋权 if not exist "%TEXTFILE_DIR%" ( mkdir "%TEXTFILE_DIR%" ) :: 测试环境简化权限 icacls "%TEXTFILE_DIR%" /grant "Everyone:(OI)(CI)W" :: ---------------------------------------- :: 生成Prometheus指标文件 :: ---------------------------------------- ( echo # HELP powershell_process_status powershell status 0=running,1=stoped echo # TYPE powershell_process_status gauge echo powershell_process_status !process_status! ) > "%TEXTFILE_DIR%\process_status.prom" :: 原子操作:临时文件替换确保采集器读取完整性 :: move /Y %TEXTFILE_DIR%\process_status.prom.tmp %TEXTFILE_DIR%\process_status.prom >nul :: ============================================= :: 日志记录(带时间戳和状态记录) :: ============================================= echo [%date% %time%] ^ process_status=!process_status! >> %LOG_FILE% endlocal exit /b 0 |
2、创建对应textfile和日志路径:
New-Item -Path " E:\windows_exporter\textfile_inputs " -ItemType Directory
New-Item -Path " E:\windows_exporter\log " -ItemType Directory
3、测试textfile自定义指标采集情况:
curl http://localhost:9182/metrics | findstr "powershell_process_status"
4、设置任务计划程序,自动定时执行textfile的bat脚本:


五、安装alertmanager服务
功能:Alertmanager 处理由Prometheus服务器等客户端应用程序发送的警报。它负责重复数据删除、分组和路由 它们连接到正确的接收器集成,例如电子邮件、PagerDuty 或 OpsGenie。它还负责警报的静默和抑制。
安装包下载地址:
https://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz
https://github.com/prometheus/alertmanager/releases/download/v0.28.1/alertmanager-0.28.1.linux-amd64.tar.gz
安装命令:
tar xvfz alertmanager-*.tar.gz
cd alertmanager ; ll
配置alertmanager.yml文件:
vim alertmanager.yml
|
global: # 处理警报的SMTP服务器的配置 smtp_smarthost: 'smtp.qq.com:587' smtp_from: '6742*****@qq.com' smtp_auth_username: '6742*****@qq.com' smtp_auth_password: '**************' #登录qq邮箱,申请开启smtp服务,会生成此密码 resolve_timeout: 5m # 定义路由树,用于决定警报应该发送到哪里 route: group_by: ['alertname'] group_wait: 5s group_interval: 10s repeat_interval: 12h receiver: 'team-X-mails' # 可以定义子路由,例如根据严重性或团队进行细分 #routes: #- match: # severity: 'critical' # receiver: 'team-X-pager' # group_wait: 10s templates: - '/root/alertmanager-0.28.0.linux-amd64/templates/email_template.tmpl' #模板文件路径 receivers: - name: 'team-X-mails' email_configs: - to: '6742*****@qq.com' send_resolved: true html: '{{ template "email.default.html" . }}' # 引用模板 headers: Subject: '{{ template "email.default.subject" . }}' # 邮件主题 webhook_configs: - url: 'http://192.168.48.128:8080/prometheusalert?type=alydx&tpl=prometheus-alydx&phone=153********' send_resolved: true |
qq邮箱smtp服务开启:

配置服务单元:
vim /etc/systemd/system/alertmanager.service
|
[Unit] Description=Alertmanager for Prometheus After=network.target [Service] ExecStart=/root/alertmanager-0.28.0.linux-amd64/alertmanager \ --web.route-prefix=/root/alertmanager-0.28.0.linux-amd64 \ --web.listen-address=:9093 \ --config.file=/root/alertmanager-0.28.0.linux-amd64/alertmanager.yml \ --storage.path=/root/alertmanager-0.28.0.linux-amd64/data StandardOutput=append:/var/log/alertmanager.log StandardError=append:/var/log/alertmanager_error.log [Install] WantedBy=default.target |
登录alertmanager Web UI验证:
六、安装grafana服务
功能:Grafana 开源软件 (OSS) 能查询、可视化、提醒和探索您的指标、日志和跟踪,无论它们存储在何处。Grafana 数据源插件使您能够查询数据源,包括 Prometheus 和 CloudWatch 等时间序列数据库、Loki 和 Elasticsearch 等日志记录工具、Postgres 等 NoSQL/SQL 数据库、GitHub 等 CI/CD 工具等等。Grafana OSS 为您提供了一些工具,可通过富有洞察力的图表和可视化效果在实时控制面板上显示这些数据。
安装包下载地址(ubuntu x86_64):https://dl.grafana.com/enterprise/release/grafana-enterprise_11.5.2_amd64.deb
https://dl.grafana.com/enterprise/release/grafana-enterprise_11.5.2_amd64.deb
安装命令:
sudo apt-get install -y adduser libfontconfig1 musl
sudo dpkg -i grafana-enterprise_11.5.2_amd64.deb
安装包下载地址(redhat x86_64): https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.2-1.x86_64.rpm
https://dl.grafana.com/enterprise/release/grafana-enterprise-11.5.2-1.x86_64.rpm
安装命令:
yum install -y grafana-enterprise-11.5.2-1.x86_64.rpm
启动服务单元:
systemctl daemon-reload
systemctl enable --now grafana-server.service
systemctl status grafana-server.service
查看图形化界面:
配置监控界面:
1、配置数据源

2、登录grafana官网选择合适daskboard模板
Grafana dashboards | Grafana Labs
https://grafana.com/grafana/dashboards/
3、导入daskboard模板

4、展示监控视图,亦可自行编辑视图

六、安装prometheusalert
功能:PrometheusAlert 是一个告警通知网关,负责将来自 Alertmanager 的告警信息转化为不同通知渠道(如短信、钉钉、企业微信等)的格式并发送。
安装包下载地址:https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.zip
https://github.com/feiyu563/PrometheusAlert/releases/download/v4.9.1/linux.zip
安装命令:
unzip linux.zip
mv linux PrometheusAlert
cd conf/
cp app.conf app.conf.bak
firewall-cmd --list-all
firewall-cmd --zone=public --add-port=9100/tcp –permanent
firewall-cmd –reload
配置阿里云短信服务:
通过prometheusalert服务转发告警信息到阿里云短信服务,将告警信息推送至手机短信。
-
申请阿里云accesskey


注:申请过程中记录好密钥AccessSecret,后续在配置中使用。
2、申请阿里云短信模板

注:在此处,申请签名,申请短信模板,通过审核之后,记录短信签名名和短信模板id。后续配置使用。
鉴于prometheusalet代码中硬编码code字段的缘故,我们的短信模板仅设置一个code字段。

3、配置prometheusalert配置文件(配置阿里云短信服务)
vim app.conf
|
#---------------------↓阿里云接口----------------------- #是否开启阿里云短信告警通道,可同时开始多个通道0为关闭,1为开启 open-alydx=1 #阿里云短信主账号AccessKey的ID ALY_DX_AccessKeyId=LTAI********************* #阿里云短信接口密钥 ALY_DX_AccessSecret=**************************************** #阿里云短信签名名称 ALY_DX_SignName=************** #阿里云短信模板ID ALY_DX_Template=SMS_*********** |
4、登录prometheusalert web UI(http://ip:8080),设置自定义模板

5、配置prometheusalert服务单元
vim /etc/systemd/system/prometheusalert.service
|
[Unit] Description=PrometheusAlert Service After=network.target [Service] Type=simple User=root # 建议使用非root用户,需提前创建 Group=root WorkingDirectory=/root/PrometheusAlert # 替换为你的安装路径 ExecStart=/root/PrometheusAlert/PrometheusAlert # 指向可执行文件路径 Restart=always StandardOutput=/var/log/prometheusalert.log StandardError=/var/log/prometheusalert_error.log SyslogIdentifier=prometheusalert [Install] WantedBy=default.target |
6、启动prometheusalert服务单元
systemclt daemon-reload
systemctl start prometheusalert.service
systemctl stop prometheusalert.service
7、登录阿里云短信控制台查看prometheusalert向阿里云短信服务的推送情况

注:可见发送失败,原因是短信签名虽然经过阿里云的审核,但还未通过运营商的报备,需要等待,企业账号可能会快一些,个人账户需要一段时间。
八、pushgateway
功能:当目标资源与prometheus不在同一网段或因为防火墙不开放等原因导致prometheus无法刮取目标资源指标时,可以通过pushgateway作为一个中介,让目标资源向其推送指标,prometheus定时刮取pushgateway上的数据。或者因为目标资源生命的周期太短,例如容器的启动、执行、停止等指标,可以利用pushgateway的短时存储特性,使prometheus通过pushgateway获取。
注:此文档中,我们在内网搭建整个监控系统,暂未使用到此组件。以后用到时再单独研究。
安装包下载地址:https://github.com/prometheus/pushgateway/releases/download/v1.11.0/pushgateway-1.11.0.linux-amd64.tar.gz
https://github.com/prometheus/pushgateway/releases/download/v1.11.0/pushgateway-1.11.0.linux-amd64.tar.gz
安装命令:
tar -zxvf pushgateway-1.11.0.linux-amd64.tar.gz
mv pushgateway-1.6.2.linux-amd64 pushgateway
chown -R root:root pushgateway
配置pushgateway服务单元:
vim /etc/system/system/pushgateway.service
|
[Unit] Description=Pushgetway After=network.target [Service] Type=simple Group=prometheus ExecStart=/opt/prometheus/pushgateway/pushgateway Restart=on-failure [Install] WantedBy=default.target |
启动pushgateway服务:
systemctl daemon-reload
systemctl start pushgateway.service
systemctl status pushgateway.service
firewall-cmd --zone=public --add-port=9091/tcp --permanent
firewall-cmd --reload
访问pushgateway web UI:
http://ip:9091/
配置prometheus:
vim prometheus.yml
|
- job_name: "pushgateway" scrape_interval: 30s honor_labels: true //加上此配置,exporter节点上传数据中的一些标签将不会被pushgateway节点的相同标签覆盖 static_configs: - targets: ["localhost:9091"] labels: instance: pushgateway |
然后重载prometheus。
向pushgateway推送数据:
推送路径的URL 部分定义为:
/metrics/job/<JOB_NAME>{/<LABEL_NAME>/<LABEL_VALUE>}
job是必须参数,label_name部分是可选的,URL中的job和label组合唯一标识pushgateway中Group
在推送的数据部分。格式定义如下:
metric_name{lable_name="label_value",...} value
测试项pushgateway推送数据:
推送一条:echo "my_metric 2022" | curl --data-binary @-http://192.168.134.133:9091/metrics/job/test-job
在推送一条将值改外为2023::echo "my_metric 2023" | curl --data-binary @- http://192.168.134.133:9091/metrics/job/test-job
删除推送的数据::curl -X DELETE http://ip:9091/metrics/job/test-job
更多推荐



所有评论(0)