フリーソフトウェアのコンパイル

syslog-ng の導入

ソース

http://www.balabit.com/ より以下のものを GET.

プラットフォーム

CentOS 5 on VMWare Server

eventlog のインストール

# cp eventlog-0.2.7.tar.gz /usr/src/redhat/SOURCES/eventlog_0.2.7.tar.gz
# tar xvzf eventlog-0.2.7.tar.gz
# cp eventlog-0.2.7/eventlog.spec.bb /usr/src/redhat/SPECS
# cd /usr/src/redhat/SPECS
# rpmbuild -bb eventlog.spec.bb
# cd /usr/src/redhat/RPMS/i386
# rpm -ivh libevtlog-dev-0.2.7-1.i386.rpm libevtlog0-0.2.7-1.i386.rpm

syslog-ng のインストール

# cp syslog-ng-2.0.8.tar.gz /usr/src/redhat/SOURCES/syslog-ng_2.0.8.tar.gz
# tar xvzf syslog-ng-2.0.8.tar.gz
# cp cp syslog-ng-2.0.8/syslog-ng.spec.bb /usr/src/redhat/SPECS
# cd /usr/src/redhat/SPECS
# rpmbuild -bb syslog-ng.spec.bb
# cd /usr/src/redhat/RPMS/i386
# rpm -ivh syslog-ng-2.0.8-1.i386.rpm

MySQL インストール

# yum install mysql mysql-server
# chkconfig mysqld on
# /etc/init.d/mysqld start

root のパスワードつけ

# /usr/bin/mysqladmin -u root password 'new-password'
# /usr/bin/mysqladmin -u root@centos.example.co.jp password 'new-password'

DB 作成

# mysqladmin -p create syslogng

テーブル作成

# mysql -p syslogng
mysql> CREATE TABLE `logs` (
   -> `host` varchar(32) default NULL,
   -> `facility` varchar(10) default NULL,
   -> `priority` varchar(10) default NULL,
   -> `level` varchar(10) default NULL,
   -> `tag` varchar(10) default NULL,
   -> `date_time`  datetime NOT NULL,
   -> `program`  varchar(32) default NULL,
   -> `msg` text,
   -> `seq`  int(10) unsigned NOT NULL auto_increment,
   -> PRIMARY KEY (`seq`),
   ->  KEY `host` (`host`),
   -> KEY `seq` (`seq`),
   ->  KEY `program` (`program`),
   -> KEY `priority` (`priority`),
   -> KEY `facility` (`facility`)
   -> );

ユーザ作成と権限の設定

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON syslogng.* TO syslogng@localhost IDENTIFIED BY 'syslogng1111';
mysql> SELECT host,usre,password FROM mysql.user;  <- 確認

設定

syslog-ng の RPM パッケージをインストールした時点で syslog は無効になり,syslog-ng が有効となる.

ただし,syslog-ng の設定はほとんどなされていない状態なので, /etc/syslog-ng/syslog-ng.conf を編集する必要がある.

とりあえず,以前の syslog と同じような出力にするために, コメントアウトされている設定部分をすべてアンコメントする.

で,次の修正もしておく.(修正しなくても動くようだけど)

       #unix-dgram("/dev/log");
       unix-stream("/dev/log");

Avast-ng へログを転送する場合

以下を追加

