Kompira

Menu Menu

Enterprise Technical information

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

システム管理者にはおなじみのsyslogは、主にUNIX系OSでアプリケーションやシステムの動作状況やメッセージを記録するための仕組みです。ローカルのみならずネットワーク経由で他のシステムとログを送受信する機能もあります。syslogのログ情報はUDPまたはTCPの514ポートを通じて送信され、プロトコルはRFC3164で標準化されています。 syslog自体は1983年に発表された4.2BSDでの導入以来、30年以上の歴史がありますが、近年はsyslog-ng, rsyslogなどの新しい実装が利用されてきています。 syslogの受信機能そのものはKompiraにはありませんので、本稿ではKomiraサーバーのrsyslogで受信を行い、そこからユーティリティー「kompira_sendevt」でKompiraのチャネルに送信する方法でデータを取得します。
動作確認環境
ソフトウェア バージョン
Kompira 1.5.5.post8
OS CentOS Linux release 7.8.2003
また、rsyslogのバージョンは8.24です。バージョン7から設定ファイルの書式が大幅に変更されているので、ドキュメントや記事を参照する際には対象になっているバージョンにご注意ください。
  rsyslogの設定 rsyslogから”kompira_sendevt”を呼び出すには”omprog”モジュールを利用します。 設定は/etc/rsyslog.confで行います。 ただし以下のような登録を行うと、実行中のrsyslogdを停止したタイミングでしか情報を送信しません。   /etc/rsyslog.conf
module(load="omprog")
action(type="omprog"
       binary="/opt/kompira/bin/kompira_sendevt")
ここでは一旦シェルスクリプト(ここでは仮に/tmp/sendlog.sh)を呼び出し、そこから”kompira_sendevt”を間接的に呼び出すようにします。   /etc/rsyslog.conf (/tmp/sendlog.sh呼び出し版)
module(load="omprog")
action(type="omprog"
       binary="/tmp/sendlog.sh")
/tmp/sendlog.sh
#!/bin/bash
while read LINE; do
    echo $LINE | /opt/kompira/bin/kompira_sendevt
done
  簡単のために、rsyslog.confでは全てのログを決まったフォーマットで送信するようにしていますが、ここは必要に応じて「指定の文字列を含む場合」「指定のアプリケーションからのログ」など限定すべきところです。 また、/tmp/sendlog.shにはパーミッションを設定して実行可能な状態にしてください。  
# chmod 744 /tmp/sendlog.sh
  Kompira側の設定 次にKompiraのチャネルで受信したデータを表示するためのテスト用のジョブフローを用意します。 ジョブフロー「チャネル受信」
</system/channels/Alert> ->
[message = $RESULT] ->
print('${message}を受信しました') ->
self()
  動作確認 まずはジョブフロー「チャネル受信」を実行し、転送用のスクリプトの動作をチェックします。
$ echo "test message" | /tmp/sendlog.sh
ここでコンソールで”test message”の文字が表示されれば成功です。うまくいかない場合には、sendlog.sh の実行パーミッションの有無を確認してください。 次にrsyslogを起動します。
# service rsyslog restart
テスト用のsyslogメッセージを送信します。
$ logger "hello world"
ここでコンソールで”hello world”の文字が表示されれば成功です。   うまくいかない場合、/var/log/messagesの一番最後に表示されるか確認してください。  
# tailf /var/log/messages
表示されているようであれば、rsyslog.confの設定が正しくない可能性があります。   以上で、Kompiraサーバーでsyslogデータを受信し、それをKompiraのチャネルに転送することができるようになりました。 実践用途では、特定のアプリケーションの特定の条件(障害発生など)に絞り込んで、何らかの自動化処理につなげると思います。このため、Kompiraに転送するデータのフィルタリングの設定をrsyslog.confに行うなどの設定をいれてください。ログファイルを全てKompiraに転送して、Kompira側で条件分岐を行うのは転送コストを考えると望ましくありません。

スタートガイド

Kompiraジョブフローの基礎

ジョブフローの簡単な例

Kompiraの機能

外部との連携