Prometheus remote_write 指标集

编辑

Prometheus remote_write 指标集

编辑

这是 prometheus 模块的 remote_write 指标集。该指标集可以接收来自配置了 remote_write 设置的 Prometheus 服务器的指标,例如:

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: 建议将 capacity 设置为 max_samples_per_send 的 3-5 倍。Capacity 设置每个分片在内存中排队的样本数,因此 capacity 应足够高,以便能够覆盖 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

直方图和类型

编辑

此功能处于 beta 测试阶段,可能会发生更改。设计和代码不如官方 GA 功能成熟,并且按原样提供,不提供任何保证。Beta 功能不受官方 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 秒的间隔(在 remote write 中)推送数据。如果更改了 prometheus 推送速率,则需要相应地配置 period 参数。

当启用 use_typesrate_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 服务器接收原始格式的指标。为此,该模块必须在内部使用启发式方法,以便有效地识别每个原始指标的类型。为此,使用一些名称模式来识别每个指标的类型。默认模式如下:

  1. _total 后缀:该指标属于计数器类型
  2. _sum 后缀:该指标属于计数器类型
  3. _count 后缀:该指标属于计数器类型
  4. _bucket 后缀且标签中带有 le:该指标属于直方图类型

所有其他指标都作为 Gauge 处理。此外,没有针对摘要的特殊处理,因此预计摘要的分位数作为 Gauge 处理,摘要的总和和计数作为计数器处理。

用户可以灵活地使用以下配置添加自己的模式:

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 匹配的指标是计数器,并且认为名称与 _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"
        }
    }
}