521 Iocage plugins ansible-pull-syslogng-*

Use case

Configure and run a log server. Configure log clients and test them. Use syslog-ng. Clone the iocage plugins ansible-pull-syslogng-server and ansible-pull-syslogng-client.

Tree

shell > tree .
.
├── ansible.cfg
├── group_vars
│   └── all
│       ├── common.yml
│       └── syslog-ng.yml
├── hosts
│   └── 05_iocage.yml
├── iocage.ini
├── pb-conf-logclient.yml
├── pb-create-jails.yml
├── pb-start-jails.yml
├── pb-test-logclient.yml
└── pb-test-logserv.yml

Synopsis

Requirements

Notes

  • Quoting syslog-ng - FreeBSD Wiki:

    One of the most typical use of syslog-ng is central log aggregation. … It collects log messages on TCP port 514 and saves them to directories and files based on sender host name and current date.

Note

In this example, DHCP was provided by the iocage host. See 440 Configure DHCP and pf

ansible.cfg

[defaults]
callback_result_format = yaml
deprecation_warnings = false
display_skipped_hosts = false
gathering = explicit
interpreter_python = auto_silent
log_path = /var/log/ansible.log

[connection]
pipelining = true

Inventory iocage.ini

iocage_05

[iocage]
iocage_05

[iocage:vars]
ansible_user=admin
ansible_become=true
ansible_python_interpreter=auto_silent

hosts

hosts/05_iocage.yml
plugin: vbotka.freebsd.iocage
host: iocage_05
user: admin
sudo: true
get_properties: true
inventory_hostname_tag: alias

compose:
  iocage_tags: dict(iocage_properties.notes | regex_findall('(\w+)=([\w\-]+)'))
  iocage_classes: iocage_properties.notes | regex_findall('class=([\w\-]+)')
# connection plugin vbotka.freebsd.jailexec
  ansible_connection: "'vbotka.freebsd.jailexec'"
  ansible_jail_host: dict(iocage_properties.notes | regex_findall('(\w+)=([\w\-]+)')).vmm | d('none')
  ansible_jail_name: iocage_jid
  ansible_jail_privilege_escalation: "'sudo'"

groups:
  log_server: iocage_classes is contains('log-server')
  log_client: iocage_classes is contains('log-client')


keyed_groups:
  - prefix: state
    key: iocage_state
  - prefix: vmm
    key: iocage_tags.vmm

group_vars

group_vars/all/common.yml
ansible_python_interpreter: auto_silent
group_vars/all/syslog-ng.yml
enabled_plugins:
  - ansible-pull-syslogng-client
  - ansible-pull-syslogng-server

plugins:
  ansible-pull-syslogng-client:
    git: https://github.com/vbotka/iocage-plugins
    branch: main
    properties:
      bpf: 1
      dhcp: 1
      vnet: 1
      boot: 0
  ansible-pull-syslogng-server:
    git: https://github.com/vbotka/iocage-plugins
    branch: main
    properties:
      bpf: 1
      dhcp: 1
      vnet: 1
      boot: 0

# jail properties
properties:
  bpf: 1
  dhcp: 1
  vnet: 1
  type: jail
  boot: 1

# log clients' aliases
log_clients:
  - foo
  - bar

Playbook output - Fetch iocage plugins

(env) > ansible-playbook vbotka.freebsd.pb_iocage_plugins.yml \
                         -i iocage.ini \
                         -t enabled_plugins \
                         -e debug=true
PLAY [Fetch and stop iocage plugins.] ******************************************

TASK [One tag is required.] ****************************************************
ok: [iocage_05]

TASK [Test the tag is known.] **************************************************
ok: [iocage_05]

TASK [Get already fetched plugins.] ********************************************
ok: [iocage_05]

TASK [Debug fetched plugins debug=true] ****************************************
ok: [iocage_05] => 
    msg: |-
        iocage_plugins:
          ansible-syslogng:
              boot: 'off'
              doc_url: '-'
              ip4: '-'
              ip4_dict:
                  ip4: []
                  msg: DHCP (not running)
              ip6: '-'
              jid: None
              portal: '-'
              release: 15.0-RELEASE
              state: down
              template: '-'
              type: pluginv2
          ansible-zero:
              boot: 'off'
              doc_url: '-'
              ip4: '-'
              ip4_dict:
                  ip4: []
                  msg: DHCP (not running)
              ip6: '-'
              jid: None
              portal: '-'
              release: 15.0-RELEASE
              state: down
              template: '-'
              type: pluginv2

        plugins:
          ansible-pull-syslogng-client:
              branch: main
              git: https://github.com/vbotka/iocage-plugins
              properties:
                  boot: 0
                  bpf: 1
                  dhcp: 1
                  vnet: 1
          ansible-pull-syslogng-server:
              branch: main
              git: https://github.com/vbotka/iocage-plugins
              properties:
                  boot: 0
                  bpf: 1
                  dhcp: 1
                  vnet: 1

TASK [Set required plugins.] ***************************************************
ok: [iocage_05]

TASK [Debug selected plugins debug=true] ***************************************
ok: [iocage_05] => 
    msg: |-
        required_plugins:
          - ansible-pull-syslogng-client
        - ansible-pull-syslogng-server

        selected_plugins:
          -   key: ansible-pull-syslogng-client
            value:
                branch: main
                git: https://github.com/vbotka/iocage-plugins
                properties:
                    boot: 0
                    bpf: 1
                    dhcp: 1
                    vnet: 1
        -   key: ansible-pull-syslogng-server
            value:
                branch: main
                git: https://github.com/vbotka/iocage-plugins
                properties:
                    boot: 0
                    bpf: 1
                    dhcp: 1
                    vnet: 1

TASK [Check all required plugins are included in the dictionary plugins.] ******
ok: [iocage_05]

TASK [Debug commands debug=true] ***********************************************
ok: [iocage_05] => (item=ansible-pull-syslogng-client) => 
    msg: |-
        iocage fetch --plugin-name ansible-pull-syslogng-client --git_repository https://github.com/vbotka/iocage-plugins --branch main boot=0 bpf=1 dhcp=1 vnet=1
ok: [iocage_05] => (item=ansible-pull-syslogng-server) => 
    msg: |-
        iocage fetch --plugin-name ansible-pull-syslogng-server --git_repository https://github.com/vbotka/iocage-plugins --branch main boot=0 bpf=1 dhcp=1 vnet=1

TASK [Fetch enabled plugins.] **************************************************
ok: [iocage_05] => (item=ansible-pull-syslogng-client)
ok: [iocage_05] => (item=ansible-pull-syslogng-server)

TASK [Stop fetched plugins.] ***************************************************
ok: [iocage_05]

PLAY RECAP *********************************************************************
iocage_05                  : ok=10   changed=0    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

List iocage plugins

shell > ssh admin@iocage_05 sudo iocage list -P
+------+------------------------------+------+-------+----------+--------------+--------------------+-----+----------+--------+---------+
| JID  |             NAME             | BOOT | STATE |   TYPE   |   RELEASE    |        IP4         | IP6 | TEMPLATE | PORTAL | DOC_URL |
+======+==============================+======+=======+==========+==============+====================+=====+==========+========+=========+
| None | ansible-pull-syslogng-client | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running) | -   | -        | -      | -       |
+------+------------------------------+------+-------+----------+--------------+--------------------+-----+----------+--------+---------+
| None | ansible-pull-syslogng-server | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running) | -   | -        | -      | -       |
+------+------------------------------+------+-------+----------+--------------+--------------------+-----+----------+--------+---------+
| None | ansible-syslogng             | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running) | -   | -        | -      | -       |
+------+------------------------------+------+-------+----------+--------------+--------------------+-----+----------+--------+---------+
| None | ansible-zero                 | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running) | -   | -        | -      | -       |
+------+------------------------------+------+-------+----------+--------------+--------------------+-----+----------+--------+---------+

Playbook pb-create-jails.yml

---
- name: Create jails from iocage plugins.
  hosts: iocage_05

  tasks:

    - name: Create syslog-ng server.
      vars:
        _notes: >
          "vmm={{ inventory_hostname }}
          class=log-server
          alias=log-server"
      ansible.builtin.command: >
        iocage clone
        ansible-pull-syslogng-server
        --newmac
        {{ properties | dictsort | map('join', '=') | join(' ') }}
        notes={{ _notes }}

    - name: Create syslog-clients.
      vars:
        _notes: >
          "vmm={{ inventory_hostname }}
          class=log-client
          alias={{ item }}"
      ansible.builtin.command: >
        iocage clone
        ansible-pull-syslogng-client
        --newmac
        {{ properties | dictsort | map('join', '=') | join(' ') }}
        notes={{ _notes }}
      loop: "{{ log_clients }}"

