- Prometheus 安装/监控/告警/图表
- Promethues 监控服务安装
- Promethues 自动化监控
- Alertmanager 告警
- Grafana 仪表盘
1.0 各监控服务的安装
- 基于Linux 的 Promethues 各类服务安装搭建
| IP | OS | HostName | 备注 |
|---|---|---|---|
| 192.168.10.118 | Centos7.9 | ops-monitor | Prometheus相关服务 |
| 192.168.10.131 | Centos7.9 | ops-master01 | 绑定域名k8s-vip.ink8s.com |
| 192.168.10.132 | Centos7.9 | ops-node01 | - |
| 192.168.10.133 | Centos7.9 | ops-node02 | - |
| 192.168.10.134 | Centos7.9 | ops-node03 | - |
1.1 Prometheus Server 安装
- Prometheus Server 二进制下载和安装
- 启动项配置
1 | # wget https://github.com/prometheus/prometheus/releases/download/v3.5.4/prometheus-3.5.4.linux-amd64.tar.gz |
1 | # cat /usr/lib/systemd/system/prometheus.service |
1.2 Alertermanager 安装
- Alertermanager 二进制下载和安装
- 启动项配置
1 | wget https://github.com/prometheus/alertmanager/releases/download/v0.33.0/alertmanager-0.33.0.linux-amd64.tar.gz |
1 | # cat /usr/lib/systemd/system/alertermanager.service |
1.3 Exporter 安装
1.3.1 Node_exporter 安装
1 | # wget https://github.com/prometheus/node_exporter/releases/download/v1.11.1/node_exporter-1.11.1.linux-amd64.tar.gz |
1 | # cat /usr/lib/systemd/system/node_exporter.service |
1.4 Granfana 安装
- Granfana 二进制下载和安装
- 启动项配置
1 | # wget https://dl.grafana.com/grafana/release/13.1.0/grafana_13.1.0_28013217238_linux_amd64.tar.gz |
1 | # cat /usr/lib/systemd/system/grafana.service |
2.0 Promethues 自动化监控
- Prometheus 支持两种被监控方式:
- 静态配置: 手动配置
- 服务发现: 动态发现需要监控的 target 实例
- file_sd_configs
- consul_sd_configs
- kubernetes_sd_configs
2.1 基于文件服务发现
- file_sd_configs(基于文件服务发现)
1 | # cat /data/apps/monitor/prometheus/prometheus.yml |

2.2 基于 consul 服务发现
- consul_sd_configs(基于 consul 服务发现)

2.2.1 快速部署 consul
1 | # docker run --restart=always --name consul -d -p 8500:8500 harbor.ink8s.com/ops_monitor/consul:1.15.4 |
2.2.2 consul 服务应用
- 通过在 consul 注册服务或注销服务(监控 targets)
- Prometheus 一直监视(watch)consul 服务,当发现 consul 中符合要求的服务有新变化是更新 Prometheus 监控对象
1 | // 使用 API 把这里的启动的 node_exporter 服务注册到 consul |

2.2.3 主配置文件修改
1 | # cat /data/apps/monitor/prometheus/prometheus.yml |

2.3 监控 kubernetes 集群
- kubernetes_sd_configs (监控 kubernetes): 集群外 Prometheus + 全部指标经 API Server 代理抓取
| 监控指标 | 具体实现 | 举例 |
|---|---|---|
| node 资源利用率 | node-exporter | 节点CPU,内存利用率 |
| pod 资源利用率 | cAdvisor | 容器CPU,内存利用率 |
| k8s 资源对象状态 | kube-state-metrics | pod/deploy/svc |

| 服务发现类型 | 描述 |
|---|---|
| service | 发现集群中的节点,默认地址为kubelet的HTTP端口 |
| pod | 容器CPU,内存利用率 |
| endpoints | 从service列表中的endpoint发现pod为目标 |
| ingress | 发现ingress路径为目标 |
2.3.1 RBAC 授权
1 | // kubectl api-resources # 版本号确认 |
2.3.2 准备ca与token
1 | // 在 Prometheus 监控主机上操作 |
2.3.3 监控k8s资源对象
- 部署 kube-state-metrics
1 | # cat kube-state-metrics-deploy.yaml |
1 | // prometheus 和 k8s 的集群 Pod 不是同一网段,则需要在 promethues 监控主机上添加路由 |
2.3.4 主配置文件配置
1 | # cat /data/apps/monitor/prometheus/prometheus.yml |

