如何区分不同服务的指标

Posted

技术标签:

【中文标题】如何区分不同服务的指标【英文标题】:How to distinguish metrics from different services 【发布时间】:2021-06-29 15:29:01 【问题描述】:

我正在使用 OpenTelemetry 并且有这样的设置:

Golang、docker-compose、3 个服务、1 个独立的开放遥测收集器、1 个 Prometheus。

我将一些系统指标收集到一个独立的开放遥测收集器。这些指标是从 3 个不同的服务中收集的,并且指标具有相同的名称。然后,Prometheus 从开放遥测收集器中获取数据。问题是我无法区分 Prometheus 中不同服务的指标,因为所有指标都具有相同的“实例”值,它等于 open-telemetry-collector 的主机。

我知道我可以将带有服务名称的标签添加到指标记录中,然后通过标签区分指标,但我正在寻找另一种解决方案,因为并非总是可以将标签添加到每个指标。也许,像 http-middleware 之类的东西,但用于指标,或者可能是基础设施级别的东西。

服务是用 Golang 编写的,但我很高兴看到任何其他语言的解决方案。

otel-collector-config:

receivers:
  otlp:
    protocols:
      grpc:
      http:

exporters:
  prometheus:
    endpoint: otel-collector:8889
    const_labels:
      label1: value1
    send_timestamps: true
    metric_expiration: 5m

processors:
  batch:

service:
  pipelines:
    metrics:
      receivers: [ otlp ]
      processors: [ batch ]
      exporters: [ prometheus ]

普罗米修斯配置:

scrape_configs:
  - job_name: 'otel-collector'
    scrape_interval: 5s
    static_configs:
      - targets: ['otel-collector:8889']

码头工人撰写:

version: "3.9"
services:

  service1:
    build:
      context: ./service1
      network: host
    environment:
      - TELEMETRY_COLLECTOR_ADDR=otel-collector:55681
    ports:
      - "8094:8080"
    expose:
      - "8080"

  service2:
    build:
      context: ./service2
      network: host
    environment:
      - TELEMETRY_COLLECTOR_ADDR=otel-collector:55681
    ports:
      - "8095:8080"
    expose:
      - "8080"

  service3:
    build:
      context: ./service3
      network: host
    environment:
      - TELEMETRY_COLLECTOR_ADDR=otel-collector:55681
    expose:
      - "8080"
    ports:
      - "8096:8080"

  prometheus:
    image: prom/prometheus:v2.26.0
    volumes:
      - ./prometheus.yaml:/etc/prometheus/prometheus.yml
    ports:
      - "9090:9090"

  otel-collector:
    image: otel/opentelemetry-collector:0.23.0
    command: [ "--config=/etc/otel-collector-config.yaml" ]
    expose:
      - "55681" # HTTP otel receiver
      - "8889" # Prometheus exporter metrics
    volumes:
      - ./otel-collector-config.yaml:/etc/otel-collector-config.yaml

更新 1。 我发现 exporter-config https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/exporterhelper 添加了一些新参数。其中一个是适合我的:resource_to_telemetry_conversion。但正如我所见 prometheusexporterprometheusremotewriteexporter 不支持配置中的该字段。

【问题讨论】:

【参考方案1】:

您提到的resource_to_telemetry_conversionprometheusexporter 自版本0.26.0(问题#2498)以来的一部分,并将根据代理设置添加service_name 标签以区分来自不同服务的指标。

【讨论】:

以上是关于如何区分不同服务的指标的主要内容,如果未能解决你的问题,请参考以下文章

protobuff 编译器如何区分不同的服务及其具有相同标识符/标签的消息?

同一端口,如何区分不同的socket

WebSocket区分不同客户端方法

通过端口区分不同虚拟机

11月个人指标

如何使用 DCMTK 命令区分来自两个不同制造商的 CT 图像?