rsyslog
Rsyslog
Эта роль устанавливает rsyslog v8 для отправки логов.
Для получения дополнительной информации о rsyslog посетите документацию rsyslog.
Установка и зависимости
Чтобы установить, выполните ansible-galaxy install sansible.rsyslog
или добавьте это в ваш
roles.yml
- name: sansible.rsyslog
version: v3.0
и выполните ansible-galaxy install -p ./roles -r roles.yml
Теги
Эта роль использует два тега: build и configure
build
- Устанавливает Rsyslog и все его зависимости.
Встроенные конфигурации логов
Включены несколько встроенных конфигураций для отправки лог-файлов в Logstash. Эти встроенные конфигурации предназначены для определенных форматов лог-файлов и всегда выводят в формате JSON. Примеры настроек для каждого встроенного обработчика можно найти в defaults/main.yml в разделе builtin_configs.
Файлы syslog
По умолчанию сообщения syslog отправляются в формате JSON, дополнительная настройка не требуется.
Сообщения syslog отправляются в следующем формате:
- type - всегда syslog
- host - имя хоста исходной машины
- timestamp - дата в формате RFC-3339
- version - всегда 2 для JSON логов
- role - это поле app_name из конфигурации ролей rsyslog
- message - сама строка лога
- priority - уровень серьезности syslog
- program - имя сервиса, который генерирует сообщение
- facility - служебное значение syslog
- severity - имя уровня серьезности syslog
{
"type": "syslog",
"host": "192.168.1.1",
"timestamp": "2017-10-21T14:29:30.739200+00:00",
"@version": "2",
"role": "some_application",
"message": "Что-то произошло",
"priority": "3",
"program": "some-local-service",
"facility": "daemon",
"severity": "err"
}
Файлы логов авторизации
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
Отправляет сообщения из служб auth и authpriv, использует тот же шаблон, что и сообщения syslog, но с установленным полем type в 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): сессия закрыта для пользователя some_user",
"priority": "6",
"program": "CRON",
"facility": "authpriv",
"severity": "info"
}
Файлы логов в текстовом формате
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"
# тип по умолчанию для application_log, если не указан
options:
type: some_application_log
Встроенный application_logs предназначен для обработки логов, которые находятся в текстовом формате. Строки в этих логах отправляются в Logstash в следующем формате JSON:
- type - поле типа из конфигурации лог-файлов, полезно для фильтров Logstash
- host - имя хоста исходной машины
- timestamp - дата в формате RFC-3339
- version - всегда 1 для текстовых логов
- role - это поле app_name из конфигурации ролей rsyslog
- sourcefile - местоположение лог-файла, из которого взята строка
- message - сама строка лога
Например:
{
"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": "Строка лога в текстовом формате"
}
Файлы логов в формате 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
Встроенный json_logs предназначен для обработки логов, которые находятся в формате JSON, все поля отправляются в виде JSON с добавлением дополнительных полей:
- type - поле типа из конфигурации лог-файлов, полезно для фильтров Logstash
- host - имя хоста исходной машины
- version - всегда 2 для JSON логов
- role - это поле app_name из конфигурации ролей rsyslog
- sourcefile - местоположение лог-файла, из которого взята строка
Например, для строки лога:
{ "message": "Некоторое сообщение лога", "datetime": "2017-01-01 00:00:00", "level": "info" }
Это будет отправлено как:
{
"type": "some_application_log",
"host": "192.168.1.1",
"@version": "2",
"role": "some_application",
"sourcefile": "/var/log/some_log.log",
"message": "Некоторое сообщение лога",
"datetime": "2017-01-01 00:00:00",
"level": "info"
}
Файлы логов доступа Nginx
Встроенные конфигурации nginx_access_logs в основном аналогичны встроенной конфигурации json_logs, единственное различие в том, что поле type зафиксировано на nginx-access-logs.
Чтобы отформатировать логи доступа Nginx в формате JSON, вы можете использовать следующую конфигурацию в 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;
Логи контейнеров Docker
Конфигурации логов контейнеров Docker предназначены для добавления к экземпляру контейнера ECS. Конфигурация создает unix-сокеты на хосте, куда Docker пересылает логи, создаваемые работающими контейнерами.
Текстовые логи
sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true
Эта конфигурация создает сокет по адресу /var/run/rsyslog/text.sock. Конфигурация логирования в определении задачи приложения должна быть следующей:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/text.sock"
},
}
JSON логи
sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true
Эта конфигурация создает сокет по адресу /var/run/rsyslog/json.sock. Конфигурация логирования в определении задачи приложения должна быть следующей:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/json.sock"
},
}
Текстовые или JSON логи через Journald
sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false
Эта конфигурация подключается и слушает службу journald. Она будет обрабатывать только лог-файлы для контейнеров, игнорируя все другие записи журналов в journald. Можно обрабатывать как JSON, так и текстовые логи из контейнеров. Для базового логирования конфигурация логирования в определении задачи приложения должна быть следующей:
"LogConfiguration": {
"LogDriver": "journald"
}
Для развертывания ECS возможно расширить метаданные для лог-записей, включив:
sansible_rsyslog_custom_ecs_properties: yes
Если это включено, ваша конфигурация логирования в определении задачи приложения должна быть следующей:
"LogConfiguration": {
"LogDriver": "journald",
"Log-Opts" : {
"labels": "role,ecs_task_container,app_version"
}
}
Примеры
Чтобы установить:
- name: Некоторая программа
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"
Есть глобальные настройки по умолчанию, которые применяются к конфигурационным файлам. Их можно увидеть в vars/main.yml, чтобы переопределить или добавить любые дополнительные настройки, вы можете использовать переменные sansible_rsyslog_config_global, sansible_rsyslog_config_imfile, sansible_rsyslog_config_main_queue и sansible_rsyslog_config_omfwd:
- name: Некоторая программа
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
Чтобы установить без конфигурации по умолчанию:
- name: Некоторая программа
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_default_config: no
Чтобы установить специфичные версии пакетов:
- name: Некоторая программа
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