システム管理者にはおなじみの syslog は、主に UNIX 系 OS でアプリケーションやシステムの動作状況やメッセージを記録するための仕組みです。ローカルのみならずネットワーク経由で他のシステムとログを送受信する機能もあります。syslog のログ情報は UDP または TCP の514ポートを通じて送信され、プロトコルは RFC3164 で標準化されています。
syslog 自体は1983年に発表された 4.2BSD での導入以来、30年以上の歴史がありますが、近年は syslog-ng 、rsyslog などの新しい規格が利用されてきています。
syslog の受信機能そのものは Kompira Enterprise にはありません。そのため本稿では、Komira Enterprise サーバーの rsyslog で受信を行い、そこからユーティリティー “kompira_sendevt” で Kompira Enterprise のチャネルに送信することによりデータを取得することにします。
※ 本稿は Kompira Enterprise 1.6系に準拠した画像を用いています。
環境情報
本稿は、以下の環境で検証しています。
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.5.5.post11 |
OS | CentOS 7.8.2003 |
または
ソフトウェア | バージョン |
---|---|
Kompira Enterprise | 1.6.2.post4 |
OS | CentOS 7.8.2003 |
※ また、rsyslog のバージョンは8.24.0です。バージョン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
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 Enterprise 側の設定
以下のような Kompira Enterprise のチャネルで受信したデータを表示するためのジョブフローを用意します。
</system/channels/Alert> -> [message = $RESULT] -> print('${message} を受信しました') -> self()
動作確認
まずは上記のジョブフローを実行し、転送用のスクリプトの動作をチェックします。
$ echo "test message" | /tmp/sendlog.sh
このとき Kompira Enterprise 上のコンソールで “test message” の文字が表示されれば成功です。うまくいかない場合には、sendlog.sh の実行パーミッションの有無を確認してください。
次にrsyslogを再起動します。
$ systemctl restart rsyslog
syslog メッセージを送信します。
$ logger "hello world"
このとき Kompira Enterprise 上のコンソールで “hello world” の文字が表示されれば成功です。
うまくいかない場合、/var/log/messages の一番最後に表示されるかを確認してください。
$ tail -f /var/log/messages
表示されているようであれば、rsyslog.conf の設定が正しくない可能性があります。
以上で、Kompira Enterprise サーバーで syslog データを受信し、それを Kompira Enterprise のチャネルに転送することができるようになりました。
実践用途では、特定のアプリケーションの特定の条件 (障害発生など) に絞り込んで、何らかの自動化処理につなげることが考えられます。このため実際に業務に用いる際には、Kompira Enterprise に転送するデータのフィルタリングを rsyslog.conf に設定するなどの対応をするようにしてください。本稿のように、すべてのログファイルを Kompira Enterprise に転送して、Kompira Enterprise 側で条件分岐を行うのは、転送コストを考えると望ましくありません。