aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Gonçalves <me@rgoncalves.se>2021-12-13 17:11:14 +0000
committerRomain Gonçalves <me@rgoncalves.se>2021-12-13 17:11:14 +0000
commit2c643ea5fbd02b50411bcba1f5df14a8c327fdb1 (patch)
treeb6d28dceb42227ebbf9cc1e95b39cb6f2f849592
parentcffe3422c31f987eea301fcd79571546f9b9e02d (diff)
downloadinfrastructure-2c643ea5fbd02b50411bcba1f5df14a8c327fdb1.tar.gz
roles: Add loki and promtail configurations
-rw-r--r--playbooks/site.yml2
-rw-r--r--roles/grafana/templates/datasources-default.yml.j23
-rw-r--r--roles/loki/defaults/main.yml3
-rw-r--r--roles/loki/tasks/main.yml35
-rw-r--r--roles/loki/templates/loki.yml.j264
-rw-r--r--roles/loki/templates/promtail.yml.j223
6 files changed, 130 insertions, 0 deletions
diff --git a/playbooks/site.yml b/playbooks/site.yml
index e34720f..147db6b 100644
--- a/playbooks/site.yml
+++ b/playbooks/site.yml
@@ -9,6 +9,8 @@
tags: role_sshd
- role: prometheus
tags: role_prometheus
+ - role: loki
+ tags: role_loki
- hosts: dc0
roles:
diff --git a/roles/grafana/templates/datasources-default.yml.j2 b/roles/grafana/templates/datasources-default.yml.j2
index 1414ff2..a6066da 100644
--- a/roles/grafana/templates/datasources-default.yml.j2
+++ b/roles/grafana/templates/datasources-default.yml.j2
@@ -8,5 +8,8 @@ datasources:
- name: {{ h.inventory_hostname }}-prometheus
type: prometheus
url: http://{{ h.__ip.internal }}:9090
+ - name: {{ h.inventory_hostname }}-loki
+ type: loki
+ url: http://{{ h.__ip.internal }}:3100
{% endcall %}
diff --git a/roles/loki/defaults/main.yml b/roles/loki/defaults/main.yml
new file mode 100644
index 0000000..6808f54
--- /dev/null
+++ b/roles/loki/defaults/main.yml
@@ -0,0 +1,3 @@
+loki_configuration_file: /etc/loki/loki-config.yaml
+loki_promtail_configuration_file: /etc/promtail/promtail-config.yaml
+loki_user: _loki
diff --git a/roles/loki/tasks/main.yml b/roles/loki/tasks/main.yml
new file mode 100644
index 0000000..4584da1
--- /dev/null
+++ b/roles/loki/tasks/main.yml
@@ -0,0 +1,35 @@
+- name: install loki
+ package:
+ name: loki
+ state: present
+
+- name: generate loki configuration
+ template: &config_gen
+ src: loki.yml.j2
+ dest: "{{ loki_configuration_file }}"
+ owner: 0
+ group: 0
+ mode: 0644
+
+- name: generate promtail configuration
+ template:
+ <<: *config_gen
+ src: promtail.yml.j2
+ dest: "{{ loki_promtail_configuration_file }}"
+
+- name: add loki user to wheel group
+ user:
+ name: "{{ loki_user }}"
+ groups:
+ - 0
+ - daemon
+ append: true
+
+- name: enable and restart loki daemons
+ service:
+ name: "{{ item }}"
+ state: restarted
+ enabled: true
+ loop:
+ - loki
+ - promtail
diff --git a/roles/loki/templates/loki.yml.j2 b/roles/loki/templates/loki.yml.j2
new file mode 100644
index 0000000..5c64993
--- /dev/null
+++ b/roles/loki/templates/loki.yml.j2
@@ -0,0 +1,64 @@
+auth_enabled: false
+
+server:
+ http_listen_port: 3100
+
+ingester:
+ lifecycler:
+ address: 127.0.0.1
+ ring:
+ kvstore:
+ store: inmemory
+ replication_factor: 1
+ final_sleep: 0s
+ chunk_idle_period: 1h # Any chunk not receiving new logs in this time will be flushed
+ max_chunk_age: 1h # All chunks will be flushed when they hit this age, default is 1h
+ chunk_target_size: 1048576 # Loki will attempt to build chunks up to 1.5MB, flushing first if chunk_idle_period or max_chunk_age is reached first
+ chunk_retain_period: 30s # Must be greater than index read cache TTL if using an index cache (Default index read cache TTL is 5m)
+ max_transfer_retries: 0 # Chunk transfers disabled
+
+schema_config:
+ configs:
+ - from: 2020-10-24
+ store: boltdb-shipper
+ object_store: filesystem
+ schema: v11
+ index:
+ prefix: index_
+ period: 24h
+
+storage_config:
+ boltdb_shipper:
+ active_index_directory: /var/loki/boltdb-shipper-active
+ cache_location: /var/loki/boltdb-shipper-cache
+ cache_ttl: 24h # Can be increased for faster performance over longer query periods, uses more disk space
+ shared_store: filesystem
+ filesystem:
+ directory: /var/loki/chunks
+
+compactor:
+ working_directory: /var/loki/boltdb-shipper-compactor
+ shared_store: filesystem
+
+limits_config:
+ reject_old_samples: true
+ reject_old_samples_max_age: 168h
+
+chunk_store_config:
+ max_look_back_period: 0s
+
+table_manager:
+ retention_deletes_enabled: false
+ retention_period: 0s
+
+ruler:
+ storage:
+ type: local
+ local:
+ directory: /tmp/loki/rules
+ rule_path: /tmp/loki/rules-temp
+ alertmanager_url: http://localhost:9093
+ ring:
+ kvstore:
+ store: inmemory
+ enable_api: true
diff --git a/roles/loki/templates/promtail.yml.j2 b/roles/loki/templates/promtail.yml.j2
new file mode 100644
index 0000000..16c580e
--- /dev/null
+++ b/roles/loki/templates/promtail.yml.j2
@@ -0,0 +1,23 @@
+server:
+ http_listen_port: 9080
+ grpc_listen_port: 0
+
+positions:
+ filename: /var/promtail/positions.yaml
+
+clients:
+ - url: http://localhost:3100/loki/api/v1/push
+
+scrape_configs:
+ - job_name: system
+ static_configs:
+ - targets:
+ - localhost
+ labels:
+ job: var_logs
+ __path__: /var/log/*log
+ - targets:
+ - localhost
+ labels:
+ job: www_logs
+ __path__: /var/www/logs/*log
remember that computers suck.