Graphite 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 9109
echo "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.conf
test.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.conf
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
导入 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