VMware Photon Linux は、Journald でログ管理されていますが、
デフォルトでは、syslog や rsyslog がインストールされていません。
そこで、システムログの保全のため logger コマンドで Syslog サーバに転送してみました。
今回の環境
- Photon Linux: VMware Photon Linux 1.0 TP1
- Syslog Server: Oracle Linux 6.6 + rsyslog
1. Syslog サーバの準備。
まずは、Syslog サーバ側です。
[root@log01 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.6
[root@log01 ~]# rpm -q rsyslog
rsyslog-5.8.10-8.0.1.el6.x86_64
rsyslog の設定ファイルを編集して、UDP 514番ポートでログ転送を受け付けるようにします。
/etc/rsyslog.conf ファイルの、「$ModLoad imudp」 と 「$UDPServerRun 514」 のコメントアウト(#)を外しています。
そして、rsyslog を再起動します。
[root@log01 ~]# cp -p /etc/rsyslog.conf rsyslog.conf_bk
[root@log01 ~]# vi /etc/rsyslog.conf
[root@log01 ~]# diff rsyslog.conf_bk /etc/rsyslog.conf
13,14c13,14
< #$ModLoad imudp
< #$UDPServerRun 514
---
> $ModLoad imudp
> $UDPServerRun 514
[root@log01 ~]# service rsyslog restart
システムロガーを停止中: [ OK ]
システムロガーを起動中: [ OK ]
Syslog サーバの、OS のファイアウォール(iptables)でも、
UDP 514番ポートのログ転送を受け付けるようにします。
[root@log01 ~]# vi /etc/sysconfig/iptables
/etc/sysconfig/iptables の内容は、下記のようにしました。
※1行だけ追記しています。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p udp --dport 514 -j ACCEPT ★追記
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
そして iptables も再起動します。
[root@log01 ~]# service rsyslog restart
システムロガーを停止中: [ OK ]
システムロガーを起動中: [ OK ]
2. Photon Linux からのログ転送。
今回の Photon です。
logger コマンドは、デフォルトでインストールされる、util-linux の RPM に含まれるものを使用します。
root [ ~ ]# cat /etc/photon-release
VMware Photon Linux 1.0 TP1
root [ ~ ]# which logger
/usr/bin/logger
root [ ~ ]# rpm -qf /usr/bin/logger
util-linux-2.24.1-1.x86_64
Photon Linux から、テストログを転送してみます。
今回の Syslog サーバの IP アドレスは、「192.168.5.237」 にしてあります。
下記のように、logger コマンドを実行すると・・・
root [ ~ ]# logger --udp --port 514 --server 192.168.5.237 "test log"
Syslog サーバに転送され、/var/log/messages ファイルにログが出力されます。
「192.168.1.31」 は、Photon の IP アドレスです。
[root@log01 ~]# tail -1 /var/log/messages
Jul 31 08:38:09 192.168.1.31 root: test log
Photon のシステムログ(Journald のログ)は、下記のように転送できます。
root [ ~ ]# journalctl -f -n 1 | logger --udp --port 514 --server 192.168.5.237
Syslog サーバの /var/log/messages
Jul 31 08:38:22 192.168.1.31 root: -- Logs begin at Wed 2015-07-29 23:35:36 JST. --
Jul 31 08:38:22 192.168.1.31 root: Jul 31 08:37:40 photon01 vmafdd[316]: t@139706123613952: VmAfSrvGetDomainName succeeded
Jul 31 08:38:40 192.168.1.31 root: Jul 31 08:38:40 photon01 vmafdd[316]: t@139706123613952: VmAfSrvGetDomainName succeeded
・・・
3. Photon Linux からのログ転送を自動開始する。
Photon の Systemd で、OS 起動時にログ転送が自動開始されるようにしてみます。
まず Photon Linux に、システムログを転送するスクリプトを作成しておきます。
root [ ~ ]# vi /etc/systemd/scripts/logger.sh
root [ ~ ]# chmod +x /etc/systemd/scripts/logger.sh
root [ ~ ]# ls -l /etc/systemd/scripts/logger.sh
-rwxr-xr-x 1 root root 224 Jul 31 07:03 /etc/systemd/scripts/logger.sh
スクリプトの内容は下記のようにしてみました。
/etc/systemd/scripts/logger.sh
#!/bin/sh
LOG_SERVER=$1
PORT=514
LOGGER_TAG=PHOTON_LOGGER
logger --udp --port $PORT --server $LOG_SERVER -t $LOGGER_TAG "start_logger_script"
journalctl -f -n 1 | logger --udp --port $PORT --server $LOG_SERVER -t $LOGGER_TAG
Systemd の Unit ファイルも作成しておきます。
作成したスクリプトは、この Unit ファイル内で指定しています。
※スクリプトの引数にある「log01.godc.lab」は、今回の Syslog サーバのアドレスです。
/etc/systemd/system/logger-journald.service
[Unit]
Description=Journald Logger
ConditionFileIsExecutable=/etc/systemd/scripts/logger.sh
After=network-online.target
[Service]
ExecStart=/etc/systemd/scripts/logger.sh log01.godc.lab
[Install]
WantedBy=multi-user.target
Systemd に logger-journald.service という名前でログ転送のサービスを登録して、起動します。
これで、Photon Linux の起動に合わせて、ログ転送されるようになります。
root [ ~ ]# systemctl enable logger-journald.service
Created symlink from /etc/systemd/system/multi-user.target.wants/logger-journald.service to /etc/systemd/system/logger-journald.service.
root [ ~ ]# systemctl start logger-journald.service
Syslog サーバには Jouranald のログが転送されて、
/var/log/messages ファイルには、以下のようなログが出力されます。
※下記の例だと Lightwave っぽいログかもしれませんが・・・
Jul 31 08:39:22 192.168.1.31 PHOTON_LOGGER: start_logger_script
Jul 31 08:39:22 192.168.1.31 PHOTON_LOGGER: -- Logs begin at Wed 2015-07-29 23:35:36 JST. --
Jul 31 08:39:22 192.168.1.31 PHOTON_LOGGER: Jul 31 08:39:22 photon01 systemd[1]: Started Journald Logger.
Jul 31 08:39:40 192.168.1.31 PHOTON_LOGGER: Jul 31 08:39:40 photon01 vmafdd[316]: t@139706123613952: VmAfSrvGetDomainName succeeded
・・・
以上、Photon のシステムログを Syslog サーバに転送してみる話でした。