ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

K8s集群监控实战:Prometheus全家桶部署与告警配置指南

K8s集群监控实战:Prometheus全家桶部署与告警配置指南 1. 别让K8s集群裸奔部署Prometheus监控前先想清楚这三件事我见过太多团队把K8s集群搭起来了节点一台台加进去Pod一打打跑起来然后…就没有然后了。直到某天线上服务突然卡死翻了一圈日志才发现某个节点磁盘早就满了或者某个Pod反复重启了大半天。这种裸奔状态在K8s环境里特别危险——因为容器化架构的故障往往是跨节点、跨服务的靠人肉盯控制台根本盯不过来。所以Prometheus在这个背景下几乎是K8s监控的事实标准。它最厉害的地方不是能采集多少指标而是它的拉取模型和服务发现机制与K8s天然契合。K8s里的Pod是动态创建销毁的IP地址一直在变传统那种写死监控列表的工具比如Zabbix手动加主机根本跟不上节奏。Prometheus通过K8s API自动发现Service、Pod、Node的变化新服务一上线只要暴露了/metrics接口监控端就能自动抓到这个能力是它能在云原生环境里胜出的核心原因。但在动手部署之前我建议你先想清楚三件事否则后面大概率要返工第一你要监控什么K8s监控至少要覆盖三个层面节点层CPU、内存、磁盘、网络、应用层Pod的存活状态、资源使用率、业务自定义指标、组件层API Server、etcd、kubelet等核心组件的健康状况。这三层对应的采集工具完全不一样不是一个Prometheus就能通吃所有数据的需要搭配专门的exporter。第二数据要存多久Prometheus默认只保留15天数据TSDB落盘但如果你要做周级别的容量趋势分析这个时间就太短了。存储方案用本地volume还是外置存储直接影响你后面做长期查询的体验。这一步不提前规划好等数据量上来再迁移会痛不欲生。第三告警要不要做如果只做可视化展示、不做告警推送监控的价值就少了一大半。Prometheus本身只负责发现异常真正把告警消息推送到钉钉、邮件、企业微信的是配套的Alertmanager组件。要不要在第一批部署就把它一起带上直接决定了你后续告警体系的复杂程度。把这些事情理清楚之后我们再来看技术选型和部署方案你会发现后面的每一步都走得很有底气。这也是我踩过不少坑之后总结出来的经验监控系统是给未来出问题时用的设计时必须往前多想一步。2. 组件拆解与选型对比这一套全家桶每个角色都不可少先明确一个概念我们说的部署Prometheus监控实际上部署的是一整套监控生态Prometheus Server只是其中最核心的存储和计算引擎。在K8s环境里一套能正常工作的监控全家桶至少包含以下角色。2.1 核心组件一览组件作用是否必须说明Prometheus Server指标采集、存储、查询、告警评估必须整个监控系统的核心node-exporter采集节点级指标CPU/内存/磁盘/网络必须以DaemonSet部署每个节点一个kube-state-metrics采集K8s对象状态Pod/Deployment/Node等必须将K8s API对象转成metricsGrafana可视化展示面板强烈建议没有它Prometheus的UI只能凑合用Alertmanager告警路由、分组、去重、通知建议首批部署后面单独加也可以但迟早要装kubelet/cAdvisor指标容器运行数据CPU/内存等自动发现Prometheus通过ServiceMonitor自动抓取可选exporter如mysql-exporter、redis-exporter按需业务组件多了再逐个加这里最容易误解的是kube-state-metrics和cAdvisor的区别。我当初就搞混过cAdvisor是内嵌在kubelet里的负责采集单个节点上所有容器的运行时资源消耗而kube-state-metric是通过监听K8s API把你集群里的Pod数量、Deployment期望副本数、Node状态这类对象元数据转换成指标。简单说一个回答的是这个容器吃了多少资源另一个回答的是这个Deployment现在有几个副本、期望是几个。两者配合起来你才能既看资源又看状态。2.2 部署方式对比Helm、手工YAML、Operator在K8s上部署Prometheus有几种主流路径我在不同项目里都试过说说取舍手工YAML逐一部署把所有Deployment、Service、ConfigMap全部手写。优点是对权限控制最细缺点是工作量大、升级麻烦。适合只需要Prometheus Server单个组件的小环境。Helm部署用官方或多个社区维护的chart一次性拉起整套组件。优点是几行命令搞定绝大多数组件参数可配置性高是目前中小团队的主流方案缺点是chart封装层级深出了问题不好排查是哪个layer导致的。Prometheus Operator引入自定义资源ServiceMonitor、AlertmanagerConfig等声明式管理采集和告警。优点是配置改动直接apply即可自动化程度最高缺点是引入了一个额外的Controller层学习和排障成本更高。我个人的建议是不管未来要不要上Operator第一套环境先用Helm把全家桶跑起来。原因很实际先用最快的方式拿到一套能用的监控系统建立起对指标、面板、告警的体感然后再逐步去理解底层原理。一上来就搞Operator很容易被各种CRD概念绕晕结果连一个指标都没看到就先折腾了半天安装。提示如果你已经有了Helm 3部署这套全家桶很简单。如果Helm都还没装先去装个Helm。网上教程很多这里不赘述。2.3 版本选择策略Prometheus和K8s的版本兼容问题值得留意。K8s的接口版本更新较快特别是API的废弃和迁移比如extensions/v1beta1的Ingress早就废弃了如果Prometheus所在chart里的ServiceMonitor CRD版本和你的集群对不上就会在看板上有指标、但抓不到新服务的问题。关于版本我给一个相对保守的组合参考截至写作时的稳定路径K8s 1.26 ~ 1.29 配 Prometheus 2.47Grafana 10.xkube-state-metrics 2.10。不用追新稳定为主。3. 实战部署用Helm在K8s上拉起Prometheus全家桶这套部署流程我已经在多个环境本地K3s、云厂商托管K8s、裸机自建集群验证过步骤基本一致。下面以Helm 3 K8s 1.28为例给出完整操作过程和每个命令的用途解释。3.1 环境准备确保你的kubectl能连上集群并且有足够的资源。Prometheus全家桶如果全量开默认配置大概要吃 2核CPU 4GB内存至少准备这些余量再动手否则集群直接被打挂就尬了。我是这样确认环境的kubectl get nodes kubectl version --short helm version为什么一定要先确认这些因为Prometheus的某些chart会根据K8s版本自动调整API调用方式如果你的K8s版本过老或过新chart渲染出的YAML在apply时就可能报错。提前确认能在安装失败但不知道错哪之前筛掉最明显的问题。注意如果你是用的云厂商托管K8s还要确认集群里有足够的存储类StorageClass因为后面要开持久化存储的PVC。3.2 添加Helm仓库Prometheus社区官方的chart仓库地址是https://prometheus-community.github.io/helm-chartskube-state-metrics、node-exporter、alertmanager都可以从这个仓库装。helm repo add prometheus-community https://prometheus-community.github.io/helm-charts helm repo update这个仓库里的kube-prometheus-stackchart值得重点说。它把Prometheus、Grafana、Alertmanager、node-exporter、kube-state-metrics全部打包在一个chart里一次安装就能拿到一套完整全家桶是目前最省事的路径。网上很多教程提到的prometheus-operator已经被整合到kube-prometheus-stack里了新项目直接用后者别再用老的。3.3 安装kube-prometheus-stack安装前先建一个专属命名空间保持环境整洁kubectl create namespace monitoring然后执行安装helm install prometheus prometheus-community/kube-prometheus-stack \ --namespace monitoring \ --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.accessModes[0]ReadWriteOnce \ --set prometheus.prometheusSpec.storageSpec.volumeClaimTemplate.spec.resources.requests.storage50Gi \ --set grafana.persistence.enabledtrue \ --set grafana.persistence.size10Gi这几个参数的意思分别是给Prometheus Server开50Gi的持久化存储、给Grafana开10Gi的存储。别嫌这一步麻烦如果直接裸机不带存储安装Pod一重启你前面拉的所有历史指标和配置好的Dashboard全部归零那才是真的欲哭无泪。安装过程大约等1-3分钟期间可以另开一个终端查看Pod状态kubectl get pods -n monitoring正常情况下你会看到alertmanager-*、prometheus-operator-*、prometheus-kube-prometheus-*、grafana-*、kube-state-metrics-*、node-exporter-*全部变成Running。3.4 验证服务是否正常Pod就绪后看一下Service列表kubectl get svc -n monitoring默认会有prometheus-operated、grafana、alertmanager-operated等服务。验证方式很简单做一次端口转发浏览器打开看效果kubectl port-forward -n monitoring svc/prometheus-operated 9090:9090浏览器访问http://localhost:9090如果能打开Prometheus自带的UI并且在Status - Targets页面看到一堆绿色的UP状态说明采集链路已经通了。到这里你的K8s集群已经接入了第一套完整的监控系统。但注意这只是通了离能用还有距离——默认的抓取配置覆盖了集群核心组件但如果你的应用上有自定义指标要接进来还需要理解第4节的配置逻辑。4. 关键配置逐行解读抓取目标、采集间隔、告警规则的落地写法很多人在这一步卡住Prometheus起来了页面也能打开但就是看不到自己想看的指标。问题多半出在抓取配置上。这里我把从prometheus.yml到ServiceMonitor的配置链路完整拆开讲。4.1 抓取配置的演进从静态配置到CRD在老一代的部署方式里抓取配置是写在prometheus.yml里的scrape_configs字段中每次改配置都要重启Prometheus。在Kubernetes环境下更推荐的写法是通过ServiceMonitor配置声明式地管理抓取目标。ServiceMonitor是Prometheus Operator提供的一种自定义资源它定义的是我要监控哪些Service从哪个端口抓多长间隔抓一次。举个例子如果你有个应用暴露了/metrics接口服务名叫myapp命名空间是default想让它被Prometheus自动采集你只需要定义如下ServiceMonitorapiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: myapp-monitor namespace: default spec: selector: matchLabels: app: myapp # 匹配你要监控的Service的label endpoints: - port: web # 对应Service里定义的端口名 interval: 30s path: /metrics # 如果不在/metrics路径改这里然后kubectl apply -f myapp-monitor.yamlPrometheus Operator检测到这个新ServiceMonitor后会自动把对应的抓取配置动态加载进去完全不用重启Prometheus。你可以在Prometheus的UI - Status - Targets里看到新目标出现。这个机制就是K8s监控相对传统监控最大的体验提升新增监控对象从改文件重启服务变成了apply一个YAML更符合云原生的声明式习惯。4.2 采集间隔与超时设置别把参数设得太激进可能你会觉得采集间隔设得越短越好比如5秒甚至1秒。但实际上间隔过短会对Prometheus本身和被抓取的服务造成双重压力。尤其是抓取目标比较多的场景30秒是默认值如果某个服务内部计算量较大每次抓取都要跑一次聚合逻辑抓得太频繁容易拖垮业务应用。我一般按服务的重要程度来分配间隔核心基础组件node-exporter、kube-state-metrics15~30秒业务应用30~60秒低频指标比如每日统计类5分钟甚至更长如果你对某个服务设置了抓取超时记得超时时间必须小于采集间隔否则会出现上一次抓取还没结束、下一次抓取又开始的积压情况最终导致该target在UI上显示为context deadline exceeded。这是我线上环境踩过的真实坑参数就是写死的interval10s、scrape_timeout15s结果那台Prometheus的压力直线上升。4.3 告警规则的两种理解阈值告警和PromQL表达式告警告警规则是Prometheus监控系统里最考验功力的部分。它的核心思路是用PromQL写一个表达式当表达式返回的结果达到某种条件时触发一条告警。比如监控节点磁盘使用率超过85%groups: - name: node-disk.rules rules: - alert: NodeFilesystemUsageHigh expr: 100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes * 100) 85 for: 5m labels: severity: warning annotations: summary: 节点 {{ $labels.instance }} 磁盘使用率过高 description: 当前值为 {{ $value }}%超过85%阈值且已持续5分钟。上面这个规则里最容易被忽略的是for: 5m。for表示条件成立持续多久才触发告警这个字段极其关键如果没有它只要磁盘使用率瞬时波动到86%就立刻报警会引发大量瞬时报警的误扰。加上for之后Prometheus会持续观察5分钟如果5分钟内磁盘确实一直在高位才真正发出告警。这是区分能用和好用的分水岭。告警规则写好后通过ConfigMap挂载到Prometheus的rules目录或者如果你用kube-prometheus-stack推荐直接用PrometheusRule CRD。声明式管理告警规则的好处是所有规则都可以走GitOps流程改动可审计、可回滚。4.4 Alertmanager告警路由这是告警不轰炸的保命符Alertmanager的配置里有一个叫route的字段它定义了告警的路由规则。默认情况下所有告警都会发到同一个地方比如默认的webhook但实际场景中我们需要区分告警等级和归属团队这就需要route做分组和路由。一个基础的路由配置route: group_by: [alertname] group_wait: 30s group_interval: 5m repeat_interval: 4h receiver: default-webhook routes: - match: severity: critical receiver: critical-email这里的几个参数每一个都有实际含义group_by: 将哪些label相同的告警合并为一组。这里按告警名分组意味着同一个告警规则触发的多次告警会合并发出一条避免钉钉被同一个问题刷屏。group_wait: 分组后等待多久再发送首条通知。设30s是给同类告警一个缓冲时间让它们能合并到一批里。group_interval: 同一组告警状态变化后最少隔多久发一次新通知。repeat_interval: 如果一条告警一直没有恢复多久重复通知一次。设4h是合理的太短会疲劳轰炸太长又可能漏掉重要告警。说一个我自己的经验告警的质量远比数量重要。宁可少告警但每条告警都是真实问题且附带足够的上下文哪个节点、哪个Pod、当前值多少也不要设置一堆紧急阈值结果运维同事天天被无效告警淹没最后干脆把通知关掉——那整个监控系统就白做了。5. 踩坑实录从装不上到告警轰炸的完整排查链路这部分是我最想分享的。因为我是在多个环境的实战中踩过这些坑每个都花了不少时间排查把它们总结出来希望能帮你把这段弯路直接省掉。5.1 坑一Pod一直Pending磁盘调度的锅现象执行helm install后Prometheus、Grafana等Pod一直处于Pending状态查看事件kubectl describe pod -n monitoring prometheus-prometheus-... | tail -20排查过程看到事件里写着类似0/3 nodes are available: 3 Insufficient storage。我当时第一反应是集群磁盘不足但实际检查发现节点磁盘明明有几百GB空闲。仔细再想原因是云厂商的默认StorageClass创建的是云盘类型云盘通常不能跨可用区调度而集群节点分散在不同AZPVC的zone约束导致无法调度到合适的节点。解决给存储卷加上nodeAffinity或者直接用本地存储类如果只是单节点测试更通用的做法是改用支持多个AZ的分布式存储类如Ceph RBD或云厂商的区域型云盘。提示排查任何Pod调度问题时第一步永远是kubectl describe pod pod-name看Events字段。那里有最直白的失败原因。5.2 坑二镜像拉不下来卡在ImagePullBackOff现象kubectl get pods -n monitoring看到多个Pod处于ImagePullBackOff状态。排查过程查看Pod详情发现拉取的是quay.io/prometheus-operator/prometheus-operator等镜像而这些镜像源在国内网络环境下经常拉不动。如果是海外VPS环境可能没问题但在国内云环境或者本地办公网这几乎是绕不开的坎。解决由于这里不能展开说具体网络方案就说几个实操中常见的处理方式用配置了镜像加速器的运行时或更换为可访问的镜像仓库。最直接、最省事的方式用国内可访问的公有云镜像仓库做一次镜像搬运把quay.io上的镜像同步到自己有权限的仓库然后通过values.yaml覆盖镜像地址。如果只是偶尔拉不下来多试几次也可能成功但生产环境必须解决镜像源问题否则每次扩容都是隐患。注意这个问题在云环境特别常见优先确认你的集群节点能否稳定访问外部镜像仓库再开始部署否则装到一半才发现在拉镜像会非常难受。5.3 坑三告警轰炸凌晨三点被钉钉连环call现象监控系统搭好后第一个月凌晨经常会收到一堆告警内容大同小异某个Pod内存使用率短暂飙高、某个节点磁盘瞬时超过阈值。点开一看大部分告警在几分钟后就恢复了。排查过程我仔细梳理了告警规则发现两个问题一是所有告警都设置了很高的严重级别critical二是很多规则没有设置for持续时间导致瞬时抖动也会触发。再加上Alertmanager的分组策略是group_by: [alertname]一旦同一规则在一批节点上同时触发Alertmanager会立刻分批次推送直接轰炸。解决给所有告警规则补充合理的for持续时间建议至少2~5分钟把告警按严重级别分组critical级别才走即时通知warning级别走邮件或周报汇总在Alertmanager里加一条repeat_interval: 6h避免同一告警反复触发刷屏。改完之后告警噪音明显下降了团队里的同事也不再抱怨监控比故障还烦人。5.4 坑四服务自动发现的label串了告警发错人现象明明告警规则里写了instance~node.*但告警却发到了应用团队的webhook里。排查过程查看告警详情发现Prometheus在采集时自动附加了K8s的label如namespace、pod、service这些label在告警路由匹配时可能会与预期不符。我一开始写路由时只按severitycritical匹配结果没有考虑到namespace的干扰导致部分告警被错误路由。解决在告警规则或路由匹配中明确使用最具体的label组合不要只依赖一两个通用label。同时在Alertmanager的路由match里增加namespace等标签缩小匹配范围避免误投。这也是为什么在设计抓取配置时不要盲目启用honor_labels或随意添加自定义label——label越干净路由越容易管理。5.5 踩坑总结表现象根因排查命令解法Pod PendingPVC跨可用区调度失败kubectl describe pod换存储类/加节点亲和性ImagePullBackOff镜像源无法访问kubectl describe pod镜像搬运到可访问仓库告警轰炸无for条件、分组策略缺陷查看Alertmanager配置补for分组分级通知告警错误路由label干扰查看告警详情label细化匹配维度6. Grafana可视化与日常使用把指标变成决策依据Prometheus自带的UI更偏向于查询调试真正面向团队日常使用的可视化平台还是得靠Grafana。这里聊几个落地细节。6.1 首次登录与数据源配置kube-prometheus-stack安装时的Grafana默认账号密码通常是admin和prom-operator如果忘了可以这样重置kubectl get secret -n monitoring prometheus-grafana -o jsonpath{.data.admin-password} | base64 -d登录后第一件事是配置数据源。在kube-prometheus-stack里数据源通常已经自动配置好了指向prometheus-operated服务的9090端口。如果没有自动配置手动添加时URL填http://prometheus-operated.monitoring.svc:9090Access选Server让Grafana服务端去访问Prometheus而不是你的浏览器直连。6.2 导入现成Dashboard别什么都从零画Grafana的Dashboard市场https://grafana.com/dashboards有大量现成的模板特别是kube-prometheus-stack官方维护的几套Kubernetes集群总览Dashboard ID315、节点资源监控Dashboard ID1860、Pod详情Dashboard ID15717等。导入的时候记得选对数据源。我踩过的坑是导入Dashboard后数据全部是No Data排查了半天才发现数据源名称不一致。Grafana的Dashboard面板里每个Panel都绑定了数据源变量如果模板默认数据源叫Prometheus但你本地的数据源叫prometheus就必须在导入时手动对应一下。6.3 常用PromQL速查这部分是日常排障最常用的建议收藏需求PromQL表达式节点CPU使用率100 - (avg by (instance) (rate(node_cpu_seconds_total{modeidle}[5m])) * 100)节点内存使用率(1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100节点磁盘使用率100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes * 100)Pod内存使用量sum(container_memory_working_set_bytes{namespacedefault}) by (pod)Pod CPU使用率sum(rate(container_cpu_usage_seconds_total{namespacedefault}[5m])) by (pod)这里想专门说说rate()函数的含义它计算的是一段时间内的每秒平均变化率。监控CPU使用率时直接查CPU计数器的原始值没有任何意义——它是一个持续增长的累计值必须用rate转换成每秒消耗了多少CPU时间才能反映实时负载。[5m]代表取过去5分钟的数据窗口窗口越大曲线越平滑但实时性稍差窗口越小噪音越多但响应快。理解了这个你就能根据场景灵活调整窗口大小。6.4 告警通知的日常维护告警规则不是设置完就不用管的。我建议团队里设一个告警周会或每两周做一次告警review重点看三类问题有没有长期处于Firing状态的告警却一直没人处理这类告警要么是没人看到要么是已经变成背景噪音被忽略了需要针对性地调整阈值或处理机制。有没有频繁触发又频繁恢复的告警这类是典型的抖动型告警应该通过加for窗口、提高阈值或优化查询表达式来抑制。有没有重复内容或相似含义的告警比如节点磁盘使用率和文件系统使用率可能来自同一根因可以通过Alertmanager的group策略合并。告警review的意义在于你投入在监控系统上的维护精力应该持续转化为告警质量的提升——让每条告警都值得被看到。7. 一套可以长期使用的告警规则初始推荐最后分享一套我在多个环境中反复打磨过的告警规则初始模板。不能保证适合所有业务但作为起点能有效避免干瞪眼和乱报警两个极端。groups: - name: k8s-core.rules rules: - alert: NodeMemoryUsageHigh expr: (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes)) * 100 90 for: 10m labels: severity: warning annotations: summary: 节点内存使用率超过90%持续10分钟 - alert: NodeDiskUsageHigh expr: 100 - (node_filesystem_avail_bytes / node_filesystem_size_bytes * 100) 85 for: 10m labels: severity: warning annotations: summary: 节点磁盘使用率超过85%持续10分钟 - alert: PodRestarting expr: increase(kube_pod_container_status_restarts_total[1h]) 5 for: 5m labels: severity: warning annotations: summary: Pod {{ $labels.pod }} 在1小时内重启超过5次 - alert: DeploymentReplicasMismatch expr: kube_deployment_status_replicas_available ! kube_deployment_spec_replicas for: 10m labels: severity: critical annotations: summary: Deployment {{ $labels.name }} 副本数不匹配 - alert: KubeCPUThrottlingHigh expr: sum by (namespace, pod, container) (rate(container_cpu_cfs_throttled_periods_total[5m])) / sum by (namespace, pod, container) (rate(container_cpu_cfs_periods_total[5m])) 0.25 for: 15m labels: severity: warning annotations: summary: 容器CPU被限流这套规则的几个设计思路阈值设得不算低for时间也偏长目的是优先保证准确率、降低误报率。等告警质量稳定了再根据实际需要逐步缩小阈值或缩短等待时间。PodRestarting用的是increase(..., [1h]) 5意思是1小时内重启次数增量超过5次。相比直接监测restarts总次数这种写法能过滤掉那些历史就重启过很多次但最近稳定的Pod只关注最近1小时确实在频繁重启的。DeploymentReplicasMismatch直接对比期望副本数和可用副本数是K8s里最需要关注的状态类告警——一旦Deployment滚动更新卡住或副本调度失败这个告警会第一时间提醒。实际使用这套规则时你需要根据集群规模调整两个地方一是for时长节点多的集群建议加长减少瞬时报警二是告警的severity如果团队对节点内存90%的感受不敏感你可以把warning对应的通知渠道设置为只在工作时间推送critical才24小时即时推送。8. 部署完成后我建议你立刻做的三件事到这里Prometheus监控体系已经完整跑起来了但别急着收工。根据我这么多次部署的经验装完之后先做这三件事可以让整个系统更稳。第一件事验证一次告警闭环。找一个测试节点临时创建一个让CPU跑满的Pod比如stress-ng然后观察告警是否在预期时间内触发、是否推送到正确的通知渠道再删掉负载观察恢复通知。一套完整的触发 - 通知 - 恢复链路都走通才能确认告警不止是配置了而是真的可用。第二件事把监控的访问入口暴露给团队。不要把Prometheus和Grafana的端口转发只留在你自己的终端里。配置一个Ingress带上认证基础认证或OAuth都可以让团队的开发、运维能自己打开Grafana看面板。这个动作看起来简单但对团队监控意识的培养帮助极大——只有大家真正用起来监控数据的价值才会被放大。第三件事建立指标字典。我对每个纳入监控的业务应用都要求团队维护一份指标说明哪个接口暴露了哪些/metrics指标、每个指标的含义是什么、正常值范围大概是多少。这份文档不用很正式一个表格就行但在后续排障和告警规则调优时这份字典的价值会成倍放大——否则你看到一个陌生的指标飙高根本不知道它代表什么。最后分享一个我个人的操作习惯每次配置变更新增告警规则、调整采集参数我都会在变更日志里记录变更人、变更内容、原因、验证结果这四栏。监控系统的演进是一个持续迭代的过程有变更记录出了问题时才追得回去。这套系统陪伴了我服务的好几个集群从最初的装上去就完事到后来的告警规则已经涨到80多条、每一条的阈值都有明确理由它逐渐变成了整个基础设施里最有存在感的一环。
返回列表