# For Avast-ng
template t_sql {
	 template("INSERT INTO logs 
        (host,facility,priority,level,tag,date_time,program,msg)
	 VALUES
	 ('$HOST','$FACILITY','$PRIORITY','$LEVEL','$TAG',
	  '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$PROGRAM','$MSG');\n");
	 template_escape(yes);
};

destination d_mysql {
	 pipe("/var/log/mysql.pipe" template(t_sql));
};

log { source(s_local); source(s_remote); destination(d_mysql);};

名前つきパイプの作成と,MySQL にログを挿入するスクリプトの作成

# mkfifo /var/log/mysql.pipe

# vi /usr/local/sbin/syslog2mysql.sh
#!/bin/sh

# Get MySQL PID
get_mysql_option(){
   result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
   if [ -z "$result" ]; then
	 result="$3"
   fi
}
get_mysql_option mysql_safe pid-file "/var/run/mysqld/mysqld.pid"
mypidfile="$result"
MYSQLPID=`cat "$mypidfile" 2>/dev/null `

# Only Run during MySQL is running
if [ -n "$MYSQLPID" ]; then
   # IS there mysql.pipe
   if [ -e /var/log/mysql.pipe ]; then
	while [ -e /var/log/mysql.pipe ]
	do
	  /usr/bin/mysql --user=syslogng --password=syslogng1111 \
         syslogng < /var/log/mysql.pipe
	  sleep 5
	done
   else
	mkfifo /var/log/mysql.pipe
   fi
fi

# chmod 700  /usr/local/sbin/syslog2mysql.sh

# /usr/local/sbin/syslog2mysql.sh &

このコマンドは MySQL が起動してから実行する

ログが MySQL に入っているかの確認

# mysql --user=syslogng --password=XXXXX syslogng
mysql> SELECT * FROM logs LIMIT 10;

php-syslog-ng

ソース

http://code.google.com/p/php-syslog-ng/ から

を GET する.

インストール

php-syslog-ng は 2.9.4 から,ちょっと仕様が変わった. というか,syslog-ng と MySQL とのやり取りを socket ファイルを 使わずにやるようになった. だから,添付されているインストール手順(html/INSTALL-STEPS)は ちょっと現状にあっていない部分がある.

STEP1

php-syslog-ng の DocumentRoot ディレクトリを作成する. ここでは,RedHatServerRoot 以下に作成する.

# mkdir /var/www/php-syslog-ng
# cd /var/www/php-syslog-ng

STEP2

Skip

STEP3

ソースを展開する.

# tar xvzf HOGE/php-syslog-ng-2.9.6.tgz

STEP4

Apache のバーチャルホストエントリを追加する. って,インストール手順には書いてあるけれど, 想定しているのは「ログサーバ」なので, Apache を php-syslog-ng 以外では利用しない.

なので,ドキュメントのエイリアスで対応しよう. また,ログファイルをおくディレクトリを掘っているが, これも行わない.

script/apache.vhost を参考に次のようなファイルを /etc/httpd/conf.d/syslog-ng.conf として作成する.

# PHP-SYSLOG-NG
#    DocumentRoot /www/php-syslog-ng/html
#    <Directory />
#        Options FollowSymLinks
#        AllowOverride All
#    </Directory>
Alias /php-syslog-ng /var/www/php-syslog-ng/html

<Location /usage>
    Order deny,allow
    Deny from all
    Allow from 127.0.0.1
    Allow from ::1
    # Allow from .example.com
</Location>

<Directory /var/www/php-syslog-ng/html>
     # pcw No directory listings
     # Options Indexes FollowSymLinks MultiViews
     Options -Indexes FollowSymLinks MultiViews
     AllowOverride All
     Order allow,deny
     allow from all
    #Order deny,allow
    #Deny from all
    #Allow from 127.0.0.1
    #Allow from ::1
    # Allow from .example.com
</Directory>


# Possible values include: debug, info, notice, warn, error, crit,
# alert, emerg.
LogLevel warn

STEP5

Skip

STEP6

Apache 再起動

/etc/init.d/httpd restart

STEP7

http://サーバアドレス/php-syslog-ng/install/

にアクセスする.

で,表示されている項目がすべて「緑」になっているか確認する.

「赤」になっている部分は,

調整ができたら,Apache を再起動して,再度チェック.

STEP8

「Next」ボタンを押し, ライセンスに同意のチェックをいれ「Next」をクリック.

STEP9

MySQL の各種設定をする.

で「Next」をクリック.->「OK」

STEP10

サイト名を入力する

で「Next」をクリック.

STEP11

サイトの URL等,Web サイトの設定

パーミションに関するチェックはデフォルトのまま(Dont...)

で「Next」をクリック.

次の画面では,ディレクトリを消すときの管理者のユーザ名, パスワードが表示されるので記録しておく

で「Install CEMDB」をクリック.

ここで進まなくなった.

が,強引に進めるぞ.

STEP12

http://サーバアドレス/php-syslog-ng/ にアクセスして,admin でログイン.

STEP13

スクリプトのあるディレクトリへ移動

# cd /var/www/php-syslog-ng/scripts

STEP14

 perl -i -pe 's/\/www\/php-syslog-ng/\/var\/www\/php-syslog-ng/g' *

STEP15

cron の登録

# EDITOR=vi crontab -e

/var/www/php-syslog-ng/scripts/crontab の内容を 書き入れる.

# mkdir /var/log/php-syslog-ng

STEP16

/var/www/php-syslog-ng/scripts/logrotate.d ファイルを /etc/logrotate.d/php-syslog-ng としてコピー

# cp logrotate.d /etc/logrotate.d/php-syslog-ng

STEP17

syslog-ng.conf を調整する.

これは script ディレクトリにある,syslog-ng.conf を参考にすること.

# For php-syslog-ng
#
log { source(s_local); source(s_remote); destination(d_mysql);};
destination d_mysql {
   program("/usr/bin/mysql -usyslogadmin -prootlogin syslog"
   template("INSERT INTO logs (host, facility, priority, level, tag, datetime,
program, msg)
   VALUES ( '$HOST', '$FACILITY', '$PRIORITY', '$LEVEL', '$TAG',
          '$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', '$PROGRAM', '$MSG' );\n")
   template-escape(yes));
   };

STEP18

Skip

STEP19

syslog-ng を再起動

最後にグラフ表示の不具合修正

/var/www/php-syslog-ng/html/includes/graphit.php を編集し,

 $graph->legend->SetFont(FF_VERDANA,FS_NORMAL, 8);

の部分を

 $graph->legend->SetFont(FF_FONT1,FS_NORMAL, 8);

へと変更

ただ,これ以外にも,Search での動きがおかしい. プログラム名で検索ができなかったり, facility でも検索もうまく条件指定できなかったりする.

修正した

1)プログラムミス php-syslog-ng/html/includes/search.php の

