diff --git a/roles/alertmanager/defaults/main.yml b/roles/alertmanager/defaults/main.yml new file mode 100644 index 0000000..92257f8 --- /dev/null +++ b/roles/alertmanager/defaults/main.yml @@ -0,0 +1,12 @@ +--- +# Alertmanager settings +alertmanager_port: 9093 +alertmanager_config_path: /etc/alertmanager + +# Email notifications (заполнить позже) +smtp_host: localhost +smtp_from: alertmanager@example.com +smtp_to: admin@example.com + +# Webhook для тестирования +webhook_url: "http://localhost:9099" diff --git a/roles/alertmanager/tasks/main.yml b/roles/alertmanager/tasks/main.yml index 012335a..72e87f4 100644 --- a/roles/alertmanager/tasks/main.yml +++ b/roles/alertmanager/tasks/main.yml @@ -7,13 +7,13 @@ group: root mode: '0755' loop: - - /etc/alertmanager + - "{{ alertmanager_config_path }}" - /var/lib/alertmanager - name: Deploy Alertmanager configuration template: src: alertmanager.yml.j2 - dest: /etc/alertmanager/alertmanager.yml + dest: "{{ alertmanager_config_path }}/alertmanager.yml" owner: root group: root mode: '0644' @@ -25,9 +25,9 @@ state: started restart_policy: always ports: - - "9093:9093" + - "{{ alertmanager_port }}:9093" volumes: - - /etc/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml + - "{{ alertmanager_config_path }}/alertmanager.yml:/etc/alertmanager/alertmanager.yml" - /var/lib/alertmanager:/alertmanager command: --config.file=/etc/alertmanager/alertmanager.yml --storage.path=/alertmanager tags: alertmanager diff --git a/roles/alertmanager/templates/alertmanager.yml.j2 b/roles/alertmanager/templates/alertmanager.yml.j2 index e1690a8..b3462d4 100644 --- a/roles/alertmanager/templates/alertmanager.yml.j2 +++ b/roles/alertmanager/templates/alertmanager.yml.j2 @@ -1,21 +1,52 @@ global: - smtp_smarthost: 'localhost:25' - smtp_from: 'alertmanager@example.com' + # Настройки для уведомлений (можно настроить позже) + # smtp_smarthost: 'smtp.gmail.com:587' + # smtp_from: 'alertmanager@example.com' + # smtp_auth_username: 'user@gmail.com' + # smtp_auth_password: 'password' + # smtp_require_tls: true route: - group_by: ['alertname'] - group_wait: 30s - group_interval: 5m - repeat_interval: 12h - receiver: 'email-notifications' + # Основной маршрут - все алерты идут в Node-RED + receiver: 'node-red-webhook' + group_by: ['alertname', 'severity'] + group_wait: 10s + group_interval: 10s + repeat_interval: 1h + + # Вложенные маршруты + routes: + - match: + severity: critical + receiver: 'node-red-critical' + group_wait: 5s + repeat_interval: 10m + + - match: + severity: warning + receiver: 'node-red-warning' + group_wait: 30s + repeat_interval: 2h receivers: -- name: 'email-notifications' - email_configs: - - to: 'alerts@example.com' - send_resolved: true + - name: 'node-red-webhook' + webhook_configs: + - url: 'http://node-red:1880/webhook/alertmanager' + send_resolved: true -- name: 'webhook-notifications' - webhook_configs: - - url: 'http://node-red:1880/alerts' - send_resolved: true + - name: 'node-red-critical' + webhook_configs: + - url: 'http://node-red:1880/webhook/critical' + send_resolved: true + + - name: 'node-red-warning' + webhook_configs: + - url: 'http://node-red:1880/webhook/warning' + send_resolved: true + +inhibit_rules: + - source_match: + severity: 'critical' + target_match: + severity: 'warning' + equal: ['alertname', 'instance'] diff --git a/roles/node-red/defaults/main.yml b/roles/node-red/defaults/main.yml new file mode 100644 index 0000000..83064e0 --- /dev/null +++ b/roles/node-red/defaults/main.yml @@ -0,0 +1,9 @@ +--- +# Node-RED settings +node_red_port: 1880 +node_red_data_dir: /var/lib/node-red +node_red_image: nodered/node-red:latest + +# Persistence settings +node_red_persist_flows: true +node_red_enable_projects: false diff --git a/roles/node-red/tasks/main.yml b/roles/node-red/tasks/main.yml index 725bf5b..90df96c 100644 --- a/roles/node-red/tasks/main.yml +++ b/roles/node-red/tasks/main.yml @@ -1,22 +1,32 @@ --- -- name: Create Node-RED data directory +- name: Create Node-RED data directory with correct permissions file: - path: /var/lib/node-red + path: "{{ node_red_data_dir }}" state: directory - owner: root - group: root + owner: 1000 # Node-RED контейнер запускается от пользователя 1000 + group: 1000 mode: '0755' - name: Run Node-RED container docker_container: name: node-red - image: nodered/node-red:latest + image: "{{ node_red_image }}" state: started restart_policy: always ports: - - "1880:1880" + - "{{ node_red_port }}:1880" volumes: - - /var/lib/node-red:/data - environment: - NODE_RED_ENABLE_PROJECTS: "false" + - "{{ node_red_data_dir }}:/data" + user: "1000:1000" # Запускаем от правильного пользователя + env: + NODE_RED_ENABLE_PROJECTS: "{{ 'true' if node_red_enable_projects else 'false' }}" + TZ: "UTC" + tags: node-red + +- name: Display Node-RED access info + debug: + msg: | + Node-RED is available at: + - Web UI: http://{{ inventory_hostname }}:{{ node_red_port }} + - API: http://{{ inventory_hostname }}:{{ node_red_port }}/red/api tags: node-red