ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

监控系统选型指南:Zabbix、Prometheus与Open-Falcon深度对比

2026/8/2 15:03:55 拓冰建站 浏览量
监控系统选型指南:Zabbix、Prometheus与Open-Falcon深度对比 1. 监控系统从“看门狗”到“数字神经”在任何一个稍微有点规模的线上业务里你都能听到运维或者开发同学这样的对话“昨晚那个接口的P99延迟怎么突然飙高了”“生产环境的磁盘空间告警了赶紧看看是谁在写日志。”“这个服务的内存使用率曲线有点奇怪是不是有内存泄漏”这些问题的发现和定位背后都离不开一个默默无闻但又至关重要的系统——监控系统。你可以把它想象成整个IT系统的“数字神经系统”。它不像业务代码那样直接产生价值但它无时无刻不在感知着系统的脉搏、体温和血压。心跳停了、体温高了、血压爆了它都是第一个知道的并且会立刻发出警报。没有它系统就像在黑暗中裸奔出了问题只能靠用户投诉或者老板的夺命连环Call来发现那时候往往已经造成了业务损失和口碑下滑。所以搭建和维护一套好用的监控系统是每个技术团队从“游击队”走向“正规军”的必经之路。今天我们就来深入聊聊监控系统到底是个啥以及市面上几个主流的监控框架Zabbix, Prometheus, Open-Falcon到底该怎么选。我会结合自己这些年踩过的坑和填过的坑给你讲明白它们各自的脾气秉性帮你找到最适合你当前团队和业务的那一个。2. 监控系统的核心架构与设计哲学在对比具体工具之前我们得先搞清楚一个合格的监控系统应该长什么样它的核心组件和设计思路是什么。这就像买车你得先明白自己是需要家用轿车、越野SUV还是性能跑车而不是直接去对比宝马和奔驰的某个型号。2.1 监控系统的四大核心组件无论用什么框架一个完整的监控系统通常都逃不开下面这四个核心部分它们环环相扣构成了监控的完整闭环数据采集Agent/Exporter这是监控系统的“触角”负责从被监控目标主机、应用、数据库、网络设备等上收集原始数据。比如CPU使用率、内存占用、磁盘IO、网络流量、应用接口的响应时间、错误次数等等。采集方式多种多样有需要安装代理Agent的也有通过标准协议如SNMP、HTTP拉取的。数据传输与存储采集到的数据需要被安全、可靠地传送到中心服务器并以一种高效的方式存储起来供后续查询和分析。这里的关键是数据模型比如是存储原始时间点数据还是存储预聚合的指标和存储引擎时序数据库是当前主流。数据处理与告警这是监控系统的“大脑”。存储的数据会被实时计算和分析比如判断某个指标是否超过了预设的阈值或者多个指标之间是否存在关联异常。一旦发现问题就触发告警通过邮件、钉钉、企业微信、短信甚至电话等方式通知相关人员。数据可视化这是监控系统的“脸面”。将冰冷的数字和时间序列数据通过图表、仪表盘Dashboard等形式直观地展示出来。一个好的可视化界面能让运维和开发人员快速掌握系统全局状态定位问题根因。Grafana是目前这方面事实上的标准。2.2 两种主流的数据模型与采集模式这是理解不同监控框架差异的关键主要分为两种推模式Push由被监控端的代理主动将数据打包发送到监控服务器。Zabbix Agent在主动模式下就是典型的推模式。它的好处是监控服务器压力小代理可以缓存数据在网络中断时重试。但缺点是服务器无法完全控制采集频率如果代理配置错误疯狂推送可能会打满服务器。拉模式Pull由监控服务器主动去被监控目标上“抓取”数据。Prometheus就是拉模式的坚定拥护者。它的好处非常明显中心端完全掌握抓取目标和频率易于全局管理和配置更容易判断目标是否存活抓取失败即视为失联安全性也更好中心端只需要访问目标的特定只读端口。但缺点是需要为每个目标配置可访问的端点。现在很多系统都支持混合模式但底层设计哲学的不同直接导致了它们在架构、配置和使用体验上的巨大差异。3. 主流监控框架深度横评Zabbix vs Prometheus vs Open-Falcon了解了基础概念我们进入实战环节看看这三个家伙到底谁更适合你。我会从多个维度进行对比并分享一些我亲身体验过的“坑”和技巧。3.1 Zabbix企业级监控的“老炮儿”Zabbix 诞生于1998年是一个功能极其全面、成熟稳健的企业级监控解决方案。如果你身处一个传统的IT环境有大量的物理服务器、网络设备、各种商业中间件Zabbix 很可能是你的首选。核心特点与优势全栈监控能力从网络设备通过SNMP Trap/Get、服务器硬件IPMI、操作系统、数据库Oracle, MySQL等、中间件到应用几乎无所不包。自带丰富的监控模板开箱即用程度高。强大的自动发现可以基于网络扫描自动发现主机和服务并自动关联监控模板在设备众多的环境中能极大减少配置工作量。灵活的告警机制告警逻辑非常强大支持依赖关系、告警分级、告警抑制、维护周期等可以构建非常复杂的告警场景。比如可以设置当核心交换机宕机时抑制其下联所有服务器的告警避免告警风暴。权限管理完善用户、用户组、权限角色设计细致适合中大型企业多团队协作的场景。实操心得与避坑指南数据库选型Zabbix Server 重度依赖数据库MySQL、PostgreSQL等。历史数据表history,trends会随着时间疯狂增长。务必在安装初期就规划好数据分区Partitioning和定期清理策略否则一两年后数据库性能会急剧下降甚至拖垮整个Zabbix。我吃过亏一个未分区的表涨到几亿条记录查询一个仪表盘要一分钟。监控项Item泛滥Zabbix的模板很方便但如果不加选择地全部启用会导致单个主机上产生数百甚至上千个监控项。这会加重Agent和Server的负担。最佳实践是根据实际需要克隆官方模板并做精简只采集真正关心的指标。主动模式与被动模式Agent默认是被动模式Server拉取。对于大规模部署强烈建议启用主动模式Agent主动推送到Server这能显著降低Server端的网络连接数和负载。配置时注意ServerActive参数指向Zabbix Server的地址或代理Proxy。图形和仪表盘Zabbix自带的图表和仪表盘功能比较老旧美观度和交互性远不如Grafana。现在的标准做法是用Zabbix做数据采集和告警用Grafana连接Zabbix数据库做可视化。两全其美。适合场景传统数据中心、混合云环境中需要对网络、硬件、操作系统、成熟商业软件进行全方位监控的团队。团队有一定的运维基础需要复杂的、企业级的告警管理功能。3.2 Prometheus云原生时代的“监控霸主”Prometheus 是2012年由SoundCloud开源的现在已经是云原生计算基金会CNCF的毕业项目是Kubernetes生态圈监控的事实标准。它的设计哲学是为动态的、面向服务的架构而生。核心特点与优势多维数据模型核心是时序数据通过指标名称Metric Name和一组键值对标签Labels来标识。例如http_requests_total{methodPOST, handler/api/v1/users, status200, instance10.0.0.1:8080}。这种模型无比灵活便于对数据进行任意维度的聚合、切片和查询。强大的查询语言PromQL这是Prometheus的王牌。你可以像写SQL一样对时序数据进行非常复杂的实时查询和聚合。例如计算所有实例最近5分钟的平均QPSrate(http_requests_total[5m])。计算某个接口的95分位响应延迟histogram_quantile(0.95, rate(http_request_duration_seconds_bucket[5m]))。拉模型为主中心化配置抓取目标scrape_configs主动拉取数据。非常适合动态服务发现如结合Kubernetes, Consul。高度集成拥有庞大的Exporter生态几乎任何系统数据库、消息队列、硬件、甚至其他监控系统都有社区维护的Exporter将其指标暴露给Prometheus。应用也可以通过客户端库如Go、Java、Python轻松暴露自定义业务指标。实操心得与避坑指南磁盘空间告警风暴这是新手常踩的大坑。就像热词里提到的“prometheus磁盘空间告警会同时出现多个告警都是挂载的”。Prometheus的本地TSDB存储默认按块Block存储如果你的数据目录挂载了多个磁盘或分区Prometheus可能会在它们之间写数据。当磁盘空间不足时每个挂载点都可能触发独立的告警规则导致告警风暴。解决方案确保Prometheus的数据目录--storage.tsdb.path在一个独立、足够大的磁盘分区上。使用--storage.tsdb.retention.time明确控制数据保留时间如15d或30d并定期清理旧数据。指标基数爆炸这是Prometheus最危险的陷阱。标签Label的取值组合数量称为基数Cardinality。如果你把一个高基数的字段如用户ID、请求ID作为标签会产生海量的时间序列瞬间撑爆Prometheus内存。绝对禁止将唯一值作为标签业务指标应使用低基数维度如接口名、状态码、错误类型等。高基数数据应走日志或专业追踪系统如Jaeger。长期存储与高可用Prometheus默认是单节点数据存储在本地长期存储和高可用HA是弱点。生产环境需要规划长期存储使用remote_write将数据备份到VictoriaMetrics, Thanos, M3DB等远程时序数据库中。高可用部署两个完全相同的Prometheus实例抓取相同的目标并用负载均衡器将查询请求分发到它们。或者直接使用VictoriaMetrics或Thanos这种原生支持集群和长期存储的方案。Node Exporter部署监控Linux主机node_exporter是标配。但默认它会暴露近千个指标很多你可能用不到。建议通过--collector参数禁用不必要的采集器例如--collector.disable-defaults --collector.cpu --collector.meminfo --collector.diskstats --collector.filesystem --collector.netstat。这能大幅减少指标数量提升性能。适合场景云原生、微服务、容器化尤其是Kubernetes环境。团队追求高度的自动化和弹性开发人员需要深入参与监控定义丰富的业务指标。需要强大的数据查询和聚合能力。3.3 Open-Falcon互联网大厂出品的“性能怪兽”Open-Falcon 是小米公司开源的企业级监控系统在设计上吸收了很多互联网公司的运维经验特别强调高性能、高可靠性和易扩展性。核心特点与优势分组件、微服务架构整个系统由多个独立的组件构成如Agent, Transfer, Graph, Query, Alarm等每个组件职责单一可以通过增加实例来水平扩展。这种架构天生适合超大规模部署。高性能数据传输与存储数据上报Transfer组件采用RPC协议高效且节省带宽。存储层Graph组件为时序数据设计了高效的文件存储结构查询速度快。灵活的插件化采集Agent支持通过插件Plugin方式扩展采集能力社区也有丰富的插件库。同时它也支持类似Prometheus的HTTP拉取模式。强大的告警策略支持多种告警触发条件阈值、环比、同比、突增突降等告警合并和回调功能也很完善。实操心得与避坑指南部署复杂度较高由于组件众多至少需要Agent, Transfer, Graph, Query, Dashboard, Alarm等初始部署和配置比Zabbix和Prometheus单节点要复杂。强烈建议使用官方或社区提供的自动化部署脚本如Ansible或容器化部署方案手动一个个装很容易出错。社区生态与文档相比Prometheus和ZabbixOpen-Falcon的全球社区活跃度和第三方集成如Exporter要弱一些。中文文档是主要来源但某些细节可能更新不及时。遇到问题时可能需要更深入地阅读源码或依赖国内的技术社区。数据模型差异它的数据模型类似Prometheus指标标签但查询语言和API与PromQL不同需要重新学习。对于已经熟悉Prometheus的团队会有一定的转换成本。可视化自带的Dashboard功能比较基础。和Zabbix一样更优的方案是将Open-Falcon作为数据后端使用Grafana通过其API或插件来绘制更精美的图表。适合场景拥有海量服务器和监控指标的大型互联网公司对监控系统的性能和水平扩展能力有极致要求。团队有较强的运维开发能力能够应对多组件部署和运维的复杂性。4. 横向对比与选型决策指南光说特点可能还是有点抽象我把它总结成一张表你可以快速对号入座特性维度ZabbixPrometheusOpen-Falcon核心模型基于主机/模板的监控基于多维数据模型的时序监控基于多维数据模型的高性能监控采集模式推/拉混合Agent为主拉模式为主HTTP端点推模式为主RPC也支持拉数据存储关系型数据库MySQL等自定义时序数据库TSDB自定义高性能时序文件存储查询能力内置简单图表SQL间接查询PromQL极其强大自有查询API功能较强告警功能非常强大、灵活支持复杂依赖基于PromQL的告警规则相对简单功能强大支持多种检测算法可视化原生界面较老常搭配Grafana原生界面简单生态首选Grafana原生Dashboard一般常搭配Grafana动态发现支持网络自动发现与K8S等服务发现原生集成极佳支持通过插件动态发现部署复杂度中等ServerDBAgent简单单二进制文件较高多微服务组件扩展性垂直扩展为主Proxy可水平扩展水平扩展需额外组件如Thanos微服务架构天生易于水平扩展社区生态极其丰富模板、插件众多云原生生态绝对霸主Exporter极多主要在国内活跃生态中等学习曲线中等概念较多主机、模板、触发器等中等需理解数据模型和PromQL中等偏高需理解其分布式架构如何选择我的个人建议是如果你的环境是传统的、稳定的有大量网络设备、物理机、VMware虚拟机、Oracle数据库等团队需要一套“大而全”、开箱即用、告警管理精细的系统选 Zabbix。它是经过无数企业验证的可靠方案。如果你的技术栈已经全面转向云原生和微服务特别是大量使用Kubernetes开发团队需要深度介入监控定义复杂的业务指标如订单成功率、接口延迟分位数毫不犹豫地选 Prometheus。它是这个领域的未来标准生态无敌。如果你身处一个超大规模的互联网公司监控指标量级是亿级甚至十亿级对性能和扩展性有变态级要求并且团队有足够的运维开发能力来驾驭一个复杂系统那么可以深入评估Open-Falcon。它是在极限压力下淬炼出来的产品。对于大多数从传统向云原生过渡的团队我见过一个很成功的混合模式用 Zabbix 监控基础设施网络、硬件、物理机/虚拟机状态、基础服务用 Prometheus 监控容器平台Kubernetes及之上的所有微服务应用。两者通过 Grafana 统一展示告警可以统一接入到钉钉/企业微信。这样既能利用Zabbix的稳定和全面又能享受Prometheus在动态环境下的灵活与强大。5. 从零搭建一套生产可用的监控系统以Prometheus为例理论说了这么多我们动手搭一套最简单的、但具备生产意识的Prometheus监控栈。这里假设你已经有了几台Linux服务器。5.1 架构规划与组件说明我们搭建的这套最小化架构包括Prometheus Server负责抓取和存储指标数据。Node Exporter部署在所有需要监控的Linux主机上暴露主机硬件和OS指标。Alertmanager负责接收Prometheus的告警并进行去重、分组、路由最终发送通知。Grafana负责数据可视化从Prometheus查询数据并绘制图表。5.2 分步部署与关键配置步骤1部署Node Exporter在所有目标主机上# 下载最新版请从官网替换版本号 wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz tar xvfz node_exporter-*.*-amd64.tar.gz cd node_exporter-*.*-amd64 # 创建系统用户并移动二进制文件 sudo useradd --no-create-home --shell /bin/false node_exporter sudo cp node_exporter /usr/local/bin/ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter # 创建Systemd服务文件 sudo vi /etc/systemd/system/node_exporter.service将以下内容写入服务文件[Unit] DescriptionNode Exporter Afternetwork.target [Service] Usernode_exporter Groupnode_exporter Typesimple ExecStart/usr/local/bin/node_exporter \ --collector.disable-defaults \ --collector.cpu \ --collector.meminfo \ --collector.diskstats \ --collector.filesystem \ --collector.netdev \ --collector.netstat \ --collector.systemd \ --web.listen-address:9100 [Install] WantedBymulti-user.target注意这里我使用了--collector.disable-defaults并手动启用了几个最常用的采集器这是生产环境的最佳实践避免采集无用指标。--web.listen-address指定了监听端口。# 启动并设置开机自启 sudo systemctl daemon-reload sudo systemctl start node_exporter sudo systemctl enable node_exporter sudo systemctl status node_exporter # 检查状态步骤2部署Prometheus Server在监控服务器上# 下载Prometheus wget https://github.com/prometheus/prometheus/releases/download/v2.48.0/prometheus-2.48.0.linux-amd64.tar.gz tar xvfz prometheus-*.*-amd64.tar.gz cd prometheus-*.*-amd64 # 创建配置目录和数据目录 sudo mkdir -p /etc/prometheus /var/lib/prometheus sudo cp prometheus promtool /usr/local/bin/ sudo cp -r consoles/ console_libraries/ /etc/prometheus/ sudo chown -R nobody:nogroup /etc/prometheus /var/lib/prometheus # 创建主配置文件 sudo vi /etc/prometheus/prometheus.yml写入以下配置假设我们有两台被监控主机192.168.1.101和192.168.1.102。global: scrape_interval: 15s # 默认抓取间隔 evaluation_interval: 15s # 规则评估间隔 rule_files: # - first_rules.yml # - second_rules.yml alerting: alertmanagers: - static_configs: - targets: # - alertmanager:9093 # 稍后配置Alertmanager后启用 scrape_configs: - job_name: prometheus # 监控自己 static_configs: - targets: [localhost:9090] - job_name: node # 监控所有Linux节点 static_configs: - targets: [192.168.1.101:9100, 192.168.1.102:9100] # 可以添加公共标签这些标签会附加到从这个job抓取的所有指标上 # relabel_configs: # - source_labels: [__address__] # target_label: instance # regex: ([^:])(?::\d)? # replacement: $1关键点scrape_interval定义了抓取频率太短会增加负载太长会影响监控实时性。生产环境15s-60s是常见范围。static_configs是静态配置对于动态环境如K8s我们会使用kubernetes_sd_configs等自动发现配置。创建Systemd服务sudo vi /etc/systemd/system/prometheus.service[Unit] DescriptionPrometheus Afternetwork.target [Service] Usernobody Typesimple ExecStart/usr/local/bin/prometheus \ --config.file/etc/prometheus/prometheus.yml \ --storage.tsdb.path/var/lib/prometheus/ \ --storage.tsdb.retention.time30d \ --web.console.templates/etc/prometheus/consoles \ --web.console.libraries/etc/prometheus/console_libraries \ --web.listen-address0.0.0.0:9090 [Install] WantedBymulti-user.target核心参数解释--storage.tsdb.retention.time30d极其重要设置数据保留时间为30天避免磁盘被写满。请根据你的磁盘大小和采集指标数量调整。--web.listen-address0.0.0.0:9090允许所有IP访问Web UI生产环境建议结合防火墙或反向代理做访问控制。sudo systemctl daemon-reload sudo systemctl start prometheus sudo systemctl enable prometheus sudo systemctl status prometheus现在访问http://你的服务器IP:9090应该能看到Prometheus的Web界面。在“Status - Targets”页面应该能看到prometheus和node两个job并且状态都是“UP”。步骤3部署Alertmanager可选但建议告警是监控的灵魂。我们配置一个当节点宕机时发送告警的规则。首先创建告警规则文件sudo vi /etc/prometheus/node_down.ymlgroups: - name: node_alerts rules: - alert: InstanceDown expr: up{jobnode} 0 # up指标为0表示抓取失败实例可能宕机 for: 1m # 持续1分钟才触发告警避免网络抖动误报 labels: severity: critical annotations: summary: 实例 {{ $labels.instance }} 宕机 description: {{ $labels.instance }} 上的 {{ $labels.job }} 服务已超过1分钟无法访问。然后在prometheus.yml中取消rule_files的注释并指向这个文件rule_files: - node_down.yml重启Prometheus使规则生效sudo systemctl restart prometheus。接下来部署Alertmanager来接收和处理这些告警。这里以最简单的邮件告警为例。# 下载Alertmanager wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz tar xvfz alertmanager-*.*-amd64.tar.gz cd alertmanager-*.*-amd64 sudo cp alertmanager amtool /usr/local/bin/ sudo mkdir -p /etc/alertmanager sudo cp alertmanager.yml /etc/alertmanager/编辑Alertmanager配置/etc/alertmanager/alertmanager.ymlglobal: smtp_smarthost: smtp.你的邮箱服务商.com:587 # 例如 smtp.qq.com:587 smtp_from: 你的发件邮箱xxx.com smtp_auth_username: 你的发件邮箱xxx.com smtp_auth_password: 你的邮箱授权码 # 注意不是登录密码是SMTP授权码 smtp_require_tls: true route: group_by: [alertname] # 按告警名分组 group_wait: 10s # 同一组告警等待10s后发送 group_interval: 10s repeat_interval: 1h # 重复告警间隔 receiver: email-notifications receivers: - name: email-notifications email_configs: - to: 接收告警的邮箱xxx.com headers: subject: [Prometheus告警] {{ .GroupLabels.alertname }}创建Systemd服务并启动同时修改Prometheus配置取消alerting部分的注释指向Alertmanager的地址假设在同一台机器端口9093。步骤4部署Grafana进行可视化这是最简单的一步通常直接使用官方仓库安装。# 添加Grafana仓库并安装 sudo apt-get install -y software-properties-common sudo add-apt-repository deb https://packages.grafana.com/oss/deb stable main wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add - sudo apt-get update sudo apt-get install grafana # 启动并设置开机自启 sudo systemctl start grafana-server sudo systemctl enable grafana-server访问http://你的服务器IP:3000默认账号密码是admin/admin。首次登录会要求修改密码。添加数据源Configuration - Data Sources - Add data source - 选择 Prometheus。在URL栏填写http://localhost:9090如果Grafana和Prometheus在同一台机器然后点击 Save Test。导入仪表盘Grafana社区有海量现成的仪表盘。对于Node Exporter有一个非常流行的仪表盘ID是1860。在左侧导航栏点击 “” - Import输入1860选择刚才添加的Prometheus数据源即可导入一个完整的主机监控仪表盘。至此一个包含数据采集、存储、告警、可视化的最小可用监控系统就搭建完成了。6. 生产环境进阶考量与避坑实录把系统跑起来只是第一步要让它在生产环境稳定可靠地运行还需要考虑更多。6.1 容量规划与性能调优Prometheus存储估算Prometheus的本地存储空间占用可以通过粗略公式估算每秒抓取样本数 * 每个样本平均字节数 * 保留时间 * 安全系数(2~3)。一个node_exporter大约产生500-800个时间序列metric每个序列每15秒一个点。保留30天所需磁盘空间大约在几GB到十几GB。务必监控prometheus_local_storage_series和prometheus_local_storage_chunk_ops_total等自身指标。内存占用Prometheus非常吃内存主要用于存储所有时间序列的索引。内存需求大致是活跃时间序列数 * 约1-2KB。百万级序列可能需要数GB内存。务必为Prometheus Server分配充足的内存并监控其内存使用率。抓取间隔scrape_interval不是越短越好。15s对于大多数系统指标和业务指标已经足够。过短的间隔如1s会成倍增加Prometheus和目标的负载而收益甚微。对于变化缓慢的指标如磁盘总量甚至可以设置为几分钟抓取一次。6.2 高可用与长期存储方案对于核心业务单点Prometheus是不可接受的。基础HA部署两个完全相同的Prometheus实例使用相同的配置抓取目标。在它们前面放一个负载均衡器如Nginx用于Grafana查询。但这样数据是两份独立的副本查询时需要指定查询哪个实例且历史数据可能不一致。使用Thanos或VictoriaMetrics这是生产级方案。Thanos在Prometheus之上提供了全局查询视图、无限长期存储对象存储如S3、数据降采样和压缩功能。架构较复杂。VictoriaMetrics提供了一个兼容Prometheus API的、高性能、可水平扩展的时序数据库。它可以作为Prometheus的远程存储也可以直接替换Prometheus进行数据抓取和存储。对于大多数场景VictoriaMetrics集群版是更简单、更高效的选择。它极大地简化了Prometheus的长期存储和HA问题。6.3 告警管理的最佳实践告警的目的是让人快速响应而不是制造噪音。告警分级明确区分critical紧急需要立即处理、warning警告需要关注、info信息仅记录。Alertmanager可以根据标签路由到不同的接收器如critical发短信warning发钉钉。告警抑制Inhibition避免告警风暴。例如当“机房网络故障”告警触发时抑制所有该机房内服务器的“实例宕机”告警。告警静默Silence在计划内维护如系统升级时提前设置静默规则避免不必要的告警打扰。告警模板精心设计告警通知的标题和内容必须包含告警项、告警主机/实例、当前值、阈值、发生时间、直接可点击的监控图表链接或仪表盘链接。让接收者一眼就知道是什么、在哪、有多严重、怎么查。6.4 监控KubernetesPrometheus的绝对主场在K8s中部署Prometheus通常不再手动部署node_exporter和配置抓取。使用Prometheus Operator这是管理K8s上Prometheus部署的事实标准。它通过自定义资源定义CRD如Prometheus、ServiceMonitor、PodMonitor让你以声明式的方式管理监控栈。部署后Operator会自动发现K8s中的Service和Pod并为你配置Prometheus的抓取任务。核心组件kube-state-metrics将K8s资源对象如Deployment, Pod的状态转换为Prometheus指标。cAdvisor通常由Kubelet内置提供容器资源使用情况指标。node-exporterDaemonSet采集节点级指标。grafana可视化。alertmanager告警。使用Helm Chart一键部署社区维护的kube-prometheus-stackHelm Chart 包含了以上所有组件是快速在K8s中搭建完整监控栈的最简单方式。监控系统的建设是一个“迭代”和“运营”的过程而不是“一锤子买卖”。从最小可行方案开始随着业务和团队的发展不断调整指标、优化告警、完善仪表盘。记住最好的监控系统是那个能被开发、运维、甚至产品经理经常用起来真正帮助发现和解决问题的系统。它不应该只是一个昂贵的摆设或者一个只会制造恐慌的“告警噪音制造机”。