sansible.rsyslog
Rsyslog
Ce rôle installe rsyslog v8 pour l'expédition des journaux.
Pour plus d'informations sur rsyslog, veuillez visiter la documentation de rsyslog.
Installation et Dépendances
Pour installer, exécutez ansible-galaxy install sansible.rsyslog
ou ajoutez ceci à votre roles.yml
- name: sansible.rsyslog
version: v3.0
et exécutez ansible-galaxy install -p ./roles -r roles.yml
Tags
Ce rôle utilise deux tags : build et configure
build
- Installe Rsyslog avec toutes ses dépendances.
Configurations de journalisation intégrées
Plusieurs configurations intégrées sont incluses pour l'expédition des fichiers journaux vers Logstash, ces configurations sont conçues pour certains formats de fichiers journaux et produisent toujours un format JSON. Vous pouvez voir les paramètres d'exemple pour chaque gestionnaire intégré dans defaults/main.yml sous builtin_configs.
Fichiers syslog
Par défaut, les messages syslog sont expédiés en JSON, aucune configuration supplémentaire n'est requise.
Les messages syslog sont expédiés dans le format suivant :
- type - toujours syslog
- hôte - nom d'hôte de la machine d'origine
- date/heure - date au format RFC-3339
- version - toujours 2 pour les journaux JSON
- rôle - c'est le champ app_name de la configuration des rôles rsyslog
- message - la ligne de journal elle-même
- priorité - numéro de sévérité du syslog
- programme - nom du service à l'origine du message
- installation - installation syslog
- sévérité - nom de la sévérité du syslog
{
"type": "syslog",
"host": "192.168.1.1",
"timestamp": "2017-10-21T14:29:30.739200+00:00",
"@version": "2",
"role": "some_application",
"message": "Quelque chose s'est passé",
"priority": "3",
"program": "some-local-service",
"facility": "daemon",
"severity": "err"
}
Fichiers de journalisation Auth
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
Expédie les messages d'installation auth et authpriv, en utilisant le même modèle que les messages syslog avec le champ de type défini sur 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) : session fermée pour l'utilisateur some_user",
"priority": "6",
"program": "CRON",
"facility": "authpriv",
"severity": "info"
}
Fichiers de journalisation en texte brut
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"
options:
type: some_application_log
Le modèle application_logs intégré est conçu pour traiter des fichiers journaux en texte brut. Les lignes de ces fichiers sont expédiées telles quelles à Logstash dans le format JSON suivant :
- type - champ de type de la configuration des fichiers journaux, utile pour les filtres Logstash
- hôte - nom d'hôte de la machine d'origine
- date/heure - date au format RFC-3339
- version - toujours 1 pour les journaux en texte brut
- rôle - c'est le champ app_name de la configuration des rôles rsyslog
- sourcefile - emplacement du fichier journal d'où la ligne a été prise
- message - la ligne de journal elle-même
Par exemple :
{
"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": "Une ligne de journal en texte brut"
}
Fichiers de journalisation 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
Le modèle json_logs intégré est conçu pour traiter des fichiers journaux au format JSON. Tous les champs sont expédiés en JSON avec quelques ajouts :
- type - champ de type de la configuration des fichiers journaux, utile pour les filtres Logstash
- hôte - nom d'hôte de la machine d'origine
- version - toujours 2 pour les journaux JSON
- rôle - c'est le champ app_name de la configuration des rôles rsyslog
- sourcefile - emplacement du fichier journal d'où la ligne a été prise
Par exemple, étant donné la ligne de journal :
{ "message": "Un message de journal", "datetime": "2017-01-01 00:00:00", "level": "info" }
Cela serait expédié sous la forme :
{
"type": "some_application_log",
"host": "192.168.1.1",
"@version": "2",
"role": "some_application",
"sourcefile": "/var/log/some_log.log",
"message": "Un message de journal",
"datetime": "2017-01-01 00:00:00",
"level": "info"
}
Fichiers de journalisation d'accès Nginx
Le modèle nginx_access_logs est essentiellement le même que le modèle json_logs, la seule différence est que le champ type est codé en dur à nginx-access-logs.
Pour afficher les journaux d'accès Nginx en JSON, vous pouvez utiliser la configuration suivante dans 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;
Journaux des conteneurs Docker
Les configurations de journaux des conteneurs Docker sont destinées à être ajoutées à une instance de conteneur ECS. La configuration crée des fichiers de socket unix sur l'hôte auxquels Docker transfère les journaux générés par les conteneurs en cours d'exécution.
Journaux en texte brut
sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true
Cette configuration crée un socket à /var/run/rsyslog/text.sock. La configuration de journalisation dans la définition de tâche de l'application doit être la suivante :
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/text.sock"
},
}
Journaux JSON
sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true
Cette configuration crée un socket à /var/run/rsyslog/json.sock. La configuration de journalisation dans la définition de tâche de l'application doit être la suivante :
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/json.sock"
},
}
Journaux en texte ou JSON via Journald
sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false
Cette configuration se connecte et écoute le service journald. Elle ne traitera que les fichiers journaux pour les conteneurs, ignorant toutes les autres entrées de log dans journald. Les sorties JSON et texte des conteneurs peuvent être traitées. Pour une journalisation de base, la configuration de journalisation dans la définition de tâche de l'application doit être la suivante :
"LogConfiguration": {
"LogDriver": "journald"
}
Pour les déploiements ECS, il est possible d'étendre les métadonnées pour les entrées de log en activant :
sansible_rsyslog_custom_ecs_properties: yes
Si cela est activé, votre configuration de journalisation dans la définition de tâche de l'application doit être la suivante :
"LogConfiguration": {
"LogDriver": "journald",
"Log-Opts" : {
"labels": "role,ecs_task_container,app_version"
}
}
Exemples
Pour installer :
- name: Quelques applications
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"
Il existe des paramètres par défaut globaux qui sont appliqués aux fichiers de configuration, ceux-ci peuvent être vus dans vars/main.yml. Pour remplacer ou ajouter des paramètres supplémentaires, vous pouvez utiliser les variables sansible_rsyslog_config_global, sansible_rsyslog_config_imfile, sansible_rsyslog_config_main_queue et sansible_rsyslog_config_omfwd :
- name: Quelques applications
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
Pour installer sans la configuration par défaut :
- name: Quelques applications
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_default_config: no
Pour installer des versions de packages spécifiques :
- name: Quelques applications
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