Проблема с мониторингом пользовательской службы на прометее в пространстве имен kubernetes - PullRequest
1 голос
/ 29 мая 2019

Моя цель - следить за сервисами с помощью Prometheus, поэтому я следовал руководству по адресу:

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

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

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

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 Service Discovery . Однако при получении метрик из сервиса возникает ошибка: Prometheus Targets .

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

1 Ответ

0 голосов
/ 31 мая 2019

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

Сначала разверните три экземпляра.простого примера приложения , которое прослушивает и предоставляет метрики для порта 8080

Да, ваше приложение (веб-сайт) прослушивает порт 8080, но не отображает какие-либо метрики на '/конечная точка метрик в известном формате 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

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

...