Мониторинг кластера с помощью Prometheus и Grafana
Managed Service for Kubernetes позволяет выгружать метрики объектов кластера в системы мониторинга.
Из этой статьи вы узнаете, как настроить систему сбора метрик Prometheus
Чтобы настроить систему мониторинга кластера Managed Service for Kubernetes:
- Установите Prometheus.
- Установите кеширующий прокси trickster.
- Установите Grafana.
- Настройте и проверьте работу Grafana.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
-
Создайте группы безопасности для кластера Managed Service for Kubernetes и входящих в него групп узлов.
Важно
От настройки групп безопасности зависит работоспособность и доступность кластера, а также запущенных в нем сервисов и приложений.
-
Создайте кластер Managed Service for Kubernetes и группу узлов любой подходящей конфигурации с доступом в интернет и с группами безопасности, подготовленными ранее.
-
Установите kubectl
и настройте его на работу с созданным кластером. -
Установите менеджер пакетов Helm
версии не ниже 3.8.0.
Установите Prometheus
Система мониторинга Prometheus сканирует объекты кластера Managed Service for Kubernetes и собирает их метрики в собственную базу данных. Собранные метрики доступны внутри кластера Managed Service for Kubernetes по протоколу HTTP.
-
Добавьте репозиторий, содержащий дистрибутив Prometheus:
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts && \ helm repo update
-
Установите Prometheus:
helm install my-prom prometheus-community/prometheus
-
Убедитесь, что все поды перешли в состояние
Running
:kubectl get pods -l "app.kubernetes.io/instance=my-prom"
Результат:
NAME READY STATUS RESTARTS AGE my-prom-prometheus-alertmanager-7b********-xt6ws 2/2 Running 0 81s my-prom-prometheus-node-exporter-***** 1/1 Running 0 81s my-prom-prometheus-pushgateway-69********-swrfb 1/1 Running 0 81s my-prom-prometheus-server-7b********-m4v78 2/2 Running 0 81s
Установите кеширующий прокси trickster
Кеширующий прокси trickster ускоряет чтение
-
Добавьте репозиторий, содержащий дистрибутив trickster:
helm repo add tricksterproxy https://helm.tricksterproxy.io && \ helm repo update
-
Создайте конфигурационный файл
trickster.yaml
, содержащий настройки trickster:trickster.yaml
frontend: listenAddress: "" tlsListenAddress: "" tlsListenPort: "" connectionsLimit: "0" origins: - name: default originType: prometheus originURL: http://my-prom-prometheus-server:80 profiler: enabled: false port: 6060 prometheusScrape: false prometheus: serviceMonitor: enabled: false interval: 30s labels: {} replicaCount: 1 image: repository: tricksterproxy/trickster tag: "1.1" pullPolicy: IfNotPresent service: annotations: {} labels: {} clusterIP: "" externalIPs: [] loadBalancerIP: "" loadBalancerSourceRanges: [] metricsPort: 8481 servicePort: 8480 type: ClusterIP ingress: enabled: false annotations: {} extraLabels: {} hosts: [] tls: [] volumes: persistent: type: "persistentVolume" enabled: false mountPath: "/tmp/trickster" accessModes: - ReadWriteOnce annotations: {} existingClaim: "" size: 15Gi generic: type: "generic" enabled: true mountPath: "/tmp/trickster" podAnnotations: {} resources: {} securityContext: {}
Вы можете изменить размер хранилища, отведенного для работы кеширующего прокси. Укажите нужное значение размера хранилища в параметре
volumes.persistent.size
. -
Установите trickster:
helm install trickster tricksterproxy/trickster --namespace default -f trickster.yaml
-
Убедитесь, что под trickster перешел в состояние
Running
:kubectl get pods -l "app=trickster"
Кеширующий прокси доступен внутри кластера Managed Service for Kubernetes по адресу http://trickster:8480
. Grafana будет обращаться по этому URL для получения метрик.
Установите Grafana
При развертывании приложения будут созданы:
Deployment
приложения Grafana.- PersistentVolumeClaim для резервирования внутреннего хранилища.
Service
типаLoadBalancer
для организации сетевого доступа к консоли управления Grafana.
Чтобы установить Grafana:
-
Создайте конфигурационный файл
grafana.yaml
.grafana.yaml
--- apiVersion: v1 kind: PersistentVolumeClaim metadata: name: grafana-pvc spec: accessModes: - ReadWriteOnce resources: requests: storage: 1Gi --- apiVersion: apps/v1 kind: Deployment metadata: labels: app: grafana name: grafana spec: selector: matchLabels: app: grafana template: metadata: labels: app: grafana spec: securityContext: fsGroup: 472 supplementalGroups: - 0 containers: - name: grafana image: grafana/grafana:latest imagePullPolicy: IfNotPresent ports: - containerPort: 3000 name: http-grafana protocol: TCP readinessProbe: failureThreshold: 3 httpGet: path: /robots.txt port: 3000 scheme: HTTP initialDelaySeconds: 10 periodSeconds: 30 successThreshold: 1 timeoutSeconds: 2 livenessProbe: failureThreshold: 3 initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 tcpSocket: port: 3000 timeoutSeconds: 1 resources: requests: cpu: 250m memory: 750Mi volumeMounts: - mountPath: /var/lib/grafana name: grafana-pv volumes: - name: grafana-pv persistentVolumeClaim: claimName: grafana-pvc --- apiVersion: v1 kind: Service metadata: name: grafana spec: ports: - port: 3000 protocol: TCP targetPort: http-grafana selector: app: grafana sessionAffinity: None type: LoadBalancer
При необходимости измените:
- Размер хранилища, отведенного для работы Grafana, в параметре
spec.resources.requests.storage
дляkind: PersistentVolumeClaim
. - Вычислительные ресурсы, выделяемые поду Grafana, в параметрах
spec.containers.resources
дляkind: Deployment
.
- Размер хранилища, отведенного для работы Grafana, в параметре
-
Установите Grafana:
kubectl apply -f grafana.yaml
-
Убедитесь, что под Grafana перешел в состояние
Running
:kubectl get pods -l "app=grafana"
Настройте и проверьте работу Grafana
-
Узнайте адрес, на котором доступен сервис Grafana, и перейдите по этому адресу:
export GRAFANA_IP=$(kubectl get service/grafana -o jsonpath='{.status.loadBalancer.ingress[0].ip}') && \ export GRAFANA_PORT=$(kubectl get service/grafana -o jsonpath='{.spec.ports[0].port}') && \ echo http://$GRAFANA_IP:$GRAFANA_PORT
Примечание
Если ресурс недоступен по указанному URL, то убедитесь, что группы безопасности для кластера Managed Service for Kubernetes и его групп узлов настроены корректно. Если отсутствует какое-либо из правил — добавьте его.
-
В открывшемся окне браузера введите логин и пароль
admin/admin
, после чего установите новый пароль для пользователяadmin
. -
Добавьте источник данных
с типомPrometheus
и следующими настройками:- Name —
Prometheus
. - URL —
http://trickster:8480
.
- Name —
-
Нажмите кнопку Save & test и убедитесь, что источник данных успешно подключен (
Data source is working
). -
Импортируйте дашборд
Kubernetes Deployment Statefulset Daemonset metrics
, содержащий основные метрики Kubernetes. Укажите идентификатор дашборда (8588
) при импорте.Совет
Для проверки сценария вы можете использовать любой подходящий дашборд из каталога Grafana
. -
Откройте дашборд и убедитесь, что Grafana получает метрики от кластера Managed Service for Kubernetes.
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Managed Service for Kubernetes.
- Если вы зарезервировали для кластера Managed Service for Kubernetes публичный статический IP-адрес, удалите его.