rsyslog

Ansible Роль: Rsyslog

CI

Устанавливает и настраивает rsyslog на серверах Debian/Ubuntu.

Эта роль устанавливает и настраивает последнюю версию rsyslog из официального APT репозитория (на Debian) или официального PPA (на Ubuntu). По умолчанию она заменяет содержимое файлов /etc/rsyslog.conf и /etc/rsyslog.d/50-default.conf.

Требования

Нет.

Переменные роли

Вот доступные переменные с их значениями по умолчанию (как в defaults/main.yml):

rsyslog_rules: []

Массив правил для rsyslog. Каждая запись создаст отдельный конфигурационный файл с именем $priority-$rule_name.conf. Обязательно проверьте defaults/main.yml для примера с закомментированными всеми доступными опциями.

rsyslog_rules:
  - rule_name: "remote-udp"
    priority: 99
    ruleset: |
      module(load="omfwd")
      action(type="omfwd" target="central.server.local" port="514" protocol="udp")
    state: "present"

Вот пример полностью заполненной записи rsyslog_rules. Обратите внимание на | для декларации блока в ruleset. Дальше используется чистый синтаксис конфигурации rsyslog.

Альтернативный способ определения rsyslog_rules по отдельным правилам – использовать rsyslog_extra_conf_options. Это расширяет основной конфигурационный файл /etc/rsyslog.conf дополнительными опциями вместо создания новых файлов в /etc/rsyslog.d.

rsyslog_extra_conf_options: |
  module(load="imudp")
  input(type="imudp" port="514")

Здесь тоже используется | для декларации блока, а код сам по себе является чистым синтаксисом конфигурации rsyslog. Это также может быть объединено с rsyslog_remove_default_rules: true, чтобы гарантировать, что /etc/rsyslog.d/ пусто.

