sansible.rsyslog
Rsyslog
Dieses Rollenspiel installiert Rsyslog v8 für das Protokollversand.
Für weitere Informationen zu Rsyslog besuchen Sie bitte die Rsyslog-Dokumentation.
Installation und Abhängigkeiten
Um es zu installieren, führen Sie ansible-galaxy install sansible.rsyslog
aus oder fügen Sie dies zu Ihrer roles.yml
hinzu:
- name: sansible.rsyslog
version: v3.0
und führen Sie ansible-galaxy install -p ./roles -r roles.yml
aus.
Tags
Dieses Rollenspiel verwendet zwei Tags: build und configure
build
- Installiert Rsyslog und alle seine Abhängigkeiten.
Eingebaute Protokollkonfigurationen
Mehrere eingebaute Konfigurationen sind enthalten, um Protokolldateien an Logstash zu senden. Diese Konfigurationen sind für bestimmte Protokolldateiformate ausgelegt und geben immer im JSON-Format aus. Sie können die Beispielkonfigurationen für jeden eingebauten Handler in defaults/main.yml unter builtin_configs sehen.
Syslog-Dateien
Standardmäßig werden Syslog-Nachrichten als JSON versendet, es sind keine zusätzlichen Konfigurationen erforderlich.
Syslog-Nachrichten werden im folgenden Format versendet:
- type - immer syslog
- host - Hostname der Ursprungsmaschine
- timestamp - Datum im RFC-3339-Format
- version - immer 2 für JSON-Protokolle
- role - dies ist das app_name-Feld aus der Rsyslog-Rollen-Konfiguration
- message - die Protokollzeile selbst
- priority - Syslog-Schweregradnummer
- program - Name des Dienstes, der die Nachricht erzeugt hat
- facility - Syslog-Einrichtung
- severity - Syslog-Schweregrad
{
"type": "syslog",
"host": "192.168.1.1",
"timestamp": "2017-10-21T14:29:30.739200+00:00",
"@version": "2",
"role": "some_application",
"message": "Etwas ist passiert",
"priority": "3",
"program": "some-local-service",
"facility": "daemon",
"severity": "err"
}
Auth-Protokolldateien
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
Versendet Auth- und Authpriv-Einrichtungsnachrichten, verwendet dasselbe Template wie Syslog-Nachrichten, jedoch mit dem Typfeld auf authlog gesetzt:
{
"type": "authlog",
"host": "192.168.1.1",
"timestamp": "2018-01-09T10:45:01.117615+00:00",
"@version": "2",
"role": "some_application",
"message": " pam_unix(cron:session): Sitzung für Benutzer some_user geschlossen",
"priority": "6",
"program": "CRON",
"facility": "authpriv",
"severity": "info"
}
Einfache Textprotokolldateien
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/var/log/some_log.log"
# Der Typ ist standardmäßig application_log, wenn nicht angegeben
options:
type: some_application_log
Die builtin_application_logs-Konfiguration ist darauf ausgelegt, Protokolldateien im Klartext zu verarbeiten. Die Zeilen in diesen Protokolldateien werden so, wie sie sind, im folgenden JSON-Format an Logstash gesendet:
- type - Typfeld aus der Protokolldateikonfiguration, nützlich für Logstash-Filter
- host - Hostname der Ursprungsmaschine
- timestamp - Datum im RFC-3339-Format
- version - immer 1 für einfache Textprotokolle
- role - dies ist das app_name-Feld aus der Rsyslog-Rollen-Konfiguration
- sourcefile - Standort der Protokolldatei, aus der die Zeile stammt
- message - die Protokollzeile selbst
Beispiel:
{
"type": "application_log",
"host": "192.168.1.1",
"timestamp": "2017-10-21T13:58:40.098660+00:00",
"@version": "1",
"role": "some_application_log",
"sourcefile": "/var/log/some_log.log",
"message": "Eine einfache Textprotokollzeile"
}
JSON-Protokolldateien
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/var/log/some_log.log"
options:
type: some_application_log
Die json_logs-Konfiguration ist darauf ausgelegt, Protokolldateien im JSON-Format zu verarbeiten, wobei alle Felder als JSON mit einigen zusätzlichen Informationen gesendet werden:
- type - Typfeld aus der Protokolldateikonfiguration, nützlich für Logstash-Filter
- host - Hostname der Ursprungsmaschine
- version - immer 2 für JSON-Protokolle
- role - dies ist das app_name-Feld aus der Rsyslog-Rollen-Konfiguration
- sourcefile - Standort der Protokolldatei, aus der die Zeile stammt
Beispiel: Gegeben ist die Protokollzeile:
{ "message": "Eine Protokollnachricht", "datetime": "2017-01-01 00:00:00", "level": "info" }
Diese würde so versendet:
{
"type": "some_application_log",
"host": "192.168.1.1",
"@version": "2",
"role": "some_application",
"sourcefile": "/var/log/some_log.log",
"message": "Eine Protokollnachricht",
"datetime": "2017-01-01 00:00:00",
"level": "info"
}
Nginx-Zugriffsprotokolldateien
Die nginx_access_logs-Konfiguration ist im Wesentlichen die gleiche wie die json_logs-Konfiguration, der einzige Unterschied besteht darin, dass das Typfeld auf nginx-access-logs festgelegt ist.
Um Nginx-Zugriffsprotokolle im JSON-Format zu erstellen, können Sie die folgende Konfiguration in nginx.conf verwenden:
log_format main '{ '
'"http_host": "$http_host", '
'"clientip": "$remote_addr", '
'"datetime": "$time_iso8601", '
'"verb": "$request_method", '
'"request_full": "$request", '
'"response": "$status", '
'"response_length": "$body_bytes_sent", '
'"request_length": "$request_length", '
'"referrer": "$http_referer", '
'"agent": "$http_user_agent", '
'"request_time": "$request_time", '
'"upstream_time": "$upstream_response_time", '
'"user_id": "$http_x_user", '
'"request_id": "$http_x_request_id" '
'}';
access_log /var/log/nginx/access.log main;
Docker-Containerprotokolle
Die Konfigurationen für Docker-Containerprotokolle sind für die Verwendung in einer ECS-Containerinstanz vorgesehen. Die Konfiguration erstellt Unix-Socket-Dateien auf dem Host, an die Docker die Protokolle von laufenden Containern weiterleitet.
Einfache Textprotokolle
sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true
Diese Konfiguration erstellt einen Socket unter /var/run/rsyslog/text.sock. Die Protokollierungskonfiguration in der Aufgabenbeschreibung der Anwendung sollte wie folgt aussehen:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/text.sock"
},
}
JSON-Protokolle
sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true
Diese Konfiguration erstellt einen Socket unter /var/run/rsyslog/json.sock. Die Protokollierungskonfiguration in der Aufgabenbeschreibung der Anwendung sollte wie folgt aussehen:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/json.sock"
},
}
Text- oder JSON-Protokolle über Journald
sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false
Diese Konfiguration verbindet sich mit dem Journald-Dienst. Sie verarbeitet nur Protokolldateien für Container und ignoriert alle anderen Protokolleinträge im Journald. Sowohl JSON- als auch Textausgaben von Containern können verarbeitet werden. Die grundlegende Protokollierungsconfiguration in der Aufgabenbeschreibung der Anwendung sollte wie folgt aussehen:
"LogConfiguration": {
"LogDriver": "journald"
}
Für ECS-Bereitstellungen ist es möglich, die Metadaten für die Protokolleinträge zu erweitern, indem Sie aktivieren:
sansible_rsyslog_custom_ecs_properties: yes
Wenn dies aktiviert ist, sollte Ihre Protokollierungskonfiguration in der Aufgabenbeschreibung der Anwendung wie folgt aussehen:
"LogConfiguration": {
"LogDriver": "journald",
"Log-Opts" : {
"labels": "role,ecs_task_container,app_version"
}
}
Beispiele
Um zu installieren:
- name: Einige Anwendung
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
Es gibt globale Standardwerte, die auf die Konfigurationsdateien angewendet werden. Diese können in vars/main.yml eingesehen werden. Um zusätzliche Einstellungen zu überschreiben oder hinzuzufügen, können Sie die Variablen sansible_rsyslog_config_global, sansible_rsyslog_config_imfile, sansible_rsyslog_config_main_queue und sansible_rsyslog_config_omfwd verwenden:
- name: Einige Anwendung
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
sansible_rsyslog_config_global:
maxMessageSize: 32K
oversizemsg.input.mode: accept
sansible_rsyslog_config_imfile:
reopenOnTruncate: "on"
sansible_rsyslog_config_main_queue:
queue.size: 100000
sansible_rsyslog_config_omfwd:
action.resumeRetryCount: 10
Um ohne Standardkonfiguration zu installieren:
- name: Einige Anwendung
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_default_config: no
Um bestimmte Paketversionen zu installieren:
- name: Einige Anwendung
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_version: "8.30*"
sansible_rsyslog_version_libfastjson4: "0.99.*"
sansible_rsyslog_version_mmjsonparse: "8.30.*"