Проблема с мониторингом пользовательской службы на prometheus в пространстве имен kubernetes

Моя цель — отслеживать службы с помощью Prometheus, поэтому я следовал руководству, расположенному по адресу:

https://github.com/coreos/prometheus-operator/blob/master/Documentation/user-guides/getting-started.md

Я относительно новичок во всем этом, поэтому, пожалуйста, простите мою наивность. Я попытался изучить ошибку, но все ответы были запутанными. Я понятия не имею, с чего начать процесс отладки (возможно, посмотреть на YAML?)

Я хотел отслеживать пользовательскую службу. Итак, я развернул в пользовательском пространстве имен (t) следующий service.yaml:

kind: Service
apiVersion: v1
metadata:
  namespace: t
  name: example-service-test
  labels:
    app: example-service-test
spec:
  selector:
    app: example-service-test
  type: NodePort
  ports:
  - name: http
    nodePort: 30901
    port: 8080
    protocol: TCP
    targetPort: http
---
apiVersion: v1
kind: Pod
metadata:
  name: example-service-test
  namespace: t
  labels:
    app: example-service-test
spec:
  containers:
  - name: example-service-test
    image: python:2.7
    imagePullPolicy: IfNotPresent
    command: ["/bin/bash"]
    args: ["-c", "echo \"<p>This is POD1 $(hostname)</p>\" > index.html; python -m SimpleHTTPServer 8080"]
    ports:
    - name: http
      containerPort: 8080

И развернул сервисный монитор в пространстве имен:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: example-service-test
  labels:
    team: frontendtest1
  namespace: t
spec:
  selector:
    matchLabels:
      app: example-service-test
  endpoints:
  - port: http

На данный момент монитор службы обнаруживает службу, как показано ниже: Обнаружение сервиса Prometheus. Однако при получении метрики от сервиса возникает ошибка: Цели Прометея.

Насколько мне известно, prometheus не может получить доступ к /metrics в демонстрационном сервисе — в таком случае нужно ли мне раскрывать метрики? Если да, могу ли я получить пошаговое руководство по раскрытию метрик? Если нет, то какой маршрут мне выбрать?

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
648
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я боюсь, что вы можете пропустить ключевой момент из учебника, который вы используете на веб-сайте CoreOS, о том, как метрики из приложения попадают в Prometheus:

First, deploy three instances of a simple example application, which listens and exposes metrics on port 8080

Да, ваше приложение (веб-сайт) прослушивает порт 8080, но не предоставляет никаких метрик на конечной точке «/metrics» в формате, известном Prometheus.

Вы можете проверить, о каких метриках я говорю, нажав на конечную точку внутри Pod/Conatiner, где она размещена.

kubectl exec -it $(kubectl get po -l app=example-app -o jsonpath='{.items[0].metadata.name}') -c example-app -- curl localhost:8080/metrics

Вы должны увидеть результат, аналогичный этому:

# HELP codelab_api_http_requests_in_progress The current number of API HTTP requests in progress.
# TYPE codelab_api_http_requests_in_progress gauge
codelab_api_http_requests_in_progress 1
# HELP codelab_api_request_duration_seconds A histogram of the API HTTP request durations in seconds.
# TYPE codelab_api_request_duration_seconds histogram
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.0001"} 0
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.00015000000000000001"} 0
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.00022500000000000002"} 0
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.0003375"} 0
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.00050625"} 0
codelab_api_request_duration_seconds_bucket{method = "GET",path = "/api/bar",status = "200",le = "0.000759375"} 0

Пожалуйста, прочтите здесь больше о способах предоставления метрик.

Спасибо! Я пошел другим путем и создал собственное приложение Go, которое предоставляет конечную точку /metrics и развернул его в Dockerhub — и теперь оно работает!

user2758124 01.06.2019 22:10

Другие вопросы по теме