hadret.rsyslog

Ansible Role: Rsyslog

CI

This role installs and sets up rsyslog on Debian/Ubuntu servers.

It installs the latest version of rsyslog from the official APT repository (for Debian) or the official PPA (for Ubuntu). By default, it will manage the files /etc/rsyslog.conf and /etc/rsyslog.d/50-default.conf.

Requirements

No requirements.

Role Variables

Here are the available variables with their default values (found in defaults/main.yml):

rsyslog_rules: []

This is an array of rules for rsyslog. Each entry will create a unique config file named as $priority-$rule_name.conf. Check defaults/main.yml for an example.

rsyslog_rules:
  - rule_name: "remote-udp"
    priority: 99
    ruleset: |
      module(load="omfwd")
      action(type="omfwd" target="central.server.local" port="514" protocol="udp")
    state: "present"

This shows a complete entry for rsyslog_rules. Note the | for starting the block of ruleset. This part uses basic rsyslog config syntax.

Instead of creating rules one by one in rsyslog_rules, you can use rsyslog_extra_conf_options to add extra options directly to the main /etc/rsyslog.conf file.

rsyslog_extra_conf_options: |
  module(load="imudp")
  input(type="imudp" port="514")

Again, | denotes the block, and the content is plain rsyslog config syntax. You can also set rsyslog_remove_default_rules: true to keep /etc/rsyslog.d/ empty.

There are currently three preconfigured rsyslog rules. Only one of them, called default, is enabled by default and manages /etc/rsyslog.d/50-default.conf. You can disable it by setting state: "absent".

rsyslog_rule_default:
  rule_name: "default"
  priority: 50
  template: "default.conf.j2"

The second is the docker rule, which manages logs for Docker containers on the host, set up in the /etc/rsyslog.d/20-docker.conf file.

rsyslog_rule_docker:
  rule_name: "docker"
  priority: 20
  template: "docker.conf.j2"
rsyslog_rule_docker_tag_all: true

This creates the /var/log/docker directory and stores log files named after the containers (e.g., $CONTAINER_NAME.log). It requires the $syslogtag to include docker/ in its name; otherwise, it will log everything under /var/log/docker/no_tag.log. Also, enabling rsyslog_rule_docker_tag_all allows logs from multiple containers to be aggregated into a single /var/log/docker/all.log. For an example of a container with syslog support, check my hadret.containers role.

containers:
  - name: cadvisor
    image: "google/cadvisor:latest"
    state: started
    log_driver: journald
    log_options:
      tag: docker/cadvisor

journald is automatically managed by rsyslog nowadays.

Lastly, there's the remote rule, which allows for client and server setup for remote logging. It is simple and works with minimal settings.

rsyslog_rule_remote:
  rule_name: "remote"
  role: server
  priority: 99
  template: "remote.conf.j2"
  ruleset_name: "remote"

You must specify at least one remote protocol (relp/tcp/udp). Notably, rsyslog_rule_remote alone will not work without specifying a protocol. The server configuration requires a ruleset_name because that's where the actions for writing logs (using omfile) and template application are defined. The expected outputs include auth.log, syslog.log, rsyslog.log, kern.log, and mail.log.

rsyslog_rule_remote_relp:
  port: 514

Currently, only relp supports TLS setup.

rsyslog_rule_remote_relp:
  address: 0.0.0.0
  port: 514
  tls: true
  tls_cacert: "/tls-certs/ca.pem"
  tls_mycert: "/tls-certs/cert.pem"
  tls_myprivkey: "/tls-certs/key.pem"
  tls_authmode: "fingerprint"

For tcp and udp, you can set the address (optional for server), target (required for client), and port (required for both).

rsyslog_rule_remote_tcp:
  address: 0.0.0.0
  port: 514

rsyslog_rule_remote_udp:
  address: 0.0.0.0
  port: 514

You can define all three types (with different addresses and ports), but each only once. By default, configurations will go to /etc/rsyslog.d/99-remote.conf (for both server and client). A single machine cannot act as both server and client using just rsyslog_rule_remote_relp, but you can use additional rules with rsyslog_extra_conf_options or rsyslog_rules.

rsyslog_rule_remote:
  rule_name: "server"
  role: server
  priority: 99
  template: "remote.conf.j2"
  ruleset_name: "server"

rsyslog_rule_remote_udp:
  port: 514

rsyslog_rules:
  - rule_name: "client"
    priority: 99
    ruleset: |
      module(load="omfwd")
      action(type="omfwd" target="central.server.local" port="514" protocol="tcp")

Note: these preconfigured rsyslog rules are dictionaries, not arrays. Only rsyslog_rules can have multiple definitions.

Extending and Replacing Templates

Not all configurations can be set with variables, which is why I use templates for all rules. This allows for easy expansion, replacement, or full template switching to fit your needs.

rsyslog_conf_template: "rsyslog.conf.j2"
rsyslog_rules_template: "rules.conf.j2"

You can change templates for individual rules as well.

rsyslog_rule_default:
  rule_name: "default"
  priority: 50
  template: "{{ playbook_dir }}/templates/custom-default.conf.j2"

rsyslog_rule_docker:
  rule_name: "docker"
  priority: 20
  template: "{{ playbook_dir }}/templates/custom-docker.conf.j2"

rsyslog_rules:
  - rule_name: "remote-udp"
    priority: 90
    template: "{{ playbook_dir }}/templates/custom-udp.conf.j2"
  - rule_name: "remote-tcp"
    priority: 91
    template: "{{ playbook_dir }}/templates/custom-tcp.conf.j2"

Example: Extending Modules Block in Main Config File

Set rsyslog_conf_template to point to your new file in your playbook directory.

rsyslog_conf_template: "{{ playbook_dir }}/templates/custom-rsyslog.conf.j2"

The custom template file should be in relation to your playbook.yml.

{% extends 'roles/external/hadret.rsyslog/templates/rsyslog.conf.j2' %}

{% block modules %}
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark

$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514
{% endblock %}

The above example replaces or extends the modules block in the main rsyslog config file.

Dependencies

No dependencies.

Example Playbook

hosts: all
  roles:
    - hadret.rsyslog

License

MIT.

Authors

This role was created in 2019 by Filip Chabik.

Informazioni sul progetto

Rsyslog installation and configuration for Ubuntu/Debian.

Installa
ansible-galaxy install hadret.rsyslog
Licenza
mit
Download
12.4k
Proprietario
Vegetarian, skeptic & Linux SysAdmin (: