hadret.rsyslog

Ansibleロール: Rsyslog

CI

Debian/Ubuntuサーバーにrsyslogをインストールおよび設定します。

このロールは、公式のAPTリポジトリ(Debianの場合)または公式PPA(Ubuntuの場合)から最新のrsyslogをインストールおよび設定します。デフォルトでは、/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のブロック宣言には|が使われます。その後は、bareなrsyslog設定の構文になります。

rsyslog_rulesを個別のルールとして定義する別の方法は、rsyslog_extra_conf_optionsを使用することです。これにより、/etc/rsyslog.d内に新しいファイルを作成するのではなく、メインの/etc/rsyslog.conf設定ファイルに追加オプションを拡張します。

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

ここでも、|を使用してブロック宣言され、コード自体はbareなrsyslog設定の構文です。これも、rsyslog_remove_default_rules: trueと組み合わせて、/etc/rsyslog.d/を空にすることができます。

さらに、現在3つの事前設定されたrsyslogルールがあります。それらはすべて特別な専用テンプレート(templates/*.conf.j2)を持っています。デフォルトで有効になっているのは1つだけで、defaultと呼ばれています。これは/etc/rsyslog.d/50-default.confファイルの定義を引き受けます。state: "absent"を指定することで簡単に無効にできます。

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

2つ目は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という命名規則でログファイルがその中に格納されます。$syslogtagdocker/が含まれていることを期待しています(以下の例を参照)。そうでない場合、すべてのログが/var/log/docker/no_tag.logに送られます。さらに、rsyslog_rule_docker_tag_allは、指定されたホスト上で複数のコンテナが実行されている場合にオンにでき、すべてのログを/var/log/docker/all.logに集約された単一ファイルにすることができます(注:これはコンテナログに必要なスペースを2倍にします)。Syslogサポートが有効なコンテナ定義の例については、私のhadret.containersロールを確認してください。

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"

少なくとも1つのリモートプロトコル(relp / tcp / udp)を指定する必要があります(注:デフォルトはなく、rsyslog_rule_remoteだけでは失敗します)。サーバーサイドの処理には、実際にログを書き込むアクションを実行するrulesetが必要です(omfileを介して)および事前定義されたテンプレートの適用です。これらは、「通常の」ルールとできるだけ類似するように設定され、以下の出力が事前定義されています:auth.logsyslog.logrsyslog.logkern.logmail.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"

tcpudpは現在、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

すべての3つを異なるアドレスとポートで定義することができます(ただし、各々を1回のみ)。すべての設定はデフォルトで/etc/rsyslog.d/99-remote.confに配置されます(サーバーおよびクライアントの両方)。rsyslog_rule_remote_relpの使用のみで単一のマシンがサーバーとクライアントとして動作することは現在不可能ですが、rsyslog_extra_conf_optionsrsyslog_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")

注:これらの3つの事前設定された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 %}

上記の例は、メインのrsyslog設定ファイルのmodulesブロックを置き換え/拡張します。

依存関係

特になし。

例のプレイブック

hosts: all
  roles:
    - hadret.rsyslog

ライセンス

MIT。

著者

このロールは、2019年にFilip Chabikによってある程度組み立てられました。

プロジェクトについて

Rsyslog installation and configuration for Ubuntu/Debian.

インストール
ansible-galaxy install hadret.rsyslog
ライセンス
mit
ダウンロード
12.4k
所有者
Vegetarian, skeptic & Linux SysAdmin (: