监控 Kubernetes 集群:Prometheus 概述和简介

考虑 Kubernetes 监控的概念,熟悉 Prometheus 工具,并讨论警报。

监控这个话题浩如烟海,不是一篇文章就能拆解的。 本文的目的是提供工具、概念和方法的概述。

文章的材料是挤压自 学校公开讲座《Slurm》。 如果您想完成完整的培训 - 报名参加以下课程 Kubernetes 中的监控和日志记录基础设施.

监控 Kubernetes 集群:Prometheus 概述和简介

Kubernetes 集群中监控的内容

监控 Kubernetes 集群:Prometheus 概述和简介

物理服务器。 如果Kubernetes集群部署在其服务器上,您需要监控其运行状况。 Zabbix 处理这个任务; 如果你和他一起工作,那么你不需要拒绝,不会有任何冲突。 Zabbix 监控我们服务器的状态。

让我们继续进行集群级别的监控。

控制平面组件: API、调度程序等。 至少,您需要确保服务器或 etcd 的 API 大于 0。etcd 可以返回很多指标:通过其旋转的磁盘、通过其 etcd 集群的运行状况等等。

码头工人 很早以前就出现了,大家都清楚它的问题:很多容器产生冻结等问题。 因此,Docker本身作为一个系统,也应该受到控制,至少在可用性方面。

DNS。 如果集群中的 DNS 宕机,那么整个 Discovery 服务也会随之宕机,pod 之间的调用也会停止工作。 在我的实践中,没有出现这样的问题,但这并不意味着不需要监控DNS的状态。 请求延迟和一些其他指标可以在 CoreDNS 上跟踪。

入口。 有必要控制入口(包括入口控制器)作为项目入口点的可用性。

集群的主要组件已经被拆除——现在让我们深入到抽象层面。

看起来应用程序在 Pod 中运行,这意味着它们需要受到控制,但实际上并非如此。 Pod 是短暂的:今天它们在一台服务器上运行,明天在另一台服务器上运行; 今天有 10 个,明天有 2 个。因此,没有人监视这些 Pod。 在微服务架构中,控制整个应用程序的可用性更为重要。 特别是,检查服务端点的可用性:有什么作用吗? 如果应用程序可用,那么它背后会发生什么,现在有多少个副本 - 这些是第二个问题。 无需监视单个实例。

在最后一级,您需要控制应用程序本身的运行,获取业务指标:订单数量、用户行为等。

普罗米修斯

监控集群的最佳系统是 普罗米修斯。 我不知道有什么工具可以在质量和易用性方面与 Prometheus 相媲美。 它非常适合灵活的基础设施,因此当他们说“Kubernetes 监控”时,他们通常指的是 Prometheus。

开始使用 Prometheus 有多种选择:使用 Helm,您可以安装常规 Prometheus 或 Prometheus Operator。

  1. 普通的普罗米修斯。 他一切都很好,但是你需要配置 ConfigMap - 事实上,编写基于文本的配置文件,就像我们之前在微服务架构之前所做的那样。
  2. Prometheus Operator 更分散一些,内部逻辑更复杂一些,但使用它更容易:有单独的对象,抽象被添加到集群中,因此它们更方便控制和配置。

要了解该产品,我建议先安装常规的 Prometheus。 您必须通过配置来配置所有内容,但这将是有益的:您将弄清楚什么属于什么以及它是如何配置的。 在《Prometheus Operator》中,您可以立即提升到更高的抽象水平,但如果您愿意,您也可以深入研究。

Prometheus 与 Kubernetes 集成良好:它可以访问 API Server 并与之交互。

Prometheus 很受欢迎,这就是为什么大量应用程序和编程语言都支持它。 需要支持,因为 Prometheus 有自己的指标格式,要传输它,您需要应用程序内的库或现成的导出器。 而且这样的出口商还有不少。 例如,PostgreSQL Exporter:它从 PostgreSQL 获取数据并将其转换为 Prometheus 格式,以便 Prometheus 可以使用它。

普罗米修斯架构

监控 Kubernetes 集群:Prometheus 概述和简介

普罗米修斯服务器 是后端,普罗米修斯的大脑。 指标在这里存储和处理。

指标存储在时间序列数据库(TSDB)中。 TSDB并不是一个单独的数据库,而是嵌入在Prometheus中的Go语言的一个包。 粗略地说,一切都在一个二进制文件中。

不要在TSDB中长期存储数据

