В последнее время у команды проекта не было много задач, и все начали учиться и накапливаться в разных направлениях.
Хотя все наши проекты развернуты на 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, то рекомендуется использовать эту комбинацию перфораторов, которая может мониторить почти все компоненты микросервиса через различные экспортеры.