rsyslog(/etc/rsyslog.conf)のデフォルト内容読解(Cent8.3)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/201787/0798a8ef-9283-f3aa-bca3-4601e84fa03a.png)
rsyslogの/etc/rsyslog.confのデフォルト状態について読み解いてみました。
公式URL等なども併せて載せていますので原文が気になる方はそちらも確認ください。

■環境
CentOS Linux release 8.3.2011
rsyslog-8.1911.0-6.el8.x86_64

<br>

コンフィグのパートに沿って以下分類で読み解いていきます。
①MODULES
②GLOBAL DIRECTIVES
③RULES
④begin forwarding rule

<details><summary>/etc/rsyslog.conf全体（折り畳み）</summary>

```sh:/etc/rsyslog.conf
# rsyslog configuration file

# For more information see /usr/share/doc/rsyslog-*/rsyslog_conf.html
# or latest version online at http://www.rsyslog.com/doc/rsyslog_conf.html
# If you experience problems, see http://www.rsyslog.com/doc/troubleshoot.html

#### MODULES ####

module(load="imuxsock"    # provides support for local system logging (e.g. via logger command)
       SysSock.Use="off") # Turn off message reception via local log socket;
                          # local messages are retrieved through imjournal now.
module(load="imjournal"             # provides access to the systemd journal
       StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")

#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")

# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")

# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")

#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log


# ### sample forwarding rule ###
#action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1"       # unique name prefix for spool files
#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on"       # save messages to disk on shutdown
#queue.type="LinkedList"         # run asynchronously
#action.resumeRetryCount="-1"    # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")
```
</details>


# ①MODULES
このパートはロードするモジュールを記述しています。
（なお、記載外でもロードされるデフォルトモジュールもあります）

```sh:/etc/rsyslog.conf(MODULES)
#### MODULES ####

module(load="imuxsock"    # provides support for local system logging (e.g. via logger command)
       SysSock.Use="off") # Turn off message reception via local log socket;
                          # local messages are retrieved through imjournal now.
module(load="imjournal"             # provides access to the systemd journal
       StateFile="imjournal.state") # File to store the position in the journal
#module(load="imklog") # reads kernel messages (the same are read from journald)
#module(load="immark") # provides --MARK-- message capability

# Provides UDP syslog reception
# for parameters see http://www.rsyslog.com/doc/imudp.html
#module(load="imudp") # needs to be done just once
#input(type="imudp" port="514")

# Provides TCP syslog reception
# for parameters see http://www.rsyslog.com/doc/imtcp.html
#module(load="imtcp") # needs to be done just once
#input(type="imtcp" port="514")
```


**`module(load="imuxsock" SysSock.Use="off")  `**
`
rsyslogのInputModule。旧来のunix socket file経由(systemd)のログ受信を有効にする。
また`SysSock.Use`はデフォルト(off)の場合、旧来のunix socket file経由(systemd)のログ受信を停止する。onにすると受信するが、ModLoad imjournalなどを停止しないとログ内容を二重受信する。

**`module(load="imjournal" StateFile="imjournal.state") `**
`
rsyslogのInputModule。現行のjournald経由のログ受信を有効にする。
また`StateFile`はJournalに関する永続ファイルの場所指定。

**`#module(load="imklog")`**
rsyslogのInputModule。ファシリティkernを受信するがコメントアウトされ無効となっている。journal(imjournal)で受け取っているため無効推奨。

**`#module(load="immark")`**
rsyslogのInputModule。rsyslogが動作していることを示す`rsyslogd:-- MARK --`を20分おきに発報する(/var/log/messages)。運用時は結構邪魔なので無効推奨。

https://www.rsyslog.com/doc/v8-stable/configuration/modules/imuxsock.html
https://www.rsyslog.com/doc/master/configuration/modules/imjournal.html
https://www.rsyslog.com/doc/v8-stable/configuration/modules/imklog.html
https://www.rsyslog.com/doc/master/configuration/modules/immark.html
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/7/html/system_administrators_guide/s1-structured_logging_with_rsyslog

<br>
<br>

**`#module(load="imudp")`**
UDP経由でのログを受け取る。デフォルトはコメントアウトで無効化されている。

**`#input(type="imudp" port="514")`**
UDP経由でのログを受け取る際のポート番号を指定する。デフォルトはコメントアウトで無効化されている。有効にする場合は上記の`#module(load="imudp")`も有効にすること。


**`#module(load="imtcp")`**
TCP経由でのログを受け取る。デフォルトはコメントアウトで無効化されている。

**`#input(type="imtcp" port="514")`**
TCP経由でのログを受け取る際のポート番号を指定する。デフォルトはコメントアウトで無効化されている。有効にする場合は上記の`#$ModLoad imtcp`も有効にすること。
なお、`$TCPServerAddress`は無い模様。

https://www.rsyslog.com/doc/v8-stable/configuration/modules/imudp.html
https://www.rsyslog.com/doc/v8-stable/configuration/modules/imtcp.html



<br>
<br>

# ②GLOBAL DIRECTIVES
このパートは名前の通り、全体に関わる制御内容を記述しています。

```sh:/etc/rsyslog.conf(GLOBAL DIRECTIVES)
#### GLOBAL DIRECTIVES ####

# Where to place auxiliary files
global(workDirectory="/var/lib/rsyslog")

# Use default timestamp format
module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")

# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
```


**`global(workDirectory="/var/lib/rsyslog")`**
ワークディレクトリの指定。キューなどもこのディレクトリに保存される。

<br>

**`module(load="builtin:omfile" Template="RSYSLOG_TraditionalFileFormat")`**
Output Moduleの`builtin:omfile`をロードする。
また`Template`にてログのタイムスタンプ形式を変更する。
>"RSYSLOG_TraditionalFileFormat"　→ "OCT 10 09:01:01"
"RSYSLOG_FileFormat"　　　　　　→ "2018-10-10T10:37:53.063083+09:00"

<br>

**`include(file="/etc/rsyslog.d/*.conf" mode="optional")`**
個別設定ファイルの読み取り先を指定。ファイル名はワイルドカード(*)となっており複数ファイルを読み込む。
また`mode`については以下を選択可能。
>`abort-if-missing`：ファイルが存在しない場合に rsyslog が中止される
`required`rsyslog はエラー メッセージを発行しますが、ファイルが存在しない場合は続行します。
`optional`存在しないファイルは通知なしにスキップされます




https://www.rsyslog.com/doc/master/rainerscript/global.html
https://www.rsyslog.com/doc/v8-stable/configuration/modules/omfile.html
https://www.rsyslog.com/doc/v8-stable/configuration/templates.html
https://www.rsyslog.com/doc/master/rainerscript/include.html






<br>
<br>

# ③RULES
（この部分はいろんなサイトで説明があるのであっさりにします）

```sh:/etc/rsyslog.conf(RULES)
#### RULES ####

# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.*                                                 /dev/console

# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none                /var/log/messages

# The authpriv file has restricted access.
authpriv.*                                              /var/log/secure

# Log all the mail messages in one place.
mail.*                                                  -/var/log/maillog


# Log cron stuff
cron.*                                                  /var/log/cron

# Everybody gets emergency messages
*.emerg                                                 :omusrmsg:*

# Save news errors of level crit and higher in a special file.
uucp,news.crit                                          /var/log/spooler

# Save boot messages also to boot.log
local7.*                                                /var/log/boot.log
```

このパートは以下のフォーマットに従って指定されたログファイルにログを書き込む記述をしています。
（なお、Serverrityは**それ以上のレベル全てが対象**となります）
**`<Facility>.<Severity>  <LogFile>`**

