LoginSignup
44
47

More than 5 years have passed since last update.

syslog(rsyslog)について動かしながら勉強してみた

Posted at

syslog(rsyslog)についてあまり良く分かってなかったので動かしながら挙動を確認したときのメモ。

環境

  • Amazon Linux AMI 2016.03.0 (HVM)

確認する

どのsyslogデーモンプロセスが動いているか確認

$ps aux|grep syslog|grep -v grep
root      2107  0.0  0.2 247468  2608 ?        Sl   Apr19   0:00 /sbin/rsyslogd -i /var/run/syslogd.pid -c 5

rsyslogのプロセスが動いていました。

バージョンは以下

$rsyslogd -v
rsyslogd 5.8.10, compiled with:
    FEATURE_REGEXP:             Yes
    FEATURE_LARGEFILE:          No
    GSSAPI Kerberos 5 support:      Yes
    FEATURE_DEBUG (debug build, slow code): No
    32bit Atomic operations supported:  Yes
    64bit Atomic operations supported:  Yes
    Runtime Instrumentation (slow code):    No

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

自動起動の設定もされていました。

$ll /etc/rc.d/rc3.d/ |grep syslog
lrwxrwxrwx 1 root root 17  3月 16 23:03 S12rsyslog -> ../init.d/rsyslog

また、設定ファイルは以下のようになっていました。
(必要部分のみ抜粋)

/etc/rsyslog.conf
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat

# 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                                                 *

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

$IncludeConfig /etc/rsyslog.d/*.conf
  • 最初の行でログのフォーマットを指定(RSYSLOG_TraditionalFileFormat)
  • 以降の行からどのファシリティ、プライオリティの場合にどのログファイルに出力するかを記載
  • 最終行で/etc/rsyslog.d/*.conf配下の設定ファイルを読み込むように記載

ファシリティ、プライオリティはloggerコマンドでログメッセージを送る際に-pオプションで指定できます。以下に例を記載します。

# cronファシリティのinfoプライオリティ
$logger -p cron.info hogefuga

# mailファシリティのalertプライオリティ
$logger -p mail.alert poyo

なおEC2ではcloud-init用の設定がありました。

/etc/rsyslog.d/21-cloudinit.conf
# Log cloudinit generated log messages to file
:syslogtag, startswith, "[CLOUDINIT]" /var/log/cloud-init.log

# comment out the following line to allow CLOUDINIT messages through.
# Doing so means you'll also get CLOUDINIT messages in /var/log/syslog
& ~

RSYSLOG_TraditionalFileFormatのフォーマットは以下のようになっております。

"%TIMESTAMP% %HOSTNAME% %syslogtag%%msg:::sp-if-no-1st-sp%%msg:::drop-last-lf%\n\"

LOGフィルタリングによる振り分け

上記を見るとsyslogtagの部分が[CLOUDINIT]となっているものについては/var/log/cloud-init.logに記載しろというような命令のようです。
こちらは後で確認します。

loggerコマンドを使ってみる

syslogにログ情報を渡すためにloggerコマンドを使って確認してみます。

最初に単純にメッセージのみ送ってみます。

$logger default-log

# /var/log/message
Apr 23 07:51:21 ip-172-31-27-76 ec2-user: default-log

/var/log/messageに出力されました。
man loggerを見るとファシリティ、プライオリティを何も指定しないとuserファシリティ、noticeプライオリティになると書いてあったので設定ファイルの条件により/var/log/messageに記載されたと思われます。

次に別のファイルに書き込むように設定してみます。

$logger -p mail.info mail log death

# /var/log/maillog
Apr 23 08:34:13 ip-172-31-27-76 ec2-user: mail log death

設定ファイルの通り、mailファシリティなので/var/log/maillogに出力されました。

また、先ほど確認したcloud-initについても確認してみます。
-tオプションを指定してタグを[CLOUDINIT]と記載し、ログがどのように出力されるか確認します。

# タグで[CLOUDINIT]を指定
$logger -t [CLOUDINIT] hoge

上記によって以下の2ファイルへの書き込みが確認できました。

Apr 23 12:34:21 ip-172-31-27-76 [CLOUDINIT]: hoge
/var/log/cloud-init.log
$Apr 23 12:34:21 ip-172-31-27-76 [CLOUDINIT]: hoge

シェルスクリプトで使う

以下のようにすれば良い感じにsyslog経由で/var/log/messageに出力することが出来ます。

exampleLog.sh
#!/bin/bash

readonly FULL_PATH=`pwd`/`basename $0`

infolog() {
  msg=$1
  logger -t $FULL_PATH $msg
}

infolog 'start'
infolog 'end'
Apr 23 12:19:51 ip-172-31-27-76 /home/ec2-user/exampleLog.sh: start
Apr 23 12:19:51 ip-172-31-27-76 /home/ec2-user/exampleLog.sh: end

また、syslogの設定ファイルにルールを追記し、対象のファシリティなどの追記を行えば、別ファイルへの書き込みなども出来ます。

44
47
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
44
47