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
Лицензия
mit
Загрузки
13133
Владелец
See https://github.com/sansible/sansible for more information