diff search.php.org search.php
327c327
<               <input name="excludeFacility" id="excludeFacility_0" value="0"
  type="radio">
---
>               <input name="excludePriority" id="excludePriority_0" value="0"
  type="radio">

2)config 自動生成のバグ? php-syslog-ng/html/config/config.php 以下の事項以外にもあるかも.

# diff config.php config.php.old
40,41c40
< // "orderby"=>"/^seq$|^host$|^facility$|^priority$|^datetime$/i",
<    "orderby"=>"/^seq$|^host$|^program$|^facility$|^priority$|^datetime$/i",
---
>    "orderby"=>"/^seq$|^host$|^facility$|^priority$|^datetime$/i",
48d46
<    "program"=>"(^([\w/_.%-]+[,;]\s*)*[\w/_.%-]+$)",

それと,特に操作性がいいとは思えないなぁ.

http://php-syslog-ng.gdd.net/INSTALL-STEPS


Avast-ng

テーブルの追加

抽出条件を保存するテーブル

# mysql -p syslogng
mysql> CREATE TABLE `filters` (
     `name` varchar(32) default NULL,
     `rule` text,
     `seq` int(10) unsigned NOT NULL auto_increment,
     PRIMARY KEY (`seq`),
     KEY `host` (`name`),
     KEY `seq` (`seq`)
     );

デフォルトで使用される条件

mysql> INSERT INTO `filters` (name, rule) VALUES
       ("default","facility = 'local7'"),
       ("default","msg not like '%Autosaving system configuration to NVRAM%'"),
       ("default","msg not like '%link down/up%'"),
       ("default","msg not like '%SSH%'");

ソース

http://devel.thcnet.net/trac/avast-ng/ から

# wget http://devel.thcnet.net/files/avast-ng/avast-ng-1.0.2.tar.gz

インストール

ソースを Apache のドキュメントルートに展開する.

# cd /var/www/html
# tar xvzf $SRC/avast-ng-1.0.2.tar.gz
# ln -s avast-ng-1.0.2 avast-ng

設定

MySQL にあうように設定を行う.

# cd avast-ng
# vi conf.php
# chown apache conf.php

アクセス

http://サーバ名/avast-ng/ へアクセス

うーん,これもあまり便利ではないなぁ. 使い方がイマイチわからないのと,Live でのフィルタリングしか できないようなので,過去のログから何かを探そうというのには 使えない. そりゃぁそうか, 「Avast-ng: A Versatile Ajax Syslog Tailer for syslog-ng」 だからな.


Splunk はどうだ

ソース

http://www.splunk.com/download?ac=productpage から対応版を Get する.

今回は,Linux 2.6+kernel Linux distributions/x86 splunk-3.2-33572-i386.rpm を Get. と思ったらユーザアカウントを作らないといけないのね.

インストール

# rpm -ivh splunk-3.2-33572.i386.rpm
...
   1:splunk                 ########################################### [100%]
----------------------------------------------------------------------
The Splunk Server has been installed in:
	 /opt/splunk

To start the Splunk Server, run the command:
	 /opt/splunk/bin/splunk start

To use Splunk's web interface, point your browser at:
	 http://centos5.example.co.jp:8000

Complete documentation is at http://www.splunk.com/r/docs
----------------------------------------------------------------------

起動

#  /opt/splunk/bin/splunk start

最初の起動時は, ライセンスへの同意を聞かれるので y で答える.

すると,

LISTEN される.

アクセス

http://splunk.example.jp:8000/ へアクセスする.

Free 版は認証などはないみたいなので, アドレスによるアクセス制限などを行っておく.

Help には動画による説明もあるので,なんとなく設定できる. まずは,admin のページで Indexing の設定をする.


トップ   編集 凍結 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-07-11 (土) 12:39:10