НАСТРОЙКА ALERTMANAGER PROMETHEUS

Thank you for reading this post, don't forget to subscribe!

Систе­мы мони­то­рин­га напо­до­бие Prometheus уста­нав­ли­ва­ют­ся не толь­ко для того что­бы иметь кра­си­вые гра­фи­ки состо­я­ния сер­ве­ра в опре­де­лён­ный момент, но что­бы вовре­мя узна­вать о воз­мож­ных про­бле­мах. Для это­го у таких систем суще­ству­ют уве­дом­ле­ния - алер­ты. Prometheus тоже уме­ет гене­ри­ро­вать алер­ты на осно­ве настра­и­ва­е­мых пра­вил, одна­ко если состо­я­ние сер­ве­ра сов­па­да­ет с пра­ви­лом Prometheus будет гене­ри­ро­вать алерт при каж­дом обновлении.

Это не очень удоб­ное пове­де­ние, пото­му что если про­бле­ма будет сохра­нят­ся дол­го, вся поч­та будет заспам­ле­на одно­об­раз­ны­ми сооб­ще­ни­я­ми. Поэто­му суще­ству­ет Alertmanager. Это про­грам­ма из того же паке­та что и Prometheus, она поз­во­ля­ет сор­ти­ро­вать алер­ты и отправ­лять сооб­ще­ния толь­ко пер­вый раз

НАСТРОЙКА ALERTMANAGER ДЛЯ PROMETHEUS

1. НАСТРОЙКА ПРАВИЛ PROMETHEUS

Пер­вым делом необ­хо­ди­мо настро­ить пра­ви­ла Prometheus что­бы про­грам­ма гене­ри­ро­ва­ла алер­ты при воз­ник­но­ве­нии тех или иных собы­тий. Для пра­вил надо создать отдель­ный файл в пап­ке с кон­фи­гу­ра­ци­ей prometheus, напри­мер, rules.yaml:

sudo vi /etc/prometheus/rules.yaml

Файл дол­жен содер­жать дан­ные в фор­ма­те yaml. Все пра­ви­ла раз­би­ты на груп­пы. У каж­дой груп­пы есть имя (name) и спи­сок пра­вил (rules). Сна­ча­ла посмот­рим на общий син­так­сис правила:

рас­смот­рим про­стое пра­ви­ло, отправ­лять алерт, если хост недоступен:

Думаю здесь всё понят­но, пра­ви­ло назы­ва­ет­ся PrometheusTargetMissing, даль­ше идёт усло­вие up == 0. Здесь up это внут­рен­няя мет­ри­ка prometheus, но здесь мож­но исполь­зо­вать и мет­ри­ки предо­став­ля­е­мые экс­пор­тё­ра­ми. Даль­ше в пара­мет­ре for зада­ет­ся вре­мя, на про­тя­же­нии кото­ро­го про­бле­ма долж­на сохра­нят­ся для того что­бы отпра­вить уве­дом­ле­ние. Затем идёт опи­са­ние алер­та. В опи­са­нии мож­но исполь­зо­вать пере­мен­ные. Вот они:

  • {{$value}} - содер­жит зна­че­ние пере­мен­ной, участ­ву­ю­щей в выражении;
  • {{$labels.instance}} - IP адрес и порт экс­пор­тё­ра, с кото­рым воз­ник­ла проблема;
  • {{$labels.job}} - имя зада­чи из кон­фи­гу­ра­ци­он­но­го фай­ла prometheus;

В кон­фи­гу­ра­ци­он­ном фай­ле это пра­ви­ло будет выгля­деть вот так:

Это­го пра­ви­ла хва­тит для тести­ро­ва­ния alertmanager в этой ста­тье. Боль­ше полез­ных пра­вил вы може­те най­ти здесь. Теперь оста­лось доба­вить создан­ный файл с пра­ви­ла­ми в основ­ной файл кон­фи­гу­ра­ции prometheus. Для это­го добавь­те в него такие строчки:

sudo vi /etc/prometheus/prometheus.yml

атем нуж­но про­ве­рить создан­ные пра­ви­ла, для это­го выпол­ни­те команду:

promtool check rules /etc/prometheus/rules.yml

Если всё про­шло успеш­но, коман­да выве­дет сло­во SUCCESS и коли­че­ство най­ден­ных пра­вил. Если воз­ник­ла ошиб­ка, убе­ди­тесь что у вас вер­но рас­став­ле­ны отсту­пы, фор­мат YAML очень к нем чув­стви­те­лен. Все эле­мен­ты одной груп­пы долж­ны быть на одном уроне.

После вне­се­ния всех изме­не­ний пере­за­пу­сти­те Prometheus:

sudo systemctl restart prometheus

2. УСТАНОВКА ALERTMANAGER

Уста­но­вить Alertmanager мож­но из офи­ци­аль­ных репозто­ри­ев, но так вы полу­чи­те про­грам­му более ста­рой вер­сии и без веб-интер­фей­са. Для уста­нов­ки выпол­ни­те команду:

yum install prometheus-alertmanager

После завер­ше­ния уста­нов­ки веб-интер­фейс мож­но раз­вер­нуть командой:

/usr/share/prometheus/alertmanager/generate-ui.sh

Или же мож­но уста­но­вить про­грам­му из офи­ци­аль­но­го сай­та. Как и дру­гие про­грам­мы из этой эко­си­сте­мы, alertmanager напи­сан на Golang, поэто­му состо­ит из одно­го испол­ня­е­мо­го фай­ла и несколь­ких кон­фи­гу­ра­ци­он­ных фай­лов. Он не зави­сит от уста­нов­лен­ных в систе­ме библиотек.

