① docker_compose.yml
logging: driver: "syslog" options: syslog-facility: daemon tag: docker/{{.Name}}/{{.ID}}
上記のようにdocker-compose.ymlのloggingでsyslogを指定したあと、
rsyslogのコンフィグとして以下のようにする事がある。
②/etc/rsyslog/docker.conf
$template DockerLogs, "/var/log/docker/%programname%_%SYSLOGTAG:R,ERE,1,FIELD:docker/(.*)\[--end:secpath-replace%_%$year%%$month%%$day%.log" if $programname contains 'docker' then { action(type="omfile" DynaFile="DockerLogs") } stop
が、これらが何を書いているのかイマイチ分からなかったので調べた。
以下のようにして、ログフォーマットやファイル名などをtemplate_nameに代入できる。
$template <template_name>, <templateの中身>
今回、templateの中身として以下を記述している。
これは①で指定したtagを正規表現でパースして指定するファイル名を生成している一文である。
"/var/log/docker/%programname%_%SYSLOGTAG:R,ERE,1,FIELD:docker/(.*)\[--end:secpath-replace%_%$year%%$month%%$day%.log"
これを分解すると、以下の構成となっている。
▽ %programname%
の中には、①で設定したtag: docker/{{.Name}}/{{.ID}}
のdocker
が渡される。
/var/log/docker/%programname%_
▽ ①で設定したtagを正規表現でパースし、{{.Name}}/{{.ID}}
の部分だけを抽出している。
なお、:secpath-replace
によって、{{.Name}}_{{.ID}}
に加工される。
%SYSLOGTAG:R,ERE,1,FIELD:docker/(.*)\[--end:secpath-replace%` :
secpath-replaceの説明は、以下のドキュメントに記載されている。
The Property Replacer — Rsyslog documentation
secpath-replace Replace slashes inside the field by an underscore. (e.g. “a/b” becomes “a_b”). Useful for secure pathname generation (with dynafiles).
%SYSLOGTAG:R,ERE,1,FIELD:
部分は細かいので箇条書きで以下に記載した。