# https://raw.githubusercontent.com/grafana/loki/v2.8.0/production/docker-compose.yaml # https://grafana.com/docs/loki/latest/clients/docker-driver/ - name: Set up Loki hosts: lotus-land-story vars: version: 3.2.0 tasks: - name: Provision Grafana ansible.builtin.copy: dest: /mnt/lotus-land-story/grafana/provisioning/datasources/loki.yml content: | apiVersion: 1 datasources: - name: Loki type: loki access: proxy url: http://loki:3100 mode: "0644" - name: Create Loki config dirs ansible.builtin.file: path: /mnt/lotus-land-story/loki/{{ item }} state: directory owner: 10001 group: 10001 mode: "0755" loop: - config - data - name: Configure Loki ansible.builtin.copy: dest: /mnt/lotus-land-story/loki/config/loki.yml content: | auth_enabled: false server: http_listen_port: 3100 common: path_prefix: /loki storage: filesystem: chunks_directory: /loki/chunks rules_directory: /loki/rules replication_factor: 1 ring: kvstore: store: inmemory compactor: retention_enabled: true delete_request_store: filesystem limits_config: retention_period: 168h volume_enabled: true pattern_ingester: # for Explore Logs enabled: true schema_config: configs: - from: 2020-10-24 store: boltdb-shipper object_store: filesystem schema: v11 index: prefix: index_ period: 24h # https://grafana.com/docs/loki/latest/operations/storage/tsdb/ - from: 2023-07-17 index: period: 24h prefix: index_ object_store: filesystem schema: v12 store: tsdb - from: 2024-09-29 index: period: 24h prefix: index_ object_store: filesystem schema: v13 store: tsdb storage_config: filesystem: directory: /data ruler: alertmanager_url: http://localhost:9093 owner: 10001 group: 10001 mode: "0644" # https://github.com/grafana/loki/issues/2361 - name: Configure Promtail ansible.builtin.copy: dest: /mnt/lotus-land-story/loki/config/promtail.yml content: | 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: varlogs __path__: /var/log/*.log __path_exclude__: /var/log/syslog - job_name: docker docker_sd_configs: - host: unix:///var/run/docker.sock refresh_interval: 5s relabel_configs: - source_labels: ['__meta_docker_container_name'] regex: '/(.*)' target_label: 'container' - job_name: syslog syslog: listen_address: 0.0.0.0:514 listen_protocol: tcp idle_timeout: 60s label_structured_data: yes labels: job: syslog relabel_configs: - source_labels: ['__syslog_message_hostname'] target_label: 'host' - source_labels: ['__syslog_message_severity'] target_label: level - source_labels: ['__syslog_message_facility'] target_label: syslog_facility - source_labels: ['__syslog_message_app_name'] target_label: syslog_identifier mode: "0644" - name: Run Loki community.docker.docker_container: name: loki image: grafana/loki:{{ version }} restart: true command: -config.file=/mnt/config/loki.yml ports: - "3100:3100" volumes: - /mnt/lotus-land-story/loki/config:/mnt/config - /mnt/lotus-land-story/loki/data:/data restart_policy: unless-stopped networks: - name: lotus_land_story etc_hosts: host.docker.internal: host-gateway - name: Run Promtail community.docker.docker_container: name: promtail image: grafana/promtail:{{ version }} restart: true command: -config.file=/mnt/config/promtail.yml ports: - "514:514" volumes: - /var/log:/var/log - /var/run/docker.sock:/var/run/docker.sock - /mnt/lotus-land-story/loki/config:/mnt/config restart_policy: unless-stopped networks: - name: lotus_land_story etc_hosts: host.docker.internal: host-gateway - name: Ship to promtail using rsyslog ansible.builtin.copy: content: | *.* action(type="omfwd" protocol="tcp" target="127.0.0.1" port="514" Template="RSYSLOG_SyslogProtocol23Format" TCP_Framing="octet-counted" KeepAlive="on") dest: /etc/rsyslog.d/50-promtail.conf mode: "0644" notify: Restart rsyslog handlers: - name: Restart rsyslog ansible.builtin.service: name: rsyslog state: restarted # vim: ft=yaml.ansible