事件监控可视化变得简单:Sensu Check 指标提取与 InfluxDB 和 Grafana

导航至

监控动态、分布式环境通常会导致开发者在寻求可扩展性时,需要选择成本高昂的监控解决方案,但您的监控解决方案不必如此昂贵。SensuInfluxDBGrafana - 具有企业级对应产品的开源工具 - 可以协同工作,创建一个完整的、可扩展的监控解决方案,包括事件监控、数据摄取和仪表板。

Monitoring solution - InfluxDB, Sensu, Grafana

使用开源工具收集、记录和可视化您的指标

什么是 InfluxDB?

InfluxDB 是必不可少的时间序列工具包 — 一种开源时间序列数据库,旨在处理高写入和查询负载。它可以存储来自系统、传感器、队列、数据库和网络的指标、事件、日志、追踪 — 并且每秒可以摄取数百万个数据点。

全球有超过 260,000 个 InfluxDB 实例正在使用中,涵盖了多个行业的多种用例(DevOps 监控、物联网和传感器监控、实时分析、网络监控和机器学习)。由于 InfluxDB 是一个开源项目,如果您需要时间序列数据库,InfluxDB 是一个不错的起点。

与其他类型为时间序列而调整的数据库不同,InfluxDB 是专门为处理带时间戳的数据而构建的,使其易于累积、分析和对您的系统所检测的指标采取行动。

什么是 Sensu?

Sensu 是一个监控事件管道,用于收集、处理和路由不同类型的事件,包括发现、可用性、遥测和警报。该管道使 Sensu 非常强大且完全可自定义。

Sensu monitoring pipeline

Sensu:监控事件管道

Sensu 旨在满足现代云计算环境的需求而构建,在监控应用程序、服务和基础设施方面非常受欢迎。Sensu 框架由客户端和服务器应用程序组成,这些应用程序通过消息总线进行通信。

Sensu 在其领域中的与众不同之处在于其对管道的关注。您可以通过多种不同的方式进行收集,超越此范围,然后过滤、修改和处理指标。Sensu 后端具有 API。因此,如果您可以将您的事件格式转换为 Sensu 事件格式,Sensu 就可以摄取它。

什么是 Grafana?

Grafana 是一个开源指标分析和可视化套件。它最常用于可视化基础设施和应用程序分析的时间序列数据,但也可用于其他领域,包括工业传感器、家庭自动化、天气和过程控制。

如何使用 InfluxDB 和 Sensu 进行指标提取

Sensu 监控事件管道的免费和开源版本是 Sensu Go:它是原始 Ruby 项目的改进版本,在指标方面进行了一些改进。Sensu 提供了多种机制来监控性能指标。

  • StatsD 是一个指标聚合器,用于收集值,例如仪表、计数器、计时器和集合。每个 Sensu 代理都有一个嵌入式 StatsD 守护程序,用于监听 UDP 流量。
  • Sensu 服务检查是由 Sensu 客户端 执行的命令,用于监控条件或收集测量值。服务检查收集受监控节点上的数据,并遵循与 Nagios 服务检查相同的协议。
  • 每个 Sensu 代理都将运行该检查集合。然后,检查将输出该数据,生成退出代码,并指示特定状态。
  • Sensu 将解析该 STDOUT(标准输出)的输出并生成指标;因此,称为指标提取。
  • 您的堆栈越复杂,您就越有可能需要设置应用程序性能监控 (APM)网络和基础设施监控

Application performance monitoring and network infrastructure monitoring

Sensu 可以处理的监控类型包括

Sensu 目前支持四种不同的输出指标格式:InfluxDB、OpenTSDB、Graphite 和 Nagios。

指标类型(上面提到的每个数据库名称)是标识符,用于定义应将检查输出解析为哪种格式,并映射到相应的字段输出指标格式。

Sensu 检查配置

为了将指标摄取到 InfluxDB 中,我们定义了一个名为 check-cpu-influxdb 的检查。它将被设置为在您想要订阅的任何节点上每 10 秒运行一次。

Sensu check configuration - InfluxDB

