sansible.rsyslog

Rsyslog

Master: Build Status Entwicklung: Build Status

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.*"
Installieren
ansible-galaxy install sansible.rsyslog
GitHub Repository
Lizenz
mit
Downloads
13.1k
Besitzer
See https://github.com/sansible/sansible for more information