NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

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

  • 2020-02-07
  • 本文字数:2897 字

    阅读完需:约 10 分钟

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 的监控数据整合,形成基于事件的监控路径。


1569550660034042757.jpeg

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 命令:


1569550673314067543.jpeg


1569550678724013411.jpeg


1569550684204096375.jpeg


下方为 Prometheus Collector 的 check 实例:


1569550691364033465.jpeg


1569550697234023995.jpeg

3.3 优势

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


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

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

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

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

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

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

四、结论

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


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


2020-02-07 20:431721

评论

发布
暂无评论
发现更多内容

从0为你讲解,什么是服务降级?如何实现服务降级?

做梦都在改BUG

细节拉满,80 张图带你一步一步推演 slab 内存池的设计与实现

bin的技术小屋

内存管理 Linux Kenel 内核 内存池

阿里内部最新发布的并发图册+JDK源码速成笔记,终于解脱束缚了

开心学Java

Java jdk 高并发

肝完阿里最新Java并发编程全优笔记,我成功晋升公司架构组

程序员小毕

Java 源码 程序员 面试 并发编程

一路披荆斩棘腾讯6面面经(已拿offer)大厂远没想象中的难

小小怪下士

Java 程序员 面试 后端

浅谈 Spring 如何解决 Bean 的循环依赖问题

做梦都在改BUG

Java spring 循环依赖

深度学习基础入门篇[一]:神经元简介、单层多层感知机、距离计算方法式、相似度函数

汀丶人工智能

人工智能 机器学习 深度学习 多层感知机

Service进阶

智趣匠

service intentservice 轮询

火了!北大学霸爆肝3个月的算法小抄完整笔记,GitHub疯狂转发

做梦都在改BUG

Java 数据结构 算法

5.5G,运营商能接受吗?

脑极体

5.5G

熬夜肝完! 阿里P8的Java进阶知识典藏版,我从18K飙到30K

程序知音

Java 编程语言 java面试 java架构 Java面试题

涨薪跳板! 2023阿里突击版Java面试宝典

程序知音

Java 编程语言 java面试 java架构 后端技术

一个神奇的需求:doc批量转docx,1行Python代码实现

程序员晚枫

Python word 自动化办公

设计模式之美--经常被用错的KISS、YAGNI原则

GalaxyCreater

设计模式

阿里大佬力荐K8s项目实战笔记!图文并茂带你深度解析Kubernetes

做梦都在改BUG

Java Kubernetes k8s

不敲一行代码,用ChatGPT开发App

FN0

移动开发 ChatGPT

为 NGINX 配置免费的 Let’s Encrypt SSL/TLS 证书

NGINX开源社区

创业公司如何不沦为OpenAI“死侍军团”:训练小众数据,服务特定用户

B Impact

阿里CTO最新分享神仙级“多线程手册”全套笔记,涵盖了多线程相关所有知识点

开心学Java

Java 线程 多线程 阿里

Django笔记一之运行系统、创建视图并访问

Hunter熊

django

业务防资损,质量保障的第一要务!

老张

业务价值 交付质量 防资损

字节资深架构师用7大部分13章节,彻底讲透SpringBoot生态体系

做梦都在改BUG

Java spring 微服务 Spring Boot 框架

前端面试实录HTML篇

控心つcrazy

html 面试 前端 HTML5, CSS3

卓越工程之开发过程管理

agnostic

卓越工程

【算法数据结构专题】「延时队列算法」史上手把手教你针对层级时间轮(TimingWheel)实现延时队列的开发实战落地(上)

洛神灬殇

4月月更 时间轮(TimeWheel) 算法指南 技术调整

OneCode :如何构建部署低代码引擎工程

codebee

月内狂飙 50%的 ZBC ,连续登顶Solana 链交易量排行榜

威廉META

真的香!腾讯SpringBoot高阶笔记,限时开源48小时

程序知音

Java 微服务 编程语言 springboot java架构

Python数据分析库介绍及引入惯例

timerring

Python pandas

负载均衡算法的实现

王玉川

c++ 负载均衡 高可用 高并发 一致性哈希

新一代分布式任务调度框架

程序员大彬

Java 面试

Kubernetes监控实践(2):可行监控方案之Prometheus和Sensu_文化 & 方法_PingCAP技术团队_InfoQ精选文章