跳转到主要内容

为各种未由其他监控守护进程(或处理不佳)的各种内容收集Graphite指标数据

项目描述

graphite-metrics:未由其他监控守护进程(或处理不佳)的各种内容的指标收集器

项目核心是一个简单的守护进程(harvestd),它收集指标值并在每个间隔后将它们发送到graphite carbon守护进程(和/或其他配置的目标)。

包括用于处理以下内容的独立数据收集组件(“收集器”):

  • /proc/slabinfo,用于有用的可观察值,不是所有内容(可配置)。

  • /proc/vmstat和/proc/meminfo以一致的方式。

  • /proc/stat用于irq、softirq、forks。

  • /proc/buddyinfo和/proc/pagetypeinfo(内存碎片)。

  • /proc/interrupts和/proc/softirqs。

  • Cron日志以生成每个作业的启动/完成事件和持续时间,并将作业适配到指标名称的正则表达式。

  • 使用systemd及其cgroups进行每个系统服务的会计(对于较新版本,必须在system.conf中启用“Default…Accounting=”选项)。

  • sysstat 的 sadc 日志数据(可以使用类似 sadc -F -L -S DISK -S XDISK -S POWER 60 的命令来记录更多信息)通过 sadf 二进制文件和它的 JSON 导出(sadf -j,自 sysstat-10.0.something 开始支持,据我所知)。

  • iptables 规则“命中”数据包和字节计数器,来自 ip{,6}tables-save,通过单独的“table chain_name rule_no metric_name”文件映射,该文件应与防火墙规则一起生成(我使用 此脚本 来完成此操作)。

可以通过 setuptools/distribute graphite_metrics.collectors 入口点 添加额外的指标收集器,并通过常见的配置机制进行配置。

同样适用于数据点接收器(目的地 - 不一定是单个碳宿主),数据点处理器(修改/重命名/过滤数据点)和主循环,可以将主循环替换为异步(简单情况 - 线程或 gevent)或缓冲循环。

当前支持的后端(数据目的地,接收器)

请参阅附带收集器、处理器、接收器和循环及其基类(例如 graphite_metrics.sinks.Sinkloops.Basic)的 API 示例。

安装

这是一个 Python 2.7 的常规包(不是 3.X)。

使用 pip 是最好的方式

% pip install graphite-metrics

如果您没有,请使用

% easy_install pip
% pip install graphite-metrics

或者(另请参阅

% curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | python
% pip install graphite-metrics

或者,如果您绝对必须

% easy_install graphite-metrics

但,您真的不应该这么做。

当前 git 版本可以按以下方式安装

% pip install 'git+https://github.com/mk-fg/graphite-metrics.git#egg=graphite-metrics'

要求

基本要求是(pip 或 easy_install 应该可以为您处理这些)

一些附带模块需要额外的包才能运行(可以在安装时指定额外包,例如:pip install 'graphite-metrics[collectors.cgacct]'

  • 收集器

    • cgacct

    • cron_log

    • sysstat

      • xattr(除非使用 –xattr-emulation)

      • (可选)simplejson - 比stdlib json模块有更好的性能

  • 接收器

    • librato_metrics

      • requests

      • (可选)simplejson - 比stdlib json模块有更好的性能

      • (可选)gevent - 启用通过并发 API 请求进行大块数据恒时(更可扩展)的异步提交

请参阅 requirements.txt 文件或 setup.py 中的“install_requires”和“extras_require”。

运行

第一次运行可能看起来像这样

% harvestd --debug -s dump -i10

这将使用默认配置,启用所有收集器,将数据输出到 stderr(仅启用“dump”数据接收器)并在收集数据点之间使用短(5s)间隔,并输出有关正在执行的操作的附加信息。

之后,请参阅 默认 harvestd.yaml 配置文件,其中包含所有加载的收集器的配置,可以使用 -c 选项覆盖。

请注意,您不需要在覆盖配置中指定所有选项,只需更新您需要的选项即可。

例如,简单的配置文件(例如,/etc/harvestd.yaml)仅用于指定碳主机和日志行格式(删除时间戳,因为它将被管道传输到syslog或systemd-journal)可能如下所示

sinks:
  carbon_socket:
    host: carbon.example.host

logging:
  formatters:
    basic:
      format: '%(levelname)s :: %(name)s: %(message)s'

启动方式如下:harvestd -c /etc/harvestd.yaml

请参阅harvestd --help输出以获取完整的CLI参考。

注意事项、严厉警告和末日预言

虽然这里的大多数库存收集器每隔一段时间从/proc中拉取指标,与其他工具一样,但请特别注意处理内存指标(如/proc/slabinfo和cgroup值解析器)的收集器。

/proc中的所谓“文件”实际上是内核代码中的回调,为了对整个slabinfo表进行一致的读取,(至少某些版本的内核)必须锁定某些操作,这会导致在特定的工作负载下(例如,memcache服务器)整个系统出现意外的延迟。

cgroup数据收集器在每个收集周期中处理大量文件,可能是数十、数百甚至数千个,这也可能引起类似的问题。

特别感谢Marcus Barczak指出这一点。

原因

大多数其他工具(理论上)可以收集这些数据,我大多数时间使用collectd,但是它

  • 不提供一些最有用的功能 - nfs统计信息、磁盘利用率百分比等。

  • 未能收集某些其他统计信息,产生了奇怪的价值,如0的值,不切实际或负值(对于io、网络、传感器等)。

  • 通用插件(如“tail”)增加了许多复杂性,使配置变得混乱,同时仍缺乏一些基本功能,10行代码(插件)可以轻松提供(支持是有的,但请参见下面)。

  • 插件更改了由/proc提供的度量名称,这些名称在内核文档和互联网上引用,这使得收集的数据难以解释,并对其含义提出了疑问(这对于底层和计算度量越来越重要)。

最初我尝试通过collectd插件(实现相同的收集器)来解决这些问题,但它的Python插件系统被发现会泄漏RAM,collectd本身每天大约崩溃一次,尽管可能是由于C插件中的问题。

此外,collectd数据需要后处理 - 正确的度量命名空间、计数器处理等。

鉴于替代方案是将数据直接以“name val timestamp”的形式发送到tcp套接字,因此决定避免collectd提供的额外复杂性和问题。

除了collectd之外,我还尝试过gangliamunin和一些其他监控基础设施,但发现重新使用它们的聚合和/或收集基础设施几乎没有理由,如果不是直接的限制(例如,ganglia中的静态数据模式)。

守护进程二进制文件(奇怪地)称为“harvestd”,因为“metricsd”名称已经被用来指代另一个相关的守护进程(还有没有“d”的“metrics”,可能还有其他),而且太通用,没有额外的混淆,我认为。还有,我似乎缺乏创造力来想出一个更合理的名称(“reaperd”现在听起来太像MassEffect了)。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源分发

graphite-metrics-15.03.0.tar.gz (41.9 kB 查看散列值)

上传时间

由以下提供支持

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面