使用 Graphite、StatsD 和 CollectD 跟踪统计数据简介

2023-11-13

介绍

有很多理由可以解释为什么收集有关服务器、应用程序和流量的统计数据是个好主意。收集和组织数据可以让您对有关扩展、故障排除和跟踪配置中的痛点的决策充满信心。

有多种工具可用于跟踪我们机器上的指标,并且它们通常被委托给流程的某一小部分。我们可以将这些工具连接在一起,创建一个用于收集、记录和显示结果的系统。

在本指南中,我们将讨论一些技术,这些技术将允许您收集、存储和可视化服务器和应用程序生成的数据。

我们会讨论Graphite,一个由多个组件组成的图形库,可用于随着时间的推移呈现数据的可视化表示。我们还将调查collectd,一个系统统计守护进程,可以收集有关正在运行的服务器的近实时信息。我们名单上的最后一个将是StatsD,一个灵活的统计聚合器,可用于收集和组织任意数据。

在后面的指南中,我们将介绍如何在 Ubuntu 14.04 服务器上安装和配置这些组件,以便您启动和运行。

我们为什么跟踪数据?

我们需要确定的第一件事是我们在服务器或应用程序环境中跟踪数据的原因。

首要原因实际上非常简单:我们拥有的数据越多,我们就越有可能了解在任何特定时刻发生的事情。这使我们具有非凡的能力,可以用硬数据支持我们的决策,并提前了解更改是否可能针对正确的组件。跟踪统计信息为我们提供了应用程序日志中可能不存在的补充信息来源。

大多数(但不是全部)日志系统无法关联来自各种应用程序的数据或将事件连接到某些系统状态,因为它们基本上代表独立的应用程序输出。这使得建立对事件周围环境的整体看法变得困难。

我们可以想象一下,您的数据库服务器发生了故障。在阅读日志时,您可能会注意到,在 UTC 时间 15:35:28,您的 MySQL 服务因 OOM(内存不足)错误而被终止。我们现在知道内存使用量是问题所在,但我们可能不知道是什么导致了以前稳定的服务器内存使用量激增。

如果我们跟踪有关服务器和应用程序的数据,我们可以开始将明显不同的系统数据组合在一起,以帮助我们了解问题发生时的环境到底是什么样的。我们可能会发现内存使用量稳步攀升,这可能是由于内存泄漏造成的。如果我们有有关应用程序级内存使用情况的信息,我们很可能可以准确地看出哪个程序是罪魁祸首。我们还可能会看到出现了一个不寻常的峰值,这可能意味着完全不同的东西。

在不同的场景中,我们可以看到系统在部署之前和之后的样子。如果新代码创建了一些奇怪的条件,我们可以看到它对其他组件的影响,并将其性能与旧代码进行比较。我们可以识别新代码显示改进的地方以及可能犯错误的地方。

通过智能数据收集,我们可以将我们的系统视为一个系统,而不是一组松散的不相关组件。

石墨组件

我们将在这里稍微倒退一下,首先讨论图形库 Graphite。然后我们将回顾一些 Graphite 可以用来获取数据的软件。

Graphite 是一个图形库,负责存储和渲染数据的视觉表示。这意味着 Graphite 需要其他应用程序来收集和传输数据点。

Graphite 项目本身由几个不同的组件组成,每个组件都有一个特定的、有针对性的目的。

石墨网络应用程序

Graphite 安装中最明显、最动态的组件是 Graphite Web 应用程序。

您可以在此处设计绘制数据的图表:

Graphite example graph

Graphite 为您提供了一个非常灵活的图形设计界面。您可以组合不同类型的指标,控制标签、字体、颜色和线条属性,并且可以随意调整数据大小和操作数据。

这里要消化的关键思想是石墨renders基于它收到的数据点和您给出的指示绘制图表。它不只是打印出图表然后丢弃数据。您可以即时以任何您想要的数据呈现数据。

Web 应用程序还允许您保存图形属性和布局,以便您可以使用您想要的所有设置调出监控界面。您可以拥有任意数量的仪表板视图,这意味着您可以为每台计算机或应用程序拥有单独的仪表板。如果您需要将这些数据关联起来,只需拖放图表即可组合显示。