3.0 Alertmanager 告警
告警触发:
- severity=critical -> 邮件+企微+钉钉
- severity=warning -> 企微+钉钉
- 告警恢复 -> 三通道全发恢复通知
告警抑制规则:
- 同节点critical触发 -> 抑制该节点warning
- 节点Down -> 抑制该节点 CPU/内存/磁盘/负载告警
- API Server Down -> 抑制 K8S 集群所有告警
3.1 告警规则
3.1.1 主机告警
- 主机告警:(node-alerts.yml,K8S 节点专用,8条)
- 筛选 job=”kubernetes-node-exporter”,定位标签为 node + instance
| 告警名 | 级别 | 触发条件 | 持续时间 |
|---|---|---|---|
| NodeCPUHighUsage | warning | CPU > 85% | 5m |
| NodeCPUCritical | critical | CPU > 95% | 2m |
| NodeMemoryHighUsage | warning | 内存 > 85% | 5m |
| NodeMemoryCritical | critical | 内存 > 95% | 2m |
| NodeDiskHighUsage | warning | 根分区 > 80% | 5m |
| NodeDiskCritical | critical | 根分区 > 90% | 2m |
| NodeDiskWillFull | warning | 预测 4h 内写满 | 15m |
| NodeDown | critical | node-exporter 不可达 | 1m |
3.1.2 独立节点告警
- 独立节点告警:(consul-node-alerts.yml,Consul 发现,10条)
- 筛选 job=”host_monitor”,定位标签为 instance(IP:Port)
- 进程服务存活告警
| 告警名 | 级别 | 触发条件 | 持续时间 |
|---|---|---|---|
| ConsulNodeCPUHighUsage | warning | CPU > 85% | 5m |
| ConsulNodeCPUCritical | critical | CPU > 95% | 2m |
| ConsulNodeMemoryHighUsage | warning | 内存 > 85% | 5m |
| ConsulNodeMemoryCritical | critical | 内存 > 95% | 2m |
| ConsulNodeDiskHighUsage | warning | 根分区 > 80% | 5m |
| ConsulNodeDiskCritical | critical | 根分区 > 90% | 2m |
| ConsulNodeDiskWillFull | warning | 预测 4h 内写满 | 15m |
| ConsulNodeDown | critical | node-exporter 不可达 | 1m |
| ConsulNodeLoadHigh | warning | Load1 > CPU核数×2 | 1m |
| JenkinsProcessDown | critical | jenkins.service 未 active | 1m |
3.1.3 K8S 集群告警
- K8S 集群告警(k8s-alerts.yml,共 15 条)
| 告警名 | 级别 | 触发条件 | 持续时间 |
|---|---|---|---|
| PodCrashLooping | warning | 5分钟内重启 > 3次 | 立即 |
| PodNotReady | warning | Pod 未就绪 | 3m |
| PodOOMKilled | warning | 容器被 OOM 杀死 | 立即 |
| PodPending | warning | Pod 卡在 Pending | 10m |
| PodFailed | critical | Pod Failed 状态 | 立即 |
| ContainerCPUHighUsage | warning | 容器 CPU > Limit 90% | 5m |
| ContainerMemoryHighUsage | warning | 容器内存 > Limit 90% | 5m |
| DeploymentReplicasMismatch | warning | 副本数不匹配 | 5m |
| DeploymentUnavailable | critical | 无可用副本 | 1m |
| K8sNodeMemoryPressure | critical | 节点内存压力 | 2m |
| K8sNodeDiskPressure | critical | 节点磁盘压力 | 2m |
| APIServerDown | critical | API Server 不可达 | 1m |
| APIServerHighErrorRate | critical | 节点 NotReady | 2m |
| K8sNodeNotReady | warning | 5xx 错误率 > 5% | 5m |
| APIServerHighLatency | warning | P99 延迟 > 2s | 5m |
3.2 配置文件
1 | # mkdir -p /data/apps/monitor/alertmanager/{data,templates} |
3.2.1 Alertmanager 主配置
1 | # cat /data/apps/monitor/alertmanager/alertmanager.yml |
3.2.2 邮件模板
1 | # cat /data/apps/monitor/alertmanager/templates/email.tmpl |
3.2.3 主机告警配置
1 | # cat /data/apps/monitor/prometheus/rules/node-alerts.yml |
3.2.4 K8S 集群告警配置
1 | # cat /data/apps/monitor/prometheus/rules/k8s-alerts.yml |
3.2.5 独立节点告警配置
1 | # cat /data/apps/monitor/prometheus/rules/consul-node-alerts.yml |
3.2.6 钉钉配置
1 | # wget https://github.com/timonwong/prometheus-webhook-dingtalk/releases/download/v2.1.0/prometheus-webhook-dingtalk-2.1.0.linux-amd64.tar.gz |
3.2.7 钉钉模板
1 | # cat /data/apps/monitor/dingtalk/templates/dingtalk.tmpl |
1 | # cat /usr/lib/systemd/system/dingtalk-webhook.service |
3.2.8 中转脚本
- Python 中转服务,把 Alertmanager 格式转成企微机器人格式
1 | # yum install -y python3 |
3.2.9 prometheus 主配置
1 | # cat /data/apps/monitor/prometheus/prometheus.yml |
1 | // 重启服务 |
3.3 告警测试
- 邮件、企微、钉钉三通道告警测试
1 | /data/apps/monitor/alertmanager/amtool alert add \ |
3.4 告警过滤
- 如报警过于频繁,或者已经在处理问题了,但是还在发送告警通知,这时可以对报警信息进行静默设置
3.4.1 静默通知
- 在 Alertmanager 的后台页面中提供了静默操作的入口


