Моя цель — отслеживать службы с помощью Prometheus, поэтому я следовал руководству, расположенному по адресу:
Я относительно новичок во всем этом, поэтому, пожалуйста, простите мою наивность. Я попытался изучить ошибку, но все ответы были запутанными. Я понятия не имею, с чего начать процесс отладки (возможно, посмотреть на 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 в демонстрационном сервисе — в таком случае нужно ли мне раскрывать метрики? Если да, могу ли я получить пошаговое руководство по раскрытию метрик? Если нет, то какой маршрут мне выбрать?
Я боюсь, что вы можете пропустить ключевой момент из учебника, который вы используете на веб-сайте 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 — и теперь оно работает!