但灵活性并不止于此。 Graphite 允许您在裸 URL 处呈现图形,以便嵌入到其他界面中。您还可以以非图形表示形式(例如 JSON 或 CSV)导出数据,或输出嵌入数据信息的 SVG。

现在您已经了解了获取数据后可以对数据执行哪些操作,接下来我们来谈谈其他 Graphite 组件,看看允许我们执行此操作的流程。

Carbon

Carbon 是 Graphite 配置的存储后端。单个 Graphite 配置将具有一个或多个 Carbon 守护进程,负责处理由收集和传输统计数据的其他进程发送的数据(收集器不是 Graphite 的一部分)。

有多种不同的 Carbon 守护进程,每种守护进程都以不同的方式处理数据。其中最基本的称为carbon-cache.py。这个守护进程很简单。它侦听端口上的数据,并在数据到达时以有效的方式将其写入磁盘。

它在数据到来时存储数据,然后在预定的时间段后将其刷新到磁盘。重要的是要认识到 Carbon 组件处理数据接收和刷新过程。它不处理实际的存储机制。剩下的就是whisper我们稍后将讨论的组件。

The carbon-cache.py守护进程被告知要使用什么格式、协议和端口。它还被告知使用什么数据保留策略来存储数据。这些都交给了耳语。对于大多数基本配置,单个carbon-cache.py实例足以处理数据接收。

随着您的设置的增长,可以同时运行多个实例。这些可以通过以下方式来平衡carbon-relay.py or carbon-aggregator.py守护进程在前面。

The carbon-relay.py守护进程可用于将请求发送到所有后端守护进程以实现一些冗余。它还可以用于跨不同的数据分片carbon-cache.py实例将读取负载分散到多个存储位置。

The carbon-aggregator.py守护进程可以缓冲数据然后将其转储到carbon-cache.py经过一段时间。这可以帮助减少统计处理对系统的影响,但会牺牲细节。

Whisper

Whisper 是 Graphite 用于存储其发送的信息的数据库。

它非常灵活,可以非常详细地存储时间序列数据。它以不同的详细程度创建不同的档案,因此在实际使用中,当信息超过某些配置的老化阈值时,信息会优雅地降级为较低的分辨率。

例如,您可以针对某个指标每秒存储一个数据点。您可以悄悄告诉我们,此详细数据应保留 5 小时。您可能还有一个存储较低分辨率数据的存档。它可能每分钟只存储一个点并保留 6 个月。

较低分辨率档案中的每个点都是根据较高分辨率档案中记录的相同数据计算得出的。您可以根据需要拥有任意数量的不同分辨率和保留率的档案。您可以根据所跟踪的指标类型配置 Whisper 如何计算低分辨率存档的数据。

例如,度量可能是某个事件在短时间内发生的次数的统计。要以较低的分辨率创建较大时间范围的点,您可以将较高分辨率存档的数据点相加,以汇总较大时间范围内的数据值。

Whisper 可以根据指标的性质以其他方式计算较低分辨率的数据。例如,某些数据通过平均进行概括,而其他数据可能会跟踪最大值。对于平均值,根据较高分辨率点计算实际平均值以创建较低分辨率点。对于最大值,应该保留最高的值,其余的应该扔掉,以保持数字的意义。

Whisper 在收到数据时计算并记录较低分辨率的数据(在收集必要值所需的时间之后)。它只是收集执行数据聚合技术所需的数据点(平均值、最大值等),然后将其写入。

当 Graphite 查询数据来渲染图形时,将使用包含所请求时间范围的最高分辨率存档。

统计数据收集和交付

正如我们上面提到的,Graphite 本身并不关心数据收集。相反,它依赖于从其他服务获取信息。这使得项目能够保持一个狭窄的焦点,并允许它与各种输入服务进行模块化交互。

下面,我们将讨论 Graphite 理解的协议,然后讨论两种流行的收集程序,collectd and StatsD,可用于将数据传递给 Carbon 进行处理。

