Prometheus+Alertmanager будильник и пуш

Kubernetes

В последнее время у команды проекта не было много задач, и все начали учиться и накапливаться в разных направлениях.

Хотя все наши проекты развернуты на k8s, нам не хватает эффективных и разумных методов мониторинга кластеров, поэтому мы просто воспользовались этой возможностью, чтобы изучить знания о мониторинге кластеров.

Что такое Прометей

Prometheus — это комбинация баз данных мониторинга, предупреждений и временных рядов с открытым исходным кодом. В 2016 году Prometheus присоединился к Cloud Native Computing Foundation в качестве второго управляемого проекта после Kubernetes.

Зачем использовать Прометей

Prometheus стал стандартом k8s, и многие компоненты k8s обеспечат/metricsЭтот URL-адрес используется Prometheus для сбора показателей мониторинга. Для некоторых аппаратных уровней и приложений, которые не предоставляют этот URL, необходимо использовать промежуточный продукт для помощи в сборе. Этот продукт называется экспортером.

Официально включены многие экспортеры, в том числе экспортер Kafka, экспортер Ceph, экспортер Nginx VTS, экспортер серверов MySQL и т. д. Мы также можем реализовать его самостоятельно через официальную клиентскую библиотеку. Prometheus имеет гибкий и мощный язык запросов (PromQL), очень эффективное хранилище.

Что такое Alertmanager

Alertmanager обрабатывает предупреждения, отправленные клиентскими приложениями, такими как сервер Prometheus. Он отвечает за дедупликацию, группировку и маршрутизацию к правильной интеграции получателя, такой как Email, PagerDuty или OpsGenie. Он также может заглушать и подавлять сигналы тревоги.

Зачем использовать Alertmanager

Alertmanager — это продукт организации Prometheus, и он лучше сочетается с Prometheus. Prometheus отвечает за мониторинг и генерацию сигналов тревоги, а Alertmanager может группировать, классифицировать, объединять и отправлять сигналы тревоги, чтобы сделать электронные сообщения о сигналах тревоги более разумными.

Установить с помощью Kube-prometheus

Для того, чтобы использовать его быстро, прямо здесь используются проекты с открытым исходным кодом.Kube-prometheusразвернуть.

git clone https://github.com/coreos/kube-prometheus.git 
kubectl apply -f manifests/setup
kubectl apply -f manifests/

Этот проект включает в себя Grafana, Prometheus, Alertmanager и node-exporter, и мы можем делать модификации на его основе.

Разрешить Prometheus генерировать оповещения

Добавить правило предупреждений

написать ямл

использоватьspec.groups.rules.alertВы можете определить правила предупреждений.annotations.messageпредупреждающее сообщение,exprЭто выражение мониторинга тревог. Мы можем использовать PromQL для формулирования правил в сочетании с методами, предоставляемыми различными экспортерами. Здесь мы формулируем всегда существующее правило тревог для демонстрации.

apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  labels:
    prometheus: k8s
    role: alert-rules
  name: prometheus-k8s-rules
  namespace: monitoring
spec:
  groups:
    - name: test.rules
      rules:
      - alert: Test
        annotations:
          message: |
            Just test.
        expr: vector(1)
        labels:
          severity: none

Он вступит в силу после применения.

написать jsonnet

yaml, предоставленный Kube-prometheus, генерируется jsonnet, мы также можем использовать его идеи для написания jsonnet, а затем преобразовать его в файл yaml.

в каталогеjsonnet/kube-prometheus/alertsЗатем напишите правила оповещения в соответствии с синтаксисом jsonnet.

воплощать в жизньdocker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci jb updateИзвлеките и обновите среду jsonnet.

Образ quay.io/coreos/jsonnet-ci большой и занимает много времени.

Выполнить в корневом каталоге проекта Kube-prometheus.docker run --rm -v $(pwd):$(pwd) --workdir $(pwd) quay.io/coreos/jsonnet-ci ./build.sh example.jsonnetВыведите проект jsonnet в виде файла yaml.

После выполнения файлы в каталоге manifests будут сгенерированы заново, и они вступят в силу после повторного применения.

Просмотр предупреждений

Откройте сервисный интерфейс prometheus, доступ к которому можно получить на веб-странице.

Вы можете увидеть множество правил предупреждений в каталоге Alerts, многие из которых поставляются с Kube-prometheus, и в нем также отображаются правила, которые мы только что создали.

Мы можем использовать графический интерфейс, поставляемый с prometheus, для просмотра тренда сигналов тревоги.

Вы можете видеть, что правило предупреждений всегда сохраняет активное предупреждение.

Разрешить оповещения Alertmanager

Оповещения, генерируемые Prometheus, дезорганизованы, и Alertmanager может сделать оповещения более разумными и удобными для отправки соответствующему персоналу.

