syslog を Kompira Enterprise で受信する

システム管理者にはおなじみの 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 側で条件分岐を行うのは、転送コストを考えると望ましくありません。

TOP