写点什么

Prometheus Exporter (十八)Graphite Exporter

作者:耳东@Erdong
  • 2021 年 12 月 06 日
  • 本文字数:2850 字

    阅读完需:约 9 分钟

Prometheus Exporter (十八)Graphite Exporter

本文已经收录在 Prometheus 合集 Prometheus 都可以采集那些指标?-- 常用 Exporter 合集 中。


Graphite 是一个开源实时的、显示时间序列度量数据的图形系统。Graphite 并不收集度量数据本身,而是像一个数据库,通过其后端接收度量数据,然后以实时方式查询、转换、组合这些度量数据。Graphite 支持内建的 Web 界面,它允许用户浏览度量数据和图。Graphite 通常用于监控基础设施级别的度量,比如 CPU、内存、I/O 利用率、网络吞吐量和延迟,当然 Graphite 在应用程序级的度量和业务级的度量方面也很不错。


针对 Graphite Prometheus 开发了 Graphite Exporter 来导出 Graphite 的监控指标,官方仓库是 https://github.com/prometheus/graphite_exporter ,最新版本是 0.12.0 ,发布于 2021 年 12 月 1 日。


Graphite Exporter 是一个在 Graphite plaintext 协议中导出监控数据的 Exporter,它通过 TCP 和 UDP 接受数据,并对它们进行转换和公开以供 Prometheus 使用。


Graphite Exporter 对于从现有的 Graphite 设置导出监控指标非常有用,对于核心 Prometheus 出品的 Node Exporter 不包含的指标也很有用。

安装运行

下载 Graphite Exporter 的二进制包,直接执行即可


./graphite_exporter
复制代码


如果需要配置映射关系,那么可以使用如下参数指定映射关系文件


./graphite_exporter --graphite.mapping-config=graphite_exporter_mapping
复制代码


配置现有的监控,将 Graphite plaintext 数据以 UDP 或 TCP 发送到 9109 端口。举个简单的例子:


echo "test_tcp 1234 $(date +%s)" | nc localhost 9109echo "test_udp 1234 $(date +%s)" | nc -u -w1 localhost 9109
复制代码


接下来就可以在 http://localhost:9108/metrics 看到可以使用的 Metric 。


为了避免使用无限制的内存,指标将在最后一次推送出去的 5 分钟内被垃圾收集。这个可以通过 --graphite.sample-expiry 参数来配置。


也可以使用容器来启动。


docker pull prom/graphite-exporter:v0.12.0
docker run -d -p 9108:9108 -p 9109:9109 -p 9109:9109/udp \ -v ${PWD}/graphite_mapping.conf:/tmp/graphite_mapping.conf \ prom/graphite-exporter:v0.12.0 \ --graphite.mapping-config=/tmp/graphite_mapping.conf
复制代码

Graphite Tag

Graphite Exporter 接受 carbon 格式标记的指标,配置映射中指定的 label 优先级高于于指标中的 label。如果在一个度量中提供了有效标记和无效标记,那么将删除无效标记,并增加graphite_tag_parse_failures 计数器。Exporter 可以接受不一致的标签集,但这可能会导致在 Prometheus 中查询数据时出现问题。

指标 Mapping 和 Configuration

从 v0.2.0 版本之后有一个破坏性的变化,Statsd Exporter 使用 YAML 格式的配置文件。

YAML 配置

可以配置 Graphite Exporter 以便通过 YAML 配置文件将特定的以点分隔 Graphite 指标转换为带 label 的 Prometheus 指标,该文件与 statsd_exporter 共享语法和逻辑。可以参照 statsd_exporter 文档来进行配置,但是,目前 graphite_exporter 还不支持所有解析特性。任何基于 'timer_type' 选项的功能将不起作用。否则,正则匹配、组、匹配、删除等行为会按预期的值进行生效。


在配置文件中不匹配任何映射的指标被转换为不带任何标签的 Prometheus 指标,指标名称中除了 _ and : 以外的所有非字母数字字符都被替换为 _


如果您有一组非常大的指标,可能想要跳过那些不匹配映射配置的指标。如果是这种情况,你可以使用--graphite.mapping-strict-match 参数强制这种行为,这样就可以存储真正需要的指标。


一个简单的配置映射示例如下:


mappings:- match: test.dispatcher.*.*.*  name: dispatcher_events_total  labels:    action: $2    job: test_dispatcher    outcome: $3    processor: $1- match: '*.signup.*.*'  name: signup_events_total  labels:    job: ${1}_server    outcome: $3    provider: $2- match: 'servers\.(.*)\.networking\.subnetworks\.transmissions\.([a-z0-9-]+)\.(.*)'  match_type: regex  name: 'servers_networking_transmissions_${3}'  labels:     hostname: ${1}    device: ${2}
复制代码


把这些 Graphite 指标转换为 Prometheus 指标如下:


test.dispatcher.FooProcessor.send.success  => dispatcher_events_total{processor="FooProcessor", action="send", outcome="success", job="test_dispatcher"}
foo_product.signup.facebook.failure => signup_events_total{provider="facebook", outcome="failure", job="foo_product_server"}
test.web-server.foo.bar => test_web__server_foo_bar{}
servers.rack-003-server-c4de.networking.subnetworks.transmissions.eth0.failure.mean_rate => servers_networking_transmissions_failure_mean_rate{device="eth0",hostname="rack-003-server-c4de"}
复制代码

转换 Legacy 配置

如果您有一个使用遗留映射语法的现有配置文件,那么您可以使用 statsd-exporter-convert 将其更新为新的基于 YAML 的语法。下面是转换旧的示例语法:


$ go get -u github.com/bakins/statsd-exporter-convert
$ cat example.conftest.dispatcher.*.*.*name="dispatcher_events_total"processor="$1"action="$2"outcome="$3"job="test_dispatcher"
*.signup.*.*name="signup_events_total"provider="$2"outcome="$3"job="${1}_server"
$ statsd-exporter-convert example.confmappings:- match: test.dispatcher.*.*.* name: dispatcher_events_total labels: action: $2 job: test_dispatcher outcome: $3 processor: $1- match: '*.signup.*.*' name: signup_events_total labels: job: ${1}_server outcome: $3 provider: $2
复制代码

导入 Whisper 数据

这是一个实验性质的功能。


从 Graphite 导入数据可以使用自带的 getool 工具,使用 getool create-blocks --help 查看如何使用。


为了以合理的资源数量导入长期数据,可以增加每个生成的 TSDB 块的持续时间。 --block-duration 参数的值必须是 2 个小时的整数倍,比如 ,4h,8h 等等。


要将数据合并到现有的 Prometheus 存储目录中,请使用 --storage.tsdb.allow-overlapping-blocks 参数启动 Prometheus

不兼容 Graphite bridge

这个 Exporter 不能与 Java 客户端或 Python 客户端 Graphite bridge 结合使用。在向 Graphite 数据模型的转换和返回过程中,信息会丢失。此外,客户端库和 Exporter 之间的默认度量存在冲突。


相反,将 Prometheus 配置为直接抓取您的应用程序,而不将 Exporter 放在中间。对于批处理或临时作业,使用 Pushgateway 来解决。

TLS 和 basic authentication

Graphite Exporte 支持 TLS 和 basic authentication ,这使得可以更好地控制各种 HTTP 接口。使用 TLS 和 basic authentication 需要通过 --web.config.file 参数来指定文件,这个文件的格式也是老朋友了,很多 Exporter 都使用这个格式,这个格式的描述就是 Exporter-Toolkit

发布于: 3 小时前阅读数: 6
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus Exporter (十八)Graphite Exporter