簡體   English   中英

自定義指標未在普羅米修斯中公開

[英]Custom metric is not exposed in prometheus

我正在編寫一個 Go 應用程序,我需要使用 Prometheus 記錄一些自定義指標。 我有一個 Prometheus 的本地實例,這是我的 prometheus.yml 文件:

scrape_configs:
- job_name: myapp
  scrape_interval: 10s
  static_configs:
  - targets:
    - localhost:2112

這是我的 Go 代碼:

package main

import (
    "github.com/prometheus/client_golang/prometheus"
    "github.com/prometheus/client_golang/prometheus/promauto"
    "github.com/prometheus/client_golang/prometheus/promhttp"

    "net/http"
    "time"
)

func recordMetrics() {
    go func() {
        for {
            opsProcessed.Inc()
            time.Sleep(2 * time.Second)

        }
    }()
}

var (
    opsProcessed = promauto.NewCounter(prometheus.CounterOpts{
        Name: "myapp_processed_ops_total",
        Help: "The total number of processed events",
    })
)

func main() {
    recordMetrics()

    http.Handle("/metrics", promhttp.Handler())
    http.ListenAndServe(":2112", nil)
}

如您所見,我定義了一個名為 opsProcessed 的自定義指標,它的名稱是 myapp_processed_ops_total。 我可以在 http://localhost:2112/metrics 看到 myapp_processed_ops_total。 但是,我在我的 Prometheus 實例中看不到這個指標。 在此處輸入圖像描述

問題是什么? 我認為我的服務器被刮掉了,因為我可以在 Prometheus 中看到像 scrape_duration_seconds 這樣的其他指標:

在此處輸入圖像描述

也許問題出在我的普羅米修斯 docker-compose 文件中。 這是 prometheus UI 中的目標頁面:

在此處輸入圖像描述

這是我的 docker-compose 文件:

version: '2.1'

networks:
  monitor-net:
    driver: bridge

volumes:
    prometheus_data: {}
    grafana_data: {}

services:

  prometheus:
    image: prom/prometheus:v2.15.2
    container_name: prometheus1
    volumes:
      - ./prometheus:/etc/prometheus
      - prometheus_data:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'
      - '--web.console.libraries=/etc/prometheus/console_libraries'
      - '--web.console.templates=/etc/prometheus/consoles'
      - '--storage.tsdb.retention.time=200h'
      - '--web.enable-lifecycle'
    restart: unless-stopped
    expose:
      - 9090
    ports:
      - "9090:9090"
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"

  grafana:
    image: grafana/grafana:6.5.3
    container_name: grafana1
    volumes:
      - grafana_data:/var/lib/grafana
      - ./grafana/provisioning:/etc/grafana/provisioning
    environment:
      - GF_SECURITY_ADMIN_USER=${ADMIN_USER:-admin}
      - GF_SECURITY_ADMIN_PASSWORD=${ADMIN_PASSWORD:-admin}
      - GF_USERS_ALLOW_SIGN_UP=false
    restart: unless-stopped
    ports:
      - "3000:3000"
    networks:
      - monitor-net
    labels:
      org.label-schema.group: "monitoring"
scrape_configs:
- job_name: myapp
  scrape_interval: 10s
  static_configs:
  - targets:
  - localhost:2112

如果你的應用是 prometheus 的 sidecar,你可以使用 localhost;

如果沒有,你必須在這里使用它的服務

基於@Peter 和@Henry 有用的評論,答案是這樣的:

從 Prometheus docker 容器到我本地運行的應用程序的連接被拒絕。 我是從 /targets 的 Prometheus UI 中發現的。 原因是 prometheus.yml 配置文件。 如果您使用 docker(我的案例)設置了 Prometheus 和 Grafana,prometheus.yml 應該是這樣的:

1- 如果正在運行的應用程序也在容器中,則應使用 docker-compose 文件中的服務名稱:

scrape_configs:
- job_name: myapp
  scrape_interval: 10s
  static_configs:
  - targets:
    - <service>:2112

2- 如果應用程序在您的機器上本地運行,但不在容器中:

scrape_configs:
- job_name: myapp
  scrape_interval: 10s
  static_configs:
  - targets:
    - <External_IP>:2112

並從 ifconfig 中找到您機器的 External IP 地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM