diff --git a/playbooks/deploy-alertmanager.yml b/playbooks/deploy-alertmanager.yml new file mode 100644 index 0000000..a6a4407 --- /dev/null +++ b/playbooks/deploy-alertmanager.yml @@ -0,0 +1,6 @@ +--- +- name: Deploy Alertmanager + hosts: 192.168.0.112 # app3 + become: true + roles: + - alertmanager diff --git a/playbooks/deploy-loki.yml b/playbooks/deploy-loki.yml new file mode 100644 index 0000000..39934c3 --- /dev/null +++ b/playbooks/deploy-loki.yml @@ -0,0 +1,6 @@ +--- +- name: Deploy Loki + hosts: 192.168.0.112 # app3 + become: true + roles: + - loki diff --git a/playbooks/deploy-node-red.yml b/playbooks/deploy-node-red.yml new file mode 100644 index 0000000..e2a4275 --- /dev/null +++ b/playbooks/deploy-node-red.yml @@ -0,0 +1,6 @@ +--- +- name: Deploy Node-RED + hosts: 192.168.0.112 # app3 + become: true + roles: + - node-red diff --git a/playbooks/deploy-promtail.yml b/playbooks/deploy-promtail.yml new file mode 100644 index 0000000..e50c91a --- /dev/null +++ b/playbooks/deploy-promtail.yml @@ -0,0 +1,6 @@ +--- +- name: Deploy Promtail on all nodes + hosts: all # Установим Promtail на все хосты для сбора логов + become: true + roles: + - promtail diff --git a/roles/alertmanager/tasks/main.yml b/roles/alertmanager/tasks/main.yml new file mode 100644 index 0000000..012335a --- /dev/null +++ b/roles/alertmanager/tasks/main.yml @@ -0,0 +1,33 @@ +--- +- name: Create Alertmanager directories + file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: '0755' + loop: + - /etc/alertmanager + - /var/lib/alertmanager + +- name: Deploy Alertmanager configuration + template: + src: alertmanager.yml.j2 + dest: /etc/alertmanager/alertmanager.yml + owner: root + group: root + mode: '0644' + +- name: Run Alertmanager container + docker_container: + name: alertmanager + image: prom/alertmanager:latest + state: started + restart_policy: always + ports: + - "9093:9093" + volumes: + - /etc/alertmanager/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 new file mode 100644 index 0000000..e1690a8 --- /dev/null +++ b/roles/alertmanager/templates/alertmanager.yml.j2 @@ -0,0 +1,21 @@ +global: + smtp_smarthost: 'localhost:25' + smtp_from: 'alertmanager@example.com' + +route: + group_by: ['alertname'] + group_wait: 30s + group_interval: 5m + repeat_interval: 12h + receiver: 'email-notifications' + +receivers: +- name: 'email-notifications' + email_configs: + - to: 'alerts@example.com' + send_resolved: true + +- name: 'webhook-notifications' + webhook_configs: + - url: 'http://node-red:1880/alerts' + send_resolved: true diff --git a/roles/loki/defaults/main.yml b/roles/loki/defaults/main.yml new file mode 100644 index 0000000..6c65a4a --- /dev/null +++ b/roles/loki/defaults/main.yml @@ -0,0 +1,9 @@ +--- +# Default port for Loki +loki_port: 3100 + +# Storage configuration +loki_storage_path: /var/lib/loki + +# Retention period +loki_retention_period: 720h # 30 дней diff --git a/roles/loki/tasks/main.yml b/roles/loki/tasks/main.yml new file mode 100644 index 0000000..834ec53 --- /dev/null +++ b/roles/loki/tasks/main.yml @@ -0,0 +1,33 @@ +--- +- name: Create Loki directories + file: + path: "{{ item }}" + state: directory + owner: root + group: root + mode: '0755' + loop: + - /etc/loki + - /var/lib/loki + +- name: Deploy Loki configuration + template: + src: loki-config.yml.j2 + dest: /etc/loki/loki-config.yml + owner: root + group: root + mode: '0644' + +- name: Run Loki container + docker_container: + name: loki + image: grafana/loki:latest + state: started + restart_policy: always + ports: + - "3100:3100" + volumes: + - /etc/loki/loki-config.yml:/etc/loki/loki-config.yml + - /var/lib/loki:/loki + command: -config.file=/etc/loki/loki-config.yml + tags: loki diff --git a/roles/loki/templates/loki-config.yml.j2 b/roles/loki/templates/loki-config.yml.j2 new file mode 100644 index 0000000..2060a35 --- /dev/null +++ b/roles/loki/templates/loki-config.yml.j2 @@ -0,0 +1,33 @@ +auth_enabled: false + +server: + http_listen_port: 3100 + grpc_listen_port: 9096 + +common: + path_prefix: /tmp/loki # Изменяем путь на /tmp для теста + storage: + filesystem: + chunks_directory: /tmp/loki/chunks + rules_directory: /tmp/loki/rules + replication_factor: 1 + ring: + instance_addr: 127.0.0.1 + kvstore: + store: inmemory + +limits_config: + allow_structured_metadata: false + +schema_config: + configs: + - from: 2020-10-24 + store: boltdb-shipper + object_store: filesystem + schema: v11 + index: + prefix: index_ + period: 24h + +ruler: + alertmanager_url: http://alertmanager:9093 diff --git a/roles/node-red/tasks/main.yml b/roles/node-red/tasks/main.yml new file mode 100644 index 0000000..725bf5b --- /dev/null +++ b/roles/node-red/tasks/main.yml @@ -0,0 +1,22 @@ +--- +- name: Create Node-RED data directory + file: + path: /var/lib/node-red + state: directory + owner: root + group: root + mode: '0755' + +- name: Run Node-RED container + docker_container: + name: node-red + image: nodered/node-red:latest + state: started + restart_policy: always + ports: + - "1880:1880" + volumes: + - /var/lib/node-red:/data + environment: + NODE_RED_ENABLE_PROJECTS: "false" + tags: node-red diff --git a/roles/promtail/defaults/main.yml b/roles/promtail/defaults/main.yml new file mode 100644 index 0000000..d849db5 --- /dev/null +++ b/roles/promtail/defaults/main.yml @@ -0,0 +1,7 @@ +--- +# Loki connection +loki_host: 192.168.0.112 +loki_port: 3100 + +# Promtail settings +promtail_port: 9080 diff --git a/roles/promtail/tasks/main.yml b/roles/promtail/tasks/main.yml new file mode 100644 index 0000000..74f866c --- /dev/null +++ b/roles/promtail/tasks/main.yml @@ -0,0 +1,31 @@ +--- +- name: Create Promtail directories + file: + path: /etc/promtail + state: directory + owner: root + group: root + mode: '0755' + +- name: Deploy Promtail configuration + template: + src: promtail-config.yml.j2 + dest: /etc/promtail/promtail-config.yml + owner: root + group: root + mode: '0644' + +- name: Run Promtail container (using host network) + docker_container: + name: promtail + image: grafana/promtail:latest + state: started + restart_policy: always + network_mode: host # <-- КЛЮЧЕВОЕ ИЗМЕНЕНИЕ + volumes: + - /var/log:/var/log:ro + - /var/lib/docker/containers:/var/lib/docker/containers:ro + - /etc/promtail/promtail-config.yml:/etc/promtail/config.yml + command: -config.file=/etc/promtail/config.yml + pid_mode: host + tags: promtail diff --git a/roles/promtail/templates/promtail-config.yml.j2 b/roles/promtail/templates/promtail-config.yml.j2 new file mode 100644 index 0000000..4bf8af7 --- /dev/null +++ b/roles/promtail/templates/promtail-config.yml.j2 @@ -0,0 +1,28 @@ +server: + http_listen_port: 9080 + grpc_listen_port: 0 + +positions: + filename: /tmp/positions.yaml + +clients: + - url: http://localhost:3100/loki/api/v1/push # Теперь localhost работает + +scrape_configs: + - job_name: system + static_configs: + - targets: + - localhost + labels: + job: varlogs + __path__: /var/log/*log + host: "{{ inventory_hostname }}" + + - job_name: docker + static_configs: + - targets: + - localhost + labels: + job: docker + __path__: /var/lib/docker/containers/*/*log + host: "{{ inventory_hostname }}"