Сна­ча­ла ска­чай­те архив с испол­ня­е­мы­ми фай­ла­ми alertmanager из офи­ци­аль­ной стра­ни­цы github, например:

wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz

Даль­ше рас­па­куй­те полу­чен­ный архив:

tar -xvf alertmanager-0.21.0.linux-amd64.tar.gz

И ско­пи­руй­те фай­лы alertmanager и amtool в пап­ку /usr/local/bin:

sudo cp alertmanager-0.21.0.linux-amd64/alertmanager /usr/local/bin/
sudo cp alertmanager-0.21.0.linux-amd64/amtool /usr/local/bin/

Далее надо ско­пи­ро­вать кон­фи­гу­ра­ци­он­ный файл alertmanager.yml в /etc/prometheus:

sudo cp alertmanager-0.21.0.linux-amd64/alertmanager.yml /etc/prometheus

Дай­те поль­зо­ва­те­лю prometheus пра­ва на кон­фи­гу­ра­ци­он­ный файл:

sudo chown -R prometheus:prometheus /etc/prometheus/alertmanager.yml

Оста­лось создать systemd сер­вис, с помо­щью кото­ро­го вы смо­же­те запус­кать программу.

sudo systemctl edit --full --force prometheus-alertmanager

Теперь може­те запу­стить сервис:

sudo systemctl start prometheus-alertmanager

Веб-интер­фейс будет досту­пен на пор­ту 9093:

3. НАСТРОЙКА PROMETHEUS

Даль­ше необ­хо­ди­мо убе­дит­ся, что в кон­фи­гу­ра­ци­он­ном фай­ле prometheus про­пи­са­на отправ­ка алер­тов в alertmanager. Най­ди­те в нём или добавь­те такую секцию:

sudo vi /etc/prometheus/alertmanager.yml

Если были вне­се­ны изме­не­ния, то prometheus надо перезапустить:

sudo systemctl restart prometheus

4. НАСТРОЙКА ALERTMANAGER

Почти всё гото­во, теперь надо настро­ить сам Alertmanager. Надо ука­зать как груп­пи­ро­вать алер­ты, когда и куда отправ­лять уве­дом­ле­ния. Вот основ­ное содер­жа­ние кон­фи­гу­ра­ци­он­но­го файла:

 

Все алер­ты, посту­пив­шие в AlertManager необ­хо­ди­мо груп­пи­ро­вать что­бы не отправ­лять инфор­ма­цию об одних и тех же собы­ти­ях несколь­ко раз. Дирек­ти­ва group_by ука­зы­ва­ет какие поля исполь­зо­вать во вре­мя груп­пи­ров­ки. После того, как была созда­на новая груп­па алер­тов, к делу под­клю­ча­ет­ся пара­метр group_wait. Он ука­зы­ва­ет сколь­ко надо ждать перед отправ­кой пер­во­го сооб­ще­ния. Пара­метр отве­ча­ет за то, что­бы вы мог­ли полу­чить одним сооб­ще­ни­ем всю пач­ку алер­тов груп­пы, а не отдель­ное сооб­ще­ние для каж­до­го алерта.

Пара­метр group_interval ука­зы­ва­ет сколь­ко надо ждать после отправ­ки пер­во­го сооб­ще­ния для груп­пы, до отправ­ки повтор­ных сооб­ще­ний из этой же груп­пы. Но не толь­ко он вли­я­ет на интер­вал меж­ду сооб­ще­ни­я­ми, ещё есть пара­метр repeat_interval - кото­рый ука­зы­ва­ет через сколь­ко вре­ме­ни мож­но повто­рить отправ­ку уже отправ­лен­но­го алерта.

Вот рабо­чий при­мер кон­фи­гу­ра­ции с отправ­кой уве­дом­ле­ний на email:

sudo vi /etc/prometheus/alertmanager.yml

Все алер­ты груп­пи­ру­ют­ся по име­ни, а зна­чит если для двух раз­ных сере­ров при­дут алер­ты с оди­на­ко­вым име­нем, они будут поме­ще­ны в одну груп­пу. Груп­па соби­ра­ет­ся на про­тя­же­нии 30 секунд, и отправ­лять повтор­ные сооб­ще­ния мож­но не чаще чем раз в час. Даль­ше идёт настрой­ка отправ­ки сооб­ще­ний на элек­трон­ную почту. Для это­го исполь­зу­ет­ся про­то­кол SMTP. Необ­хо­ди­мо ука­зать хост SMTP сер­ве­ра, имя поль­зо­ва­те­ля и пароль. Вы може­те исполь­зо­вать свой SMTP сер­вер, настро­ен­ный на Postfix или Exim или же вос­поль­зо­вать­ся сто­рон­ним сервисом.

Даль­ше нуж­но толь­ко пере­за­пу­стить Alertmanager:

sudo systemctl restart prometheus-alertmanager

5. ТЕСТИРОВАНИЕ

Для тести­ро­ва­ния на одном из сер­ве­ров, с кото­рых соби­ра­ет дан­ные Prometheus мож­но отклю­чить node_exporter. Для это­го выполните:

sudo systemctl stop prometheus-node-exporter

Подо­жди­те пока Prometheus сно­ва опро­сит цели и в AlertManager появит­ся этот алерт:

Сра­зу же он при­дет вам на почту: