内容提要
Kubernetes监控与日志是分布式系统的重要基础设施。监控分为资源、性能、安全和事件四类,早期使用Heapster,后因接口标准化需求改为metrics-server,并定义metrics.k8s.io、custom.metrics.k8s.io和external.metrics.k8s.io三类接口。Prometheus是主流开源监控方案,支持服务发现与告警。日志分为应用、runtime、核心组件和中间件四类,社区推荐Fluentd采集方案。
延伸解读
监控接口标准化的意义
Kubernetes 将监控数据消费能力标准化为三类接口:metrics.k8s.io、custom.metrics.k8s.io 和 external.metrics.k8s.io。这种解耦让不同监控组件只要符合接口标准即可快速集成,避免了早期 Heapster 因 sink 无人维护导致的 bug 堆积问题。标准化也促进了社区生态融合,使 HPA 等消费者能统一获取资源、自定义及云产品监控指标。
事件监控的独特价值
事件监控是 K8s 中较另类的监控方式,基于状态机转换产生 normal 或 warning 事件。warning 事件尤其值得关注,通过将事件离线到数据中心进行分析和报警,可以弥补常规资源监控的不足。例如,当 Pod 状态异常时,warning 事件能及时通过钉钉、短信或邮件暴露,帮助运维人员快速发现并定位问题。
Prometheus 的采集与告警机制
Prometheus 支持静态配置和动态服务发现两种采集方式,在 K8s 中可通过 annotation 自动发现采集目标。其外置组件 Alertmanager 负责处理告警,支持邮件或短信通知。数据消费可通过 API clients、Web UI 或 Grafana 进行展现。这种灵活架构使 Prometheus 成为开源社区监控标准,适合动态的云原生环境。
日志采集的推荐方案
K8s 日志分为应用、runtime、核心组件和中间件四类,分别用于排查业务异常、容器问题、管控面状态和接入层流量。社区推荐使用 Fluentd 采集方案:每个节点部署 agent 收集日志,汇总到 Fluentd server 后离线到 Elasticsearch 或 InfluxDB,再通过 Kibana 或 Grafana 展示。这种方案能统一处理多种日志源,便于集中分析和故障排查。
Q&A
Kubernetes 监控主要分为哪几类?
Kubernetes 监控主要分为四类:资源监控(如 CPU、内存、网络)、性能监控(APM 监控,如 JVM GC 次数)、安全监控(如越权管理、漏洞扫描)和事件监控(基于状态转换的 normal 和 warning 事件)。
为什么 Kubernetes 用 metrics-server 替代了 Heapster?
Heapster 的 sink 很多无人维护,导致项目存在大量 bug 且无人修复,影响项目活跃度和稳定性;同时社区需要监控数据接口标准化,因此 K8s 将 Heapster 替换为精简版的 metrics-server。
Kubernetes 中三种监控接口标准分别是什么?
三种接口标准是:metrics.k8s.io(资源监控,由 metrics-server 实现)、custom.metrics.k8s.io(自定义监控,由 Prometheus 等实现)和 external.metrics.k8s.io(外部监控,由云厂商 provider 实现)。
Prometheus 在 Kubernetes 监控中有哪些特点?
Prometheus 是开源社区监控标准,支持静态配置和 service discovery(如 Kubernetes 动态发现),提供外置组件 Alertmanager 进行邮件或短信告警,并可通过 API clients、Web UI 或 Grafana 进行数据消费。
Kubernetes 日志主要分为哪几类?
Kubernetes 日志主要分为四类:应用日志、runtime 日志(如 Docker 日志)、核心组件日志(如 etcd、API server、kube-scheduler 等)和中间件日志(如 Ingress)。
社区推荐的 Kubernetes 日志采集方案是什么?
社区推荐使用 Fluentd 采集方案:在每个节点上启动 agent,将数据汇集到 Fluentd server,然后离线到 Elasticsearch 并通过 Kibana 展现,或离线到 InfluxDB 并通过 Grafana 展现。