Kubernetes监控手册11-针对部署到Pod里的应用做性能监控

时间:2021-06-13 01:24:07

写在前面

前面系列的文章我们花费了较大篇幅,介绍了 Kubernetes 的各个组件的监控方法。从整个体系来看,Kubernetes 体系的监控还应该包含 Pod 里的应用的监控。

App 监控概述

容器里的应用要做监控,大概有两个手段,一个是埋点,一个是日志分析。跨语言的埋点方案有两个非常知名,一个是 statsd,一个是 prometheus。日志分析也有两类,一个是在端上做日志流式处理分析,类似 mtail 的方案,另一个是把日志推到中心,在中心做分析。下面我们拆开来看这几个方案的原理。

埋点监控

statsd 和 prometheus 这两类埋点方案相对更通用,不过有些语言会有自己的常用的埋点工具,比如 Java 生态里的 micrometer。一个公司通常有多种语言,跨语言的工具首推 statsd 和 prometheus,下面我们分别做一下概述。

statsd

statsd 开始被大家熟知是由于这篇文章《Measure Anything, Measure Everything image 》Etsy 的工程师使用 NodeJS 开源了这个项目,项目地址在:https://github.com/statsd/statsd

statsd 对于各种语言都有相应的 SDK,业务程序引入这些 SDK 度量自己的指标。典型的数据流如下:

Kubernetes监控手册11-针对部署到Pod里的应用做性能监控

应用程序通过 SDK 埋点之后,SDK 会把数据通过 UDP 协议推给监控 agent,很多 agent 都支持 statsd 协议的接收,比如 Telegraf、Datadog-agent。然后监控 agent 把数据做聚合,完事推给监控服务端。

这里使用 Telegraf 来做演示,在 Telegraf 配置文件中搜索 inputs.statsd,可以看到很多注释和样例,这里我提供一个例子:

[[inputs.statsd]]
protocol = "udp"
service_address = ":8125"
percentiles = [50.0, 90.0, 99.0, 99.9, 99.95, 100.0]
metric_separator = "_"