構造化ログ
InterSystems IRIS® では、構造化ログがサポートされています。
InterSystems IRIS では、それぞれの目的に応じた複数のログが作成されます。以前の製品から移行したユーザは、前と同じようにこういったログを利用できますが、すべてのログ情報を単一の一元化された、機械で判読可能なログ・ファイル、つまり構造化ログに送ることもできるようになりました。このファイルは、サードパーティの分析ツールと共に使用することができます。
このページでは、構造化ログ内の情報の概要を示し、構造化ログの例を提示し、構造化ログを有効にする方法について説明します。
OpenTelemetry と互換性のある監視ツールを使用している場合、InterSystems IRIS は構造化ログ内で利用可能な情報を、代わりに OTLP/HTTP 信号として送信することができます。その場合、構造化ログを有効にする必要はありません。
構造化ログ内で利用可能な情報
InterSystems IRIS では、構造化ログを有効にすると、システムによって別のログ (どのようなログであるかに関係なく) に書き込まれたものと同じデータが構造化ログにも書き込まれます。例えば、システムによって同じ行が messages.log と構造化ログに書き込まれます。
構造化ログを有効にすると、構造化ログに以下の情報がすべて格納されます。
-
messages.log に書き込まれる情報。これには、注意を要するアラート、システムの起動とシャットダウンに関する情報、ジャーナル・ファイルと WIJ ファイルに関する概要、構成の変更に関する情報 (CPF)、およびライセンスに関する情報が含まれます。"InterSystems IRIS ログの監視" を参照してください。
-
監査データベースに書き込まれる情報。詳細は、監査しているイベントによって異なります。"監査ガイド" を参照してください。
出力例
ここでは、構造化ログ・ユーティリティからの、名前と値のペアの形式および JSON 形式の出力例を紹介します。
名前と値のペア
以下の出力では、NVP 形式オプション (名前と値のペア) が使用されています。このサンプルは、表示の都合上、編集されています。実際の出力では、各エントリは 1 行のみで、エントリ間に空白行はありません。
when="2019-08-01 18:43:02.216" pid=8240 level=SEVERE event=Utility.Event
text="Previous system shutdown was abnormal, system forced down or crashed"
when="2019-08-01 18:43:05.290" pid=8240 level=SEVERE event=Utility.Event
text="LMF Error: No valid license key. Local key file not found and LicenseID not defined."
when="2019-08-01 18:43:05.493" pid=8240 level=WARNING event=Generic.Event
text="Warning: Alternate and primary journal directories are the same"
when="2019-08-01 18:46:10.493" pid=11948 level=WARNING event=System.Monitor
text="CPUusage Warning: CPUusage = 79 ( Warnvalue is 75)."
この形式では、ファイル内の各行に、スペースで区切られた一連の名前と値のペアが含まれます。名前と値の各ペアの形式は、name=value で、value にスペース文字が含まれる場合は、value が括弧で囲まれます。ログ・ファイルの行には、以下の名前と値のペアの一部またはすべてが含まれます。
| 名前 | 値 |
|---|---|
| host | ^LOGDMN が実行されているホストの名前 (パイプ・コマンド内に指定されている場合)。 |
| instance | ^LOGDMN が実行されているインスタンスの名前 (パイプ・コマンド内に指定されている場合)。 |
| when | 常に含まれます。yyyy-mm-dd hh:mm:ss.sss の形式での、エントリのタイム・スタンプ。 |
| pid | 常に含まれます。エントリを生成したプロセスの ID。 |
| level | 常に含まれます。このエントリのログ・レベル。この値は、以下のいずれかになります。
|
| event | 常に含まれます。エントリを生成したコードの識別子で、通常はクラス名。 |
| text | 常に含まれます。エントリを説明する文字列。 |
| source | 監査イベントのソースであるコンポーネント。インターシステムズのコンポーネントの場合は、常に %System です。アプリケーション・コードでイベント・ログに書き込みを行う場合、source はアプリケーション・コード内のコンポーネントを表します。 |
| type | 監査イベントに関する情報の分類。 |
| group | 監査イベントのグループ (存在する場合) |
| namespace | エントリが生成されたネームスペース。これは、アプリケーション・エラーや相互運用プロダクションのアクティビティなど、ネームスペース固有のアクティビティを調べる際に有用です。 |
JSON
以下の出力では、JSON 形式オプションが使用されています。このサンプルは、表示の都合上、編集されています。実際の出力では、各エントリは 1 行のみで、エントリ間に空白行はありません。
{ "when": "2019-08-07 14:11:04.904", "pid": "8540", "level": "SEVERE", "event": "Utility.Event",
"text": "Previous system shutdown was abnormal, system forced down or crashed"}
{ "when": "2019-08-07 14:11:08.155", "pid": "8540", "level": "SEVERE", "event": "Utility.Event",
"text": "LMF Error: No valid license key. Local key file not found and LicenseID not defined."}
{ "when": "2019-08-07 14:11:08.311", "pid": "8540", "level": "WARNING", "event": "Generic.Event",
"text": "Warning: Alternate and primary journal directories are the same"}
{ "when": "2019-08-07 14:16:13.843", "pid": "10816", "level": "WARNING", "event": "System.Monitor",
"text": "CPUusage Warning: CPUusage = 84 ( Warnvalue is 75)."}
この形式では、ファイル内の各行が、一連のプロパティを持つ JSON オブジェクトです。プロパティの名前 (およびプロパティに含まれる値) は、前のセクションの名前と値のペアで示したものと同じです。
構造化ログの構成
構造化ログは、管理ポータル、^LOGDMN ルーチン、または %SYS ネームスペースでクラスベースの API SYS.LogDmnOpens in a new tab を使用して構成できます。
管理ポータルの使用
管理ポータルでは、[システム] > [構成] > [システム構成] > [Log Daemon Configuration] ページで構造化ログを管理できます。このページでは、ログ・デーモンの現在のステータスを確認できます。このステータスは、500 ミリ秒ごとに更新されます。インスタンスのログ・デーモン設定を編集することもできます。使用できる設定について、以下で詳しく説明します。
ログ・デーモンが有効かどうかを特定します。有効な場合は YES、無効な場合は NO です。
パイプ・コマンド。システムから構造化ログを送信する宛先を指定します。以下の形式の応答を入力します。
irislogd -f c:/myfilename.log
ただし、c:/myfilename.log を、宛先ログ・ファイルの完全修飾パス名に置き換えます。このコマンドで、irislogd は、ログ・データを受け取って、指定したファイル (-f オプションによる) にそのデータを書き込むインターシステムズの実行可能ファイルの名前です。
パイプ・コマンドの場合、最も簡単な方法は、ここで説明している実行可能ファイル (irislogd.exe) を使用することですが、別のターゲットを代わりに使用することもできます。irislogd.exe のその他のオプションについては、最後のセクションを参照してください。
最小ログ・レベル。以下のいずれかを指定します。
-
DEBUG2 — 詳細なデバッグ・メッセージ (16 進ダンプなど)。
-
DEBUG — それほど詳細ではないデバッグ・メッセージ。
-
INFO — すべての監査イベントを含む情報メッセージ。
-
WARN (既定値) — 警告。注意が必要な可能性はあるが、処理の中断は生じていない問題を示します。
-
SEVERE — 重大なエラー。処理の中断を招いた問題が発生したことを示します。
-
FATAL — 致命的なエラー。この問題によってシステムが動作しなくなったことを示します。
パイプ・コマンドへの連続した呼び出しの間隔 (秒数)。既定値は 10 秒です。
オプションのフィルタが、イベント・タイプに基づいて構造化ログ内のイベントを制限します。フィルタ・パターンは、以下の形式で指定できます。
+<pattern>: Include events matching <pattern> -<pattern>: Exclude events matching <pattern> <pattern>: Default include (equivalent to +<pattern>)
フィルタ・パターンを指定する際は、以下の構文規則を考慮します。
-
ピリオド (.) : 階層名のセパレータとして使用します (A.B.C など)。
-
アスタリスク (*) : ワイルドカードとしてパターンの末尾でのみ使用します (例えば、A.B.* は A.B の下にあるすべてのイベントに一致します)。
-
コンマ (,) : 複数のフィルタ・パターンを区切ります (-A,A.B など)
イベント・フィルタを作成する際は、以下の例を参照してください。
-
-Audit.*,Audit.LoginFailureLoginFailure 以外のすべての Audit イベントを除外します。
-
-*,+Log.StartedLog.Started 以外のすべてのイベントを除外します。
フィルタで指定されていないイベントは含められます。特定の規則はワイルドカード規則よりも優先され、より詳細なパターンの方が優先度が高くなります。例えば、-A.B.C は +A よりも優先度が高くなります。
^LOGDMN の使用
^LOGDMN ルーチンを使用すると、構造化ログを管理できます。
^LOGDMN を使用して構造化ログを有効にする手順は次のとおりです。
-
ターミナルを開いて以下のコマンドを入力します。
set $namespace="%sys" do ^LOGDMNこれによりルーチンが開始し、以下のプロンプトが表示されます。
1) Enable logging 2) Disable logging 3) Display configuration 4) Edit configuration 5) Set default configuration 6) Display logging status 7) Start logging 8) Stop logging 9) Restart logging LOGDMN option? -
4 を押して、構成の詳細を指定します。ルーチンから以下の項目について入力を求められます。
-
最小ログ・レベル。以下のいずれかを指定します。
-
DEBUG2 — 詳細なデバッグ・メッセージ (16 進ダンプなど)。
-
DEBUG — それほど詳細ではないデバッグ・メッセージ。
-
INFO — すべての監査イベントを含む情報メッセージ。
-
WARN (既定値) — 警告。注意が必要な可能性はあるが、処理の中断は生じていない問題を示します。
-
SEVERE — 重大なエラー。処理の中断を招いた問題が発生したことを示します。
-
FATAL — 致命的なエラー。この問題によってシステムが動作しなくなったことを示します。
-
-
パイプ・コマンド。システムから構造化ログを送信する宛先を指定します。以下の形式の応答を入力します。
irislogd -f c:/myfilename.logただし、c:/myfilename.log を、宛先ログ・ファイルの完全修飾パス名に置き換えます。このコマンドで、irislogd は、ログ・データを受け取って、指定したファイル (-f オプションによる) にそのデータを書き込むインターシステムズの実行可能ファイルの名前です。
パイプ・コマンドの場合、最も簡単な方法は、ここで説明している実行可能ファイル (irislogd.exe) を使用することですが、別のターゲットを代わりに使用することもできます。irislogd.exe のその他のオプションについては、最後のセクションを参照してください。
-
パイプに送信するデータの形式。NVP (既定値) または JSON のいずれかを指定します。オプション NVP を指定すると、スペースで区切られた名前と値のペアで構成されるデータが送信されます。オプション JSON を指定すると、JSON 形式の出力でデータが送信されます。"出力例" を参照してください。
-
パイプ・コマンドへの連続した呼び出しの間隔 (秒数)。既定値は 10 秒です。
-
イベント・フィルタ。イベント・タイプに基づいて構造化ログ内のイベントを制限します。フィルタ・パターンは、以下の形式で指定できます。
+<pattern>: Include events matching <pattern> -<pattern>: Exclude events matching <pattern> <pattern>: Default include (equivalent to +<pattern>)
フィルタ・パターンを指定する際は、以下の構文規則を考慮します。
-
ピリオド (.) : 階層名のセパレータとして使用します (A.B.C など)。
-
アスタリスク (*) : ワイルドカードとしてパターンの末尾でのみ使用します (例えば、A.B.* は A.B の下にあるすべてのイベントに一致します)。
-
コンマ (,) : 複数のフィルタ・パターンを区切ります (-A,A.B など)
以下に例を示します。
-Audit.*,Audit.LoginFailureLoginFailure 以外のすべての Audit イベントを除外します。
-
-
-
ルーチンからメイン・プロンプト (LOGDMN option?) が再度表示されたら、1 を押してログを有効にします。
-
7 を押してログを開始します。
クラスベースの API の使用
構造化ログを管理するには、管理ポータルや ^LOGDMN ルーチンを使用する代わりに、%SYS ネームスペースで SYS.LogDmnOpens in a new tab クラスを使用することもできます。詳細は、クラスリファレンスを参照してください。
irislogd のその他のオプション
^LOGDMN を使用して irislogd.exe 実行可能ファイルを呼び出す際に、この実行可能ファイルに以下の引数を渡すことができます。
| 引数 | 目的 |
|---|---|
| -d | 診断メッセージとエラー・メッセージを発行します。 |
| -e errfilename | 指定されたファイルにエラー・メッセージと診断メッセージを書き込みます。 |
| -f logfilename | 指定されたファイルにログ・メッセージを書き込みます。 |
| -h hostname | 指定されたホスト名を構造化ログ・ファイルに含めます。 |
| -i irisinstance | 指定されたインスタンス名を構造化ログ・ファイルに含めます。 |
| -s | ログ・メッセージを Unix® syslog ファシリティに書き込みます (Unix® のみ)。 |
また、出力を stdout に書き込むこともできます。これを Unix で実行するには、-f と -s の両方の引数を省略します。Windows で実行するには、-s 引数を省略します。