事件监控可视性轻松实现:使用 InfluxDB 和 Grafana 进行 Sensu 检查指标提取

导航至

监控动态、分布式环境往往会导致寻求可扩展性的开发者选择昂贵的监控解决方案,但您的监控解决方案不一定要昂贵。《Sensu》、《InfluxDB》和《Grafana》——开源工具及其企业级对应产品——可以协同工作,创建一个涵盖事件监控、数据摄取和仪表板的全套可扩展监控解决方案。

Monitoring solution - InfluxDB, Sensu, Grafana

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

什么是 InfluxDB?

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

全球有超过 260,000 个 InfluxDB 实例正在使用中,涵盖多个 用例(DevOps 监控、物联网和传感器监控、实时分析、网络监控和机器学习)以及多个行业。由于它是开源项目,因此如果您需要时间序列数据库,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时间序列分析和可视化,它提供了对您基础设施的批判性和方便的概述,因为“一网打尽”的方法可以简化您的流程和遥测。

Grafana dashboard

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

在上面的仪表板中,对于Grafana来说只有一个数据源,因为我们让Sensu做所有繁重的工作。这里显示的Sensu检查显示了来自Graphite和InfluxDB的指标,而StatsD守护进程跟踪所有API调用和请求率。

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

InfluxData在2019年Sensu峰会上的研讨会

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

前往Sensu峰会(9月9日至10日在俄勒冈州波特兰)的InfluxData展位了解更多信息。