Playbook output - Create jails from iocage plugins

(env) > ansible-playbook pb-create-jails.yml.yml -i iocage.ini
PLAY [Create jails from iocage plugins.] ***************************************

TASK [Create syslog-ng server.] ************************************************
changed: [iocage_05]

TASK [Create syslog-clients.] **************************************************
changed: [iocage_05] => (item=foo)
changed: [iocage_05] => (item=bar)

PLAY RECAP *********************************************************************
iocage_05                  : ok=2    changed=2    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Inventory graph

shell > ansible-inventory -i hosts --graph
@all:
  |--@ungrouped:
  |--@state_down:
  |  |--ansible-pull-syslogng-client
  |  |--ansible-pull-syslogng-server
  |  |--ansible-syslogng
  |  |--ansible-zero
  |--@log_client:
  |  |--foo
  |  |--bar
  |--@state_up:
  |  |--foo
  |  |--log-server
  |  |--bar
  |--@vmm_iocage_05:
  |  |--foo
  |  |--log-server
  |  |--bar
  |--@log_server:
  |  |--log-server

Playbook pb-start-jails.yml

---
- name: Start jails.
  hosts: iocage_05

  vars:

    start_jails: "{{ (groups.log_server + groups.log_client) | intersect(groups.state_down) }}"
    start_uuid: "{{ start_jails | map('extract', hostvars, ['iocage_properties', 'host_hostuuid']) }}"

  tasks:

    - name: Display groups.
      when: debug | d(false) | bool
      ansible.builtin.debug:
        msg: |
          log_server: {{ groups.log_server }}
          log_client: {{ groups.log_client }}
          state_down:
            {{ groups.state_down  | to_nice_yaml | indent(2) }}

    - name: Display jails that shall be started.
      when: debug | d(false) | bool
      ansible.builtin.debug:
        msg: |
          start_jails: {{ start_jails }}
          start_uuid:
            {{ start_uuid | to_nice_yaml | indent(2) }}

    - name: Start jails.
      when: start_uuid | length > 0
      ansible.builtin.command: >
        iocage start
        {{ start_uuid | join(' ') }}

Playbook output - Start jails

(env) > ansible-playbook pb-start-jails.yml -i hosts -i iocage.ini -e debug=true
PLAY [Start jails.] ************************************************************

TASK [Display groups.] *********************************************************
ok: [iocage_05] => 
    msg: |-
        log_server: ['log-server']
        log_client: ['foo', 'bar']
        state_down:
          - ansible-pull-syslogng-client
          - ansible-pull-syslogng-server
          - ansible-syslogng
          - ansible-zero

TASK [Display jails that shall be started.] ************************************
ok: [iocage_05] => 
    msg: |-
        start_jails: []
        start_uuid:
          []

PLAY RECAP *********************************************************************
iocage_05                  : ok=2    changed=0    unreachable=0    failed=0    skipped=1    rescued=0    ignored=0   

Playbook pb-conf-logclient.yml

---
- name: Configure, enable, and start Log Clients.
  hosts: log_client

  vars:

    log_server: "{{ hostvars['log-server']['iocage_ip4'] }}"

  tasks:

    - name: Display vars.
      when: debug | d(false) | bool
      run_once: true
      ansible.builtin.debug:
        msg: |
          log_server: {{ log_server }}
          log_client: {{ groups.log_client }}

    - name: Configure LOG_SERVER
      ansible.builtin.lineinfile:
        dest: /usr/local/etc/syslog-ng.conf
        regexp: ^(.*)LOG_SERVER(.*)$
        line: '\g<1>{{ log_server }}\g<2>'
        backrefs: true
        backup: true
        validate: syslog-ng --syntax-only --cfgfile %s

    - name: Enable syslog-ng
      community.general.sysrc:
        name: syslog_ng_enable
        value: 'YES'

    - name: Start syslog-ng
      vbotka.freebsd.service:
        script: syslog-ng
        command: start

Note

The configuration file /usr/local/etc/syslog-ng.conf, created by the iocage plugin ansible-pull-syslogng-client from the repo ansible-conf-syslogng-client, keeps the string LOG_SERVER in the place of the log-server IP. The above play replaces this string with the log-server IP.

