#author("2019-05-10T23:24:06+09:00","default:nowsky","nowsky")
* logger-exec [#z9e332ec]
#block
apache・audit・PowerDNSなどはログをsyslog転送して、
中央管理を行いたいケースが多々ありますが、
syslogに直接出力するには細工が必要となり、
アプリのメンテナンス性が低下してしまいます。
 
この問題に対応する為、ローカルのテキストログを
リアルタイム取得しながらsyslogに変換し、
rsyslog・syslog-ngを経由させる事で、
ログのリモート転送を行うスクリプトを作成したので公開します。
#block(next)
#ref(Network/Script/logger/logger_01.png,40%,left,nowrap)
#block(end)
~
* 参考サイト [#zbac4450]
- [[ログメッセージをSyslogサーバーに転送したい:+https://ja.stackoverflow.com/questions/22809/%E3%83%AD%E3%82%B0%E3%83%A1%E3%83%83%E3%82%BB%E3%83%BC%E3%82%B8%E3%82%92syslog%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%AB%E8%BB%A2%E9%80%81%E3%81%97%E3%81%9F%E3%81%84]]
- [[loggerコマンドでsyslogにエラーを出力する方法:+http://kaworu.jpn.org/kaworu/2008-05-27-1.php]]
~
*注意事項 [#r1217fe5]
+ ファイル利用による損益について、&color(#ff0000){一切の責任を負いません。};
+ 状況に応じて、インストーラ・スクリプトの公開を停止する場合があります。
+ ライセンスについて、筆者が作成したスクリプトは好きに改変して問題ありませんが、
&color(#ff0000){外部ライブラリのライセンスについてはライブラリ配布元に帰属とします。};
+ 宣伝してくれる心優しい方は、是非[[トップページ:+https://www.ns-lab.org/]]へリンクをお願いします。
~
* スクリプト [#u89aa2e8]
|LEFT:80|CENTER:100|LEFT:100|LEFT:200|c
|CENTER:~公開日|~FILE|RIGHT:~SIZE|CENTER:~MD5|CENTER:~更新内容|
|2019/05/10|[[logger_20190510.tar.gz:https://www.ns-lab.org/files/logger/logger_20190510.tar.gz]]|2.9KB|c07f49574cdbecd8b0d1197e5ab98f3a|初公開|
~
* インストール [#l17d6314]
CentOS/Debian/openSUSE用のインストーラを同梱していますので、
下記コマンドの通りスクリプトを実行してインストールしてから使って下さい。
 # wget "https://www.ns-lab.org/files/logger/logger_latest.tar.gz"
 # tar zxvf logger_latest.tar.gz
 # cd logger
 # ./install.sh
 
手動インストールを行う場合、下記を参考に各ファイルをコピーしつつ、
実行ファイル・コンフィグのパーミッションを適切に設定して下さい
 # cp logger/environment/logger.sysconfig /etc/sysconfig/logger
 # chown root.root /etc/sysconfig/logger
 # chmod 644 /etc/sysconfig/logger
 
 # cp logger/init.d/logger.centos /etc/init.d/logger
 # chown root.root /etc/init.d/logger
 # chmod 755 /etc/init.d/logger
 
 # cp logger/logger-exec /usr/local/sbin/
 # chown root.root /usr/local/sbin/logger-exec
 # chmod 755 /usr/local/sbin/logger-exec
 
 # mkdir -p /etc/logger
 # cp logger/logger.conf /etc/logger/
 # chown root.root /etc/logger/logger.conf
 # chmod 644 /etc/logger/logger.conf
 
 # chkconfig --add logger
 # chkconfig logger on
 # systemctl daemon-reload
~
* 設定ファイル [#n967b95f]
スクリプトを実行するには、下記2ファイルの設定が必要となります。
環境変数についてはデフォルト状態で動作しますが、
スクリプトのログ読込み設定については環境に合わせて再設定して下さい。
#region(&color(#ff0000){/etc/sysconfig/logger};)
 # スクリプトの設定ファイルPATH
 CONFIG="/etc/logger/logger.conf"
 
 # スクリプトのプロセスIDを格納するファイル
 # 設定を変更した場合、起動スクリプト内の設定も変更
 PID="/var/run/logger.pid"
 
 # スクリプトの実行オプション
 # 汎用性を持たせる為に用いている為、実際には初期設定から変更しない
 OPTIONS="-c $CONFIG -p $PID"
#endregion
#region(&color(#ff0000){/etc/logger/logger.conf};)
 # ログ読込み設定はカンマ区切りで各パラメータを設定
 # 初期状態では、auditログをlocal0に転送する設定例を記載済
 
 # 1個目:リアルタイムで取得するテキストログ
 # 2個目:変換後のsyslogファシリティ
 # 3個目:変換後のsyslogプライオリティ
 # 4個目:変換後の送信元プログラム名(syslogタグ)を変更する
 #        未設定の場合、スクリプト実行ユーザ名(root)になる
 
 /var/log/audit/audit.log,local0,info,audit
#endregion
 
取得したログをリモートサーバにsyslog転送するには、rsyslog・syslog-ngの設定変更も必要になります。
local1の全ログをIPアドレス10.0.0.1、
local2の全ログをIPアドレス10.0.0.2に転送する場合、rsyslogには下記の様な設定を追加して下さい。
#region(&color(#ff0000){/etc/rsyslog.conf};)
 # RemoteServer01
 local1.*    @10.0.0.1
 & ~
 
 # RemoteServer02
 local2.*    @10.0.0.2
 & ~
#endregion
~
* 実行コマンド [#x6171017]
スクリプトの全設定を行った後、initスクリプトを実行するとloggerが起動します。
起動オプション・停止コマンドは下記の通りとなっています。
- スクリプト起動
 /etc/init.d/logger start

- スクリプト停止
 /etc/init.d/logger stop

- スクリプト再起動
 /etc/init.d/logger restart

 
スクリプトが正常に起動しつつ、rsyslog・syslog-ngのリモート転送も設定している場合、
ログ転送先(図のサーバB)では下記の様なログを取得する事が出来ます。
ログが転送されて来ない場合、何処かの設定が失敗しているので設定・パーミッションを見直して下さい。
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:415): pid=*** uid=0 ...
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:416): pid=*** uid=0 ...
 May 10 00:15:00 server audit: type=CRYPTO_KEY_USER msg=audit(1557414900.XXX:417): pid=*** uid=0 ...