Дополнительно в данный момент есть три предварительно настроенных правила rsyslog. У всех них есть специальные, выделенные шаблоны (templates/*.conf.j2). Только одно из них включено по умолчанию и называется просто default. Оно заменяет определение файла /etc/rsyslog.d/50-default.conf. Его можно легко отключить, указав state: "absent".

rsyslog_rule_default:
  rule_name: "default"
  priority: 50
  template: "default.conf.j2"

Второе правило – docker, которое обрабатывает логи для контейнеров Docker, работающих на данном хосте. Оно определяется в файле /etc/rsyslog.d/20-docker.conf.

rsyslog_rule_docker:
  rule_name: "docker"
  priority: 20
  template: "docker.conf.j2"
rsyslog_rule_docker_tag_all: true

Это создаст /var/log/docker и поместит туда файлы журналов с именем $CONTAINER_NAME.log. Ожидается, что $syslogtag будет содержать docker/ в имени (смотрите пример ниже), в противном случае все логи будут помещены в /var/log/docker/no_tag.log. Кроме того, есть опция rsyslog_rule_docker_tag_all, которую можно включить, когда на данном хосте работает более одного контейнера, что позволяет создать один файл с логами, агрегированными с них всех, в /var/log/docker/all.log (Примечание: это удвоит пространство, необходимое для логов контейнера). Вы можете проверить мою роль hadret.containers для примера определения контейнера с включенной поддержкой syslog.

containers:
  - name: cadvisor
    image: "google/cadvisor:latest"
    state: started
    log_driver: journald
    log_options:
      tag: docker/cadvisor

journald в настоящее время автоматически подхватывается rsyslog.

Последним, но не менее важным, является обработка remote. Я хотел создать решение «под ключ» для обработки как клиентской, так и серверной части. Удаленное ведение логов в настоящее время очень сырое и базовое, но работает из коробки с минимальной конфигурацией.

rsyslog_rule_remote:
  rule_name: "remote"
  role: server
  priority: 99
  template: "remote.conf.j2"
  ruleset_name: "remote"

Должен быть указан как минимум один удаленный протокол (relp/tcp/udp) (Примечание: нет значения по умолчанию, и указание только rsyslog_rule_remote приведет к ошибке). Обработка на стороне сервера требует определения ruleset_name, так как именно ruleset выполняет действие записи логов (через omfile) и применение предопределенных шаблонов. Эти шаблоны настроены так, чтобы быть как можно более похожими на «обычные» правила с предопределенными выводами: auth.log, syslog.log, rsyslog.log, kern.log и mail.log.

rsyslog_rule_remote_relp:
  port: 514

В настоящее время только relp поддерживает настройку TLS.

rsyslog_rule_remote_relp:
  address: 0.0.0.0
  port: 514
  tls: true
  tls_cacert: "/tls-certs/ca.pem"
  tls_mycert: "/tls-certs/cert.pem"
  tls_myprivkey: "/tls-certs/key.pem"
  tls_authmode: "fingerprint"

Обе tcp и udp в настоящее время позволяют указывать только address (необязательный в серверном режиме), target (обязательный в клиентском режиме) и port (обязательный в обоих режимах).

rsyslog_rule_remote_tcp:
  address: 0.0.0.0
  port: 514

rsyslog_rule_remote_udp:
  address: 0.0.0.0
  port: 514

Обратите внимание, что вы можете определить все три из них с разными адресами и портами (но каждый из них только один раз). Вся конфигурация по умолчанию будет помещена в /etc/rsyslog.d/99-remote.conf (как для сервера, так и для клиента). В данный момент невозможно, чтобы одна машина выступала одновременно и в роли сервера, и клиента, используя только rsyslog_rule_remote_relp, но возможно указать дополнительное правило с использованием либо rsyslog_extra_conf_options, либо rsyslog_rules.

rsyslog_rule_remote:
  rule_name: "server"
  role: server
  priority: 99
  template: "remote.conf.j2"
  ruleset_name: "server"

rsyslog_rule_remote_udp:
  port: 514

rsyslog_rules:
  - rule_name: "client"
    priority: 99
    ruleset: |
      module(load="omfwd")
      action(type="omfwd" target="central.server.local" port="514" protocol="tcp")

Примечание: все три из этих предварительно настроенных правил rsyslog являются словарями, а не массивами. Только rsyslog_rules позволяет определять несколько правил.

Расширение и замена шаблонов

Я понимаю, что не все охвачено переменными, и существует множество различных возможных опций конфигурации. Именно поэтому я использую шаблоны для всех правил, что позволяет легко расширять, заменять блоки (через наследование шаблонов Jinja2) или полностью заменять шаблоны, чтобы соответствовать нуждам, о которых я не подумал.

rsyslog_conf_template: "rsyslog.conf.j2"
rsyslog_rules_template: "rules.conf.j2"

Это также может быть изменено для каждого правила.

rsyslog_rule_default:
  rule_name: "default"
  priority: 50
  template: "{{ playbook_dir }}/templates/custom-default.conf.j2"

rsyslog_rule_docker:
  rule_name: "docker"
  priority: 20
  template: "{{ playbook_dir }}/templates/custom-docker.conf.j2"

rsyslog_rules:
  - rule_name: "remote-udp"
    priority: 90
    template: "{{ playbook_dir }}/templates/custom-udp.conf.j2"
  - rule_name: "remote-tcp"
    priority: 91
    template: "{{ playbook_dir }}/templates/custom-tcp.conf.j2"

Пример: расширение блока модулей в основном конфигурационном файле

rsyslog_conf_template должен быть установлен на указание нового файла в каталоге вашей плейбука.

rsyslog_conf_template: "{{ playbook_dir }}/templates/custom-rsyslog.conf.j2"

Файл пользовательского шаблона должен быть размещен относительно вашего playbook.yml.

{% extends 'roles/external/hadret.rsyslog/templates/rsyslog.conf.j2' %}

{% block modules %}
$ModLoad imuxsock
$ModLoad imklog
$ModLoad immark

$ModLoad imudp
$UDPServerRun 514

$ModLoad imtcp
$InputTCPServerRun 514
{% endblock %}

Приведенный выше пример заменяет/расширяет блок modules в основном конфигурационном файле rsyslog.

Зависимости

Нет.

Пример плейбука

hosts: all
  roles:
    - hadret.rsyslog

Лицензия

MIT.

Авторы

Эта роль была частично собрана в 2019 году Филипом Чабиком.

О проекте

Rsyslog installation and configuration for Ubuntu/Debian.

Установить
ansible-galaxy install hadret/ansible-role-rsyslog
Лицензия
mit
Загрузки
12113
Владелец
Vegetarian, skeptic & Linux SysAdmin (: