CentOS6にrsyslog7をインストール

Summary

CentOS6 系列にはデフォルトで rsyslog v5 がインストールされる。
この CentOS に rsyslog v7 をインストールし、syslog を TCP 転送する方法をメモ。
後方互換性を維持したまま新しい書式(RainerScript)も採用されているみたいなので、設定も新書式で書いてみる。

Install rsyslog v7

次のページにしたがってインストールする

Installing rsyslog from RPM
http://www.rsyslog.com/installing-rsyslog-from-rpm/

rsyslog のコミュニティが最新バージョンの rpm を提供しているので、これを利用する。

レポジトリ情報を書いたファイルを追加。

# cat /etc/yum.repos.d/rsyslog.repo
[rsyslog-v7-stable]
name=Adiscon Rsyslog v7-stable for CentOS-$releasever-$basearch
baseurl=http://rpms.adiscon.com/v7-stable/epel-$releasever/$basearch
enabled=1
gpgcheck=0
protect=1

提供されているパッケージ一覧は次の ファイルを参照。

http://rpms.adiscon.com/rsyslogall.repo

2013/12/23 現在では以下のパッケージが提供されている。

  • v5-stable
  • v6-stable
  • v7-stable
  • v7-devel
  • v8-devel

パッケージ情報をアップデート

# yum update
Loaded plugins: fastestmirror
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
base                                                     | 3.7 kB     00:00
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  19 kB     00:00
rsyslog-v7-stable                                        | 2.5 kB     00:00
rsyslog-v7-stable/primary_db                             | 103 kB     00:02
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 817 kB     00:01
Setting up Update Process
...

# yum info rsyslog
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
Installed Packages
Name        : rsyslog
Arch        : x86_64
Version     : 7.4.7
Release     : 1.el6
Size        : 2.8 M
Repo        : installed
From repo   : rsyslog-v7-stable
Summary     : Enhanced system logging and kernel message trapping daemon
URL         : http://www.rsyslog.com/
License     : (GPLv3+ and ASL 2.0)
Description : Rsyslog is an enhanced, multi-threaded syslog daemon. It supports MySQL,
            : syslog/TCP, RFC 3195, permitted sender lists, filtering on any message part,
            : and fine grain output format control. It is compatible with stock sysklogd
            : and can be used as a drop-in replacement. Rsyslog is simple to set up, with
            : advanced features suitable for enterprise-class, encryption-protected syslog
            : relay chains.

rsyslog をインストール

# yum instal rsyslog
...
# rsyslogd -v
rsyslogd 7.4.7, 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
        uuid support:                           Yes

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

Server Setting

ログ受信側のサーバで TCP でログ転送を受け付けるように設定ファイル(/etc/rsyslog.conf)を変更する

レガシーフォーマットだと

module(load="imtcp") # needs to be done just once
input(type="imtcp" port="514")

というように書けばポート 514 でログ転送を受け付ける。

新書式では以下のように書く

# /etc/rsyslog.conf

# define log filename
template(name="TransferFilename" type="string" string="/var/log/rsyslog/%fromhost%/syslog.log")

# Import imtcp module
module(load="imtcp"
       keepalive="on"
       MaxSessions="200"
       MaxListeners="20"
       NotifyOnConnectionClose="on")

# Provides TCP syslog reception on port 514
input(type="imtcp"
      port="514")

# TCP でログ転送されたものは TransferFilename で指定したパスにログ出力
# 出力先を "-" で始めているので、バッファリングされる
# & stop とすると、TCP 転送されたログが
# ここより下で設定されている通常の syslog に混ざらなくなる
if $inputname == "imtcp" then -?TransferFilename
& stop

# ... ここから下に通常の syslog 設定

TCP 転送されたログは送信元ごとに %fromhost% でディレクトリを切ってログ出力させ、ローカルマシンの syslog と出力が混ざらないようにする。

細かい設定は次のページを参照

http://www.rsyslog.com/doc/imtcp.html

Reload Configuration

設定ファイルのシンタックスチェック

設定を有効にする前に $ rsyslogd -N1で設定ファイルのシンタックスチェックをする。

# rsyslogd -f /etc/rsyslog.conf -N 1
rsyslogd: version 7.4.7, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: End of config validation run. Bye.

設定ファイルを -f オプションで指定しなければ /etc/rsyslog.conf が利用される。

上の設定の

if $inputname == "imtcp" then -?TransferFilename
& stop

の箇所で stop を旧書式の ~ に変更すると

if $inputname == "imtcp" then -?TransferFilename
& ~

次のような deprecated warning が表示される。

# rsyslogd -f /etc/rsyslog.conf -N 1
rsyslogd: version 7.4.7, config validation run (level 1), master config /etc/rsyslog.conf
rsyslogd: warning: ~ action is deprecated, consider using the 'stop' statement instead [try http://www.rsyslog.com/e/2307 ]
rsyslogd: End of config validation run. Bye.

設定のリロード

最近の rsyslog は HUP を送信しても設定ファイルのリロードをしてくれないので、 rsyslogd デーモンをリスタートして設定を再読込させる。
TCP の 514 番ポートが LISTEN なことを確認

# service rsyslog restart
Shutting down system logger:                               [  OK  ]
Starting system logger:                                    [  OK  ]
# netstat -tl --numeric-ports
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State
tcp        0      0 *:80                        *:*                         LISTEN
tcp        0      0 *:22                        *:*                         LISTEN
tcp        0      0 localhost:25                *:*                         LISTEN
tcp        0      0 *:514                       *:*                         LISTEN
tcp        0      0 *:22                        *:*                         LISTEN
tcp        0      0 localhost:25                *:*                         LISTEN
tcp        0      0 *:514                       *:*                         LISTEN

一般に TCP の 514 ポートは remote shell (rsh) 用途で定義されている

$ grep ' 514/' /etc/services
shell           514/tcp         cmd             # no passwords used
syslog          514/udp

netstat の出力でポート番号を数字で出力しなかった場合 shell と出力される。

Client Setting

ログサーバ(192.168.0.1)に syslog を TCP で転送する。
転送先ログサーバが応答しなかった場合は、ローカルディスクにスプール(disk queue)するように設定する。

レガシーフォーマットだと

$WorkDirectory /var/lib/rsyslog # where to place spool files
$ActionQueueFileName fwdRule1 # unique name prefix for spool files
$ActionQueueMaxDiskSpace 1g   # 1gb space limit (use as much as possible)
$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
$ActionQueueType LinkedList   # run asynchronously
$ActionResumeRetryCount -1    # infinite retries if host is down
*.* @@192.168.0.1:514

というように書く。@ がひとつだけだと UDP 転送。

新書式では以下のように書く

$WorkDirectory /var/lib/rsyslog
*.* action(type="omfwd"
           protocol="tcp"
           target="cent64a"
           port="514"
           queue.FileName="fwdRule1"
           queue.MaxDiskSpace="1g"
           queue.SaveOnShutdown="on"
           queue.size="1000"
           queue.Type="LinkedList"
           action.resumeretrycount="-1"
           )

グローバル変数をベチャッと並べる代わりに、どのアクションに対してどのように定義しているのか明快。

転送先ログサーバで rsyslog プロセスを停止して、ログをたくさん出力してみると、、、

# ls -l /var/lib/rsyslog/
total 7696
-rw-------. 1 root root 1048882 Dec 24 03:21 fwdRule1.00000001
-rw-------. 1 root root 1048924 Dec 24 03:21 fwdRule1.00000002
-rw-------. 1 root root 1048944 Dec 24 03:21 fwdRule1.00000003
-rw-------. 1 root root 1048950 Dec 24 03:21 fwdRule1.00000004
-rw-------. 1 root root 1048880 Dec 24 03:21 fwdRule1.00000005
-rw-------. 1 root root 1048938 Dec 24 03:22 fwdRule1.00000006
-rw-------. 1 root root 1048728 Dec 24 03:22 fwdRule1.00000007
-rw-------. 1 root root  510460 Dec 24 03:22 fwdRule1.00000008
# tail -n 20 /var/lib/rsyslog/fwdRule1.00000008
+pszRcvFromIP:1:9:127.0.0.1:
+offMSG:2:2:25:
>End
.
<Obj:1:msg:1:
+iProtocolVersion:2:1:0:
+iSeverity:2:1:5:
+iFacility:2:1:1:
+msgFlags:2:1:4:
+ttGenTime:2:10:1387822923:
+tRcvdAt:3:34:2:2013:12:24:3:22:3:550422:6:+:9:0:
+tTIMESTAMP:3:34:2:2013:12:24:3:22:3:550422:6:+:9:0:
+pszTAG:1:5:root::
+pszRawMsg:1:27:Dec 24 03:22:03 root: 1:
+pszInputName:1:8:imuxsock:
+pszRcvFrom:1:7:cent64b:
+pszRcvFromIP:1:9:127.0.0.1:
+offMSG:2:2:25:
>End
.

というようにスプールされている。

disk queue 以外にも in-memory(default), direct queue などが選択可能。キューの詳細は次の URL を参照

http://www.rsyslog.com/doc/queues.html

Sample Logging

実際に syslog 出力してみる

client server

$ logger test logging

logging server

$ tail -f  /var/log/rsyslog/cent64b/syslog.log
2013-12-24T03:38:09+09:00 cent64b root: test logging

ということで無事ログ転送された。

References

Tagged with: ,
Posted in middleware

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Archives
  • RT @__apf__: How to write a research paper: a guide for software engineers & practitioners. docs.google.com/presentation/d… /cc @inwyrd 1 week ago
  • RT @HayatoChiba: 昔、自然と対話しながら数学に打ち込んだら何かを悟れるのではと思いたち、専門書1つだけ持ってパワースポットで名高い奈良の山奥に1週間籠ったことがある。しかし泊まった民宿にドカベンが全巻揃っていたため、水島新司と対話しただけで1週間過ぎた。 それ… 3 weeks ago
  • RT @googlecloud: Ever wonder what underwater fiber optic internet cables look like? Look no further than this deep dive w/ @NatAndLo: https… 3 weeks ago
  • @ijin UTC+01:00 な時間帯で生活しています、、、 6 months ago
  • RT @mattcutts: Google's world-class Site Reliability Engineering team wrote a new book: amazon.com/Site-Reliabili… It's about managing produc… 9 months ago
%d bloggers like this: