Compare commits
8
Commits
d3d933fcce
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
41a5a772c4 | ||
|
|
37e26678d5 | ||
|
|
f39524af73 | ||
|
|
20e498e885 | ||
|
|
6c6d3e3844 | ||
|
|
f457c51dcb | ||
|
|
beb3141c24 | ||
|
|
fc2235e804 |
@@ -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`.
|
||||||
@@ -47,6 +51,12 @@ prom_admin_password: "ваш_пароль_для_prometheus"
|
|||||||
|
|
||||||
exporter_user: "ваш_логин_для_exporters"
|
exporter_user: "ваш_логин_для_exporters"
|
||||||
exporter_password: "ваш_пароль_для_exporters"
|
exporter_password: "ваш_пароль_для_exporters"
|
||||||
|
|
||||||
|
domen: "ваш_домен" # Удалите строку, если нет.
|
||||||
|
email: "ваш_email"
|
||||||
|
|
||||||
|
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`. Придумайте и введите пароль.
|
||||||
@@ -66,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**.
|
||||||
|
|
||||||
@@ -75,6 +85,6 @@ ansible_ssh_private_key_file: "путь_до_ssh_ключа"
|
|||||||
***
|
***
|
||||||
|
|
||||||
# Планы дальнейшего развития проекта:
|
# Планы дальнейшего развития проекта:
|
||||||
* Разбить таски по ролям Ansible.
|
* ~~Разбить таски по ролям Ansible.~~ > сделано :white_check_mark:
|
||||||
* Добавить возможность получения SSL-сертификата ради безопасного HTTPS соединения.
|
* ~~Добавить возможность получения SSL-сертификата ради безопасного HTTPS соединения.~~ > сделано :white_check_mark:
|
||||||
* Прикрутить Alertmanager + Telegram Notifications.
|
* ~~Прикрутить Alertmanager + Telegram Notifications.~~ > сделано :white_check_mark:
|
||||||
|
|||||||
+28
-22
@@ -1,23 +1,29 @@
|
|||||||
$ANSIBLE_VAULT;1.1;AES256
|
$ANSIBLE_VAULT;1.1;AES256
|
||||||
38393662663161356233646332336136363365633235656430363164336363363337633631626238
|
39666561396365356662373830343930383431356531656337643631303935643232316535666464
|
||||||
6436646231663738626138393730316535316635356533320a636164373361613630323932616436
|
3535363064306139613037316366393362306263326562360a306566333736646632363661396632
|
||||||
31316135393966316133373333303630326435633361336634393262396665386564346264653335
|
64366461623533653538633234333735373863376232323533323934336337633166643134363839
|
||||||
3636353436366430380a656566646364356330333536306362353631616264646165313465643763
|
3332653465323963650a396231636332653234356639393731663735656135346139653334326233
|
||||||
63396166613632376630363935616436653736663637313463666362323439323133313563613837
|
62623539336237356333663365343164653166333534346436363762346466633333373433626434
|
||||||
33353636326466626163663736316134666464373264663539333837336463626362323738636466
|
62613934353761323261303333393963653232633034353737373863613066613433373463363961
|
||||||
34396330333931323038316464363138386161633532613032366563636235373735343737633334
|
39666233613739636166396435396666653633623033616435623363323032623765323662383232
|
||||||
63363865313937626637626432613065353763643334373533333365643634623539613362383535
|
61613966633038663436626435373732346266323665353938616134633137333630336431653366
|
||||||
61313238363662626433333534613566326466303364346639653266626131356637643739336436
|
37303730333937313038393966376535653739653937346433653261313863376131326230313836
|
||||||
33396135363037613030643237376334613433306464366532353030373532303665363463323839
|
38356463353561336130306535633862306439313338373961306165343838663263313863643239
|
||||||
66383234626563653633373266326133333434343631656139383265626537636239343163613865
|
64616463613731663064343139383539343865376638356163363832313562623734323966353332
|
||||||
38383131306462616334313261336534396166616164393736356565396562356361623765666633
|
64626231313930393738376562343930663230623365376465353930363337663032633138656332
|
||||||
35386263626566346137343434303563626531626336363966643436383263363562626632613138
|
31373261323038663537323232656230653466303335383834646534383166306362313433366237
|
||||||
31303234376339376339323561343464636666326361356236343231306138333766363832353933
|
65346266366365656637396539646164663239313737663163623938383930373665303763363362
|
||||||
35613035643437613235343661636133636462383236326361346137333662633663313662386535
|
66396635383564366133356332653964643036613535303930383466326333336139383533326661
|
||||||
37383933623436396663396365303831323061353937376264613431666264626161643938386237
|
63336365636466656232666537663338393932383765313834656332663861306266333461306666
|
||||||
37356166373736323761656261323934643739663265636630663734363438386138313332386130
|
34383565623863663331373162396533333466396434366635366433313439376131613834353966
|
||||||
39376436363936613435323032356235613563633333336332323838643331623966643130383566
|
61373565373363666265333237303335353131623263343035666163653138343266613533656439
|
||||||
65323839653633373331373139636465663238633861623431306362343662333730656430633266
|
33373764383863383763376362646237316631373037383135373432666439663930366234383566
|
||||||
63323131343735326264366337393432303363623362316133363335386434653932623063323037
|
64386231363331646662346563346563663235623366643031373434346263653237393066303235
|
||||||
63373334663735373962626337346365326537663363633739316133643930616538323766663563
|
63316538353861336631613837643664313536396332643964386431333766376333646238303636
|
||||||
3963316330643230666636303563626333373830326561636631
|
61653237646530616530656265343636353731316531353638343832363832626662366164333734
|
||||||
|
30346561336664666438613363313965616231353966376338663738323966383163333531333032
|
||||||
|
61653636633830623633386536613466656235616639336136653763373032353464336236373462
|
||||||
|
39393334396165393030393435333232373137316132326566633466316461363632376237333437
|
||||||
|
65636638323932376439623834643735383961633831326338396263343363373339313363313661
|
||||||
|
30626434333362303837363535646437366131623236383265656436323666623661346364613533
|
||||||
|
63346538663735633838
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
- name: Restart docker-compose
|
- name: Restart docker-compose
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
project_src: "{{ monitoring_dir }}"
|
project_src: "{{ monitoring_dir }}"
|
||||||
|
files:
|
||||||
|
- "{{ 'docker-compose-https.yml' if (domain is defined and domain | length > 0) else 'docker-compose.yml' }}"
|
||||||
state: restarted
|
state: restarted
|
||||||
@@ -5,9 +5,16 @@
|
|||||||
ansible.builtin.import_role:
|
ansible.builtin.import_role:
|
||||||
name: install_Docker_and_utilities
|
name: install_Docker_and_utilities
|
||||||
|
|
||||||
|
- name: Установка nginx
|
||||||
|
ansible.builtin.apt:
|
||||||
|
name: nginx
|
||||||
|
state: present
|
||||||
|
update_cache: true
|
||||||
|
|
||||||
- name: Получаем сертификат, если его нет
|
- name: Получаем сертификат, если его нет
|
||||||
ansible.builtin.import_role:
|
ansible.builtin.import_role:
|
||||||
name: get_ssl_cert
|
name: get_ssl_cert
|
||||||
|
when: domain is defined and domain | length > 0
|
||||||
|
|
||||||
- name: Скопировать конфигурации сервисов
|
- name: Скопировать конфигурации сервисов
|
||||||
ansible.builtin.template:
|
ansible.builtin.template:
|
||||||
@@ -22,9 +29,40 @@
|
|||||||
- { src: "node-exporter-web.yml.j2", dest: "node-exporter-web.yml" }
|
- { src: "node-exporter-web.yml.j2", dest: "node-exporter-web.yml" }
|
||||||
- { src: "grafana-datasource.yml.j2", dest: "grafana_provisioning/datasource.yml" }
|
- { src: "grafana-datasource.yml.j2", dest: "grafana_provisioning/datasource.yml" }
|
||||||
- { src: "docker-compose.yml.j2", dest: "docker-compose.yml" }
|
- { src: "docker-compose.yml.j2", dest: "docker-compose.yml" }
|
||||||
|
- { src: "docker-compose-https.yml.j2", dest: "docker-compose-https.yml" }
|
||||||
|
- { src: "alertmanager.yml.j2", dest: "alertmanager.yml" }
|
||||||
|
- { src: "alerts.rules.yml.j2", dest: "alerts.rules.yml" }
|
||||||
notify: Restart docker-compose
|
notify: Restart docker-compose
|
||||||
|
|
||||||
- name: Запустить Docker Compose
|
- name: Скопировать конфиг nginx
|
||||||
|
ansible.builtin.template:
|
||||||
|
src: "nginx-https.conf.j2"
|
||||||
|
dest: "/etc/nginx/sites-available/nginx-https.conf"
|
||||||
|
mode: '0644'
|
||||||
|
when: domain is defined and domain | length > 0
|
||||||
|
|
||||||
|
- name: Включить nginx конфиг (symlink)
|
||||||
|
ansible.builtin.file:
|
||||||
|
src: /etc/nginx/sites-available/nginx-https.conf
|
||||||
|
dest: /etc/nginx/sites-enabled/nginx-https.conf
|
||||||
|
state: link
|
||||||
|
when: domain is defined and domain | length > 0
|
||||||
|
|
||||||
|
- name: Удалить дефолтную конфигурацию nginx
|
||||||
|
ansible.builtin.file:
|
||||||
|
path: /etc/nginx/sites-enabled/default
|
||||||
|
state: absent
|
||||||
|
|
||||||
|
- name: Перезагрузить nginx
|
||||||
|
ansible.builtin.systemd:
|
||||||
|
name: nginx
|
||||||
|
enabled: true
|
||||||
|
state: reloaded
|
||||||
|
when: domain is defined and domain | length > 0
|
||||||
|
|
||||||
|
- name: Запуск нужного compose-файла в зависимости от наличия domain
|
||||||
community.docker.docker_compose_v2:
|
community.docker.docker_compose_v2:
|
||||||
project_src: "{{ monitoring_dir }}"
|
project_src: "{{ monitoring_dir }}"
|
||||||
|
files:
|
||||||
|
- "{{ 'docker-compose-https.yml' if (domain is defined and domain | length > 0) else 'docker-compose.yml' }}"
|
||||||
state: present
|
state: present
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
route:
|
||||||
|
receiver: 'telegram'
|
||||||
|
group_by: ['alertname']
|
||||||
|
group_wait: 30s
|
||||||
|
repeat_interval: 1h
|
||||||
|
|
||||||
|
receivers:
|
||||||
|
- name: 'telegram'
|
||||||
|
telegram_configs:
|
||||||
|
- bot_token: "{{ telegram_bot_token }}"
|
||||||
|
chat_id: {{ telegram_chat_id }}
|
||||||
|
parse_mode: "Markdown"
|
||||||
|
message: |-
|
||||||
|
{% raw %}{{ if eq .Status "firing" }}🔥 *{{ .GroupLabels.alertname }}*{{ else }}✅ *{{ .GroupLabels.alertname }} — resolved*{{ end }}
|
||||||
|
|
||||||
|
{{ range .Alerts -}}
|
||||||
|
*Сервер:* `{{ .Labels.instance }}`
|
||||||
|
*Описание:* {{ .Annotations.description }}
|
||||||
|
|
||||||
|
{{ end }}{% endraw %}
|
||||||
@@ -0,0 +1,30 @@
|
|||||||
|
groups:
|
||||||
|
- name: main
|
||||||
|
rules:
|
||||||
|
|
||||||
|
# Алерт 1: Сервер недоступен
|
||||||
|
- alert: InstanceDown
|
||||||
|
expr: up == 0
|
||||||
|
for: 1m
|
||||||
|
annotations:
|
||||||
|
description: "{% raw %}Сервер {{ $labels.instance }} недоступен{% endraw %}"
|
||||||
|
|
||||||
|
# Алерт 2: Высокая загрузка CPU (любой сервер)
|
||||||
|
- alert: HighCpuLoad
|
||||||
|
expr: (1 - avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[1m]))) * 100 > 80
|
||||||
|
for: 1m
|
||||||
|
annotations:
|
||||||
|
description: >-
|
||||||
|
{% raw %}Сервер {{ $labels.instance }}: загрузка CPU {{ printf "%.1f" $value }}% (порог 80%){% endraw %}
|
||||||
|
|
||||||
|
# Алерт 3: Высокий трафик на general_server (сумма вход + выход > 10 МБ/с)
|
||||||
|
- alert: HighNetworkTraffic
|
||||||
|
expr: >-
|
||||||
|
sum by(instance) (
|
||||||
|
rate(node_network_receive_bytes_total{nodename="general_server", device!="lo"}[1m]) +
|
||||||
|
rate(node_network_transmit_bytes_total{nodename="general_server", device!="lo"}[1m])
|
||||||
|
) / 1024 / 1024 > 10
|
||||||
|
for: 1m
|
||||||
|
annotations:
|
||||||
|
description: >-
|
||||||
|
{% raw %}general_server: суммарный трафик {{ printf "%.1f" $value }} МБ/с превысил порог 10 МБ/с{% endraw %}
|
||||||
@@ -0,0 +1,52 @@
|
|||||||
|
services:
|
||||||
|
prometheus:
|
||||||
|
image: prom/prometheus:latest
|
||||||
|
container_name: prometheus
|
||||||
|
ports:
|
||||||
|
- "9090:9090"
|
||||||
|
volumes:
|
||||||
|
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||||
|
- ./prometheus-web.yml:/etc/prometheus/prometheus-web.yml:ro
|
||||||
|
- ./alerts.rules.yml:/etc/prometheus/alerts.rules.yml:ro
|
||||||
|
- prom_data:/prometheus
|
||||||
|
|
||||||
|
command:
|
||||||
|
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||||
|
- '--web.config.file=/etc/prometheus/prometheus-web.yml'
|
||||||
|
- '--storage.tsdb.path=/prometheus'
|
||||||
|
- '--web.enable-admin-api'
|
||||||
|
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
|
||||||
|
grafana:
|
||||||
|
image: grafana/grafana:latest
|
||||||
|
container_name: grafana
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:3001:3000"
|
||||||
|
volumes:
|
||||||
|
- ./grafana_provisioning/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro
|
||||||
|
- grafana_data:/var/lib/grafana
|
||||||
|
|
||||||
|
environment:
|
||||||
|
- GF_SECURITY_ADMIN_USER="{{ grafana_admin_user }}"
|
||||||
|
- GF_SECURITY_ADMIN_PASSWORD="{{ grafana_admin_password }}"
|
||||||
|
- GF_USERS_ALLOW_SIGN_UP=false
|
||||||
|
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
depends_on:
|
||||||
|
- prometheus
|
||||||
|
|
||||||
|
alertmanager:
|
||||||
|
image: prom/alertmanager:latest
|
||||||
|
container_name: alertmanager
|
||||||
|
volumes:
|
||||||
|
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:9093:9093"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
prom_data:
|
||||||
|
grafana_data:
|
||||||
@@ -7,6 +7,7 @@ services:
|
|||||||
volumes:
|
volumes:
|
||||||
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
- ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
|
||||||
- ./prometheus-web.yml:/etc/prometheus/prometheus-web.yml:ro
|
- ./prometheus-web.yml:/etc/prometheus/prometheus-web.yml:ro
|
||||||
|
- ./alerts.rules.yml:/etc/prometheus/alerts.rules.yml:ro
|
||||||
- prom_data:/prometheus
|
- prom_data:/prometheus
|
||||||
|
|
||||||
command:
|
command:
|
||||||
@@ -22,7 +23,7 @@ services:
|
|||||||
image: grafana/grafana:latest
|
image: grafana/grafana:latest
|
||||||
container_name: grafana
|
container_name: grafana
|
||||||
ports:
|
ports:
|
||||||
- "127.0.0.1:3001:3000"
|
- "3001:3000"
|
||||||
volumes:
|
volumes:
|
||||||
- ./grafana_provisioning/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro
|
- ./grafana_provisioning/datasource.yml:/etc/grafana/provisioning/datasources/datasource.yml:ro
|
||||||
- grafana_data:/var/lib/grafana
|
- grafana_data:/var/lib/grafana
|
||||||
@@ -37,6 +38,16 @@ services:
|
|||||||
depends_on:
|
depends_on:
|
||||||
- prometheus
|
- prometheus
|
||||||
|
|
||||||
|
alertmanager:
|
||||||
|
image: prom/alertmanager:latest
|
||||||
|
container_name: alertmanager
|
||||||
|
volumes:
|
||||||
|
- ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
|
||||||
|
ports:
|
||||||
|
- "127.0.0.1:9093:9093"
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
prom_data:
|
prom_data:
|
||||||
grafana_data:
|
grafana_data:
|
||||||
|
|||||||
@@ -0,0 +1,21 @@
|
|||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
server_name {{ domain }};
|
||||||
|
return 301 https://$host$request_uri;
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl;
|
||||||
|
server_name {{ domain }};
|
||||||
|
|
||||||
|
ssl_certificate /etc/letsencrypt/live/{{ domain }}/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/{{ domain }}/privkey.pem;
|
||||||
|
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:3001;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto https;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -21,3 +21,9 @@ scrape_configs:
|
|||||||
nodename: "{{ host }}"
|
nodename: "{{ host }}"
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
|
alerting:
|
||||||
|
alertmanagers:
|
||||||
|
- static_configs:
|
||||||
|
- targets: ['alertmanager:9093']
|
||||||
|
rule_files:
|
||||||
|
- /etc/prometheus/alerts.rules.yml
|
||||||
|
|||||||
Reference in New Issue
Block a user