以下、レガシーな話で恐縮です。
Motivation
syslogの送信元毎にログを出し分けるなどの柔軟性が必要だったため。(fluentdとか使えよ!ってお客様に言ってください)
わざわざQiitaに投稿したのはなぜ?
単純にスッピンのAmazon Linux 2014.09のインスタンスでsudo yum install --enablerepo=epel syslog-ng
とすると、
Transaction check error:
file /etc/logrotate.d/syslog from install of syslog-ng-3.2.5-4.el6.x86_64 conflicts with file from package rsyslog-5.8.10-8.25.amzn1.x86_64
が出てくるので、それを解決する手法のメモを残したかった。そして忘れたかったw
なお、原因はRPMのバージョン4.8.0以降で、パッケージの構成チェックが厳しくなったからのようです。(参照: http://dev.classmethod.jp/cloud/build-td-agent2-on-amazon-linux/ ) でも、 RPMバージョン4.8の機能と変更点 読んでもよくわかりませんでした(汗
お世話になりました
- 手順など
- http://www.sssg.org/blogs/naoya/archives/1309
- http://blog.tnmt.info/2011/04/29/rpmbuild-for-beginner/
- http://www.atmarkit.co.jp/flinux/rensai/linuxtips/853downsrpm.html
- オフィシャル、かな https://access.redhat.com/documentation/en-US/Red_Hat_Network_Satellite/5.3/html/Deployment_Guide/satops-rpm-building.html
- http://www.cyberciti.biz/faq/centos-redhat-fedora-yum-lock-package-version-command/
- syslog-ng設定
- 問題の原因とか
- http://dev.classmethod.jp/cloud/build-td-agent2-on-amazon-linux/ (RPMのバージョン4.8.0以降で発生する現象という原因のヒントがありました)
- http://www.hde.co.jp/press/column/detail.php?n=201101260
方針
syslog-ngのパッケージを/etc/logrotate.d/syslogにタッチしないようにre-packageしてインストールしてみる
工程
1. とりあえず
sudo yum install syslog-ng
してみる。エラーなければめでたしめでたしで終了、なのだが。
Transaction check error:
file /etc/logrotate.d/syslog from install of syslog-ng-3.2.5-4.el6.x86_64 conflicts with file from package rsyslog-5.8.10-8.25.amzn1.x86_64
こんなのが出ちゃうのです。
2. epelからsyslog-ngが依存しているlibnetとeventlogをインストールしておく
sudo yum install --enablerepo=epel libnet eventlog
3. rpmpkgツールをインストール
sudo yum groupinstall "Development Tools"
sudo yum install rpm-devel
4. 作業場所と環境を確保
mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros
5. ソースのダウンロードツールを入手
sudo yum install yum-utils
※ 必要なのはyumdownloaderコマンド(AMZN linuxならすでにinstall済みのはずだけど)
6. epelからsyslog-ngのsourceパッケージを取得
cd ~/rpmbuild/SRPM
yumdownloader --source syslog-ng
7. sourceパッケージを展開して.specファイルを編集してbuild
rpm -ivh syslog-ng-3.2.5-4.el6.src.rpm
cd ../SPECS
vi syslog-ng.spec
log rotationの設定ファイルのパスの衝突を避けるために
/etc/logrotate.d/syslog
から /etc/logrotate.d/syslogng
にしてみた。
そしておもむろにbuild。
rpmbuild -ba ~/rpmbuild/SPECS/syslog-ng.spec
(中略)
error: Failed build dependencies:
eventlog-devel >= 0.2.12 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
glib2-devel >= 2.10.1 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
libdbi-devel is needed by syslog-ng-3.2.5-4.amzn1.x86_64
libnet-devel >= 1.1.4-3 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
pcre-devel >= 6.1 is needed by syslog-ng-3.2.5-4.amzn1.x86_64
tcp_wrappers-devel is needed by syslog-ng-3.2.5-4.amzn1.x86_64
libdbi-dbd-sqlite is needed by syslog-ng-3.2.5-4.amzn1.x86_64
buildに不足しているライブラリというかヘッダ情報のためにエラーになるので、ヘッダ情報をインストール
sudo yum install --enablerepo=epel eventlog-devel glib2-devel \
libdbi-devel libnet-devel pcre-devel tcp_wrappers-devel libbdi-dbq-sqlite
で、ビルドに再トライ。
rpmbuild -ba ~/rpmbuild/SPECS/syslog-ng.spec
8. 出来たRPMパッケージをrpm -ivhでインストール
cd ../RPMS/x86_64
sudo rpm -ivh syslog-ng-3.2.5-4.amzn1.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:syslog-ng-3.2.5-4.amzn1 ################################# [100%]
9. rsyslogdを止めて、syslog-ngを起動(サーバーの起動時の設定も変える)
sudo chkconfig rsyslog off
sudo chkconfig syslog-ng on
sudo service rsyslog stop
sudo service syslog-ng start
10. yum updateの制限を掛けておく(どうせエラーになるけどね)
sudo yum install yum-plugin-versionlock
sudo yum versionlock syslog-ng
で、おもむろにsyslog-ngの設定を始めましょうw
やりたかった事は、syslogの送信元によってログファイルを分けることでした。
source s_sys {
udp(ip(xx.xx.xx.xx) port(514));
};
filter f1 {
level(info..emerg);
};
destination d_ipfiles { file("/logdir/syslog-ng-by-ip/$SOURCEIP/messages_$YEAR$MONTH$DAY.log"); };
log { source(s_sys); filter(f1); destination(d_ipfiles); };