column

外部との連携 syslogをKompiraで受信する

システム管理者にはおなじみのsyslogは、主にUNIX系OSでアプリケーションやシステムの動作状況やメッセージを記録するための仕組みです。ローカルのみならずネットワーク経由で他のシステムとログを送受信する機能もあります。syslogのログ情報はUDPまたはTCPの514ポートを通じて送信され、プロトコルはRFC3164で標準化されています。

syslog自体は1983年に発表された4.2BSDでの導入以来、30年以上の歴史がありますが、近年はsyslog-ng, rsyslogなどの新しい実装が利用されてきています。

本稿執筆時点(2017年1月)でのKompiraのサポートバージョンはCentOS6で、rsyslogが導入されています。rsyslogのバージョンは5.8系ですが、最新版は8.23であり、設定ファイルの書式が大幅に変更されています。ドキュメントや記事を参照する際には対象になっているバージョンにご注意ください。

syslogの受信機能そのものはKompiraにはありませんので、本稿ではKomiraサーバーのrsyslogで受信を行い、そこからユーティリティー「kompira_sendevt」でKompiraのチャネルに送信する方法でデータを取得します。

 
rsyslogの設定

rsyslogから”kompira_sendevt”を呼び出すには”omprog”モジュールを利用します。
設定は/etc/rsyslog.confで行います。
ただし以下のような登録を行うと、実行中のrsyslogdを停止したタイミングでしか情報を送信しません。

ここでは一旦シェルスクリプト(ここでは仮に/tmp/sendlog.sh)を呼び出し、そこから”kompira_sendevt”を間接的に呼び出すようにします。

ここでは簡単のために、rsyslog.confでは全てのログを決まったフォーマットで送信するようにしていますが、ここは必要に応じて「指定の文字列を含む場合」「指定のアプリケーションからのログ」など限定すべきところです。

 
Kompira側の設定

次にKompiraのチャネルで受信したデータを表示するためのテスト用のジョブフローを用意します。

 
動作確認

まずはジョブフロー「チャネル受信」を実行し、転送用のスクリプトの動作をチェックします。

ここでコンソールで”test message”の文字が表示されれば成功です。うまくいかない場合には、sendlog.sh の実行パーミッションの有無を確認してください。

次にrsyslogを起動します。

テスト用のsyslogメッセージを送信します。

ここでコンソールで”hello world”の文字が表示されれば成功です。

syslogの受信

うまくいかない場合、/var/log/messagesの一番最後に表示されるか確認してください。

表示されているようであれば、rsyslog.confの設定が正しくない可能性があります。

以上で、Kompiraサーバーでsyslogデータを受信し、それをKompiraのチャネルに転送することができるようになりました。
実践用途では、特定のアプリケーションの特定の条件(障害発生など)に絞り込んで、何らかの自動化処理につなげると思います。このため、Kompiraに転送するデータのフィルタリングの設定をrsyslog.confに行うなどの設定をいれてください。ログファイルを全てKompiraに転送して、Kompira側で条件分岐を行うのは転送コストを考えると望ましくありません。