协议

您可以使用三种不同的协议将数据发送到 Graphite。

首先,Graphite 接受并可以理解纯文本。这是最灵活的格式,因为几乎任何应用程序或服务都可以生成文本输出,并且可以用于提供 Graphite 或中间工具。

纯文本消息包括有关指标名称、给定值以及该值的时间戳的信息。这些消息可以通过指定为纯文本的端口直接发送到 Carbon,无需额外的格式。

由于 Graphite 是用 Python 创建的,因此 Graphite 还接受“pickle”数据序列化格式。此 Python 标准允许您在单个事务中缓冲和发送多个时间值。

Graphite 还可以使用 AMQP 消息接受数据。这可以让您更优雅地处理大量数据。通过此配置,您可以输入大量统计信息并处理远程主机之间的网络连接中断,而不会丢失数据。

Collectd

收集有关服务器的详细信息的最简单方法之一是使用名为collectd 的守护程序。

Collectd 可以收集有关服务器环境的许多不同组件的统计信息。它允许您轻松跟踪内存使用情况、CPU 负载、网络流量等常见指标。这使您可以轻松地将事件与系统状态关联起来。

除了收集标准系统信息之外,collectd 还有一个扩展其功能的插件系统。这意味着您可以轻松跟踪 Apache、Nginx、iptables、memcache、MySQL、PostgreSQL、OpenVPN 等常见软件。

Collectd 提供了一种从服务器上的预构建应用程序和公共服务获取数据的简单方法。这应该用于跟踪您的基础设施和您所依赖的服务的行为。

StatsD

StatsD 是一个非常简单的守护进程,可用于向 Graphite 发送其他数据。这种方法的好处是,为您正在创建的应用程序和系统构建统计跟踪变得微不足道。

StatsD 通过在接口上侦听代表单个数据点的简单 UDP 数据包来进行操作。这意味着它可以以无连接的方式接受大量信息。然后它可以聚合收到的值并将其传递给 Graphite。

该系统允许您大量发送统计数据,而不必担心增加应用程序延迟。 StatsD 服务将收集所有数据,对其进行聚合,然后在预期的时间范围内将良好的汇总数据点发送到 Graphite。

由于这些优点,它实际上是发送到 Graphite 的任何类型数据的良好中介。但我们利用它的主要方式是监控我们自己创建的应用程序和工具。

StatsD 非常适合此目的,因为它是接受 UDP 流量的通用守护程序。有许多采用各种编程语言的不同客户端库可以将数据直接发送到 StatsD 实例。这意味着您正在构建的应用程序可以轻松发送要跟踪的数据。

结论

到现在为止,您应该对不同的统计数据和图形实用程序的集合如何协同工作以全面了解您的环境有了相当好的了解。

在下一篇指南中,我们将讨论如何在 Ubuntu 14.04 服务器上安装 Graphite。之后,我们将连接collectd and StatsDGraphite 提供统计数据以进行监控。

