hadret.rsyslog
Ansibleロール: Rsyslog
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
という命名規則でログファイルがその中に格納されます。$syslogtag
にdocker/
が含まれていることを期待しています(以下の例を参照)。そうでない場合、すべてのログが/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.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
すべての3つを異なるアドレスとポートで定義することができます(ただし、各々を1回のみ)。すべての設定はデフォルトで/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")
注:これらの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によってある程度組み立てられました。