Files
LedgerLine/ansible/roles/observability/tasks/main.yml
T

91 lines
3.4 KiB
YAML
Raw Normal View History

2026-09-05 08:11:34 +03:30
---
- name: Validate selected stack
ansible.builtin.assert:
that:
- observability_stack in ['elk-grafana', 'grafana-stack']
fail_msg: observability_stack must be elk-grafana or grafana-stack.
- name: Set stack deployment directory
ansible.builtin.set_fact:
stack_root: "{{ observability_root }}/{{ observability_stack }}"
- name: Create stack directory tree
ansible.builtin.file:
path: "{{ item }}"
state: directory
owner: root
group: root
mode: "0755"
loop: >-
{{
[stack_root, stack_root + '/config']
+ (
[stack_root + '/config/filebeat', stack_root + '/config/logstash/pipeline', stack_root + '/config/grafana/provisioning/datasources']
if observability_stack == 'elk-grafana'
else [stack_root + '/config/prometheus/rules', stack_root + '/config/alertmanager', stack_root + '/config/loki', stack_root + '/config/tempo', stack_root + '/config/alloy', stack_root + '/config/grafana/provisioning/datasources']
)
}}
- name: Apply Elasticsearch kernel requirement
ansible.posix.sysctl:
name: vm.max_map_count
value: "262144"
state: present
sysctl_set: true
reload: true
when: observability_stack == 'elk-grafana'
- name: Render ELK and Grafana files
ansible.builtin.template:
src: "elk-grafana/{{ item.src }}"
dest: "{{ stack_root }}/{{ item.dest }}"
owner: root
group: root
mode: "{{ item.mode | default('0644') }}"
loop:
- { src: docker-compose.yml.j2, dest: docker-compose.yml }
- { src: config/filebeat/filebeat.yml.j2, dest: config/filebeat/filebeat.yml }
- { src: config/logstash/pipeline/logstash.conf.j2, dest: config/logstash/pipeline/logstash.conf }
- { src: config/grafana/provisioning/datasources/datasources.yml.j2, dest: config/grafana/provisioning/datasources/datasources.yml }
when: observability_stack == 'elk-grafana'
notify: Restart observability stack
- name: Render Grafana stack files
ansible.builtin.template:
src: "grafana-stack/{{ item.src }}"
dest: "{{ stack_root }}/{{ item.dest }}"
owner: root
group: root
mode: "{{ item.mode | default('0644') }}"
loop:
- { src: docker-compose.yml.j2, dest: docker-compose.yml }
- { src: config/prometheus/prometheus.yml.j2, dest: config/prometheus/prometheus.yml }
- { src: config/prometheus/rules/host.rules.yml.j2, dest: config/prometheus/rules/host.rules.yml }
- { src: config/alertmanager/alertmanager.yml.j2, dest: config/alertmanager/alertmanager.yml }
- { src: config/loki/loki.yml.j2, dest: config/loki/loki.yml }
- { src: config/tempo/tempo.yml.j2, dest: config/tempo/tempo.yml }
- { src: config/alloy/config.alloy.j2, dest: config/alloy/config.alloy }
- { src: config/grafana/provisioning/datasources/datasources.yml.j2, dest: config/grafana/provisioning/datasources/datasources.yml }
when: observability_stack == 'grafana-stack'
notify: Restart observability stack
- name: Start selected observability stack
community.docker.docker_compose_v2:
project_src: "{{ stack_root }}"
state: present
pull: missing
remove_orphans: true
- name: Flush restart handler before health checks
ansible.builtin.meta: flush_handlers
- name: Wait for Grafana
ansible.builtin.uri:
url: http://127.0.0.1:3000/api/health
status_code: 200
register: grafana_health
retries: 30
delay: 5
until: grafana_health.status == 200