作者:Justin Ellingwood
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Graphite、StatsD 和 CollectD 跟踪统计数据简介 的相关文章

  • 监视目录列表的更改?

    在 unix 系统上 我如何监视 例如 tail 的工作原理 目录中对文件所做的更改 创建新文件或大小更改等 寻找命令行工具而不是要安装的东西 大多数 UNIX 变体都有一个 API 但它没有标准化 在Linux上 有inotify 在命令
  • 使用 WMI 和 C# 检测机器是否在线或离线

    我使用vs2008 winxp 在局域网中使用Win2003服务器 我想要在winxp中安装一个应用程序来检测win2003机器是否在线或离线 以及启动时是否离线 我有这个参考资料 还有更多参考资料 代码示例和最佳实践吗 http dani
  • MySQL 返回连续相同结果的第一条和最后一条记录

    我正在使用 MySQL 并有一个名为 结果 的表 该表存储监视器的结果 该监视器确定服务在特定时间是启动还是关闭 result id service id time stamp result 1 1 0000 00 00 00 01 00
  • 最好的流量/性能/使用情况监控模块?

    是否有任何开源 或者我猜是商业 软件包可以插入您的站点以进行监控 我想要一些可以连接到我们的 ASP NET 站点并用于提供以下内容的报告的东西 随着时间的推移表现 电流负载 页面流量 SQL性能 PU时间监控 最好是用 C 加上一些性感的
  • java缓存hashmap每天都会过期

    我想要一个HashMap
  • 有什么方法可以显示文件更改(例如使用 pyinotify)?

    有什么方法可以打印监视的文件修改吗 让我们举个例子 我正在监视 file txt Pyinotify 可以告诉我它已被修改 但它似乎无法输出发生了什么更改 我错了吗 如何查看我正在监视的文件发生了哪些更改 预先非常感谢 抱歉我的英语不好 T
  • 如何在Linux中监控串口数据?

    我正在调试与串行设备的通信 并且需要查看双向流动的所有数据 看起来这在 Linux 上应该很容易 因为串行端口由文件表示 有没有什么方法可以让我做一种 双向三通 我告诉我的程序连接到一个管道 将数据复制到文件中 并将其洗牌到 从实际的串行端
  • 使用 tcpdump 监控流量时丢失 UDP 片段

    我所在的本地 LAN 上只有 8 台连接的计算机 使用 netgear 24 端口千兆位交换机 网络负载非常低 所有相关节点 运行 slackware 11 上的发送 接收缓冲区已设置为 16mb 我还在每个节点上运行 tcpdump 来监
  • Spring Boot 生产监控

    Spring Boot Actuator公开了已部署容器的大量指标和信息 然而 生产操作人员可能不想在浏览器上盯着纯 JSON 对象 在生产中监控这一点的良好 标准 工具是什么 这包括图表 警报触发器等 spring boot admin
  • 有什么方法可以监控 Airflow DAG 的执行时间吗?

    我想将 Airflow 与 Statsd 和 DataDog 一起使用来监控 DAG 是否需要例如是之前执行的两倍 所以 我需要某种用于 DAG 的实时计时器 或者operator 我知道 Airflow 支持一些指标 https airf
  • beanstalkd 的统计数据/监视器/检查器

    有谁知道有一个可以监控 beanstalkd 队列的应用程序吗 我正在寻找一些可以显示管道和工作统计信息并允许您检查详细信息的东西 我对语言 平台并不是很挑剔 只是想在编写自己的语言 平台之前知道是否有可用的东西 所有这些以及至少另外两个都
  • 监控显卡使用情况[关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 当我运行某个应用程序时 如何监控显卡的使用情况 我想查看我的应用程序使用 GPU 的情况 如果您在 Visual Studio 201
  • 使用 VisualVM 和 JMX 进行远程监控

    我想使用 jvisualvm 或 jconsole 监视远程运行的 java spring boot 应用程序 在本地运行时 我可以在 jvisualvm 和 jconsole 中看到托管 bean 远程运行时我无法连接 我用几个不同的ja
  • TFDMoniFlatFileClientLink 不规则地不跟踪到文件

    我有一个TFDMoniFlatFileClientLink在表单上 文件名设置为d temp monitor txt 追踪 真 TFDConnection Params MonitorBy mbFlatFile 这有时有效 有时则不跟踪任何
  • ServiceMix 中 Apache-Camel 路由的管理和监控

    作为 Camel 和 ServiceMix 的用户 我经常需要监控这些工具以进行开发 我主要使用 JConsole 从 ServiceMix 和 Camel 访问 MBean 它为 ESB 开发人员提供了一些非常有用的指标 我还使用 kar
  • 什么是卓悦?

    今天下午我在看WWDC视频时 听到了Bonjour这个词 所以我只想知道Apple中的Bonjour是什么 这只是为了澄清概念 Thanks 在计算领域 Bonjour 以前称为 Rendezvous1 http en wikipedia
  • 如何在 Linux 中获取 Apache 的“每秒请求数”?

    在 Windows for ASP 中 您可以获得 perfmon 但是 如何获得 每秒请求数 Linux 下的 Apache 这是我编写的一个简短的 bash 脚本 用于对请求率进行采样 基于迪克塞的建议 https stackoverf
  • Docker容器CPU使用率监控

    根据 docker 的文档 我们可以通过以下方式获取 docker 容器的 CPU 使用率码头工人统计命令 CPU 列将给出容器正在使用的主机 CPU 的百分比 假设我限制容器使用 50 的主机单个 CPU 我可以通过 cpus 0 5 选
  • UNIX系统调用监视器

    如何监控进程的系统调用 Check strace http linux die net man 1 strace 在最简单的情况下 strace 运行指定的命令直到退出 它拦截并记录进程调用的系统调用以及进程接收的信号 每个系统调用的名称
  • 记录 Google Cloud SQL PostgreSQL 实例上的慢速查询

    我工作的公司使用 Google Cloud SQL 来管理生产中的 SQL 数据库 我们遇到了性能问题 我认为查看 监控高于特定阈值 例如 250 毫秒 的所有查询是一个好主意 除其他外 通过查看PostgreSQL 文档 https ww

随机推荐

  • 如何在 Ubuntu 18.04 上安装 Pip

    Pip 是一个包管理系统 可简化用 Python 编写的软件包 例如 Python 包索引 PyPI 中的软件包 的安装和管理 Ubuntu 18 04 上默认不安装 Pip 但安装非常简单 在本教程中 我们将向您展示如何使用 Ubuntu
  • 如何在 Debian 9 上安装 Go

    Go 是 Google 创建的一种现代开源编程语言 用于构建可靠 简单 快速 高效的软件 许多流行的应用程序 包括 Kubernetes Docker Teraform 和 Grafana 都是用 Go 编写的 在本教程中 我们将引导您完成
  • 如何在 Ubuntu 20.04 上安装 Sublime Text 3

    崇高的文字是用于网络和软件开发的流行文本和源代码编辑器 它速度非常快 并且具有许多开箱即用的强大功能 可以通过安装新插件和创建自定义设置来增强和自定义该应用程序 本文介绍如何在 Ubuntu 20 04 上安装 Sublime Text 3
  • 如何在 Ubuntu 20.04 上安装 Chromium Web 浏览器

    Chromium是一款专为现代网络打造的快速 稳定且安全的浏览器 它是许多浏览器的基础 包括世界上最流行的网络浏览器谷歌浏览器 Chromium 和 Chrome 之间的主要区别在于 Chromium 是开源的 Chromium 不包含专有
  • 如何在 Debian 10 Linux 上安装 Git

    Git 是世界上最流行的分布式版本控制系统 被许多开源和商业项目使用 使用 Git 您可以与其他开发人员协作处理项目 跟踪代码更改 恢复到之前的阶段 创建分支等等 它最初是由莱纳斯 托瓦尔兹Linux内核的创建者 本教程介绍如何在 Debi
  • 如何在 CentOS 7 上安装和配置 Nagios

    Nagios 是最流行的开源监控系统之一 Nagios 保留整个 IT 基础设施的清单 并确保您的网络 服务器 应用程序 服务和流程正常运行 如果发生故障或性能不佳 Nagios 将通过各种方法发送通知警报 本教程介绍如何在 CentOS
  • 如何在 Ubuntu 18.04 上安装 Odoo 13

    Odoo 是一款流行的开源商业应用程序套件 它提供一系列应用程序 包括 CRM 电子商务 网站构建器 计费 会计 制造 仓库 项目管理 库存等等 所有这些都无缝集成 Odoo根据使用案例和可用技术 可以通过多种方式安装 安装 Odoo 最简
  • 如何在 Ubuntu 18.04 上安装和配置 Squid 代理

    Squid 是一个功能齐全的缓存代理 支持流行的网络协议 如 HTTP HTTPS FTP 等 Squid 主要用于通过缓存重复请求 过滤 Web 流量和访问地理限制内容来提高 Web 服务器的性能 本教程将引导您完成在 Ubuntu 18
  • 如何在 Ubuntu 20.04 上安装 Node.js 和 npm

    Node js 是一个基于 Chrome 的 JavaScript 构建的跨平台 JavaScript 运行时环境 旨在在服务器端执行 JavaScript 代码 它通常用于构建后端应用程序 但它也作为全栈和前端解决方案而流行 npm 是
  • 如何在 Ubuntu 20.04 上安装 Gitea

    Gitea 是一个用 Go 编写的快速且易于使用的自托管 git 服务器 它包括存储库文件编辑器 项目问题跟踪 用户管理 通知 内置 wiki 等等 Gitea是一个轻量级应用程序 可以安装在低功耗系统上 如果您正在寻找内存占用小得多的 G
  • 如何在 CentOS 8 上安装 MariaDB

    MariaDB 是一个开源关系数据库管理系统 向后兼容 是 MySQL 的二进制直接替代品 它是由 MySQL 的一些原始开发人员和社区中的许多人开发的 在本教程中 我们将解释如何在 CentOS 8 上安装和保护 MariaDB 10 3
  • 如何在 Debian 9 上安装 Memcached

    Memcached 是一个免费开源的高性能内存键值数据存储 它主要用于通过缓存数据库调用结果中的各种对象来加速应用程序 在本教程中 我们将引导您完成在 Debian 9 上安装和配置 Memcached 先决条件 您需要以以下身份登录具有
  • 如何在 Ubuntu 20.04 上安装和配置 Squid 代理

    Squid 是一个功能齐全的缓存代理 支持流行的网络协议 如 HTTP HTTPS FTP 等 它可用于通过缓存重复请求 过滤 Web 流量和访问地理限制内容来提高 Web 服务器的性能 本教程介绍如何在 Ubuntu 20 04 上设置
  • Linux 中的最后一个命令

    如果您正在管理多用户系统 您通常需要知道谁 何时 从何处登录到计算机 last是一个命令行实用程序 显示有关系统用户上次登录会话的信息 当您需要跟踪用户活动或调查可能的安全漏洞时 它非常有用 本文介绍了如何使用以下方式审核登录系统的人员 l
  • 在 CentOS 8 上安装 Odoo 13

    Odoo 是世界上最受欢迎的一体化商业软件 它提供一系列业务应用程序 包括 CRM 网站 电子商务 计费 会计 制造 仓库 项目管理 库存等等 全部无缝集成 本教程介绍了如何安装Odoo13 来自 CentOS 8 计算机上的 Python
  • 如何在 Ubuntu 18.04 上安装 Tomcat 8.5

    Apache Tomcat 是 Java Servlet JavaServer Pages Java 表达式语言和 Java WebSocket 技术的开源实现 它是当今世界上采用最广泛的应用程序和 Web 服务器之一 Tomcat 使用简
  • Java中的抽象工厂设计模式

    欢迎使用 java 示例中的抽象工厂设计模式 抽象工厂设计模式是创建模式之一 抽象工厂模式几乎类似于工厂模式但事实上它更像是工厂中的工厂 抽象工厂 If you are familiar with factory design patter
  • 如何使用 Rsync 同步本地和远程目录

    介绍 Rsync 这代表远程同步 是一款远程与本地文件同步工具 它使用一种算法 通过仅移动已更改的文件部分来最大程度地减少复制的数据量 在本教程中 我们将定义 Rsync 回顾一下使用时的语法rsync 解释如何使用 Rsync 与远程系统
  • 弹簧@Component

    Spring Component 注解用于将一个类表示为 Component 代表着Spring框架将自动检测这些类依赖注入当使用基于注释的配置和类路径扫描时 弹簧组件 通俗地说 组件负责一些操作 Spring 框架提供了另外三个在将类标记
  • 使用 Graphite、StatsD 和 CollectD 跟踪统计数据简介

    介绍 有很多理由可以解释为什么收集有关服务器 应用程序和流量的统计数据是个好主意 收集和组织数据可以让您对有关扩展 故障排除和跟踪配置中的痛点的决策充满信心 有多种工具可用于跟踪我们机器上的指标 并且它们通常被委托给流程的某一小部分 我们可