当前位置: 首页 > 知识库问答 >
问题:

如何区分不同服务的指标

储思聪
2023-03-14

我正在玩OpenTelemata,并有这样的设置:

Golang,docker compose,3个服务,1个独立的开放式遥测采集器,1个Prometheus。

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

我知道我可以将带有服务名称的标签添加到度量记录中,然后通过标签区分度量,但我正在搜索另一个解决方案,因为并非总是可以将标签添加到每个度量。也许,类似于http中间件,但用于度量,或者可能是基础架构级别的东西。

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

otel-收集器-配置:

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']

docker撰写:

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配置中添加了一些新参数https://github.com/open-telemetry/opentelemetry-collector/tree/main/exporter/exporterhelper . 其中之一是适合我的:resource\u to\u telemetry\u转换。但正如我看到的,prometheusexporter和prometheusremotewriteexporter在配置中不支持该字段。


共有1个答案

羊舌涵涤
2023-03-14

您提到的资源到遥测转换是prometheusexporter自0.26.0版(发行号2498)以来的一部分,它将根据代理设置添加服务名称标签,以区分不同服务的指标。

 类似资料:
  • 我有一个应用程序,其中不同的用户监听服务器发送的事件源以获得定期响应。我打算从服务器发送响应,并以json格式发送相应的Id和数据。在客户端,当数据到达时,每个客户端都会检查匹配的Id,如果发现,则处理数据,否则忽略它。但这种方法的缺陷在于,每个用户都从定期更新中获得数据,即使这些数据不是为他们准备的。我读了一些关于sse的文章,但找不到任何关于这方面的信息 我的问题是使用服务器端事件是否有任何方

  • 我正在考虑使用https://github.com/kubernetes-sigs/aws-load-balancer-controller 假设我有两个名称空间kubernetes dashboard和otherns。 在第一个命名空间中,我有一个名为kubernetes dashboard的服务,在第二个命名空间中,我有一个名为otherservice的服务 下面的入口是否有效? 进入。yml

  • 我正在尝试构建一个选择唯一值组的查询。我知道如何对值进行分组并选择不同的值,但我不知道如何选择不同的值组,而不管所考虑元素的顺序如何。更准确地说: 我的XML是这样的: 在这里,我想将

  • 做的项目有PC端和H5端之分 有的接口和PC端是共用一个的,但是会根据不同端显示的数据小有不同 如何来精确区分PC端还是H5端来进行业务

  • 我正在创建一些REST服务,在实现GET请求时,我正在讨论如果那里没有记录该怎么办,例如。现在,如果您尝试使用(注意profiles上的s),它肯定是404代码,因为该URL肯定找不到。但是当谈到没有1234个人资料时,我不确定应该返回什么。我不想返回,因为这可能会给人留下没有数据的记录的印象。但是如果我返回一个404错误代码,API的使用者应该如何分辨这两个404之间的区别呢? 我怎样才能通过编

  • 问题内容: 我在unix / windows / unix的三台不同服务器中工作。 :在我的unix本地服务器中,我有一个表名Country_master及其字段pk_CountryId,CountryName等。 :在我的演示服务器中,它的窗口表名称自动更改为country_master。 :在我的Live服务器中,该服务器是UNIX表名country_master。 但是在我的代码表名称中,我