Compare commits

...
2 Commits
Author SHA1 Message Date
Leo 41a5a772c4 Update teletram notifications 2026-09-23 17:33:48 +05:00
LeoR156 37e26678d5 Revise README for Alertmanager and Telegram bot details
Updated the README to reflect the addition of Alertmanager and Telegram bot integration, and removed redundant domain entry.
2026-09-23 17:22:23 +05:00
4 changed files with 62 additions and 55 deletions
+14 -7
View File
@@ -19,11 +19,11 @@
## Краткая архитектура 💡 ## Краткая архитектура 💡
* Главный сервер (general_server): настраивается вручную, вписывается первым под группой `servers` в inventory-файл и настраивается в файле **general_server.yml**, который должен быть расположен в папке **host_vars**. * Главный сервер (general_server): настраивается вручную, вписывается первым под группой `servers` в inventory-файл и настраивается в файле **general_server.yml**, который должен быть расположен в папке **host_vars**.
* Terraform идёт в облако Yandex Cloud и поднимает нужное количество серверов (настраивается в файле **variable.tf**). После развертывания серверов создает inventory-файл с настройками каждой машины в папке **host_vars**, чтобы запустить плейбук можно было без ручного ввода. * Terraform идёт в облако Yandex Cloud и поднимает нужное количество серверов (настраивается в файле **variable.tf**). После развертывания серверов создает inventory-файл с настройками каждой машины в папке **host_vars**, чтобы запустить плейбук можно было без ручного ввода.
* Ansible получает готовую конфигурацию и идёт на general_server, чтобы поднять два контейнера: Prometheus и Grafana. Он динамически подставляет переменные из папки **group_vars**, чтобы контейнеры получили готовую конфигурацию. Затем он идёт на остальные сервера, ставит node_exporter с официального репозитория на GitHub, настраивает systemd-службу и автозапуск. * Ansible получает готовую конфигурацию и идёт на general_server, чтобы поднять три контейнера: prometheus, grafana и alertmanager. Он динамически подставляет переменные из папки **group_vars**, чтобы контейнеры получили готовую конфигурацию. Затем он идёт на остальные сервера, ставит node_exporter с официального репозитория на GitHub, настраивает systemd-службу и автозапуск.
## Безопасность 🔒: ## Безопасность 🔒:
* Пароли и логины хранятся в папке **group_vars** в файле **vault.yml**, который, в свою очередь, зашифрован мастер-паролем хранилища Ansible Vault. * Пароли и логины хранятся в папке **group_vars** в файле **vault.yml**, который, в свою очередь, зашифрован мастер-паролем хранилища Ansible Vault.
* Сразу настраивается basic_auth на всех сервисах: Grafana, Ansible, Node_Exporters. * Сразу настраивается basic_auth на всех сервисах: Grafana, Node_Exporters.
* Стейт Terraform и ключи игнорируются Git. * Стейт Terraform и ключи игнорируются Git.
* Подключение к серверам идёт строго по SSH-ключам. * Подключение к серверам идёт строго по SSH-ключам.
@@ -33,7 +33,11 @@
### Вам понадобится: ### Вам понадобится:
* Аккаунт Yandex Cloud с ключами. Можно получить тут: <a href="https://console.yandex.cloud" target="_blank" rel="noopener noreferrer">Консоль Yandex Cloud</a>. Поместите ключи в папку **terraform-infra**. * Аккаунт Yandex Cloud с ключами. Можно получить тут: <a href="https://console.yandex.cloud" target="_blank" rel="noopener noreferrer">Консоль Yandex Cloud</a>. Поместите ключи в папку **terraform-infra**.
* Операционная система Linux с установленной на ней terraform, ansible и git. Команда для установки (работает на Ubuntu и Debian): `sudo apt update && sudo apt install -y ansible terraform git` * Операционная система Linux с установленной на ней terraform, ansible и git. Команда для установки (работает на Ubuntu и Debian): `sudo apt update && sudo apt install -y ansible terraform git`
* Токен вашего телеграмм бота и ваш личный ID. Можно получить здесь: [BotFather](https://t.me/BotFather). ID можно узнать здесь: [Get ID](https://t.me/userinfobot).
#### Не обязательно:
* Домен для получения ssl сертификата.
***
### Конкретные действия для развёртывания: ### Конкретные действия для развёртывания:
* Клонируйте и перейдите в скачанный репозиторий командой: `git clone https://github.com/LeoR156/metrics-prometheus-grafana && cd metrics-prometheus-grafana/group_vars/all/` * Клонируйте и перейдите в скачанный репозиторий командой: `git clone https://github.com/LeoR156/metrics-prometheus-grafana && cd metrics-prometheus-grafana/group_vars/all/`
* Откройте файл **vault.yml** и сотрите содержимое командой: `> vault.yml && nano vault.yml`. * Откройте файл **vault.yml** и сотрите содержимое командой: `> vault.yml && nano vault.yml`.
@@ -48,8 +52,11 @@ prom_admin_password: "ваш_пароль_для_prometheus"
exporter_user: "ваш_логин_для_exporters" exporter_user: "ваш_логин_для_exporters"
exporter_password: "ваш_пароль_для_exporters" exporter_password: "ваш_пароль_для_exporters"
domen: "ваш_домен" # Удалите строку, если нет.
email: "ваш_email" email: "ваш_email"
domen: "ваш_домен"
telegram_bot_token: "токен_вашего_бота"
telegram_chat_id: "ваш_телеграм_id"
``` ```
* Примените изменения: `Ctrl + X`, `Y` и `Enter`. * Примените изменения: `Ctrl + X`, `Y` и `Enter`.
* Желательно применить шифрование командой: `ansible-vault encrypt vault.yml`. Придумайте и введите пароль. * Желательно применить шифрование командой: `ansible-vault encrypt vault.yml`. Придумайте и введите пароль.
@@ -69,7 +76,7 @@ ansible_ssh_private_key_file: "путь_до_ssh_ключа"
* Пару-тройку минут — и Ansible сделает свою работу! * Пару-тройку минут — и Ansible сделает свою работу!
### Подключение и первый дашборд: ### Подключение и первый дашборд:
* Зайдите на IP главного сервера, порт 3001. Шаблон: `http://<IP_general_server>:3001` * Зайдите на IP главного сервера, порт 3001. Шаблон: `http://<IP_general_server>:3001`. **Важно:** Если указывали домен, то переходите прямо на него.
* Введите логин и пароль от Grafana, который вы задавали ранее в файле **vault.yml**. * Введите логин и пароль от Grafana, который вы задавали ранее в файле **vault.yml**.
* Зайдите на вкладку **Dashboards** слева экрана > нажмите **New** справа > нажмите **Import dashboard** > вставьте ID `1860` и нажмите **Load** > затем снова **Import**. * Зайдите на вкладку **Dashboards** слева экрана > нажмите **New** справа > нажмите **Import dashboard** > вставьте ID `1860` и нажмите **Load** > затем снова **Import**.
@@ -78,6 +85,6 @@ ansible_ssh_private_key_file: "путь_до_ssh_ключа"
*** ***
# Планы дальнейшего развития проекта: # Планы дальнейшего развития проекта:
* Разбить таски по ролям Ansible. >>> сделано :white_check_mark: * ~~Разбить таски по ролям Ansible.~~ > сделано :white_check_mark:
* Добавить возможность получения SSL-сертификата ради безопасного HTTPS соединения. >>> сделано :white_check_mark: * ~~Добавить возможность получения SSL-сертификата ради безопасного HTTPS соединения.~~ > сделано :white_check_mark:
* Прикрутить Alertmanager + Telegram Notifications. * ~~Прикрутить Alertmanager + Telegram Notifications.~~ > сделано :white_check_mark:
+28 -28
View File
@@ -1,29 +1,29 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
63636435633636653931346361356234643336663036336236623832643231343332366561393636 39666561396365356662373830343930383431356531656337643631303935643232316535666464
3331633566376161363130316266343632633938313032360a613363646634333237623139633063 3535363064306139613037316366393362306263326562360a306566333736646632363661396632
36663632303261383832626530373665336466386265303033643437353435633035343936313566 64366461623533653538633234333735373863376232323533323934336337633166643134363839
3338626365653237330a303161313161613731396266383862633130663665376139363066663436 3332653465323963650a396231636332653234356639393731663735656135346139653334326233
39653264363830393436613466633532393865656264623336386539303431343864663530623839 62623539336237356333663365343164653166333534346436363762346466633333373433626434
34616439653830303764313437313435663730346631343432323437313538303963373935336434 62613934353761323261303333393963653232633034353737373863613066613433373463363961
38646232643334303065346533346166363732623634316634363861663366346165333863616662 39666233613739636166396435396666653633623033616435623363323032623765323662383232
63353265643635373062386364353832376132313661613366393762613663626536663933393632 61613966633038663436626435373732346266323665353938616134633137333630336431653366
64623864656130366330346233353732313231666131376565626566316131303230353933336633 37303730333937313038393966376535653739653937346433653261313863376131326230313836
31663333333765363335343330373162333638303134366463383763356264323632613563666430 38356463353561336130306535633862306439313338373961306165343838663263313863643239
34616462663662643466383866346133373939386361343661346537326338363233653130393130 64616463613731663064343139383539343865376638356163363832313562623734323966353332
61633865656239396434616535373362313766373636323961643766343965343136636531653264 64626231313930393738376562343930663230623365376465353930363337663032633138656332
37663163383339613565373433326365633331636365616665386361353835636265343035666463 31373261323038663537323232656230653466303335383834646534383166306362313433366237
61316635666132326130356161623237353034633561393634396663383936363439313863343737 65346266366365656637396539646164663239313737663163623938383930373665303763363362
62666166326564666365393830363830333865333230376339366138356261376166313230363566 66396635383564366133356332653964643036613535303930383466326333336139383533326661
62373930316632613135346531646336373232306137656262343636613433616366383962613864 63336365636466656232666537663338393932383765313834656332663861306266333461306666
30623131323633623439393765346239363531633734636561613231393661383938373739373033 34383565623863663331373162396533333466396434366635366433313439376131613834353966
63653238393832656333343139636239366164386133623630643333626464343563636361666337 61373565373363666265333237303335353131623263343035666163653138343266613533656439
30313934633561633434303961343561343033316362623239383634306139373830366566393661 33373764383863383763376362646237316631373037383135373432666439663930366234383566
30356331663134613462366436383036366432336466386166303362333531636262343534626666 64386231363331646662346563346563663235623366643031373434346263653237393066303235
61613331633136646664373538323363363461643338376466366436313166376634633566356365 63316538353861336631613837643664313536396332643964386431333766376333646238303636
63316366386536336662383961373338626132313363626333663531326166656637633661343032 61653237646530616530656265343636353731316531353638343832363832626662366164333734
65386534636266386634633263613934636565313364323834326237376363353435386237363637 30346561336664666438613363313965616231353966376338663738323966383163333531333032
61663233323637396132633832636265303864393037376536353437643265353034306636343537 61653636633830623633386536613466656235616639336136653763373032353464336236373462
61363964613138616464336165623962363033356261373937656364396131366433376532383436 39393334396165393030393435333232373137316132326566633466316461363632376237333437
65613262373733623164303832653362656235623664353561326461376333616262653536306461 65636638323932376439623834643735383961633831326338396263343363373339313363313661
63376336396533656664323065663432306137363432363563356237343436653931633731646137 30626434333362303837363535646437366131623236383265656436323666623661346364613533
34313936366439623438 63346538663735633838
Binary file not shown.
+20 -20
View File
@@ -1,20 +1,20 @@
route: route:
receiver: 'telegram' receiver: 'telegram'
group_wait: 30s group_by: ['alertname']
repeat_interval: 1h group_wait: 30s
receivers: repeat_interval: 1h
- name: 'telegram'
telegram_configs: receivers:
- bot_token: "{{ telegram_bot_token }}" - name: 'telegram'
chat_id: {{ telegram_chat_id }} telegram_configs:
message: >- - bot_token: "{{ telegram_bot_token }}"
{% raw %} chat_id: {{ telegram_chat_id }}
{{ if eq .Status "firing" }}🔥{{ else }}✅{{ end }} parse_mode: "Markdown"
*{{ .GroupLabels.alertname }}* message: |-
{% raw %}{{ if eq .Status "firing" }}🔥 *{{ .GroupLabels.alertname }}*{{ else }}✅ *{{ .GroupLabels.alertname }} — resolved*{{ end }}
{{ range .Alerts }}
*Сервер:* `{{ .Labels.instance }}` {{ range .Alerts -}}
*Статус:* {{ .Status }} *Сервер:* `{{ .Labels.instance }}`
*Описание:* {{ .Annotations.description }} *Описание:* {{ .Annotations.description }}
{{ end }}
{% endraw %} {{ end }}{% endraw %}