K8s 之Prometheus 故障排查(Troubleshooting of Prometheus in K8s)

K8s 之Prometheus 故障排查

导语:本文主要探讨 Prometheus 在观测 Kubernetes 方面的独特优势和最佳实践,包括如何在 Kubernetes 不同层次和维度上实现全面的可观测性,如何排查最常见的 Kubernetes 故障,以及维护集群稳定高效运行的最佳实践。

强大的工具,往往伴随着巨大的复杂性。与 Kubernetes 的分布式、动态性等硬核实力相伴而来的,是如何对其进行监控的挑战:

  • 集群是否潜藏着性能瓶颈?

  • 各项资源分配是否合理?

  • 如何捕获影响稳定性的事件?

这些问题,不仅关乎系统的稳定性、高效性,还将直接影响业务质量和用户体验。

而 Prometheus 作为紧随 Kubernetes 之后的、CNCF 的“第二把交椅”,则凭借其与 Kubernetes 相伴而生、天然适配的独特优势,已然成为监控 Kubernetes 的首。

接下来,围绕 Kubernetes 监控,本文将试着回答下列问题:

  1. 为何 Prometheus 是监控 Kubernetes 的“官配”?

  2. “若覆盖不全面,则监控无意义”——此话怎讲?

  3. Kubernetes 常见故障和最佳实践,展开说说?

  4. 既然有开源 Prometheus,又何需腾讯云 Prometheus?

Prometheus 的优势

对比其他监控方案,Prometheus 针对 Kubernetes 监控,具有不可替代的优势:

1.Prometheus 和 Kubernetes 彼此原生支持。

  • Prometheus 对 Kubernetes 的原生支持:Prometheus 可对 Kubernetes 中的目标进行动态发现,大幅简化了监控配置。

  • Kubernetes 对 Prometheus 的原生支持:Kubernetes 各组件内置 Prometheus 指标暴露,无需引入额外的导出工具。

    2.Prometheus 针对云原生环境的独特设计。

    • 针对架构复杂性:传统架构中只有主机和应用两个层面要监控;而 Kubernetes 不仅在两者之间引入了新的抽象层,并且这层 Kubernetes 自身组件也需要被监控。Prometheus 社区的活跃生态(多种 exporter、后端存储、语言 SDK),则能很好地承托 Kubernetes 的全面监控。

    • 针对资源动态性:相比传统监控中的静态主机,Kubernetes 上的 pod 可能频繁被创建和销毁,传统的 Zabbix 等基础设施监控手段显然力不从心。而 Prometheus 可基于服务发现做指标拉取,自动更新监控目标,确保监控数据的实时性和准确性;此外,对于动态环境下的短生命周期任务,Prometheus 除了支持指标拉取,还支持各监控目标向 Prometheus 做指标推送。

    • 针对指标高基数:云原生环境下大都是微服务架构,服务不仅数量多、维度也多,导致承载元数据的标签呈爆炸趋势。而 Prometheus 具备灵活标签的数据模型设计,则提供了很好的分类结构和检索方法,这样,对指标数据的组织将更加灵活、多维、适应变化、方便聚合:

      图片

    • 针对查询精细化:强大的查询语言 PromQL,使用户能通过简洁的表达式,高效地检索和处理时间序列数据。PromQL 支持多种数学运算、聚合操作、趋势预测;还可用于绘制精细的可视化图表、管理精细的告警逻辑。

    K8s 全栈监控

    若覆盖不全面,则监控无意义。

    乍一看,Kubernetes 指标似乎没啥特别,仍然跟其他系统类似,包括吞吐率、错误率、延迟和资源饱和度等。

    然而,Kubernetes 监控的棘手之处在于:Kubernetes 不是“一个东西”,而是一个由控制平面、节点、Pod、键值存储等多个组件组成的系统。

    所以针对 Kubernetes,若缺乏全栈视角和数据关联,又怎能实现故障的快速定位和根因分析呢?

    例如:当一个容器 CrashLoopBackoff,它的可能原因有很多、影响范围也不同(如下图所示)。其中,若是底层的宿主机导致,则其影响范围可能不仅限于该特定容器,同宿主机上的其他 Pod 和容器也会受到影响,可能出现性能下降等问题。

    为了全面打造 Kubernetes 的指标监控体系,自下而上,我们可以将 Kubernetes 从底层资源到顶层应用,分为 5 个不同的层面,用不同的方法和组件分别采集。接下来,我们将逐层击破,探讨每层监控对象的侧重点、所使用的监控手段、需关注的核心指标,以及如何通过构建可观测性,来保障系统的稳定运行。

    宿主机层

    宿主机是指用于运行 Kubernetes 节点的底层机器(物理机或 VM)。对其进行监控的核心,在于系统级别的性能指标,包括 CPU 使用率、内存使用情况、磁盘 I/O、网络流量和文件系统使用情况。

    对于宿主机指标的导出和暴露,我们可借助 Prometheus 社区提供的开源 exporter 工具来实现,例如:

    • node-exporter(监控 *NIX 系统)

    • windows_exporter(监控 Windows 系统)

    • dcgm-exporter(监控 GPU)

    • process-exporter(监控进程)

    以 node-exporter 为例,它是以二进制的形式被提供的,下载、安装、运行后,即可在其下述端点观察到暴露的指标:curl http://<宿主机IP>:9100/metrics。在 Prometheus 将其配置为采集目标后,宿主机指标即可以一定时间间隔,被 Prometheus 定期采集。

    在机器资源层面,毫无疑问,我们最关心的指标肯定是:CPU 和内存的利用率、网络出入带宽,等等。

    使用 Grafana 可视化 node-exporter 指标,便可以直观展示指标数据、实时监控系统状态。以 Prometheus 为 node-exporter 预设的 Grafana 大盘为例:

    而通过 Prometheus 的 AlertManager 组件,基于核心指标配置告警,则可以及时通知运维人员系统异常,确保快速响应和问题解决。

    以腾讯云 Prometheus 为 node-exporter 预设的一条 alert 为例:我们可以用 PromQL语句(1-node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) > 0.85,表达当内存使用率超过 85% 时,发送告警消息。

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    Linux运维老纪

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值