Prometheus remote_write 度量集
编辑Prometheus remote_write 度量集编辑
这是模块 prometheus 的 remote_write 度量集。此度量集可以接收来自 Prometheus 服务器的指标,该服务器已相应地配置了 remote_write 设置,例如
remote_write: - url: "https://127.0.0.1:9201/write"
为了确保整个队列的健康状况,应考虑以下配置 参数
-
max_shards
:设置 Prometheus 尝试将样本发送到 Metricbeat 的最大并行度。建议此设置应等于运行 Metricbeat 的机器的内核数。Metricbeat 可以并行处理连接,因此将max_shards
设置为 Metricbeat 实际可以实现的并行度是最佳的队列配置。 -
max_samples_per_send
:设置每次发送要一起批处理的样本数。建议的值在 100(默认)到 1000 之间。具有更大的批次可以提高吞吐量并提高存储效率,因为 Metricbeat 会将具有相同标签的指标分组到相同的事件文档中。但是,这会增加 Metricbeat 的内存使用量。 -
capacity
:建议将容量设置为max_samples_per_send
的 3-5 倍。容量设置每个分片在内存中排队的样本数,因此容量应足够高以覆盖max_samples_per_send
。 -
write_relabel_configs
:这是一个重新标记,它在将样本发送到远程端点之前应用于样本。这可用于限制发送的样本。remote_write: - url: "https://127.0.0.1:9201/write" write_relabel_configs: - source_labels: [job] regex: 'prometheus' action: keep
默认情况下,发送到 http 端点的指标将在 prometheus.metrics
前缀下放置,它们的标签将在 prometheus.labels
下放置。基本配置如下所示
- module: prometheus metricsets: ["remote_write"] host: "localhost" port: "9201"
还要考虑对服务器使用安全设置,使用 TLS/SSL 配置模块,如下所示
- module: prometheus metricsets: ["remote_write"] host: "localhost" ssl.certificate: "/etc/pki/server/cert.pem" ssl.key: "/etc/pki/server/cert.key" port: "9201"
以及在 Prometheus 方面
remote_write: - url: "https://127.0.0.1:9201/write" tls_config: cert_file: "/etc/prometheus/my_key.pem" key_file: "/etc/prometheus/my_key.key" # Disable validation of the server certificate. #insecure_skip_verify: true
直方图和类型编辑
此功能处于测试阶段,可能会发生变化。设计和代码不如官方 GA 功能成熟,按现状提供,不提供任何保证。测试版功能不受官方 GA 功能的支持 SLA 约束。
metricbeat.modules: - module: prometheus metricsets: ["remote_write"] host: "localhost" port: "9201" use_types: true rate_counters: true period: 60s
use_types
参数(默认值:false)启用指标存储的不同布局,利用 Elasticsearch 类型,包括 直方图。
rate_counters
参数(默认值:false)启用从 Prometheus 计数器计算速率。启用后,Metricbeat 会存储自上次收集以来的计数器增量。此指标应使某些聚合更容易,并具有更好的性能。此参数只能与 use_types
一起启用。
period
参数(默认值:60 秒)配置内部缓存的超时,该缓存存储计数器值以计算连续提取之间的速率。该参数将被验证,所有小于 60 秒的值都将重置为默认值。
请注意,默认情况下,prometheus 以 60 秒的间隔推送数据(在远程写入中)。如果 prometheus 推送速率更改,则需要相应地配置 period
参数。
当启用 use_types
和 rate_counters
时,指标将按如下方式存储
{ "prometheus": { "labels": { "instance": "172.27.0.2:9090", "job": "prometheus" }, "prometheus_target_interval_length_seconds_count": { "counter": 1, "rate": 0 }, "prometheus_target_interval_length_seconds_sum": { "counter": 15.000401344, "rate": 0 } "prometheus_tsdb_compaction_chunk_range_seconds_bucket": { "histogram": { "values": [50, 300, 1000, 4000, 16000], "counts": [10, 2, 34, 7] } } }, }
类型的模式编辑
与 collector
度量集不同,remote_write
以原始格式从 prometheus 服务器接收指标。在此,模块必须在内部使用启发式方法来有效地识别每个原始指标的类型。为此,使用了一些名称模式来识别每个指标的类型。默认模式如下
-
_total
后缀:指标为 Counter 类型 -
_sum
后缀:指标为 Counter 类型 -
_count
后缀:指标为 Counter 类型 -
_bucket
后缀和标签中的le
:指标为 Histogram 类型
其他所有内容都将作为 Gauge 处理。此外,没有对 Summary 的特殊处理,因此预计 Summary 的分位数将作为 Gauge 处理,Summary 的总和和计数将作为 Counter 处理。
用户可以使用以下配置灵活地添加自己的模式
metricbeat.modules: - module: prometheus metricsets: ["remote_write"] host: "localhost" port: "9201" types_patterns: counter_patterns: ["_my_counter_suffix"] histogram_patterns: ["_my_histogram_suffix"]
上面的配置将考虑名称与 _my_counter_suffix
匹配的指标作为 Counter,而那些与 _my_histogram_suffix
匹配的指标(并且在它们的标签中具有 le
)作为直方图。
要仅匹配特定指标,请将每个指标的正则表达式的开头和结尾锚定
- 插入符号
^
匹配文本或行的开头, - 美元符号
$
匹配文本的结尾。
metricbeat.modules: - module: prometheus metricsets: ["remote_write"] host: "localhost" port: "9201" types_patterns: histogram_patterns: ["^my_histogram_metric$"]
请注意,当使用 types_patterns
时,提供的模式优先于默认模式。例如,如果 _histogram_total
是定义的直方图模式,那么像 network_bytes_histogram_total
这样的指标将被处理为直方图,即使它具有 _total
后缀,这是计数器的默认模式。
有关度量集中每个字段的描述,请参阅 导出字段 部分。
这是一个由此度量集生成的示例文档
{ "@timestamp": "2020-02-28T13:55:37.221Z", "@metadata": { "beat": "metricbeat", "type": "_doc", "version": "8.0.0" }, "service": { "type": "prometheus" }, "agent": { "version": "8.0.0", "type": "metricbeat", "ephemeral_id": "ead09243-0aa0-4fd2-8732-1e09a6d36338", "hostname": "host1", "id": "bd12ee45-881f-48e4-af20-13b139548607" }, "ecs": { "version": "1.4.0" }, "host": {}, "event": { "dataset": "prometheus.remote_write", "module": "prometheus" }, "metricset": { "name": "remote_write" }, "prometheus": { "metrics": { "container_tasks_state": 0 }, "labels": { "name": "nodeexporter", "id": "/docker/1d6ec1931c9b527d4fe8e28d9c798f6ec612f48af51949f3219b5ca77e120b10", "container_label_com_docker_compose_oneoff": "False", "instance": "cadvisor:8080", "container_label_com_docker_compose_service": "nodeexporter", "state": "iowaiting", "monitor": "docker-host-alpha", "container_label_com_docker_compose_project": "dockprom", "job": "cadvisor", "image": "prom/node-exporter:v0.18.1", "container_label_maintainer": "The Prometheus Authors <[email protected]>", "container_label_com_docker_compose_config_hash": "2cc2fedf6da5ff0996a209d9801fb74962a8f4c21e44be03ed82659817d9e7f9", "container_label_com_docker_compose_version": "1.24.1", "container_label_com_docker_compose_container_number": "1", "container_label_org_label_schema_group": "monitoring" } } }