.. _example_500:

500 syslog-ng server and syslog-ng clients
------------------------------------------

.. contents::
   :local:
   :depth: 1

.. index:: single: project; Example 500

.. index:: single: syslog-ng; Example 500
.. index:: single: syslogd; Example 500
.. index:: single: loggen; Example 500
.. index:: single: log server; Example 500
.. index:: single: log client; Example 500

.. index:: single: postinstall; Example 500
.. index:: single: vbotka.freebsd.postinstall; Example 500
.. index:: single: role vbotka.freebsd.postinstall; Example 500

.. index:: single: module vbotka.freebsd.service; Example 500
.. index:: single: vbotka.freebsd.service; Example 500
.. index:: single: module community.general.pkgng; Example 500
.. index:: single: community.general.pkgng; Example 500

Use case
^^^^^^^^

Configure and run a log server. Configure log clients and test them. Use `syslog-ng`_. Use the jails
created in the example :ref:`example_207`. The ``project`` keys are jail's aliases.

.. code-block:: yaml

   project:
     logserv_1:
       class: [logserv]
       vmm: iocage_01
     http_1:
       class: [http, logclient]
       vmm: iocage_02
     db_1:
       class: [db, logclient]
       vmm: iocage_02
     http_2:
       class: [http, logclient]
       vmm: iocage_04
     db_2:
       class: [db, logclient]
       vmm: iocage_04

* Destroy all jails

  .. code-block:: console

     (env) > ansible-playbook vbotka.freebsd.pb_iocage_destroy_all_jails.yml \
                              -i iocage.ini \
			      --flush-cache

* Create ``ansible_client`` templates. Run the play in :ref:`example_202`

  .. code-block:: console

     (env) > ansible-playbook pb-iocage-template.yml -i iocage.ini

* Create the project. Run the play in :ref:`example_207`

  .. code-block:: console

     (env) > ansible-playbook pb-iocage-project-create.yml -i iocage.ini -i hosts

Tree
^^^^

::
   
  shell > tree .
  .
  ├── ansible.cfg
  ├── group_vars
  │   ├── all
  │   │   └── common.yml
  │   ├── logclient
  │   │   └── syslog-ng.yml
  │   └── logserv
  │       └── syslog-ng.yml
  ├── hosts
  │   ├── 01_iocage.yml
  │   ├── 02_iocage.yml
  │   ├── 04_iocage.yml
  │   └── 99_constructed.yml
  ├── host_vars
  │   ├── iocage_01
  │   │   └── iocage.yml
  │   ├── iocage_02
  │   │   └── iocage.yml
  │   └── iocage_04
  │       └── iocage.yml
  ├── iocage.ini
  ├── pb-all-groups.yml
  ├── pb-logclient.yml
  ├── pb-logserv.yml
  └── pb-test-logclient.yml

Synopsis
^^^^^^^^

* In the inventory group ``logserv``:

  * install `sysutils/syslog-ng`_
  * configure `syslog-ng Server`_.

* In the inventory group ``logclient``:

  * install `sysutils/syslog-ng`_
  * configure `syslog-ng Client`_.

Requirements
^^^^^^^^^^^^

* `inventory plugin vbotka.freebsd.iocage`_
* `module vbotka.freebsd.service`_
* role `vbotka.freebsd.postinstall`_
* jails created in the project :ref:`example_207`

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::

   | `vbotka.freebsd.postinstall`_ is the role **postinstall** in the collection `vbotka.freebsd`_.
   | `vbotka.freebsd_postinstall`_ is the role **freebsd_postinstall** in the namespace `vbotka`_.
   | Please make sure the versions are the same before you switch between them.

.. seealso::

   * `syslog-ng - FreeBSD Wiki`_
   * `syslog-ng - documentation`_
   * `Configuring System Logging - FreeBSD Handbook`_
   * documentation `Ansible role FreeBSD postinstall`_

ansible.cfg
^^^^^^^^^^^

.. literalinclude:: ansible.cfg
   :language: ini

Inventory iocage.ini
^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: iocage.ini
   :language: ini

hosts
^^^^^

.. literalinclude:: hosts/01_iocage.yml
   :language: yaml
   :caption:

.. literalinclude:: hosts/02_iocage.yml
   :language: yaml
   :caption:

.. literalinclude:: hosts/04_iocage.yml
   :language: yaml
   :caption:

.. literalinclude:: hosts/99_constructed.yml
   :language: yaml+jinja
   :caption:

Playbook pb-all-groups.yml
^^^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: pb-all-groups.yml
   :language: yaml+jinja

Playbook output - Display groups
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Flush the cache if you created the ``project`` and haven't refreshed it yet.

.. code-block:: console

   (env) > ansible-playbook pb-all-groups.yml -i hosts --flush-cache

.. literalinclude:: out/out-01.txt
   :language: yaml
   :force:

group_vars
^^^^^^^^^^

.. literalinclude:: group_vars/all/common.yml
   :language: yaml+jinja
   :caption:

.. literalinclude:: group_vars/logserv/syslog-ng.yml
   :language: yaml+jinja
   :caption:

.. literalinclude:: group_vars/logclient/syslog-ng.yml
   :language: yaml+jinja
   :caption:

Playbook pb-logserv.yml
^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: pb-logserv.yml
   :language: yaml+jinja

Playbook output - Log Server
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Install the package if you're running this play for the first time.

.. code-block:: console

   (env) > ansible-playbook pb-logserv.yml -i hosts -e install=true

.. literalinclude:: out/out-02.txt
   :language: yaml
   :force:

Test the Log Server
^^^^^^^^^^^^^^^^^^^

.. code-block:: console

   (env) > ssh admin@4b07a142 sudo service syslog-ng status
   syslog_ng is running as pid 63344.

.. code-block:: console

   (env) > ssh admin@4b07a142 loggen -i -S -n 1 localhost 514
   count=1, rate = 100000.00 msg/sec
   average rate = 1.95 msg/sec, count=1, time=0.512063, (average) msg size=256, bandwidth=0.49 kB/sec
.. code-block:: console

   (env) > ssh admin@4b07a142 sudo cat /var/log/remote/localhost/2025_08_12.log
    Aug 12 01:41:22 localhost prg00000[1234]: seq: 0000000000, thread: 0000, runid: 1754955682, stamp: 2025-08-12T01:41:22 PADDPADD...
    Aug 12 01:42:42 localhost prg00000[1234]: seq: 0000000000, thread: 0000, runid: 1754955762, stamp: 2025-08-12T01:42:42 PADDPADD...

.. note::

   This test is not created dynamically. The Log Server jail name in this test differs from the
   dynamically created name in the example. (TBD)

Playbook pb-logclient.yml
^^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: pb-logclient.yml
   :language: yaml+jinja

Playbook output - Log Client
^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Install the package if you’re running this play for the first time.

.. code-block:: console

   (env) > ansible-playbook pb-logclient.yml -i hosts -i iocage.ini -e install=true -e debug=true

.. literalinclude:: out/out-03.txt
   :language: yaml
   :force:

Playbook pb-test-logclient.yml
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. literalinclude:: pb-test-logclient.yml
   :language: yaml+jinja

Playbook output - Test Log Client
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

.. code-block:: console

   (env) > ansible-playbook pb-test-logclient.yml -i hosts

.. literalinclude:: out/out-04.txt
   :language: yaml
   :force:

Example of the directory at the Log Server.

.. code-block:: console

   (env) > ssh admin@4b07a142 sudo ls -lat /var/log/remote/ | sort
   drwx------  2 root  wheel   3 Aug 12 01:30 0f8e3961
   drwx------  2 root  wheel   3 Aug 12 01:30 33a222bb
   drwx------  2 root  wheel   3 Aug 12 01:30 35167ffa
   drwx------  2 root  wheel   3 Aug 12 01:30 ef5d35da
   drwx------  2 root  wheel   3 Aug 12 01:41 localhost
   drwx------  7 root  wheel   7 Aug 12 01:41 .
   drwxr-xr-x  3 root  wheel  17 Aug 12 01:30 ..

.. note:: This example of the directory at the Log Server is not created dynamically. (TBD)


.. _syslog-ng Client: https://syslog-ng.github.io/admin-guide/040_Quick-start_guide/000_Configuring_syslog-ng_on_client_hosts.html
.. _syslog-ng Server: https://wiki.freebsd.org/Ports/sysutils/syslog-ng

.. _syslog-ng - documentation: https://syslog-ng.github.io
.. _syslog-ng client hosts: https://syslog-ng.github.io/admin-guide/040_Quick-start_guide/000_Configuring_syslog-ng_on_client_hosts.html

.. _syslog-ng: https://wiki.freebsd.org/Ports/sysutils/syslog-ng
.. _syslog-ng - FreeBSD Wiki: https://wiki.freebsd.org/Ports/sysutils/syslog-ng
.. _sysutils/syslog-ng: https://www.freshports.org/sysutils/syslog-ng

.. _vbotka.freebsd.postinstall: https://galaxy.ansible.com/ui/repo/published/vbotka/freebsd/content/role/postinstall/
.. _vbotka.freebsd_postinstall: https://galaxy.ansible.com/ui/standalone/roles/vbotka/freebsd_postinstall/
.. _vbotka.freebsd: https://galaxy.ansible.com/ui/repo/published/vbotka/freebsd
.. _vbotka: https://galaxy.ansible.com/ui/standalone/namespaces/7289/
.. _Ansible role FreeBSD postinstall: https://ansible-freebsd-postinstall.readthedocs.io/en/latest/

.. _inventory plugin vbotka.freebsd.iocage: https://galaxy.ansible.com/ui/repo/published/vbotka/freebsd/content/inventory/iocage/
.. _module vbotka.freebsd.service: https://galaxy.ansible.com/ui/repo/published/vbotka/freebsd/content/module/service/

.. _community.general.pkgng: https://docs.ansible.com/ansible/latest/collections/community/general/pkgng_module.html
.. _name: https://docs.ansible.com/ansible/latest/collections/community/general/pkgng_module.html#parameter-name
.. _Configuring System Logging - FreeBSD Handbook: https://docs.freebsd.org/en/books/handbook/config/#configtuning-syslog
