一:下载prometheus+grafana安装包,并部署安装包
1.0 上传软件包
从清华源(https://mirrors.tuna.tsinghua.edu.cn/)的镜像库下载安装包,根据系统选择相应版本,我选择的是prometheus-2.52.0.linux-amd64.tar.gz+grafana-10.4.2-1.x86_64.rpm
1.1 安装prometheus
1.上传prometheus-2.52.0.linux-amd64.tar.gz 包到服务器/data目录下
2.解压prometheus-2.52.0.linux-amd64.tar.gz 包并重命名
[root@rancher data]#tar xvf prometheus-2.52.0.linux-amd64.tar.gz [root@rancher data]#mv prometheus-2.52.0.linux-amd64 prometheus
3.prometheus 配置systemctl 启动并设置开机自启[root@rancher prometheus]#vim /usr/lib/systemd/system/prometheus.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [Unit] Description=Prometheus Documentation=https: //prometheus .io/ After=network.target [Service] Type=simple ExecStart= /data/prometheus/prometheus --config. file = /data/prometheus/prometheus .yml --storage.tsdb.path= /data/prometheus/data --storage.tsdb.retention=365d ExecReload= /bin/kill -HUP $MAINPID Restart=on-failure [Install] WantedBy=multi-user.target [root@rancher prometheus] #systemctl start prometheus ###启动prometheus [root@rancher prometheus] #systemctl enable prometheus ###配置prometheus开机自启[root@rancher prometheus]# systemctl status prometheus.service ###查看prometheus状态 |
prometheus的端口是9090,正常启动后直接访问主机IP:9090 即可访问web界面
通过浏览器访问http://10.12.121.198:9090/
1.2 安装grafana
1.上传grafana-10.4.2-1.x86_64.rpm 包到主机/data目录下,并安装
[root@rancher data]# rpm -ivh grafana-10.4.2-1.x86_64.rpm
2.启动grafana 并配置开机自启
[root@rancher data]# systemctl start grafana-server.service [root@rancher data]# systemctl enable grafana-server.service [root@rancher data]# systemctl status grafana-server.service
3.grafana的服务端口3000,使用IP+端口登陆grafana,修改默认密码,默认账号密码:admin/admin
4.web访问grafana并配置数据源
二:监控配置
2.1 监控Linux 主机
1.下载node_exporter
从https://github.com/prometheus/node_exporter/releases/tag/v1.8.0下载对应版本node_exporter
prometheus使用node_exporter插件监控机器硬件资源,prometheus主动从安装了node_exporter服务的网络互通的机器上抓取所需的数据
2.安装node_exporter
下载node_exporter-1.8.0.linux-amd64.tar.gz包并上传到客户机/usr/local 目录下,解压安装包并改名
[root@rancher local]# tar xvf node_exporter-1.8.0.linux-amd64.tar.gz
[root@rancher local]# mv node_exporter-1.8.0.linux-amd64 node_exporter
配置systemctl 启动并设置随机自启
[root@rancher node_exporter]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
Documentation=https://prometheus.io/
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
[root@rancher node_exporter]#systemctl enable node_exporter ###配置开机自启
[root@rancher node_exporter]#systemctl start node_exporter ###启动node_exporter服务
[root@rancher node_exporter]#systemctl status node_exporter ###查看node_exporter服务状态
3.修改prometheus.yml并重新加载prometheus.yaml 文件
在/data/prometheus/ 下创建conf 目录存放客户机配置
[root@rancher prometheus]# mkdir conf && cd conf [root@rancher conf]# pwd /data/prometheus/conf [root@rancher conf]# vim rancher.yml - targets: - "10.12.121.198:9100" [root@rancher prometheus]# vim prometheus.yml ##在prometheus.yml 最后一行增加job_name ##### ranhcer ###### - job_name: 'rancher' file_sd_configs: - refresh_interval: 1m files: - /data/prometheus/conf/rancher.yml relabel_configs: - source_labels: [__address__] regex: "([^:]+):\\d+" target_label: instance
[root@rancher prometheus]# systemctl reload prometheus.service ##重新加载配置文件
成功以后在prometheus 上可以看到Targets
4.引入grafana监控面板
看板展示效果
三:告警配置
3.1 安装告警软件alertmanager
在https://github.com/prometheus/alertmanager/releases/tag/v0.27.0 下载对应版本的alertmanager,并上传到服务器/data目录下
Prometheus通过组件alertmanager实现告警,Alertmanager接收prometheus发送的告警并对告警进行一系列的处理后发送给指定的用户。
prometheus--->触发阈值--->超出持续时间--->alertmanager--->分组|抑制|静默--->媒体类型--->邮件、钉钉、微信等。
[root@rancher data]# tar xvf alertmanager-0.27.0.linux-amd64.tar.gz ##解压alertmanager-0.27.0.linux-amd64.tar.gz [root@rancher data]# mv alertmanager-0.27.0.linux-amd64 alertmanager ##给alertmanager-0.27.0.linux-amd64目录改名alertmanager
[root@rancher data]# vim /usr/lib/systemd/system/alertmanager.service ##配置systemctl 启动并增加随机自启
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/data/alertmanager/alertmanager --config.file=/data/alertmanager/alertmanager.yml
[Install]
WantedBy=multi-user.target
[root@rancher data]# systemctl enable alertmanager ##增加自启
[root@rancher data]# systemctl start alertmanager ##启动alertmanager服务
[root@rancher data]# systemctl status alertmanager ##查看alertmanager服务状态
3.2 配置告警模版及告警规则
##alertmanager 配置邮件告警
[root@rancher alertmanager]#cd /data/alertmanager
[root@rancher alertmanager]#vim alert.tmp
{{ define "email.from" }}pengdadie1@163.com{{ end }}
{{ define "email.to" }}pengdadie1@163.com{{ end }}
{{ define "email.to.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
<h2>@告警恢复</h2>
告警程序: prometheus_alert <br>
故障主机: {{ .Labels.instance }}<br>
故障主题: {{ .Annotations.summary }}<br>
告警详情: {{ .Annotations.description }}<br>
告警时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
恢复时间: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
{{ end }}{{ end -}}
{{- end }}
[root@rancher alertmanager]#vim alertmanager.yml
# global:全局配置,主要配置告警方式,如邮件、webhook等。 global: resolve_timeout: 5m # 超时,默认5min smtp_smarthost: 'smtp.163.com:465' # 这里为 QQ 邮箱 SMTP 服务地址,官方地址为 smtp.qq.com 端口为 465 或 587,同时要设置开启 POP3/SMTP 服务。 smtp_from: 'pengdadi@163.com' smtp_auth_username: 'pengdadi@163.com' smtp_auth_password: 'VCBJAACBYEZ' # 这里为第三方登录 QQ 邮箱的授权码,非 QQ 账户登录密码,否则会报错,获取方式在 QQ 邮箱服务端设置开启 POP3/SMTP 服务时会提示。 smtp_require_tls: false # 是否使用 tls,根据环境不同,来选择开启和关闭。如果提示报错 email.loginAuth failed: 530 Must issue a STARTTLS command first,那么就需要设置为 true。着重说明一下,如果开启了 tls,提示报错 starttls failed: x509: certificate signed by unknown authority,需要在 email_configs 下配置 insecure_skip_verify: true 来跳过 tls 验证。 templates: # # 模板 - '/data/alertmanager/alert.tmp' # route:用来设置报警的分发策略。Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路由不能包含任何匹配项,因为根路由是所有告警的入口点。 # 另外,根路由需要配置一个接收器(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根路由发送告警),即缺省 # 接收器。告警进入到根route后开始遍历子route节点,如果匹配到,则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中 # continue默认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配不到任何的子route,则该告警将从其上一级( # 匹配)route或者根route发出(按最后匹配到的规则发出邮件)。查看你的告警路由树,https://www.prometheus.io/webtools/alerting/routing-tree-editor/, # 将alertmanager.yml配置文件复制到对话框,然后点击"Draw Routing Tree" route: group_by: ['alertname'] # 用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,可以设置为group_by: [...] group_wait: 30s # 当一个新的告警组被创建时,需要等待'group_wait'后才发送初始通知。这样可以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。 group_interval: 2m # 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,则需等待'group_interval'时间后,开始发送为该组触发的新告警,可以简单理解为,group就相当于一个通道(channel)。 repeat_interval: 10m # 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。 receiver: 'email' # 配置告警消息接收者,与下面配置的对应。例如常用的 email、wechat、slack、webhook 等消息通知方式。 receivers: # 配置报警信息接收者信息。 - name: 'email' # 警报接收者名称 email_configs: - to: '{{ template "email.to"}}' # 接收警报的email(这里是引用模板文件中定义的变量) html: '{{ template "email.to.html" .}}' # 发送邮件的内容(调用模板文件中的) # headers: { Subject: " {{ .CommonLabels.instance }} {{ .CommonAnnotations.summary }}" } # 邮件标题,不设定使用默认的即可 send_resolved: true # 故障恢复后通知
##prometheus 配置
[root@rancher alertmanager]# cd /data/prometheus/
[root@rancher prometheus]#mkdir rules && cd rules
[root@rancher rules]# vim node_rules.yml ###配置告警规则
groups: - name: 服务器实例存活告警规则 rules: - alert: 实例存活告警 # 告警规则的名称(alertname) expr: up == 0 # expr 是计算公式,up指标可以获取到当前所有运行的Exporter实例以及其状态,即告警阈值为up==0 for: 30s # for语句会使 Prometheus 服务等待指定的时间, 然后执行查询表达式。(for 表示告警持续的时长,若持续时长小于该时间就不发给alertmanager了,大于该时间再发。for的值不要小于prometheus中的scrape_interval,例如scrape_interval为30s,for为15s,如果触发告警规则,则再经过for时长后也一定会告警,这是因为最新的度量指标还没有拉取,在15s时仍会用原来值进行计算。另外,要注意的是只有在第一次触发告警时才会等待(for)时长。) labels: # labels语句允许指定额外的标签列表,把它们附加在告警上。 severity: Disaster annotations: # annotations语句指定了另一组标签,它们不被当做告警实例的身份标识,它们经常用于存储一些额外的信息,用于报警信息的展示之类的。 summary: "节点失联" description: "服务器实例节点断联已超过1分钟!" - name: 服务器实例内存告警规则 rules: - alert: "内存使用率告警" expr: (node_memory_MemTotal_bytes - (node_memory_MemFree_bytes+node_memory_Buffers_bytes+node_memory_Cached_bytes )) / node_memory_MemTotal_bytes * 100 > 99 # 告警阈值为当内存使用率大于75% for: 30s labels: severity: warning annotations: summary: "服务器内存报警" description: "服务器实例内存资源利用率大于75%!(当前值: {{ $value }}%)" - name: 服务器实例磁盘报警规则 rules: - alert: 磁盘使用率告警 expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 80 # 告警阈值为某个挂载点使用大于80% for: 1m labels: severity: warning annotations: summary: "服务器 磁盘报警" description: "服务器实例磁盘设备使用超过80%!(挂载点: {{ $labels.mountpoint }} 当前值: {{ $value }}%)" - name: 服务器实例CPU报警规则 rules: - alert: CPU使用率告警 expr: ( 100 - (avg by (instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)) > 70 # 告警阈值为CPU使用大于80% for: 1m labels: severity: warning annotations: summary: "服务器 CPU报警" description: "服务器实例CPU使用超过80%!当前值: {{ $value }}%" - name: 服务器实例磁盘I/O读报警规则 rules: - alert: 磁盘读 I/O 超过 30MB/s expr: irate(node_disk_read_bytes_total{device="sda"}[1m]) > 30000000 for: 30s labels: severity: warning annotations: summary: "磁盘读I/O 读负载 告警通知" description: "服务器实例I/O 每分钟读已超过 30MB/s,当前值: {{ $value }}" - name: 服务器实例磁盘I/O写报警规则 rules: - alert: 磁盘写 I/O 超过 30MB/s expr: irate(node_disk_written_bytes_total{device="sda"}[1m]) > 30000000 for: 30s labels: severity: warning annotations: summary: "磁盘写I/O 写负载 告警通知" description: "服务器实例I/O 每分钟写已超过 30MB/s,当前值: {{ $value }}" - name: 服务器实例网卡流出速率报警规则 rules: - alert: "网卡流出速率大于 10MB/s" expr: (irate(node_network_transmit_bytes_total{device!~"lo"}[1m]) / 1000) > 10000000 for: 30s labels: severity: warning annotations: summary: "服务器实例 网卡流量负载 告警通知" description: "网卡流量已经超过 10MB/s, 当前值: {{ $value }}" - name: 服务器实例负载报警规则 rules: - alert: "服务器负载大于4" expr: node_load5 > 4 for: 30s labels: severity: warning annotations: summary: "服务器实例 负载 告警通知" description: "服务器实例负载已大于4, 当前值: {{ $value }}"
[root@rancher prometheus]# vim /data/prometheus/prometheus.yml ### 配置prometheus.yml 文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | # my global config global: scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute. evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute. # scrape_timeout is set to the global default (10s). # Alertmanager configuration alerting: alertmanagers: - static_configs: - targets: - 10.12.121.198:9093 ##配置告警服务 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'. rule_files: - "/data/prometheus/rules/*.yml" ##配置告警规则 # - "first_rules.yml" # - "second_rules.yml" # A scrape configuration containing exactly one endpoint to scrape: # Here it's Prometheus itself. scrape_configs: # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config. - job_name: "prometheus" # metrics_path defaults to '/metrics' # scheme defaults to 'http'. static_configs: - targets: [ "localhost:9090" ] ####rancher - job_name: 'rancher' file_sd_configs: - refresh_interval: 1m files: - /data/prometheus/conf/rancher .yml relabel_configs: - source_labels: [__address__] regex: "([^:]+):\\d+" target_label: instance |
##重启alertmanager,prometheus 服务加载配置
[root@rancher rules]# systemctl restart alertmanager.service
[root@rancher rules]# systemctl restart prometheus.service
正常收到告警
3.3 配置企业微信群通知告警
企微群通知是通过webhook-adapter插件实现的
通过https://github.com/guyongquan/webhook-adapter 下载webhook-adapter-master.zip 包
首先在企微建一个企微群,创建接收机器人,获取webhook地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | ####将webhook-adapter-master.zip 包上传到服务器/usr/local 目录下[root@rancher local]# unzip webhook-adapter-master.zip ##解压[root@rancher local]# mv webhook-adapter-master webhook-adapter ## 改名[root@rancher local]# vim /usr/lib/systemd/system/webhook-adapter.service ##webhook-adapter 服务做成systemctl启动[Unit] Description=https: //prometheus .io [Service] Restart=on-failure ExecStart= /opt/alertmanager-0 .21.0 /alertmanager --config. file = /opt/alertmanager-0 .21.0 /alertmanager .yml [Unit] Description=prometheus-webhook-dingtalk After=network-online.target [Service] Restart=on-failure ExecStart= /usr/local/node-v18 .12.0 /bin/node /usr/local/webhook-adapter/index .js --port=8070 --adapter= /usr/local/webhook-adapter/prometheusalert/wx .js= /wx =https: //qyapi .weixin.qq.com /cgi-bin/webhook/send ?key=405d4e4c-81bc-4e2a38942c9 [Install] WantedBy=multi-user.target |
[root@rancher webhook-adapter]# systemctl restart webhook-adapter.service ###启动webhook-adapter 服务
[root@rancher webhook-adapter]#systemctl enable webhook-adapter.service ##配置开机自启
或者使用docker 直接安装webhook-adapter
docker run --name webhook-adapter -p 8070:80 -d guyongquan/webhook-adapter --adapter=/app/prometheusalert/wx.js=/wx=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=405d4e4c-81bc-4e38648c9
###!!!!此配置仅使用微信群告警
[root@rancher alertmanager]# vim alertmanager.yml global: resolve_timeout: 5m templates: - '/data/alertmanager/email.tmpl' route: group_by: ['alertname'] group_wait: 10s group_interval: 10s repeat_interval: 1h receiver: 'web.hook' receivers: - name: 'web.hook' webhook_configs: - url: 'http://10.12.121.198:8070/adapter/wx' #默认端口 send_resolved: true inhibit_rules: - source_match: severity: 'critical' target_match: severity: 'warning' equal: ['alertname', 'dev', 'instance'
[root@rancher alertmanager]# systemctl restart alertmanager.service ##重启加载配置
告警成功如图
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?