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

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

拓展阅读:Kubernetes监控实践(1):K8s的工做原理与监控实践ios

1、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检索条件建立数据集和预警。编程语言

1.5 优点

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

Prometheus能够经过K8s的本地服务发现配置采集node、pod和服务指标。用户可直接定义表达式,建立预警,不须要在不一样的监控系统中来回切换。

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

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

2、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监控对象的数量没有上限,也不会由于监控对象的增长变得更加复杂。

3、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安全采集传输数据。
  • 便于管理配置监控设置。
  • 可以监控整个基础设施。

4、结论

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

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

做者:STEFAN THORPE

原文连接:https://dzone.com/refcardz/monitoring-kubernetes

首发于UAVStack智能运维

相关文章
相关标签/搜索