3.4.2 抑制
- 抑制是指当某次告警发出后,可以停止重复发送由此告警引发的其他告警的机制,比如现在有一台服务器宕机了,上面跑了很多服务都设置了告警,那么肯定会收到大量无用的告警信息,这个时候抑制就非常有用了,可以有效的防止告警风暴
1 | inhibit_rules: |
4.0 Grafana 仪表盘
4.1 Grafana 基础配置
4.1.1 数据源配置
- 连接 –> 数据源 –> Connection: (http://192.168.10.118:9090)

4.1.2 导入仪表板
- 左侧点击”仪表板” –> 右上角”新建” –> 选择”Import dashbaord”

4.1.3 仪表板ID清单
| 监控对象 | 仪表盘名称 | Grafana_ID | 说明 |
|---|---|---|---|
| node-exporter | Node Exporter Full | 1860 | 最全面的主机监控,CPU/内存/磁盘/网络 |
| cAdvisor | Kubernetes Pods Monitoring | 14282 | 容器/Pod 资源监控 |
| cAdvisor | Kubernetes Cluster Monitoring (cAdvisor) | 3119 | 集群级容器监控 |
| kube-state-metrics | Kubernetes Cluster (Prometheus) | 15757 | 资源对象状态,Deployment/Pod/Node 等 |
| kube-state-metrics | Kubernetes Stateful Metrics | 13105 | 另一个 kube-state-metrics 视图 |
| API Server | Kubernetes API Server | 17688 | API Server 性能指标 |
| K8S 总览 | Kubernetes All-in-One | 15661 | 综合视图,包含多个组件 |
4.2 图形面板
- Grafana 中所有的面板均以插件形式使用,Grafana 提供了各种可视化来支持不同的用例:
- Time series(时间序列) 默认的也是主要的图形可视化面板
- State timeline(状态时间表) 状态随时间变化
- Status history(状态历史记录)
- Bar chart(条形图)
- Histogram(直方图)
- Heatmap(热力图)
- Pie chart (饼状图)
- Stat(统计数据)
- Gauge、Bar gauge、Table(表格)
- Logs(日志)
- Node Graph(节点图)
- Dashboard list(仪表板列表)
- Alert list(报警列表)
- Text panel(文本面板、支持markdown和html)
- News Panel(新闻面板,可以显示RSS摘要)
- 其它面板信息获取
4.2.1 Time series 时间序列
- Time series(时间序列) 默认的也是主要的图形可视化面板
4.2.1.1 CPU使用率公式
- 准备好一个CPU使用率公式,用于下面创建时间序列图时使用
1 | // CPU 使用率 |
4.2.1.2 创建时间序列自定义图
- 点击左侧”仪表板” –> 点击右上角”新建” –> 选择”新建仪表板” –> 点击”+” –> 选择”配置可视化” –> 点击右侧”所有可视化” –> 单击”Time series”: 如图配置最后保存

4.2.1.3 配置自定义图设置
- 可针对这个自定义的仪表盘进行配置: 单击右侧齿轮”数据面板选项” –> 单击 “View all settings”
- 可以配置名称、标签、变量等


4.2.1.4 过滤节点IP地址




4.2.1.5 标签替换
- 针对单个图表将 “语句中的标签进行变量替换”,修改完成后保存
1 | // CPU使用率 添加 instance=~"$HOST_IP" 变量 |

- 本文作者: [email protected]
- 本文链接: https://www.ink8s.com/2026/06/24/prometheus-监控/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!