Как настроить диаграмму istio helm для использования внешнего стека kube-prometheus?
Я развернул сервисную сетку istio в кластере GKE, используя диаграммы управления base и istiod , используя эти документы в пространстве имен istio-system .
Я развернул Prometheus, grafana и alert-manager, используя диаграмму управления kube-prometheus-stack.
Каждый модуль этой рабочей нагрузки работает нормально; Я не видел никакой ошибки. Почему-то я не получил никаких показателей в пользовательском интерфейсе Prometheus, связанных с рабочей нагрузкой istio. Из-за этого я не видел сетевого графа на приборной панели kiali.
Может ли кто-нибудь помочь мне решить эту проблему?
3 ответа
Мне удалось решить вышеупомянутую проблему, создав мониторы служб для плоскости данных и плоскости управления. Перейдите по ссылке ниже для получения более подробной информации.
https://tetrate.io/blog/how-to-configure-prometheus-operator-scrape-metrics-from-istio-1-6/
При развертывании Prometheus с помощью контрольных диаграмм kube-prometheus-stack вам потребуется добавить servicemonitor для метрик istio, поскольку аннотации k8s (prometheus.io/scrape
) не работает. Создайте этот сервисный монитор, чтобы включить очистку метрик istio:
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: prometheus-oper-istio-controlplane
labels:
release: prometheus
spec:
jobLabel: istio
selector:
matchExpressions:
- {key: istio, operator: In, values: [mixer,pilot,galley,citadel,sidecar-injector]}
namespaceSelector:
any: true
endpoints:
- port: http-monitoring
interval: 15s
- port: http-policy-monitoring
interval: 15s
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: prometheus-oper-istio-dataplane
labels:
monitoring: istio-dataplane
release: prometheus
spec:
selector:
matchExpressions:
- {key: istio-prometheus-ignore, operator: DoesNotExist}
namespaceSelector:
any: true
jobLabel: envoy-stats
endpoints:
- path: /stats/prometheus
targetPort: http-envoy-prom
interval: 15s
relabelings:
- sourceLabels: [__meta_kubernetes_pod_container_port_name]
action: keep
regex: '.*-envoy-prom'
- action: labelmap
regex: "__meta_kubernetes_pod_label_(.+)"
- sourceLabels: [__meta_kubernetes_namespace]
action: replace
targetLabel: namespace
- sourceLabels: [__meta_kubernetes_pod_name]
action: replace
targetLabel: pod_name
После создания этих сервисных мониторов метрики начнут появляться через несколько минут. Вы можете проверить статус под своимPrometheus -> Status - Targets
Там будет запись примерно такая:
serviceMonitor/yournamespace/prometheus-oper-istio-controlplane/0 (1/1 up)
иserviceMonitor/yournamespace/prometheus-oper-istio-dataplane/0 (1/1 up)
Istio ожидает, что Prometheus обнаружит, какие модули предоставляют метрики, с помощью аннотаций Kubernetes.prometheus.io/scrape
,prometheus.io/port
, иprometheus.io/path
.
Сообщество Prometheus решило, что эти аннотации, хотя и популярны, недостаточно полезны, чтобы их можно было включить по умолчанию. Из-за этого диаграмма управления kube-prometheus-stack не обнаруживает модули, использующие эти аннотации.
Чтобы ваша установка Prometheus очищала ваши метрики Istio, вам нужно либо настроить Istio для предоставления метрик так, как ожидает ваша установка Prometheus (вам нужно будет проверить конфигурацию Prometheus для этого, я не знаю, что она делает, по умолчанию) или добавьте задание очистки Prometheus, которое будет выполнять обнаружение с использованием приведенных выше аннотаций.
Подробности о том, как интегрировать Prometheus с Istio, доступны здесь , а пример файла конфигурации Prometheus доступен здесь.