Kubernetes 监控实践(2):可行监控方案之 Prometheus 和 Sensu

阅读数:3 2020 年 2 月 7 日 20:43

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

本文介绍两个可行的 K8s 监控方案:Prometheus 和 Sensu。两个方案都能全面提供系统级的监控数据,帮助开发人员跟踪 K8s 关键组件的性能、定位故障、接收预警。

一、K8s 监控之 Prometheus

1.1 简介

Prometheus 是针对容器和微服务的开源监控预警工具,功能稳健,适用于开发流程中的云端管理员和开发人员等各个相关方。Prometheus 定时聚合配置对象中的指标数据,评估规则表达式,展示结果,发送预警。

Prometheus 不仅能够监控预定义指标,还能实现多维数据模型,进行深度分析,并针对多个指标建立关联,从多个角度为开发人员和管理员提供数据支持。

1.2 工作原理

Prometheus 是 K8s 环境的附加层。首次安装时应定义数据采集参数和数据采集时间间隔。Prometheus 既能实时监控 K8s 节点,也能对监控数据进行定时分析。Prometheus 也可以针对节点失效等故障发送预警。

1.3 Prometheus Operator

很多用户会混淆 controller 和 operator。K8s Operator 是指 Controller 向 K8s API 中添加新的对象、配置管理 Prometheus 等应用的模式。简而言之,operator 是针对特定领域的 controller。

PrometheusOperator 简化了 Prometheus 在 K8s 中的运行,不需要改变 K8s 的配置。使用 Prometheus Operator 可以轻松监控 K8s 的服务。可以通过预定义的.yml 文件运行 Prometheus。Prometheus Operator 能够创建、配置并管理 K8s 上的所有监控实例。部署新应用时,K8s 会创建新的 pod(容器)。创建完毕后,原有 pod 会被销毁。Prometheus 持续监控 API,如发现不一致,则基于服务或 pod 变化创建新的 Prometheus 配置。

1.4 核心组件

作为一款稳健的监控工具,Prometheus 从服务上拉取数据,不需要服务主动推送数据。不过 Prometheus 提供推送入口,但无法拉取数据时可以接受服务推送上来的数据。

此外,Prometheus 支持将时间序列与指标名称和键值对关联起来,简化了对多云端的监控。Prometheus 不仅监控应用全局,还能钻取到微服务层面。用户可通过查询功能管理数据,了解应用状况;也可以使用 PromQL 创建图表和表格,实现数据可视化,并根据具体参数生成预警。

Prometheus 的 Web 控制台展示了所有功能和工具。用户可通过正则表达式和高级 PromQL 检索条件创建数据集和预警。Prometheus 还支持外网访问。

1.5 优势

Prometheus 最大的优势在于简单灵活,可以实现监控的多维数据模型。用户可以轻松搭建容器集群的监控框架,还可以结合 Grafana,进一步提高监控数据的可视化水平。

Prometheus 可以通过 K8s 的本地服务发现配置采集 node、pod 和服务指标。用户可直接定义表达式,创建预警,不需要在不同的监控系统中来回切换。

Prometheus 的抓取能力能够集成到 K8s、Docker 和 StatsD 等工具中。用户还可以通过 Web GUI 配置预警、管理图表。

不过 Prometheus 也存在不足:数据模型受限。Prometheus 默认的时序数据采集模型有利有弊:一方面,这种模型有助于按照标准格式采集数据;另一方面,标准化数据格式导致数据模型受限。Prometheus 通过 discovery 机制与 K8s 保持通信,因此存在延迟。

二、K8s 监控之 Sensu

2.1 简介

Sensu 是多云端容器基础设施监控工具。Sensu agent 是跨平台事件生成器,用户可通过执行 service check 监控系统和服务的健康状况,同时采集分析 metrics,不仅提供预警或事件管理功能、监控 API、客户端库以及多脚本或编程语言插件,还支持自定义工作流,丰富了 Sensu 能力。

Prometheus 通过拉取的方式主动抓取数据,而 Sensu 则采用消息总线的通信机制,通过发布 / 订阅(Pub/Sub)的方式推送或拉取数据。

2.2 工作原理

