Есть вопросы?
Закажите звонок специалиста!
Есть вопросы?
Закажите звонок специалиста!
Prometheus-operator (на текущий момент проект называется kube-prometheus-stack) позволяет из коробки получить базово настроенный мониторинг кластера kubernetes на основе популярной связки prometheus+grafana.
К сожалению, для решения реальных задач настроек по умолчанию недостаточно, ведь может понадобиться подключать к мониторингу дополнительные объекты, создавать кастомные уведомления, настраивать отправку уведомлений в мессенджер. Рассмотрим пример базовой конфигурации prometheus-operator, позволяющей решать эти задачи.
Создаем папку prometheus-operator, которая будет содержать наши кастомные values-prod.yaml для helm-чарта и папку с манифестами telegram-alertmanager, решения, используемого в качестве “посредника” для отправки алертов в telegram.
Нужна помощь? Настройки grafana, prometheus мы осуществляем в рамках услуги DevOps-аутсорсинг. Также возможны разовые проектные работы.
Содержимое папки telegram-alertmanager. Манифест Telegram-alertmanager.yaml:
apiVersion: apps/v1 kind: Deployment metadata: name: telegram-alertmanager namespace: prometheus-operator labels: app: telegram spec: template: metadata: name: telegram-alertmanager labels: app: telegram spec: containers: - name: telegram-alertmanager image: janwh/alertmanager-telegram ports: - containerPort: 8080 env: - name: TELEGRAM_CHAT_ID value: "-5842051ХХ" - name: TELEGRAM_TOKEN value: "1457321396:AAGB8bUYwY8yGZchAiitrHOpUYb_7YuХХХХ" replicas: 1 selector: matchLabels: app: telegram
В указанном выше манифесте необходимо поменять параметры namespace, telegram_chat_id и telegram_token, указав свои значения.
Манифест service-telegram.yaml:
apiVersion: v1 kind: Service metadata: labels: app: telegram name: telegram-alertmanager namespace: prometheus-operator spec: type: ClusterIP selector: app: telegram ports: - protocol: TCP port: 8080
Создадим yaml-файл со значениями параметров нашего prometheus-operatora:
additionalPrometheusRules: - name: my-rule-file groups: - name: test rules: - alert: HaproxyServerDown expr: haproxy_server_up != 0 for: 0m labels: severity: critical annotations: summary: HAProxy server down (instance {{ $labels.instance }}) # description: HAProxy server is down\n VALUE = {{ $value }}\n LABELS: { { $labels } } - alert: NodeNetworkInterfaceFlapping expr: changes(node_network_up{device!~"veth.+",job="node-exporter"}[2m])> 2 for: 2m labels: severity: warning annotations: message: Network interface "{{ $labels.device }}" changing it's up status often on node-exporter {{ $labels.namespace }}/{{ $labels.pod }}" alertmanager: config: global: resolve_timeout: 5m route: group_by: ['alertname', 'instance', 'job'] group_wait: 30s group_interval: 5m repeat_interval: 12h receiver: 'null' routes: - match: alertname: Watchdog receiver: 'telegram' continue: true - match_re: severity: ^(none|warning|critical)$ receiver: 'telegram' receivers: - name: 'telegram' webhook_configs: - url: 'http://telegram-alertmanager:8080/alerts' send_resolved: true - name: 'null' ingress: enabled: true annotations: kubernetes.io/ingress.class: nginx external-dns.alpha.kubernetes.io/target: "monitoring.dom" hosts: - alertmanager.dom paths: - / grafana: enabled: true namespaceOverride: "" defaultDashboardsEnabled: true adminPassword: prom-operator ingress: enabled: true annotations: kubernetes.io/ingress.class: "nginx" external-dns.alpha.kubernetes.io/target: "monitoring.dom" hosts: - grafana.dom prometheus: ingress: enabled: true annotations: kubernetes.io/ingress.class: "nginx" external-dns.alpha.kubernetes.io/target: "monitoring.dom" hosts: - prometheus.dom prometheusSpec: additionalScrapeConfigs: - job_name: 'linux vm' static_configs: - targets: [ '172.28.7.139:9100' ] - job_name: 'win-exporter' static_configs: - targets: [ '172.28.7.128:9182' ] - job_name: 'rabbit' static_configs: - targets: [ '172.28.7.139:9419' ]
В разделе additionalPrometheusRules описанного выше файла указываем необходимые кастомные алерты, в разделе alertmanager описываем получателя наших алертов, в grafana. Указываем пароль админа и адрес нашего экземпляра grafana, в PrometheusSpec указываем объекты, которые необходимо мониторить нашей связкой prometheus+grafana.
Данный пример лишь один из возможных вариантов базовой настройки, позволяет получить базовое понимание параметризации helm-чарта prometheus-operatora; на его основе возможно быстро оптимизировать параметры под нужды своей инфраструктуры.
Запустим установку в кластер telegram-alertmanager:
kubectl apply -f telegram-alertmanager/.
Запустим установку prometheus-operator:
helm repo add stable https://charts.helm.sh/stable helm repo update helm upgrade -i prometheus-operator stable/prometheus-operator --atomic --namespace prometheus-operator --values values-prod.yaml
После запуска всех сущностей в кластере kubernetes, получили решение, позволяющие гибко оптимизировать параметры стека prometheus+grafana и получать в мессенджер информацию об уведомлениях (алертах).