From f892570467336ea8af306ec6a41010ff6ccd9462 Mon Sep 17 00:00:00 2001 From: "Dustin C. Hatch" Date: Wed, 3 Dec 2025 22:36:35 -0600 Subject: [PATCH] r/f-b-arr: Configure Fluent Bit for Servarr logs The _fluent-bit-servarr_ role creates a configuration file for Fluent Bit to read and parse logs from Radarr, Sonarr, and Prowlarr. These logs can then be sent to an output by defining the `fluent_bit_servarr_outputs` variable. --- roles/fluent-bit-servarr/defaults/main.yml | 1 + roles/fluent-bit-servarr/handlers/main.yml | 4 ++ roles/fluent-bit-servarr/meta/main.yml | 2 + roles/fluent-bit-servarr/tasks/main.yml | 12 ++++++ roles/fluent-bit-servarr/vars/main.yml | 45 ++++++++++++++++++++++ servarr.yml | 6 +++ 6 files changed, 70 insertions(+) create mode 100644 roles/fluent-bit-servarr/defaults/main.yml create mode 100644 roles/fluent-bit-servarr/handlers/main.yml create mode 100644 roles/fluent-bit-servarr/meta/main.yml create mode 100644 roles/fluent-bit-servarr/tasks/main.yml create mode 100644 roles/fluent-bit-servarr/vars/main.yml diff --git a/roles/fluent-bit-servarr/defaults/main.yml b/roles/fluent-bit-servarr/defaults/main.yml new file mode 100644 index 0000000..31585ed --- /dev/null +++ b/roles/fluent-bit-servarr/defaults/main.yml @@ -0,0 +1 @@ +fluent_bit_servarr_outputs: [] diff --git a/roles/fluent-bit-servarr/handlers/main.yml b/roles/fluent-bit-servarr/handlers/main.yml new file mode 100644 index 0000000..7ad12c9 --- /dev/null +++ b/roles/fluent-bit-servarr/handlers/main.yml @@ -0,0 +1,4 @@ +- name: restart fluent-bit + service: + name: fluent-bit + state: restarted diff --git a/roles/fluent-bit-servarr/meta/main.yml b/roles/fluent-bit-servarr/meta/main.yml new file mode 100644 index 0000000..bbb2a56 --- /dev/null +++ b/roles/fluent-bit-servarr/meta/main.yml @@ -0,0 +1,2 @@ +dependencies: +- role: systemd-base diff --git a/roles/fluent-bit-servarr/tasks/main.yml b/roles/fluent-bit-servarr/tasks/main.yml new file mode 100644 index 0000000..0c563ad --- /dev/null +++ b/roles/fluent-bit-servarr/tasks/main.yml @@ -0,0 +1,12 @@ +- name: ensure fluent-bit configuration for servarr is in place + copy: + content: |+ + {{ fluent_bit_servarr_config | to_nice_yaml(indent=2) }} + dest: /etc/fluent-bit/include/servarr.yml + mode: u=rw,go=r + owner: root + group: root + notify: + - restart fluent-bit + tags: + - config diff --git a/roles/fluent-bit-servarr/vars/main.yml b/roles/fluent-bit-servarr/vars/main.yml new file mode 100644 index 0000000..bf273b0 --- /dev/null +++ b/roles/fluent-bit-servarr/vars/main.yml @@ -0,0 +1,45 @@ +servarr_logs: +- /var/log/prowlarr/*.txt +- /var/log/radarr/*.txt +- /var/log/sonarr/*.txt + +fluent_bit_servarr_config: + multiline_parsers: + - name: multiline_servarr + type: regex + flush_timeout: 500 + rules: + - state: start_state + regex: ^\d{4}-\d{2}-\d{2} [ 0-2]?\d:\d{2}:\d{2}\.\d+\| + next_state: cont + - state: cont + regex: ^(?!\d{4}-\d{2}-\d{2} [ 0-2]?\d:\d{2}:\d{2}\.\d+\|).* + next_state: cont + + parsers: + - name: servarr + format: regex + regex: /^(?\d{4}-\d{2}-\d{2} [ 0-2]?\d:\d{2}:\d{2}\.\d+)\|(?[^|]+)\|(?[^|]+)\|(?.*)/m + time_key: timestamp + time_format: '%Y-%m-%d %H:%M:%S.%L' + + pipeline: + inputs: + - name: tail + alias: servarr + tag: servarr + path: '{{ servarr_logs | join(",") }}' + path_key: filename + multiline.parser: multiline_servarr + db: /var/lib/fluent-bit/servarr.db + read_from_head: true + + filters: + - name: parser + alias: servarr + match: servarr + key_name: log + parser: servarr + reserve_data: true + + outputs: '{{ fluent_bit_servarr_outputs }}' diff --git a/servarr.yml b/servarr.yml index d731add..5d63cb8 100644 --- a/servarr.yml +++ b/servarr.yml @@ -1,3 +1,9 @@ - import_playbook: prowlarr.yml - import_playbook: radarr.yml - import_playbook: sonarr.yml + +- hosts: servarr + roles: + - role: fluent-bit-servarr + tags: + - fluent-bit