ワイルドカードが指定可能なので、`authpriv.*`はFacility:authpriv.*かつ全てのServerityを/var/log/secureに書き込み、`*.emerg`は全てのFacilityかつServerity:emerg以上をomusrmsg:*に書き込んだりすることになります。

ログファイルの冒頭に`-`を付記すると非同期書き込みモードになります。逆に何もないと同期書き込みモードになります。

また`:omusrmsg:*`はOutput Module User Messageとしてユーザコンソールに表示を吐き出します。

https://www.infraexpert.com/study/syslog1.html
https://milestone-of-se.nesuke.com/l7protocol/syslog/rsyslog-summary/
https://www.server-world.info/query?os=CentOS_Stream_8&p=rsyslog



<br>
<br>

# ④begin forwarding rule
このパートは別のサーバにログを転送する際の設定を記述しています。

```sh:/etc/rsyslog.conf(begin forwarding rule)
# ### sample forwarding rule ###
#action(type="omfwd"
# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#queue.filename="fwdRule1"       # unique name prefix for spool files
#queue.maxdiskspace="1g"         # 1gb space limit (use as much as possible)
#queue.saveonshutdown="on"       # save messages to disk on shutdown
#queue.type="LinkedList"         # run asynchronously
#action.resumeRetryCount="-1"    # infinite retries if host is down
# Remote Logging (we use TCP for reliable delivery)
# remote_host is: name/ip, e.g. 192.168.0.1, port optional e.g. 10514
#Target="remote_host" Port="XXX" Protocol="tcp")
```
**`#action(type="omfwd"`**
別サーバにログを転送する際は、Output Module Forwardを有効にするため、
コメントアウトを外し `action(type="omfwd"` とします。
（閉じ括弧は最終行に記載）

**`#queue.filename="fwdRule1"`**
【TCP転送時】転送先サーバが停止している場合のキューファイル名。ディレクトリは$WorkDirectoryを使用する。デフォルトはコメントアウトで無効。

**`#queue.maxdiskspace="1g"`**
【TCP転送時】転送先サーバが停止している場合のキューファイルサイズ。デフォルトはコメントアウトで無効。

**`#queue.saveonshutdown="on"`**
【TCP転送時】転送先サーバが停止している場合のキューファイルをシャットダウンに保存する。デフォルトはコメントアウトで無効。

**`#queue.type="LinkedList"`**
【TCP転送時】転送先サーバが停止している場合のキュータイプを選択する。デフォルトはコメントアウトで無効。

**`#action.resumeRetryCount="-1"`**
【TCP転送時】転送先サーバが停止している場合のリトライ。0でリトライ、-1で無効。デフォルトはコメントアウトで無効。

https://www.rsyslog.com/doc/master/rainerscript/queue_parameters.html
https://www.rsyslog.com/doc/master/concepts/queues.html
https://l-w-i.net/t/rsyslog/conf_001.txt


<br>
<br>

**`#Target="remote_host" Port="XXX" Protocol="tcp")`**
ログをrsyslogで転送するサーバとプロトコルを指定します。デフォルトではコメントアウトで無効。

:::note warn
`action(type="omfwd"`句の閉じ括弧を忘れないようにしてください。
:::

<br>
<br>
なお、特定のログ指定に対して転送する場合は、RULEと混ぜて利用するようです。

```sh:cronを転送
# Log cron stuff
cron.*                                                  /var/log/cron
cron.*          action(type="omfwd"
                    queue.filename="fwdRule1"  
                    queue.maxdiskspace="1g"   
                    queue.saveonshutdown="on" 
                    queue.type="LinkedList"   
                    action.resumeRetryCount="-1" 
                    Target="192.168.0.1" Port="514" Protocol="tcp")
```


https://www.rsyslog.com/sending-messages-to-a-remote-syslog-server/
https://www.server-world.info/query?os=CentOS_8&p=rsyslog&f=2



<br>
<br>


# 後記
Cent7/8で記述方法が変わっているので、こちらの方で慣れた方が良いかもしれませんね。