hadret.rsyslog
Ansible-Rolle: Rsyslog
Installiert und konfiguriert rsyslog auf Debian/Ubuntu-Servern.
Diese Rolle installiert und konfiguriert die neueste Version von rsyslog aus dem offiziellen APT-Repository (auf Debian) oder offiziellen PPA (auf Ubuntu). Standardmäßig übernimmt sie den Inhalt der Dateien /etc/rsyslog.conf und /etc/rsyslog.d/50-default.conf.
Anforderungen
Keine.
Rollenvariablen
Hier sind die verfügbaren Variablen mit ihren Standardwerten (wie in defaults/main.yml):
rsyslog_rules: []
Ein Array von Regeln für rsyslog. Jeder Eintrag erstellt eine separate Konfigurationsdatei, die $priority-$rule_name.conf genannt wird. Stellen Sie sicher, dass Sie defaults/main.yml auf kommentierte Beispiele mit allen verfügbaren Optionen überprüfen.
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"
Hier ist ein Beispiel für einen vollständig ausgefüllten rsyslog_rules-Eintrag. Beachten Sie das | für die Blockdeklaration für das ruleset. Ab dort handelt es sich um die reine rsyslog-Konfigurationssyntax.
Alternativ zur Definition der rsyslog_rules auf regellierter Weise kann die rsyslog_extra_conf_options verwendet werden. Sie erweitert die Hauptkonfigurationsdatei /etc/rsyslog.conf mit zusätzlichen Optionen, anstatt neue Dateien in /etc/rsyslog.d zu erstellen.
rsyslog_extra_conf_options: |
module(load="imudp")
input(type="imudp" port="514")
Hier wird ebenfalls | für die Blockdeklaration verwendet, und der Code selbst ist eine reine rsyslog-Konfigurationssyntax. Es kann auch mit rsyslog_remove_default_rules: true kombiniert werden, was sicherstellt, dass /etc/rsyslog.d/ leer ist.
Zusätzlich gibt es derzeit drei vorkonfigurierte rsyslog-Regeln. Alle haben spezielle, dedizierte Vorlagen (templates/*.conf.j2). Nur eine von ihnen ist standardmäßig aktiviert und heißt einfach default. Sie übernimmt die Definition der Datei /etc/rsyslog.d/50-default.conf. Sie kann leicht deaktiviert werden, indem state: "absent" angegeben wird.
rsyslog_rule_default:
rule_name: "default"
priority: 50
template: "default.conf.j2"
Die zweite ist docker, die Protokolle für die Docker-Container auf dem jeweiligen Host verarbeitet. Sie wird in der Datei /etc/rsyslog.d/20-docker.conf definiert.
rsyslog_rule_docker:
rule_name: "docker"
priority: 20
template: "docker.conf.j2"
rsyslog_rule_docker_tag_all: true
Es wird /var/log/docker erstellt und Protokolldateien dort mit dem Namensschema $CONTAINER_NAME.log platziert. Es wird erwartet, dass der $syslogtag docker/ im Namen hat (siehe das Beispiel unten), andernfalls werden alle Protokolle in /var/log/docker/no_tag.log gespeichert. Zudem gibt es eine rsyslog_rule_docker_tag_all, die eingeschaltet werden kann, wenn mehr als ein Container auf dem Host läuft und es ermöglicht, eine Datei mit Protokollen aus allen von ihnen in /var/log/docker/all.log zu aggregieren (Hinweis: Dies verdoppelt den benötigten Speicherplatz für die Containerprotokolle). Sie können meine Rolle hadret.containers für ein Beispiel zur Containerdefinition mit aktivierter Syslog-Unterstützung überprüfen.
containers:
- name: cadvisor
image: "google/cadvisor:latest"
state: started
log_driver: journald
log_options:
tag: docker/cadvisor
journald wird heutzutage automatisch von rsyslog verwendet.
Zu guter Letzt ist da noch das Handling von remote. Ich wollte eine schlüsselfertige Lösung für die Bearbeitung sowohl der Client- als auch der Serverseite erstellen. Remote-Logging ist derzeit sehr rudimentär und grundlegend, funktioniert aber sofort mit einer minimalen Konfiguration.
rsyslog_rule_remote:
rule_name: "remote"
role: server
priority: 99
template: "remote.conf.j2"
ruleset_name: "remote"
Mindestens ein Remote-Protokoll (relp/tcp/udp) muss angegeben werden (Hinweis: Es gibt keinen Standard und die Angabe von rsyslog_rule_remote allein wird fehlschlagen). Die serverseitige Handhabung erfordert eine definierte ruleset_name, da es ruleset ist, das die tatsächliche Aktion des Schreibens der Protokolle ausführt (über omfile) und vordefinierte Vorlagen anwendet. Diese sind so konfiguriert, dass sie den "gewöhnlichen" Regeln so ähnlich wie möglich sind, mit den folgenden vordefinierten Ausgaben: auth.log, syslog.log, rsyslog.log, kern.log und mail.log.
rsyslog_rule_remote_relp:
port: 514
Derzeit unterstützt nur relp die TLS-Konfiguration.
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"
Bei tcp und udp kann derzeit nur die address (optional im Server-Modus), das target (erforderlich im Client-Modus) und der port (erforderlich in beiden Modi) angegeben werden.
rsyslog_rule_remote_tcp:
address: 0.0.0.0
port: 514
rsyslog_rule_remote_udp:
address: 0.0.0.0
port: 514
Bitte beachten Sie, dass Sie alle drei definieren können, mit unterschiedlichen Adressen und Ports (aber jede nur einmal). Alle Konfigurationen landen standardmäßig in /etc/rsyslog.d/99-remote.conf (sowohl Server als auch Client). Es ist derzeit unmöglich, dass eine einzelne Maschine sowohl als Server als auch als Client fungiert, wenn nur rsyslog_rule_remote_relp verwendet wird, aber es ist möglich, eine zusätzliche Regel mit entweder rsyslog_extra_conf_options oder rsyslog_rules anzugeben.
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")
Hinweis: Alle drei dieser zusätzlich vorkonfigurierten rsyslog-Regeln sind Wörterbücher, keine Arrays. Nur rsyslog_rules erlaubt mehrere Regeldefinitionen.
Erweitern und Ersetzen von Vorlagen
Ich erkenne, dass nicht alles mit Variablen abgedeckt ist und es viele verschiedene mögliche Konfigurationsoptionen gibt. Deshalb verwende ich Vorlagen für alle Regeln, die leicht erweiterbar sind, Blockersetzungen (via Jinja2-Vorlagenvererbung) oder den vollständigen Austausch von Vorlagen ermöglichen, um den Bedürfnissen gerecht zu werden, an die ich nicht gedacht habe.
rsyslog_conf_template: "rsyslog.conf.j2"
rsyslog_rules_template: "rules.conf.j2"
Es kann auch regelweise geändert werden.
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"
Beispiel: Module-Block im Hauptkonfigurationsdatei erweitern
rsyslog_conf_template muss auf die neue Datei in Ihrem Playbook-Verzeichnis gesetzt werden.
rsyslog_conf_template: "{{ playbook_dir }}/templates/custom-rsyslog.conf.j2"
Die benutzerdefinierte Vorlagendatei muss relativ zu Ihrem playbook.yml platziert werden.
{% 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 %}
Das obige Beispiel ersetzt/erweitert den modules-Block in der Hauptkonfigurationsdatei von rsyslog.
Abhängigkeiten
Keine.
Beispiel-Playbook
hosts: all
roles:
- hadret.rsyslog
Lizenz
MIT.
Autoren
Diese Rolle wurde 2019 von Filip Chabik zusammengestellt.
Rsyslog installation and configuration for Ubuntu/Debian.
ansible-galaxy install hadret.rsyslog