Update 10 files

- /roles/loki/tasks/main.yml
- /roles/loki/templates/loki-config.yml.j2
- /roles/loki/templates/promtail-config.yml.j2
- /roles/loki/templates/docker-compose.yml.j2
- /roles/loki/handlers/main.yml
- /roles/grafana/templates/loki-datasource.yml.j2
- /roles/grafana/templates/docker-compose.yml.j2
- /roles/grafana/tasks/main.yml
- /group_vars/all.yml
- /olimp-deploy.yml
This commit is contained in:
Administrator 2025-11-21 09:05:45 +00:00
parent 1f97e908e7
commit 3b2d6d4ebc
10 changed files with 325 additions and 3 deletions

View File

@ -253,3 +253,12 @@ grafana_port: 45132
grafana_admin_user: admin
grafana_admin_password: 13qeadZC
grafana_root_url: https://mon.zailon.ru
# ------------ Loki------------
loki_base_dir: "/mnt/loki"
loki_config_dir: "{{ loki_base_dir }}/config"
loki_data_dir: "{{ loki_base_dir }}/data"
promtail_config_dir: "{{ loki_base_dir }}/promtail"
loki_port: 45135
loki_version: "2.9.2"
loki_retention_days: 30

View File

@ -57,3 +57,4 @@
- { role: docker, tags: deploy_docker }
- { role: meshcentral, tags: deploy_meshcentral }
- { role: grafana, tags: deploy_grafana }
- { role: loki, tags: deploy_loki }

View File

@ -52,3 +52,21 @@
- name: Show Grafana status
ansible.builtin.debug:
var: grafana_status.stdout_lines
- name: Ensure datasources directory exists
ansible.builtin.file:
path: "{{ grafana_config_dir }}/datasources"
state: directory
owner: 472
group: 472
mode: '0755'
become: yes
- name: Deploy Loki datasource configuration
template:
src: loki-datasource.yml.j2
dest: "{{ grafana_config_dir }}/datasources/loki.yml"
owner: root
group: root
mode: '0644'
become: yes

View File

@ -48,6 +48,7 @@ services:
volumes:
- {{ grafana_data_dir }}:/var/lib/grafana
- {{ grafana_config_dir }}:/etc/grafana/provisioning
- {{ grafana_config_dir }}/datasources:/etc/grafana/provisioning/datasources
ports:
- "{{ grafana_port }}:3000"
depends_on:

View File

@ -0,0 +1,12 @@
apiVersion: 1
datasources:
- name: Loki
type: loki
access: proxy
url: http://localhost:45135
isDefault: false
version: 1
editable: true
jsonData:
maxLines: 1000

View File

@ -0,0 +1,31 @@
---
- name: restart loki stack
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
state: restarted
scale: {}
become: yes
- name: restart loki
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
services: loki
state: restarted
scale: {}
become: yes
- name: restart promtail
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
services: promtail
state: restarted
scale: {}
become: yes
- name: reload loki stack
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
state: present
restarted: yes
scale: {}
become: yes

79
roles/loki/tasks/main.yml Normal file
View File

@ -0,0 +1,79 @@
---
- name: Create Loki directories
file:
path: "{{ item }}"
state: directory
mode: '0755'
loop:
- "{{ loki_base_dir }}"
- "{{ loki_config_dir }}"
- "{{ loki_data_dir }}"
- "{{ promtail_config_dir }}"
become: yes
- name: Deploy Loki configuration
template:
src: loki-config.yml.j2
dest: "{{ loki_config_dir }}/loki-config.yml"
mode: '0644'
notify: restart loki
become: yes
- name: Deploy Promtail configuration
template:
src: promtail-config.yml.j2
dest: "{{ promtail_config_dir }}/promtail-config.yml"
mode: '0644'
notify: restart promtail
become: yes
- name: Deploy Loki stack docker-compose
template:
src: docker-compose.yml.j2
dest: "{{ loki_base_dir }}/docker-compose.yml"
mode: '0644'
notify: restart loki stack
become: yes
- name: Start Loki stack with docker_compose_v2
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
state: present
restarted: no
scale: {}
become: yes
- name: Wait for Loki to be ready
wait_for:
host: "{{ ansible_default_ipv4.address }}"
port: "{{ loki_port }}"
timeout: 60
state: started
delay: 10
become: no
- name: Verify Loki is responding
uri:
url: "http://{{ ansible_default_ipv4.address }}:{{ loki_port }}/ready"
status_code: 200
timeout: 15
register: loki_ready_check
become: no
retries: 3
delay: 10
- name: Show Loki status
debug:
msg: "Loki is running and responding on port {{ loki_port }}"
when: loki_ready_check.status == 200
- name: Check Loki services status
community.docker.docker_compose_v2:
project_src: "{{ loki_base_dir }}"
state: present
register: loki_services_status
become: yes
- name: Display Loki services status
debug:
msg: "Loki stack services: {{ loki_services_status.services }}"

View File

@ -0,0 +1,45 @@
version: '3.8'
services:
loki:
image: grafana/loki:{{ loki_version }}
container_name: loki
restart: unless-stopped
ports:
- "{{ loki_port }}:3100"
command: -config.file=/etc/loki/loki-config.yml
volumes:
- "{{ loki_data_dir }}:/loki"
- "{{ loki_config_dir }}:/etc/loki"
networks:
- monitoring
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
promtail:
image: grafana/promtail:{{ loki_version }}
container_name: promtail
restart: unless-stopped
command: -config.file=/etc/promtail/promtail-config.yml
volumes:
- "{{ promtail_config_dir }}:/etc/promtail"
- "/var/log:/var/log:ro"
- "/var/lib/docker/containers:/var/lib/docker/containers:ro"
- "/var/run/docker.sock:/var/run/docker.sock:ro"
networks:
- monitoring
depends_on:
- loki
logging:
driver: "json-file"
options:
max-size: "10m"
max-file: "3"
networks:
monitoring:
name: monitoring
external: true

View File

@ -0,0 +1,53 @@
auth_enabled: false
server:
http_listen_port: 3100
grpc_listen_port: 9096
common:
path_prefix: /loki
storage:
filesystem:
chunks_directory: /loki/chunks
rules_directory: /loki/rules
replication_factor: 1
ring:
instance_addr: 127.0.0.1
kvstore:
store: inmemory
query_range:
results_cache:
cache:
embedded_cache:
enabled: true
max_size_mb: 100
schema_config:
configs:
- from: 2020-10-24
store: boltdb-shipper
object_store: filesystem
schema: v11
index:
prefix: index_
period: 24h
ruler:
alertmanager_url: http://localhost:9093
chunk_store_config:
max_look_back_period: 744h
table_manager:
retention_deletes_enabled: true
retention_period: {{ loki_retention_days }}h
compactor:
working_directory: /loki/boltdb-shipper-compactor
shared_store: filesystem
compaction_interval: 10m
limits_config:
reject_old_samples: true
reject_old_samples_max_age: 168h

View File

@ -0,0 +1,73 @@
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: system
static_configs:
- targets:
- localhost
labels:
job: system-logs
host: "{{ inventory_hostname }}"
__path__: /var/log/*log
- job_name: containers
static_configs:
- targets:
- localhost
labels:
job: container-logs
host: "{{ inventory_hostname }}"
__path__: /var/lib/docker/containers/*/*log
- job_name: docker-daemon
static_configs:
- targets:
- localhost
labels:
job: docker-daemon
host: "{{ inventory_hostname }}"
__path__: /var/log/docker.log
- job_name: syslog
static_configs:
- targets:
- localhost
labels:
job: syslog
host: "{{ inventory_hostname }}"
__path__: /var/log/syslog
- job_name: auth
static_configs:
- targets:
- localhost
labels:
job: auth
host: "{{ inventory_hostname }}"
__path__: /var/log/auth.log
- job_name: ansible
static_configs:
- targets:
- localhost
labels:
job: ansible
host: "{{ inventory_hostname }}"
__path__: /var/log/ansible/*log
- job_name: kernel
static_configs:
- targets:
- localhost
labels:
job: kernel
host: "{{ inventory_hostname }}"
__path__: /var/log/kern.log