diff --git a/roles/docker_loki_client/defaults/main.yml b/roles/docker_loki_client/defaults/main.yml new file mode 100644 index 0000000..d92960f --- /dev/null +++ b/roles/docker_loki_client/defaults/main.yml @@ -0,0 +1,11 @@ +--- +docker_loki_client_setup: + config_folderpath: /etc/myLimbo/docker_loki_client +docker_loki_client_config: + hostname: "" + journald: + enabled: true + docker: + enabled: true + loki: + address: "" \ No newline at end of file diff --git a/roles/docker_loki_client/handlers/main.yml b/roles/docker_loki_client/handlers/main.yml new file mode 100644 index 0000000..ed97d53 --- /dev/null +++ b/roles/docker_loki_client/handlers/main.yml @@ -0,0 +1 @@ +--- diff --git a/roles/docker_loki_client/meta/main.yml b/roles/docker_loki_client/meta/main.yml new file mode 100644 index 0000000..136371c --- /dev/null +++ b/roles/docker_loki_client/meta/main.yml @@ -0,0 +1,9 @@ +galaxy_info: + author: your name + description: your role description + company: your company (optional) + license: license (GPL-2.0-or-later, MIT, etc) + min_ansible_version: 2.1 + galaxy_tags: [] +dependencies: [] + diff --git a/roles/docker_loki_client/tasks/main.yml b/roles/docker_loki_client/tasks/main.yml new file mode 100644 index 0000000..1341665 --- /dev/null +++ b/roles/docker_loki_client/tasks/main.yml @@ -0,0 +1,64 @@ +--- + + +- name: Ensure config folder exists + become: true + ansible.builtin.file: + path: "{{ docker_loki_client_setup.config_folderpath }}" + state: directory + mode: '0755' + + +- name: Deploy vector config + become: true + ansible.builtin.template: + src: templates/vector.yaml.j2 + dest: "{{ docker_loki_client_setup.config_folderpath }}/vector.yaml" + owner: root + +- name: Docker vector container + become: true + community.docker.docker_container: + name: vector + capabilities: + - SYS_ADMIN + image: timberio/vector:latest-debian + state: started + restart_policy: unless-stopped + pull: yes + env: + VECTOR_LOG: info + volumes: + - /var/log/journal:/var/log/journal:ro + - /etc/machine-id:/etc/machine-id:ro + - "{{ docker_loki_client_setup.config_folderpath}}:/etc/vector" + + +- name: Deploy alloy config + become: true + ansible.builtin.template: + src: templates/config.alloy.j2 + dest: "{{ docker_loki_client_setup.config_folderpath }}/config.alloy" + owner: root + + +- name: Docker alloy container + become: true + community.docker.docker_container: + name: alloy + image: grafana/alloy:latest + state: started + restart_policy: unless-stopped + pull: yes + + volumes: + - /var/run/docker.sock:/var/run/docker.sock:ro + - /var/lib/docker/containers:/var/lib/docker/containers + - "{{ docker_loki_client_setup.config_folderpath}}:/etc/alloy" + env: + ALLOY_CONFIG: /etc/alloy/config.alloy + + + + + diff --git a/roles/docker_loki_client/templates/config.alloy.j2 b/roles/docker_loki_client/templates/config.alloy.j2 new file mode 100644 index 0000000..7022b32 --- /dev/null +++ b/roles/docker_loki_client/templates/config.alloy.j2 @@ -0,0 +1,39 @@ +discovery.docker "linux" { + host = "unix:///var/run/docker.sock" + } + + discovery.relabel "logs_integrations_docker" { + targets = [] + + rule { + source_labels = ["__meta_docker_container_name"] + regex = "/(.*)" + target_label = "container_name" + } + + rule { + source_labels = ["__meta_docker_image_name"] + regex = "(.*)" + target_label = "image_name" + } + + rule { + source_labels = ["__meta_docker_container_id"] + regex = "(.*)" + target_label = "container_id" + } + } + + loki.source.docker "default" { + host = "unix:///var/run/docker.sock" + targets = discovery.docker.linux.targets + labels = {"source" = "docker", host = "{{ docker_loki_client_config.hostname }} "} + relabel_rules = discovery.relabel.logs_integrations_docker.rules + forward_to = [loki.write.default.receiver] + } + + loki.write "default" { + endpoint { + url = "{{ docker_loki_client_config.loki.address }}/loki/api/v1/push" + } + } \ No newline at end of file diff --git a/roles/docker_loki_client/templates/vector.yaml.j2 b/roles/docker_loki_client/templates/vector.yaml.j2 new file mode 100644 index 0000000..a6f6a4c --- /dev/null +++ b/roles/docker_loki_client/templates/vector.yaml.j2 @@ -0,0 +1,34 @@ +sources: + journald: + type: journald + +transforms: + tag_journald: + type: remap + inputs: + - journald + source: | + .source = "journald" + .unit = ._SYSTEMD_UNIT + .process = ._COMM + .priority = .PRIORITY + .host = "{{ docker_loki_client_config.hostname }}" + +sinks: + loki: + type: loki + inputs: + - tag_journald + endpoint: "{{ docker_loki_client_config.loki.address }}" + healthcheck: + enabled: false + encoding: + codec: json + labels: +{% raw %} + host: "{{ .host }}" + source: "{{ .source }}" + unit: "{{ .unit }}" + process: "{{ .process }}" + priority: "{{ .priority }}" +{% endraw %} \ No newline at end of file diff --git a/roles/docker_loki_client/tests/playbook.yaml b/roles/docker_loki_client/tests/playbook.yaml new file mode 100644 index 0000000..7b39f37 --- /dev/null +++ b/roles/docker_loki_client/tests/playbook.yaml @@ -0,0 +1,6 @@ +- name: Vector Install + hosts: + - all + roles: + - role: docker_loki_client +# \ No newline at end of file diff --git a/roles/vector/tests/playbook.yaml b/roles/vector/tests/playbook.yaml index 58b021d..44aa496 100644 --- a/roles/vector/tests/playbook.yaml +++ b/roles/vector/tests/playbook.yaml @@ -3,4 +3,3 @@ - all roles: - role: vector -