Добавить правила отправки

Правила push обычно включают некоторую конфиденциальную информацию, такую ​​как пароли учетных записей электронной почты и т. д. Для хранения этой части информации рекомендуется использовать Secret. Kube-prometheus хранит правила push с секретом в файле alertmanager-secret.yaml.

Создать секрет

новыйalertmanager.yamlдокумент.

Если вы используете напоминания по электронной почте, вglobalОпределите отправителя вsmtp_smarthostУказывает исходящий адрес используемой службы SMTP.Здесь используется корпоративная электронная почта Tencent.

существуетreceiversПолучатель определяется в , приемник поддерживает различные клиенты, такие как электронная почта, WeChat и т. д., официальная рекомендация — использоватьwebhook_configsВнедрение пользовательских интеграций.

существуетrouteОпределите push-информацию по умолчанию для сигналов тревоги, которые неroute.routesКонкретный маршрут тревоги определяется в , который может переопределить глобальное определение.

Для более подробной настройки см.официальная документация.

Если для почтового ящика включен безопасный вход, smtp_auth_password должен быть заполнен кодом авторизации вместо пароля учетной записи.

global:
  resolve_timeout: 5m
  smtp_auth_password: ${yourpassword}
  smtp_auth_username: ${youremail}
  smtp_from: ${youremail}
  smtp_require_tls: false
  smtp_smarthost: smtp.exmail.qq.com:465
receivers:
- email_configs: # 邮件配置
  - send_resolved: true
    to: ${someonesemail}
  name: example
- webhook_configs: # 自定义http请求配置
  - send_resolved: true
    url: 'http://${host}:${port}/${func}'
  name: webhook
route:
  group_by: ['namespace']
  group_interval: 5m
  group_wait: 30s
  receiver: example
  repeat_interval: 12h
  routes:
  - match:
      alertname: Test
    receiver: example

Удалить исходный секрет

kubectl delete -f alertmanager-secret.yaml

Создать новый секрет

kubectl create secret generic alertmanager-main --from-file=alertmanager.yaml -n monitoring

написать jsonnet

существуетjsonnet/kube-prometheus/alertmanagerНапишите правило push в синтаксисе jsonnet, перекомпилируйте проект и примените его.

получать оповещения

При правильной настройке мыgroup_waitПолучите первое push-письмо по истечении времени, если сигнал тревоги изменится, он будетgroup_intervalОтправка в группу в установленное время и каждый интервалrepeat_intervalНажмите один раз, пока не будет решено.

прием почты

Получение вебхука

AlertManager отправит настроенный адрес веб-перехватчика наPOSTОтправить следующим образомJSONформатировать данные, с которыми мы можем сделать больше работы.

{
  "version": "4",
  "groupKey": <string>,
  "status": "<resolved|firing>",
  "receiver": <string>,
  "groupLabels": <object>,
  "commonLabels": <object>,
  "commonAnnotations": <object>,
  "externalURL": <string>,
  "alerts": [
    {
      "status": "<resolved|firing>",
      "labels": <object>,
      "annotations": <object>,
      "startsAt": "<rfc3339>",
      "endsAt": "<rfc3339>",
      "generatorURL": <string>
    }
  ]
}

Пишем простой сервис, который получает данные и выводит их на печать, вы можете увидеть следующую информацию.

{
    "alerts":[
        {
            "annotations":{
                "message":"Just test."
            },
            "endsAt":"0001-01-01T00:00:00Z",
            "generatorURL":"http://prometheus-k8s-0:9090/graph?g0.expr=vector%281%29&g0.tab=1",
            "labels":{
                "alertname":"Test",
                "prometheus":"monitoring/k8s",
                "severity":"none"
            },
            "startsAt":"2019-12-25T10:45:45.022073385Z",
            "status":"firing"
        }
    ],
    "commonAnnotations":{
        "message":"Just test."
    },
    "commonLabels":{
        "alertname":"Test",
        "prometheus":"monitoring/k8s",
        "severity":"none"
    },
    "externalURL":"http://alertmanager-main-0:9093",
    "groupKey":"{}/{alertname="Test"}:{}",
    "groupLabels":{

    },
    "receiver":"webhook",
    "status":"firing",
    "version":"4"
}

На данный момент простейшее нажатие будильника завершено.

Суммировать

В этот раз для быстрого использования используется проект Kube-prometheus.Хоть он и удобен,но многое не поддается контролю.В дальнейшем нужно осваивать нативную версию и осваивать более гибкие и мощные функции для производственной среды.

При этом я реально чувствую мощь Prometheus+Alertmanager.Если для деплоя проекта используется k8s, то рекомендуется использовать эту комбинацию перфораторов, которая может мониторить почти все компоненты микросервиса через различные экспортеры.