Playbook output - Configure, enable, and start Log Clients

(env) > ansible-playbook pb-conf-logclient.yml -i hosts -i iocage.ini -e debug=true
PLAY [Configure, enable, and start Log Clients.] *******************************

TASK [Display vars.] ***********************************************************
ok: [foo] => 
    msg: |-
        log_server: 10.10.99.178
        log_client: ['foo', 'bar']

TASK [Configure LOG_SERVER] ****************************************************
changed: [bar]
changed: [foo]

TASK [Enable syslog-ng] ********************************************************
changed: [foo]
changed: [bar]

TASK [Start syslog-ng] *********************************************************
changed: [foo]
changed: [bar]

PLAY RECAP *********************************************************************
bar                        : ok=3    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
foo                        : ok=4    changed=3    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

List jails

shell > ssh admin@iocage_05 sudo iocage list -l
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| JID  |                 NAME                 | BOOT | STATE |   TYPE   |   RELEASE    |         IP4          | IP6 |           TEMPLATE           | BASEJAIL |
+======+======================================+======+=======+==========+==============+======================+=====+==============================+==========+
| 78   | 377cba47-d8cd-4ce2-9002-65355b66feb4 | on   | up    | jail     | 15.0-RELEASE | epair0b|10.10.99.179 | -   | ansible-pull-syslogng-client | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| 77   | 51ce8511-9da1-45e7-a3c8-012376ef8c87 | on   | up    | jail     | 15.0-RELEASE | epair0b|10.10.99.178 | -   | ansible-pull-syslogng-server | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| None | ansible-pull-syslogng-client         | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running)   | -   | -                            | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| None | ansible-pull-syslogng-server         | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running)   | -   | -                            | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| None | ansible-syslogng                     | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running)   | -   | -                            | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| None | ansible-zero                         | off  | down  | pluginv2 | 15.0-RELEASE | DHCP (not running)   | -   | -                            | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+
| 79   | be86d9eb-8bb9-4e11-8619-ae92f77d8cd6 | on   | up    | jail     | 15.0-RELEASE | epair0b|10.10.99.169 | -   | ansible-pull-syslogng-client | yes      |
+------+--------------------------------------+------+-------+----------+--------------+----------------------+-----+------------------------------+----------+

Playbook pb-test-logserv.yml

- name: Test Log Server.
  hosts: log_server
    
  tasks:

    - name: Run commands.
      register: out
      ansible.builtin.shell: "{{ item }}"
      loop:
        - rm -rf /var/log/remote/localhost/*
        - service syslog-ng status
        - loggen -i -S -n 1 localhost 514
        - sleep 2; find /var/log/remote/localhost/ -name *.log | xargs cat

    - name: Debug.
      when: debug | d(false) | bool
      ansible.builtin.debug:
        msg: |
          {% for i in out.results %}
          shell> {{ i.item }}
          {% if i.stdout | length > 0 %}
          {{ i.stdout }}
          {% endif %}
          {% if i.stderr | length > 0 %}
          {{ i.stderr }}
          {% endif %}

          {% endfor %}

Playbook output - Test Log Server

(env) > ansible-playbook pb-test-logserv.yml -i hosts -e debug=true
PLAY [Test Log Server.] ********************************************************

TASK [Run commands.] ***********************************************************
changed: [log-server] => (item=rm -rf /var/log/remote/localhost/*)
changed: [log-server] => (item=service syslog-ng status)
changed: [log-server] => (item=loggen -i -S -n 1 localhost 514)
changed: [log-server] => (item=sleep 2; find /var/log/remote/localhost/ -name *.log | xargs cat)

TASK [Debug.] ******************************************************************
ok: [log-server] => 
    msg: |-
        shell> rm -rf /var/log/remote/localhost/*

        shell> service syslog-ng status
        syslog_ng is running as pid 76667.

        shell> loggen -i -S -n 1 localhost 514
        count=1, rate = 125000.00 msg/sec
        average rate = 2.00 msg/sec, count=1, time=0.500373, (average) msg size=256, bandwidth=0.50 kB/sec

        shell> sleep 2; find /var/log/remote/localhost/ -name *.log | xargs cat

PLAY RECAP *********************************************************************
log-server                 : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Playbook pb-test-logclient.yml

- name: Test Log Clients.
  hosts: log_client

  vars:

    log_server: "{{ hostvars['log-server']['iocage_ip4'] }}"

  tasks:

    - name: Run loggen
      register: out
      ansible.builtin.command: "loggen -i -S -n 1 {{ log_server }} 514"

    - name: Debug.
      ansible.builtin.debug:
        var: out.stderr

- name: Display the logs.
  hosts: log_server
    
  tasks:

    - name: Get log files paths.
      register: out
      ansible.builtin.find:
        paths: /var/log/remote
        recurse: true
        patterns: '*.log'

    - name: Get log files.
      register: out
      ansible.builtin.command: "cat {{ item }}"
      loop: "{{ out.files | map(attribute='path') }}"

    - name: Display log files.
      ansible.builtin.debug:
        msg: |
          {{ item.stdout }}

          - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
      loop: "{{ out.results }}"
      loop_control:
        label: "{{ item.cmd }}"

Playbook output - Test Log Clients

(env) > ansible-playbook pb-test-logclient.yml -i hosts
PLAY [Test Log Clients.] *******************************************************

TASK [Run loggen] **************************************************************
changed: [bar]
changed: [foo]

TASK [Debug.] ******************************************************************
ok: [foo] => 
    out.stderr: |-
        count=1, rate = 26315.79 msg/sec
        average rate = 2.00 msg/sec, count=1, time=0.50045, (average) msg size=256, bandwidth=0.50 kB/sec
ok: [bar] => 
    out.stderr: |-
        count=1, rate = 30303.03 msg/sec
        average rate = 2.00 msg/sec, count=1, time=0.500337, (average) msg size=256, bandwidth=0.50 kB/sec

PLAY [Display the logs.] *******************************************************

TASK [Get log files paths.] ****************************************************
ok: [log-server]

TASK [Get log files.] **********************************************************
changed: [log-server] => (item=/var/log/remote/10.10.99.179/2026_05_13.log)
changed: [log-server] => (item=/var/log/remote/10.10.99.169/2026_05_13.log)

TASK [Display log files.] ******************************************************
ok: [log-server] => (item=['cat', '/var/log/remote/10.10.99.179/2026_05_13.log']) => 
    msg: |-
        May 13 16:09:19 10.10.99.179 syslog-ng[79791]: syslog-ng starting up; version='4.11.0'
        May 13 16:09:19 10.10.99.179 syslog-ng[79791]: Syslog connection established; fd='19', server='AF_INET(10.10.99.178:514)', local='AF_INET(0.0.0.0:0)'
        May 13 16:05:38 10.10.99.179 ansible: n=ansible WARNING| [WARNING]: Could not match supplied host pattern, ignoring: ansible-pull-
        May 13 16:09:20 10.10.99.179 ansible:
        May 13 16:05:39 10.10.99.179 ansible: n=ansible INFO| PLAY [Configure Log Client.] ***************************************************
        May 13 16:05:40 10.10.99.179 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Rcconf: Configure syslogd_enable in /etc/rc.conf] ***
        May 13 16:05:40 10.10.99.179 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:40 10.10.99.179 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Syslog-ng: Sanity fp_syslogng_conf is empty.] ***
        May 13 16:05:40 10.10.99.179 ansible: n=ansible INFO| ok: [localhost.my.domain]
        May 13 16:05:41 10.10.99.179 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Syslog-ng: Configure /usr/local/etc/syslog-ng.conf] ***
        May 13 16:05:41 10.10.99.179 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:41 10.10.99.179 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Rcconf: Configure syslog_ng_enable in /etc/rc.conf] ***
        May 13 16:05:41 10.10.99.179 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:42 10.10.99.179 ansible: n=ansible INFO| RUNNING HANDLER [vbotka.freebsd.postinstall : Stop syslog-ng] ******************
        May 13 16:05:42 10.10.99.179 ansible: n=ansible INFO| ok: [localhost.my.domain]
        May 13 16:05:43 10.10.99.179 ansible: n=ansible INFO| RUNNING HANDLER [vbotka.freebsd.postinstall : Stop syslogd] ********************
        May 13 16:05:43 10.10.99.179 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:43 10.10.99.179 ansible: n=ansible INFO| PLAY RECAP *********************************************************************
        May 13 16:05:43 10.10.99.179 ansible: n=ansible INFO| localhost.my.domain        : ok=6    changed=4    unreachable=0    failed=0    skipped=20   rescued=0    ignored=0
        May 13 16:09:40 10.10.99.179 1 2026-05-13T16:09:40.022917+02:00 377cba47-d8cd-4ce2-9002-65355b66feb4 ansible-ansible.legacy.command 80380 - - Invoked with _raw_params=loggen -i -S -n 1 10.10.99.178 514 _uses_shell=False expand_argument_vars=True stdin_add_newline=True strip_empty_ends=True cmd=None argv=None chdir=None executable=None creates=None removes=None stdin=None
        May 13 16:09:40 10.10.99.179 prg00000[1234]: seq: 0000000000, thread: 0000, runid: 1778681380, stamp: 2026-05-13T16:09:40 PADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADD

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ok: [log-server] => (item=['cat', '/var/log/remote/10.10.99.169/2026_05_13.log']) => 
    msg: |-
        May 13 16:09:19 10.10.99.169 syslog-ng[79792]: syslog-ng starting up; version='4.11.0'
        May 13 16:09:19 10.10.99.169 syslog-ng[79792]: Syslog connection established; fd='19', server='AF_INET(10.10.99.178:514)', local='AF_INET(0.0.0.0:0)'
        May 13 16:05:38 10.10.99.169 ansible: n=ansible WARNING| [WARNING]: Could not match supplied host pattern, ignoring: ansible-pull-
        May 13 16:09:20 10.10.99.169 ansible:
        May 13 16:05:39 10.10.99.169 ansible: n=ansible INFO| PLAY [Configure Log Client.] ***************************************************
        May 13 16:05:40 10.10.99.169 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Rcconf: Configure syslogd_enable in /etc/rc.conf] ***
        May 13 16:05:40 10.10.99.169 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:40 10.10.99.169 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Syslog-ng: Sanity fp_syslogng_conf is empty.] ***
        May 13 16:05:40 10.10.99.169 ansible: n=ansible INFO| ok: [localhost.my.domain]
        May 13 16:05:41 10.10.99.169 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Syslog-ng: Configure /usr/local/etc/syslog-ng.conf] ***
        May 13 16:05:41 10.10.99.169 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:41 10.10.99.169 ansible: n=ansible INFO| TASK [vbotka.freebsd.postinstall : Rcconf: Configure syslog_ng_enable in /etc/rc.conf] ***
        May 13 16:05:41 10.10.99.169 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:42 10.10.99.169 ansible: n=ansible INFO| RUNNING HANDLER [vbotka.freebsd.postinstall : Stop syslog-ng] ******************
        May 13 16:05:42 10.10.99.169 ansible: n=ansible INFO| ok: [localhost.my.domain]
        May 13 16:05:43 10.10.99.169 ansible: n=ansible INFO| RUNNING HANDLER [vbotka.freebsd.postinstall : Stop syslogd] ********************
        May 13 16:05:43 10.10.99.169 ansible: n=ansible INFO| changed: [localhost.my.domain]
        May 13 16:05:43 10.10.99.169 ansible: n=ansible INFO| PLAY RECAP *********************************************************************
        May 13 16:05:43 10.10.99.169 ansible: n=ansible INFO| localhost.my.domain        : ok=6    changed=4    unreachable=0    failed=0    skipped=20   rescued=0    ignored=0
        May 13 16:09:40 10.10.99.169 1 2026-05-13T16:09:40.027179+02:00 be86d9eb-8bb9-4e11-8619-ae92f77d8cd6 ansible-ansible.legacy.command 80379 - - Invoked with _raw_params=loggen -i -S -n 1 10.10.99.178 514 _uses_shell=False expand_argument_vars=True stdin_add_newline=True strip_empty_ends=True cmd=None argv=None chdir=None executable=None creates=None removes=None stdin=None
        May 13 16:09:40 10.10.99.169 prg00000[1234]: seq: 0000000000, thread: 0000, runid: 1778681380, stamp: 2026-05-13T16:09:40 PADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADDPADD

        - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

PLAY RECAP *********************************************************************
bar                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
foo                        : ok=2    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   
log-server                 : ok=3    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0   

Hint

Use the utility lnav on the log server to display all logfiles in the the directory /var/log/remote

shell > lnav -r /var/log/remote/