Sensu 使用本地插件从 StatsD 库、Prometheus exporter、Nagios 插件、SNMP 陷阱等主流程序中采集数据。不同于 Prometheus 等其他监控工具,Sensu 开箱即用,支持多云端环境,用户配置框架后即可提供高可用性。

Sensu 提供 event filter、mutator 和 operator handler,支持创建并自动化模型工作量。这样,外部监控工具的数据便可与 Sensu 的监控数据整合,形成基于事件的监控路径。

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

2.3 核心组件

Sensu 针对 K8s 容器优化了自动发现能力。用户可针对 K8s 和 Docker 等容器环境轻松配置监控 check 和 collector,也可以针对 K8s 所有组件和运行在 K8s 上的应用配置多个 check。

Sensu 也支持本地集成和插件,可以与日志工具和 Prometheus 同时使用。用户可同时运行 Sensu 和 Prometheus,处理不同的数据集。Sensu 可以采集 StatsD metrics,并将采集结果写入 Prometheus。

Sensu 还能在 K8s 环境中运行。假设一开始将 Sensu 部署在某个容器中,后来决定将整个应用迁移到其他容器环境中。迁移完成后,Sensu agent 依然能够在新的环境中正常运行,也能被 Sensu 发现,因为 Sensu 具备自动发现机制。

2.4 在 K8s 中的应用

Sensu 可扩展性强,可随着部署应用和云环境的增加不断扩展,提供具体的功能监控服务。Sensu 监控对象的数量没有上限,也不会因为监控对象的增加变得更加复杂。

三、K8s 监控之 Sensu+Prometheus

同时运行 Sensu 和 Prometheus 能够提高监控的可见性,实现各自功能的优势互补。

3.1 工作原理

SensuPrometheus Collector 是 Sensu Check 插件,聚合从 Prometheus exporter 或 Prometheus query API 抓取的数据。采集的数据以 Influx(默认)、Graphite、JSON 格式存储在 STDOUT 中。

SensuPrometheus Collector 集成了 Sensu 的工作量自动化能力和 Prometheus 的数据抓取能力。用户可根据需求自行设计实现代码和预警接收时间。Sensu 还可以将采集到的 metrics 数据存储到 InfluxDB、Graphite 和 Prometheus 等外部时序数据集中。

3.2 安装 Sensu PrometheusCollector

用户可以通过 Sensu 的资产索引库 Bonsai 发现、下载、共享资产。点击 Bonsai 信息页面的下载按钮,下载 Sensu 后端平台和架构的资产定义。收到 check、filter、mutator 或 handler 请求时,Sensu 会根据资产定义下载验证资产。

下载资产定义后,可以通过 Sensu 的资源管理命令行工具 sensuctl 进行资产注册,然后创建监控工作流。

下方是 Prometheus collector 的资产定义及相应的 Linux sensuctl 命令:

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

下方为 Prometheus Collector 的 check 实例:

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu

3.3 优势

同时运行 Sensu 和 Prometheus 具有下列优势:

  • 既能监控 K8s 集群的健康状况又能动态监控周边基础设施的健康状况,并采集相关指标。

  • 既能实现问题自动发现,又能通过自动化工作流简化监控流程。

  • 同时运行 Prometheus 和 Sensu 能够获得更多上下文信息,实现更细粒度的数据抓取分析。

  • Sensu 采用标准通信密码,可通过单个 agent 安全采集传输数据。

  • 便于管理配置监控设置。

  • 能够监控整个基础设施。

四、结论

Sensu 能够监控整个基础设施,且定制化水平高,上下文更丰富。Prometheus 模型稳健,能够实现深度数据钻取;Sensu 则采用行业标准技术和格式(如 Nagios 和 StatsD),监控整个基础设施。Sensu 能够与 Prometheus 相互补充,提供更加丰富的上下文信息。

随着我们对软件依赖程度的加深,软件的可用性和故障修复时间对企业的存活非常重要。因此,只有充分了解系统才能克服这些挑战,基础设施和应用监控正是关键的一环。要想充分利用 K8s 的能力,必须实施统一的监控解决方案,实现新老技术的有效衔接。

评论

发布