sansible.rsyslog

Rsyslog

Maestro: Estado de Construcción
Desarrollo: Estado de Construcción

Este rol instala rsyslog v8 para el envío de registros.

Para más información sobre rsyslog, visita documentación de rsyslog.

Instalación y Dependencias

Para instalar, ejecuta ansible-galaxy install sansible.rsyslog o añade esto a tu
roles.yml

- name: sansible.rsyslog
  version: v3.0

y ejecuta ansible-galaxy install -p ./roles -r roles.yml

Etiquetas

Este rol utiliza dos etiquetas: build y configure

  • build - Instala Rsyslog y todas sus dependencias.

Configuraciones de registro incorporadas

Se incluyen varias configuraciones incorporadas para enviar archivos de registro a Logstash. Estas incorporaciones están diseñadas para ciertos formatos de archivo de registro y siempre se exportan en JSON. Puedes ver los ajustes de ejemplo para cada controlador incorporado en defaults/main.yml bajo builtin_configs.

Archivos de Syslog

Por defecto, los mensajes de syslog se envían como JSON, no se requiere configuración adicional para esto.

Los mensajes de syslog se envían en el siguiente formato:

  • tipo - siempre syslog
  • host - nombre de la máquina de origen
  • timestamp - fecha formateada en RFC-3339
  • versión - siempre 2 para registros en JSON
  • rol - este es el campo app_name de la configuración de roles de rsyslog
  • mensaje - la línea del registro
  • prioridad - número de severidad de syslog
  • programa - nombre del servicio que originó el mensaje
  • instalación - instalación de syslog
  • severidad - nombre de la severidad de syslog
{
  "type": "syslog",
  "host": "192.168.1.1",
  "timestamp": "2017-10-21T14:29:30.739200+00:00",
  "@version": "2",
  "role": "some_application",
  "message": "Algo sucedió",
  "priority": "3",
  "program": "some-local-service",
  "facility": "daemon",
  "severity": "err"
}

Archivos de registro de autenticación

sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true

Envía mensajes de los servicios de autenticación y authpriv, utiliza la misma plantilla que los mensajes de syslog con el campo tipo establecido en authlog:

{
  "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): sesión cerrada para el usuario some_user",
  "priority": "6",
  "program": "CRON",
  "facility": "authpriv",
  "severity": "info"
}

Archivos de registro de texto plano

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"
    # el tipo se establece por defecto en application_log si no se especifica
    options:
      type: some_application_log

La configuración de application_logs está diseñada para manejar archivos de registro que están en texto plano. Las líneas en estos archivos de registro se envían tal cual a Logstash en el siguiente formato JSON:

  • tipo - campo tipo de la configuración de los archivos de registro, útil para filtros de Logstash
  • host - nombre de la máquina de origen
  • timestamp - fecha formateada en RFC-3339
  • versión - siempre 1 para registros de texto plano
  • rol - este es el campo app_name de la configuración de roles de rsyslog
  • sourcefile - ubicación del archivo de registro del cual se tomó la línea
  • mensaje - la línea del registro

Por ejemplo:

{
  "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": "Una línea de registro de texto plano"
}

Archivos de registro JSON

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

La configuración json_logs está diseñada para manejar archivos de registro que están en JSON, todos los campos se envían como JSON con algunos extras añadidos:

  • tipo - campo tipo de la configuración de los archivos de registro, útil para filtros de Logstash
  • host - nombre de la máquina de origen
  • versión - siempre 2 para registros en JSON
  • rol - este es el campo app_name de la configuración de roles de rsyslog
  • sourcefile - ubicación del archivo de registro del cual se tomó la línea

Por ejemplo, dado la línea de registro:

{ "message": "Algun mensaje de registro", "datetime": "2017-01-01 00:00:00", "level": "info" }

Esto se enviaría como:

{
  "type": "some_application_log",
  "host": "192.168.1.1",
  "@version": "2",
  "role": "some_application",
  "sourcefile": "/var/log/some_log.log",
  "message": "Algun mensaje de registro",
  "datetime": "2017-01-01 00:00:00",
  "level": "info"
}

Archivos de registro de acceso de Nginx

La configuración nginx_access_logs es esencialmente la misma que la de json_logs, la única diferencia es que el campo tipo está codificado como nginx-access-logs.

Para representar los registros de acceso de Nginx en JSON, puedes utilizar la siguiente configuración en nginx.conf:

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;

Registros de contenedores de Docker

Las configuraciones de registro de contenedores de Docker están destinadas a ser añadidas a una instancia de contenedor ECS. La configuración crea archivos de socket UNIX en el host a los cuales Docker reenvía los registros generados por los contenedores en ejecución.

Registros de texto plano

sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true

Esta configuración crea un socket en /var/run/rsyslog/text.sock. La configuración de registro en la definición de tarea de la aplicación debe ser la siguiente:

"LogConfiguration": {
    "LogDriver": "syslog",
    "Options": {
        "tag": { "Ref": "ServiceName" },
        "syslog-address": "unixgram:///var/run/docker/text.sock"
    },
}

Registros JSON

sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true

Esta configuración crea un socket en /var/run/rsyslog/json.sock. La configuración de registro en la definición de tarea de la aplicación debe ser la siguiente:

"LogConfiguration": {
    "LogDriver": "syslog",
    "Options": {
        "tag": { "Ref": "ServiceName" },
        "syslog-address": "unixgram:///var/run/docker/json.sock"
    },
}

Registros de texto o JSON a través de Journald

sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false

Esta configuración conecta y escucha el servicio journald. Solo procesará archivos de registro para contenedores, ignorando todas las demás entradas de registro en journald. Se pueden procesar tanto salidas JSON como de texto de contenedores. Para un registro básico, la configuración de registro en la definición de tarea de la aplicación debe ser la siguiente:

"LogConfiguration": {
    "LogDriver": "journald"
}

Para despliegues de ECS, es posible extender los metadatos para las entradas de registro habilitando:

sansible_rsyslog_custom_ecs_properties: yes

Si esto se habilita, la configuración de registro en la definición de tarea de la aplicación debe ser la siguiente:

"LogConfiguration": {
    "LogDriver": "journald",
  "Log-Opts" : {
    "labels": "role,ecs_task_container,app_version"
  }
}

Ejemplos

Para instalar:

- name: Alguna aplicación
  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"

Hay configuraciones globales predeterminadas que se aplican a los archivos de configuración, estas se pueden ver en vars/main.yml. Para anular o agregar cualquier configuración adicional, puedes utilizar las variables sansible_rsyslog_config_global, sansible_rsyslog_config_imfile, sansible_rsyslog_config_main_queue y sansible_rsyslog_config_omfwd:

- name: Alguna aplicación
  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

Para instalar sin configuración predeterminada:

- name: Alguna aplicación
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_app_name: default_app
      sansible_rsyslog_default_config: no

Para instalar versiones específicas de paquetes:

- name: Alguna aplicación
  hosts: "{{ hosts }}"

  roles:
    - role: sansible.rsyslog
      sansible_rsyslog_version: "8.30*"
      sansible_rsyslog_version_libfastjson4: "0.99.*"
      sansible_rsyslog_version_mmjsonparse: "8.30.*"
Instalar
ansible-galaxy install sansible.rsyslog
Licencia
mit
Descargas
13.1k
Propietario
See https://github.com/sansible/sansible for more information