実務において,JP1/Baseのログファイルトラップが動作せず,監視対象ログに出力されているメッセージを検知できない事象が発生しました。
調査した結果,JP1/Base側のログファイルトラップ定義ファイルと監視対象ログファイルの文字コード(UTF-8/SJIS)の相違が原因でした。
本稿では,原因判明までの経緯と対処内容を解説します。
前提知識
JP1/Base

株式会社日立製作所が提供する,統合システム運用管理ソフトウェア「JP1」シリーズの土台となるミドルウェアです。
JP1製品を扱う際のログインユーザ等を設定できます。
また,今回の主題でもある,ログファイルトラップ機能の設定も行うことが可能です。
ログファイルトラップ

アプリケーションやOSが生成するログファイルをリアルタイムに監視して,エラーなどの特定条件に一致したログを検知する仕組みや機能を指します。
特定のメッセージを検知した後で,他のJP1製品(JP1/IM)を使用してメール送信の設定をすることもできます。
環境
Solarisで実装しているサーバにてリアルタイムでログ監視を行い,特定のメッセージを検知した場合にメールを送信して通知する機能を実装しています。

実務での対応
事象
定例作業の動作確認をしている中で,作業自体は問題無く完了したものの,メールがいつまで経っても届きませんでした。
切り分け
原因調査にあたり,以下を確認しました。
- 実行画面の確認
→正常終了した旨のメッセージ出力を確認した。 - 出力ログの確認
→「A作業が正常終了しました。」(検知対象メッセージ)の出力を確認した。 - ログファイルトラップ設定の確認
→「A作業が正常終了しました。」のメッセージを検知する設定ができていた。
見かけ上の設定に問題は無く,検知対象メッセージが日本語であったことから,今までの経験を踏まえて文字コードの違いによる検知漏れを疑いました。
原因:ログファイルトラップ定義ファイルと監視対象ログファイルの文字コード違い
見立ての通り,「文字コード違い」が原因でした。
それぞれのファイルをサクラエディタにて直接開くことで,文字コードが以下のように設定してあることを確認しました。
ログファイルトラップ定義ファイル(JP1/Base):UTF-8
監視対象ログファイル :SJIS
文字コードの違いによって,JP1/Base側から見ると監視対象ログファイルのメッセージが文字化けをしていたということになります。

JP1/Baseは,ログファイルトラップ定義ファイルに記載している文字列と監視対象ログの文字列を比較して判定します。
そのため,文字コードが異なる状態では比較対象の文字列が正しく認識できず,ログに出ていても検知できません。
結果として,監視対象ログにはメッセージが出力されていたものの,JP1/Base側では文字列を正しく認識できていなかったことでログファイルトラップが機能していませんでした。
対処:ログファイルトラップ定義ファイルの修正
対象のログファイルトラップ名を「jevlog01」として記載します。
①起動定義ファイル1(jevlog_start.conf)の修正
対象のログファイルトラップに対して,起動する際の文字コードを「SJIS」にしました。
Solarisの場合,<ja_JP.PCK>を指定します。
イツキOSによって指定方法が異なるよ!
<修正前>
START_OPT=jevlog01:jevlogstart -f “/etc/~/jevlog01.conf” “/app/kinouA/kinouA.log”
<修正後>
START_OPT=<ja_JP.PCK>jevlog01:jevlogstart -f “/etc/~/jevlog01.conf” “/app/kinouA/kinouA.log”
(※)パスを一部省略しています。
②動作定義ファイル2(例:jevlog01.conf)の修正
UTF-8で作成してあったため,そのままSJISで保存(※)し直しました。
(※)FTPソフトを使用して一度ローカルへダウンロードのうえ,サクラエディタで文字コードのみを変更して保存後にサーバへアップロード。
③ログファイルトラップ再起動
対象のログファイルトラップ機能を再起動しました。
|
1 2 3 4 5 |
# 停止 /opt/jp1base/bin/jevlogstop -a jevlog01 # 起動 /opt/jp1base/bin/jevlogstart -f "/etc/~/jevlog01.conf" "/app/kinouA/kinouA.log" |
(※)パスを一部省略しています。
④事後確認
メッセージを検知して,メールが正常に送られてきたことを確認しました。
JP1/Baseの設定に問題が見当たらない場合は,監視対象ログとの文字コード差異も確認することをおすすめします!
教訓
日本語を扱う際は,文字コードに細心の注意を払う必要があると改めて実感しました。
検知対象メッセージが英語表記であれば,本事象はおそらく起きていなかったと思います。
ただ,ログへの出力を仮に英語表記にする場合,実務上ではシステム変更扱いとなるため,プログラム改修や各種試験を実施する必要が出てきます。
莫大な工数を要する可能性もあることから,今回はミドルウェアの設定変更をする方針となりました。
日本語を扱う際は文字コードに細心の注意を払う!
まとめ
本稿の要点をまとめると以下の通りです。
- まずは画面やログを確認し,検知対象メッセージ自体が出ていることを確認する
- JP1/Baseのログファイルトラップ定義ファイルと監視対象ログファイルの文字コードを統一する
- 日本語メッセージを扱う場合は特に文字コードを意識する
文字コードの問題は,今回のログファイルトラップに限らず様々な場面で直面します。
例えば特定のコマンドを実行した結果,文字コードが原因で文字化けをしてエラーが発生しようものなら,最悪本番事故にも繋がりかねません。
ログ出力やミドルウェア設定を実装する際は,文字コードを統一して設計するよう細心の注意を払いましょう。


