zaki work log

作業ログやら生活ログやらなんやら

rsyslogでリモートからのログ出力を受け付ける設定とloggerコマンドでの確認

The rocket-fast Syslog Server - rsyslog

rsyslogでリモートからのログ出力を受け付ける設定とloggerの簡単な使い方。
図で言うと、右側のrsyslogの設定。
(図の左側に当たる送信側については別記事参照)

(確認用)loggerコマンド

特に指定がなければローカルのsyslogサーバにログが記録される。

基本

$ logger "hello"

出力ログ

Mar 22 18:00:11 manager-dev zaki: hello

オプション

  • -i: pidを付与
  • -t <tag>: tag名を付与
$ logger "hello" -i -t "sample"
Mar 22 18:03:51 manager-dev sample[77216]: hello

出力先の変更

出力先の指定は-pで指定するが、どこへ出力されるかは/etc/rsyslog.confの設定に依る。

例えば

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

という設定があった場合

$ logger "hello" -i -t "sample" -p "cron.err"

の実行で、/var/log/messagesには何も出力されず、/var/log/cronへ以下のログが記録される。

Mar 22 18:10:00 manager-dev sample[77272]: hello

リモートへのログ出力については後述


www.atmarkit.co.jp

UDP設定

以下の設定を追加(コメントアウトされてるはずなので有効にする)してrestartする。

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
# systemctl restart rsyslog
#
# ss -anpu | grep rsyslogd
UNCONN     0      0            *:514                      *:*                   users:(("rsyslogd",pid=77530,fd=3))
UNCONN     0      0         [::]:514                   [::]:*                   users:(("rsyslogd",pid=77530,fd=4))

この状態でlogger-dUDP指定と、-nで宛先サーバを指定して

$ logger "hello" -i -t "sample" -n 192.168.0.20

を実行すると

Mar 22 18:20:06 manager-dev.okd4.naru.jp-z.jp sample[77551]: hello

が記録される。
(なお、デフォルトでUDP動作のため-dは省略可能)

TCP設定

UDPと同じ要領で、以下の設定を有効にすればTCPでもリモートからのログの出力を受け付ける。

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
[root@manager-dev ~]# ss -anpt | grep rsyslogd
LISTEN     0      25           *:514                      *:*                   users:(("rsyslogd",pid=77580,fd=3))
LISTEN     0      25        [::]:514                   [::]:*                   users:(("rsyslogd",pid=77580,fd=4))

この状態でlogger-TTCP指定と、-nで宛先サーバ・-Pでポート番号を指定して

$ logger "hello" -i -t "sample" -T -n 192.168.0.20 -P 514

を実行すると、以下が記録される

Mar 22 18:24:23 manager-dev.okd4.naru.jp-z.jp sample[77609]: hello

UDP設定と違って、-Tは省略不可だった。また、-Pによるポート番号も必要だった(省略時にウェルノウンポートで動作しなかった)

送信元制御について

$AllowedSenderを使って送信元アドレスを限定できる。
ただし、現在は後方互換性のために残っている機能のため、ファイヤウォールで制御するのが望ましいとのこと。

www.rsyslog.com

$AllowedSender

Note: this feature is supported for backward-compatibility, only. The rsyslog team recommends to use proper firewalling instead of this feature.

なお、firewalld使用時にリモートからのSyslog転送を許可するには以下。

sudo firewall-cmd --add-service=syslog --permanent
sudo firewall-cmd --reload

環境

[zaki@manager-dev ~]$ hostname -f
manager-dev
[zaki@manager-dev ~]$ cat /etc/redhat-release 
CentOS Linux release 7.7.1908 (Core)
[zaki@manager-dev ~]$ logger --version
logger from util-linux 2.23.2
[zaki@manager-dev ~]$ rsyslogd -version
rsyslogd 8.24.0-41.el7_7.4, compiled with:
        PLATFORM:                               x86_64-redhat-linux-gnu
        PLATFORM (lsb_release -d):
        FEATURE_REGEXP:                         Yes
        GSSAPI Kerberos 5 support:              Yes
        FEATURE_DEBUG (debug build, slow code): No
        32bit Atomic operations supported:      Yes
        64bit Atomic operations supported:      Yes
        memory allocator:                       system default
        Runtime Instrumentation (slow code):    No
        uuid support:                           Yes
        Number of Bits in RainerScript integers: 64

See http://www.rsyslog.com for more information.