Ответ
ServiceMonitor — это пользовательский ресурс Kubernetes (Custom Resource Definition, CRD), предоставляемый проектом Prometheus Operator. Он служит декларативным способом указать Prometheus, как и какие сервисы (или поды) в кластере нужно мониторить ("скрейпить"). Вместо ручного редактирования конфига prometheus.yml, вы создаете объекты ServiceMonitor, и оператор автоматически обновляет конфигурацию Prometheus.
Как это работает:
- Prometheus Operator развертывает StatefulSet Prometheus в кластере.
- Вы создаете Service
my-app-svcи навешиваете на него метки (например,app: my-app). - Вы создаете ServiceMonitor
my-app-monitor, который черезselectorищет сервисы (или эндпоинты) с определенными метками. - Prometheus Operator наблюдает за ServiceMonitor, преобразует его в низкоуровневую конфигурацию для Prometheus (в формате
scrape_configs), и Prometheus начинает собирать метрики с указанных эндпоинтов.
Пример манифеста ServiceMonitor:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: frontend-service-monitor
namespace: monitoring # ServiceMonitor часто живут в отдельном namespace
spec:
# Выбираем Service по меткам
selector:
matchLabels:
app: frontend
component: api
# Определяем, с каких портов и путей собирать метрики
endpoints:
- port: http-metrics # Должен совпадать с именем порта в Service
path: /metrics
interval: 30s
scheme: http
# Дополнительные настройки, например, TLS
tlsConfig:
insecureSkipVerify: true # Не для production!
# Ограничиваем пространства имен, в которых искать сервисы
namespaceSelector:
matchNames:
- production
- staging
Ключевые моменты:
- Связка с Service: Обычно ServiceMonitor нацелен на Kubernetes Service, который предоставляет стабильную DNS-запись и балансировку нагрузки до pod-ов с метриками.
- Гибкий selector: Можно выбирать сервисы по меткам и ограничивать поиск определенными namespace.
- Независимость от приложения: Конфигурация мониторинга отделена от кода приложения и управляется как инфраструктура.
- Обязательное условие: Для работы требуется установленный в кластере Prometheus Operator.