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

results matching ""

    No results matching ""