sansible.rsyslog
Rsyslog
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 turoles.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.*"
ansible-galaxy install sansible.rsyslog