Prometheus 基础设施不适合长期存储指标。 默认保留期限为 15 天。 您可以超出此限制,但请记住:在 TSDB 中存储的数据越多、存储时间越长,消耗的资源就越多。 在 Prometheus 中存储历史数据被认为是不好的做法。

如果你有巨大的流量,指标的数量是每秒数十万,那么最好按磁盘空间或按周期限制它们的存储。 通常,“热点数据”存储在 TSDB 中,只需几个小时即可完成指标。 对于更长的存储,外部存储是在那些真正适合这样做的数据库中使用的,例如InfluxDB、ClickHouse等。 我看到了更多关于 ClickHouse 的好评。

Prometheus Server 在模型上工作 :他寻求我们为他提供的那些端点的指标。 他们说:“转到 API 服务器”,他每隔 n 秒就去那里并获取指标。

对于在抓取周期之间出现的生命周期较短的对象(作业或 cron 作业),有一个 Pushgateway 组件。 来自短期对象的指标被推入其中:作业已启动,执行操作,将指标发送到 Pushgateway 并完成。 一段时间后,Prometheus 会按照自己的节奏下来并从 Pushgateway 获取这些指标。

要在 Prometheus 中配置通知,有一个单独的组件 - 警报管理器。 以及警报规则。 例如,如果服务器 API 为 0,则需要创建警报。当事件触发时,警报将传递到警报管理器以进一步调度。 警报管理器具有相当灵活的路由设置:一组警报可以发送到管理员的电报聊天室,另一组警报发送到开发人员的聊天室,第三组警报发送到基础设施工作人员的聊天室。 通知可以发送到 Slack、Telegram、电子邮件和其他渠道。

最后,我会告诉你普罗米修斯的杀手级功能 - 发现。 使用Prometheus时,不需要指定监控对象的具体地址,设置它们的类型就足够了。 也就是说,你不需要写“这里是IP地址,这里是端口-监视器”,而是需要确定通过什么原则来找到这些对象(目标 - 目标)。 Prometheus 本身会根据当前处于活动状态的对象提取必要的对象并将其添加到监控中。

这种方法非常适合 Kubernetes 结构,其中一切都是浮动的:今天有 10 台服务器,明天有 3 台。为了不每次都指定服务器的 IP 地址,他们写了一次如何找到它 - 发现会做到这一点。

普罗米修斯语言被称为 普罗姆QL。 使用这种语言,您可以获取特定指标的值,然后对其进行转换,基于它们构建分析计算。

https://prometheus.io/docs/prometheus/latest/querying/basics/

Простой запрос

    container_memory_usage_bytes

Математические операции

    container_memory_usage_bytes / 1024 / 1024

Встроенные функции

    sum(container_memory_usage_bytes) / 1024 / 1024

Уточнение запроса

    100 - avg by (instance) (rate(node_cpu_seconds_total{mode="idle"}[5m]) * 100)

普罗米修斯网络界面

Prometheus 有自己的、相当简约的 Web 界面。 仅适合调试或演示。

监控 Kubernetes 集群:Prometheus 概述和简介

在表达式行中,您可以使用 PromQL 语言编写查询。

警报选项卡包含警报规则,它们具有三种状态:

  1. inactive - 如果警报当前未激活,即一切正常,但不起作用;
  2. 待处理 - 这是警报有效但发送尚未通过的情况。 设置延迟是为了补偿网络闪烁:如果指定的服务在一分钟内上升,那么警报不应响起;
  3. 触发是警报亮起并发送消息时的第三种状态。

在“状态”菜单中,您可以访问有关 Prometheus 的信息。 还有一个到我们上面谈到的目标(targets)的过渡。

监控 Kubernetes 集群:Prometheus 概述和简介

有关 Prometheus 接口的更详细概述,请参阅 Slurm 关于监控 Kubernetes 集群的讲座.

与 Grafana 集成

在 Prometheus Web 界面中,您不会找到漂亮且易于理解的图表来从中得出有关集群状态的结论。 为了构建它们,Prometheus 与 Grafana 集成。 我们得到这样的仪表板。

监控 Kubernetes 集群:Prometheus 概述和简介

设置 Prometheus 和 Grafana 集成一点也不困难,您可以在文档中找到说明: GRAFANA 对普罗米修斯的支持好吧,我就这样结束吧。

在接下来的文章中,我们将继续监控主题:我们将讨论使用 Grafana Loki 和替代工具收集和分析日志。

作者:Marcel Ibraev,认证 Kubernetes 管理员,公司执业工程师 南桥、演讲者和课程开发者 Slurm。

来源: habr.com

添加评论