Sensu 检查配置和事件数据

在上面的屏幕截图中

  • 底部的命令是一个简单的 shell 脚本,它将以 InfluxDB 行协议打印出 CPU 使用率
  • 屏幕左侧的最后两个字段指示将发生检查输出指标提取。
  • 生成的事件不仅包含执行上下文(例如状态、输出、持续时间),还包含有关受监控节点的实体信息,最重要的是,提取的指标。

现在我们已经在 Sensu 事件中收集了一系列指标点,我们可以将其发送到 InfluxDB。

Sensu InfluxDB integration snapshot

Sensu 如何与 InfluxDB 时间序列数据库集成

屏幕右侧的处理程序配置获取事件数据并调用 Go 二进制文件 Sensu InfluxDB Handler — 一个将指标发送到 InfluxDB 的 Sensu 事件处理程序。以下是处理程序如何与 Sensu 协同工作

  • Sensu 可以使用检查输出指标提取或 StatsD 监听器来收集指标。
  • 收集的指标通过事件管道,允许 Sensu 将指标传递到配置的指标事件处理程序。
  • InfluxDB 处理程序允许存储、检测和可视化来自 Sensu 的指标数据。
  • 处理程序接受配置选项,可以是命令行标志或环境变量。
  • 然后,可以在 Sensu 事件管道中进行额外的指标标签丰富。

Sensu monitoring event pipeline

监控事件管道概述

如上所示,监控事件管道数据流如下

  • Sensu 后端将发送服务检查以监控安装了 Sensu 代理的节点。
  • 代理将执行检查并以四种支持的格式中的任何一种提取指标。
  • 后端将接收该事件数据并通过监控事件管道传递它。
  • 在这个特定的用例中,您可以过滤此事件,仅当它包含指标时,才修改该事件以丰富任何指标标签并添加有关数据和指标来源的附加上下文。
  • 然后,您将通过将事件发送到时间序列数据库来处理它们。

代理接收的任何遥测事件都将由后端处理。这很重要,因为为了完全了解您的应用程序、系统、服务和基础设施,您可能需要从多个来源接收数据。当您添加不同的事件类型(如可用性和警报)时,您会庆幸管道足够动态,可以在同一框架下支持可重用性。

Sensu dashboard example

Sensu 仪表板,它优先处理关键事件而不是正常状态

虽然 Sensu 仪表板确实提供了对系统整体健康状况和状态的出色可见性,但它不会直接可视化时间序列数据。输入 Grafana 时间序列分析和可视化,它可以提供对您的基础设施的关键且便捷的概览,因为“all under one roof”方法可以简化您的工作流程和遥测。

Grafana dashboard

Grafana 仪表板显示时间序列分析

在上面的仪表板中,就 Grafana 而言,只有一个数据源,因为我们让 Sensu 完成了所有繁重的工作。此处显示的 Sensu 检查显示来自 Graphite 和 InfluxDB 的指标,而 StatsD 守护程序跟踪所有 API 调用和请求速率。

至于开发团队如何使用从 InfluxDB 中的指标收集检查中存储的数据,请参阅我们之前的博客文章 Sensu 和 InfluxDB:存储来自指标收集检查的数据 — 在其中我们还提供了设置教程,并介绍了 InfluxDB Sensu 插件提供的集成。

InfluxData 在 Sensu Summit 2019 的研讨会

如果您想了解更多关于使用 Sensu 和 InfluxDB 进行监控的信息,请不要错过 InfluxData 即将在今年 9 月于俄勒冈州波特兰举行的 Sensu Summit 期间举办的集成 Sensu 和 InfluxDB 的实践研讨会。届时,InfluxData 的 DevRel Noah Crowley 将展示如何设置 InfluxDB 以存储来自服务检查和性能指标的数据,使用 InfluxDB UI 从该数据创建可视化和仪表板,以及基于历史数据执行复杂的检查和警报。

请在 Sensu Summit(9 月 9-10 日,俄勒冈州波特兰)的 InfluxData 展位驻足,了解更多信息。