5. 高度なマッピング設定

5.1. ログのマッピング

本章ではログタイプで「その他」を選択した場合の、ログの入出力およびマッピングについて説明します。

5.1.1. マッピング設定 – 入力

5.1.1.1. ログフォーマットの選択

各画面で設定する項目について解説します。

ログフォーマット

項目

説明

プレーンテキスト

文字コード

入力されるログファイルの文字コードを指定する

自動フォーマット設定

入力されるサンプルデータから候補となる正規表現を自動生成する

CSV/TSV/DSV

文字コード

入力されるログファイル(テキスト)の文字コードを指定する

区切り文字

各列を区切る文字を指定する
カンマ、タブ、スペースなど、ユーザーは任意の文字を指定できる
ただし、ダブルクォーテーションや連続した同じ文字などは指定できない

入力ファイルにヘッダーを含む

この設定を有効にすると、ファイルの最初の行はファイルのヘッダーとして扱われ、マッピング処理の対象から除外される

空のフィールドを除外

この設定を有効にすると、指定した区切り文字で区切られたフィールドの内容が空だった場合にフィールドとして扱われない
例: 区切り文字「空白」の際、連続空白を除外したい

コメント行の先頭文字

ここで指定した文字が行頭に出現した場合、当該行はコメント行として扱われ、マッピング処理の対象から除外される

イベントログ

イベントID

収集したイベントログのうち、イベントIDを限定したい場合に使用する
- 複数のイベントIDを指定したい場合は、カンマ区切りで列挙する
- 特定の範囲のイベントIDを指定したい場合は、「数字-数字」のようにする
- 処理対象外(除外)とするイベントIDの指定はできない
- イベントIDの指定は最大23個

Syslog

文字コード

入力されるSyslog形式のログファイルの文字コードを指定する

JSON

文字コード

入力されるJSON形式のログファイルの文字コードを指定する

../_images/NonWindowsAccesslogSetting06.png ../_images/NonWindowsAccesslogSetting07.png ../_images/NonWindowsAccesslogSetting08.png ../_images/NonWindowsAccesslogSetting09.png ../_images/NonWindowsAccesslogSetting10.png

ヒント

文字コードの指定では、代表的な文字コード(utf-8/utf-16/shift_jis/euc-jp)についてはリストから選択できます。
上記の文字コード以外にもMicrosoft .NET Frameworkでサポートされている文字コードを指定できます。

注意

ログフォーマットがイベントログもしくはプレーンテキスト以外の場合、「過去のログを再変換する」実行時は「マッピング設定 – 入力」で設定した値ではなく、ALogで設定された既定値で再変換がされます。
再変換時の既定値については 過去のログを再変換する時のログフォーマット毎の既定値について を参照してください。

5.1.1.2. [自動フォーマット設定]

自動フォーマット設定画面は、できるだけ簡単にフォーマットを設定するための画面です。

ポイント

  • 難しい正規表現を自分で考えなくても、サンプルデータをもとにデータのフォーマットを表す正規表現をALogが自動で考える

  • 候補から希望する正規表現を選択するだけでいい

  • 1つのデータに対し、複数のフォーマットを設定できる

../_images/AutoFormat01.png ../_images/AutoFormat02.png

使い方

1

適切なサンプルデータを指定する

2

[時刻フォーマット]タブ で時刻の正規表現を決定する

3

[フォーマット(数字)]タブ で時刻以外の正規表現を決定する

4

プレビューで確認する、必要に応じてフォーマット設定を調整する

ヒント

サンプルデータは先頭から2000行分を表示します。

注意

各項目がダブルクォーテーション("")で囲まれているログは使用できません。
(例)
"2021/04/01 10:10:10.000","AMIYA.CO.JP\sample","server","C:/User","WRITE","ClientIP:127.0.0.1" Count:1"
5.1.1.2.1. [時刻フォーマット]タブ
  1. サンプルデータから時刻フォーマットを抽出するため[自動抽出]ボタンをクリックする

  2. ALogが自動でフォーマットを抽出することを確認

  • サンプルデータの時刻部分がマークされる

  • 「正規表現文字列」欄に正規表現が表示される

../_images/AutoFormat01.png
  1. 変更したい場合は、「正規表現文字列」欄を手動で変更し[自動抽出]ボタンをクリックする

ヒント

  • Microsoft C#で使われる一般的な正規表現文字列が使用可能です。

  • 自動判別できる時刻フォーマットは 自動判別可能な時刻フォーマット と同様です。

  • 1つの対象サーバに対し、時刻フォーマットは1つのみ設定できます。

ヒント

サンプルデータに時刻を表す箇所がない場合は、「正規表現文字列」欄に何も表示されません。
時刻フォーマットを設定しない場合、「それ以外のフォーマットタブ」で自動作成される正規表現の精度が下がる可能性があります。
5.1.1.2.2. [フォーマット(数字)]タブ
  1. [追加]ボタンをクリックし、フォーマットタブを作成、この時点でALogが自動でフォーマットを抽出することを確認

  • サンプルデータ内に存在するフォーマットの正規表現が「正規表現文字列の候補一覧」に表示される

  • このとき自動生成される正規表現は、時刻として指定した箇所の次の文字からとなる

  1. 候補一覧をクリックしながら、希望の正規表現を決定する

  • 「正規表現文字列」欄に正規表現が表示される

  • クリックしていくと、サンプルデータにマークされ可視化されるため、どの行のどの部分が抽出されているかがわかる

  • マークのカラーは左下のグループ名と連動している

../_images/AutoFormat03.png
  1. フォーマット名、正規表現文字列、グループ名を必要に応じて変更し、プレビューで確認する

フォーマット名について
そのログを指し示すわかりやすい名前を付ける
 例:1つ目のフォーマットに「LOGIN」、2つ目のフォーマットに「LOGOUT」など
正規表現文字列について
Microsoft C#で使われる一般的な正規表現を使用して変更することができる
グループ名について
グループ名は、次に設定する「マッピング設定 - 出力」において関数として使用される
出力側でわかりやすくしたい場合は事前にここで変更する
同一フォーマット内で同じグループ名を設定することはできない
複数フォーマットでは同じグループ名を設定することができる
../_images/AutoFormat04.png
  1. 複数のフォーマットを作成したい場合は、この作業を繰り返す

複数のフォーマットを作成する例
サンプルデータのログが100行あり、最初に定義したフォーマット1では10行目~30行目のログが抽出できなかった場合、フォーマット2を作成して10行目~30行目のログを抽出する
  • タブ数の制限はない

  • 同じ行のログで複数のフォーマット設定で抽出された場合、左側のフォーマット設定タブの内容を優先する


5.1.2. マッピング設定 - 出力

Windowsアクセスログ以外のログタイプを選択した場合、あらかじめ用意された関数およびMicrosoft C# で使用可能な関数の一部を利用して、マッピングの設定を行います。
収集したログは設定されたマッピングルールに従い処理され、アクセスログとして出力されます。

5.1.2.1. マッピング処理の概要

Windowsアクセスログ以外のログタイプの変換処理は、大きく「デコーダ部」と「マッピング部」に区分することができます。
「デコーダ部」では、収集したログファイルの形式に応じて、「行の分割」を行い、次に指定された区切り文字などに従って、「列の分割」をし、変数への「列の展開」が行われます。
「デコーダ部」で処理されたログは、マッピング部に引き渡され、マッピング設定に従って、「除外フィルターの設定・評価」や「アクセスログへの変数の割り当て」が行われ、最終的にアクセスログとなります。
../_images/MappingProcessOutlineFixed.png

5.1.2.2. デコーダ部

「デコーダ部」では、以下のような処理を行っています。

5.1.2.2.1. 行の分割処理
テキストファイルである区切り文字形式(CSV/TSV/DSV)やSyslog形式、プレーンテキスト形式のログファイルでは、改行コードにより1行ずつ行を分割処理します。
一方、イベントログ形式のログファイルでは、1イベントレコードを1行と見なし、行の分割処理を行います。

注意

Windowsアクセスログ以外のログタイプでは、複数行のログを1つの行として扱うことができません。
そのため、1つの処理で複数行のログが出力されるケースでは対象ホスト側のログ出力設定を変更し、1行のログにする必要があります。
5.1.2.2.2. 列の分割処理および列の展開
行の分割処理後、指定された区切り文字に従って、各行のログを列に分割します。
分割したログは、ALog(クラウド版)が用意した関数に展開します。

5.1.2.3. マッピング部

「マッピング部」では、テンプレートおよびマッピング設定で使用可能な関数を使って出力内容を指定します。

5.1.2.3.1. 「マッピング – 出力」の設定例
「マッピング – 出力」では、以下のように設定(例)を行います。
下記はあくまで一例となり、指定する詳細キーおよび詳細値は収集するデータにより異なりますので、データに合わせて設定が必要です。
../_images/MappingSettingOutputExample.png

No.

詳細キー

設定例の説明

1

Timestamp

必ず詳細値を指定する必要のある時刻を表す詳細キー
上記では、時刻に相当する文字列は「F(1)」に存在している
この場合、「F(1)」を詳細値で指定することで、「Timestamp」を表示させることができる

2

User

上記では、操作したユーザーの情報を「user」と定義し、詳細キーにユーザー情報が記載されている「{F(2)}」を指定している

3

Object

上記では、操作対象となったファイル情報について「Object」と定義し、詳細キーにファイル情報が記載されている「{F(4)}」を指定している

4

Operation

上記では、行われた操作を「Operation」と定義し、詳細キーに操作情報が記載されている「{F(5)}」を指定している

ヒント

  • 「詳細値」にALogの用意する関数「F()」とMicrosoft C#の標準的な関数「string.Split()」を組み合わせることで任意の情報を抽出する事が可能です。

  • 文字列の結合は、「{F(1)} {F(2)}」のように中括弧でくくり、並べて記載することで簡単に行えます。

ヒント

後述する「除外フィルター」を除き「Timestamp」と「詳細の各項目」に指定できる文字列はMicrosoft C#の補間文字列として扱われます。
そのため、{}で関数を括ることで、その評価結果を表示することが可能となっています。
逆に{}などで括らない文字列は、アクセスログへ直接出力されることになります。
例えば「F(3)」とした場合、アクセスログへ「F(3)」と出力されますが、「{F(3)}」とした場合は、F(3)の関数を実行し、その評価結果が文字列としてアクセスログへ割り当てられます。

注意

日付、時刻が別の列として現れる場合、時刻の自動判別には、日付と時刻の間にスペースが必要です。

注意

時刻項目に代入しようとする文字列が自動判別可能な時刻フォーマットまたは、任意に指定した時刻フォーマットに該当しない場合、変換処理がエラーとなります。
マッピング設定時にプレビュー画面などで変換後の時刻項目の文字列を確認し、マッピングの設定が正しい時刻フォーマットに則した文字列になっているかを確認してください。

注意

マッピングで指定できる式評価外の文字は、文字種によってエスケープシーケンスで入力する必要があります。
詳しくは「特別な文字列のエスケープ方法」を参照してください。

5.1.2.4. マッピング設定で使用可能な関数

5.1.2.4.1. ALog(クラウド版)が標準で用意している関数
ALog(クラウド版)では、マッピングの設定にあたり、以下の関数を標準で用意しています。
また、以下に記載した関数以外にも Microsoft C# が用意する関数の一部を使用できます。

関数

説明

string F(int idx)

分割した列のidx番目(カウントは1から)の文字列を取得する

string[] F(int start, int end)

分割した列のstart番目(カウントは1から)からend番目の文字列の配列を取得する
なお、取得した行の最後尾の列を指定する場合は。Endを-1にする
(例として、 2番目から最後までの列を取得する場合には、「F(2, -1)」と表記する)

DateTime Now()

関数が呼び出されたときの時間をそのまま文字列として出力する

DateTime Now(TimeSpan offset)

関数が呼び出されたときの時間をOffsetで指定した差分を加味して文字列として出力する

int LineCount()

読み込んだログの行数を数値として出力する
また区切り文字形式(CSV/TSV/DSV)では1レコードが複数行になる場合、1レコードを1行とする

string RawLine()

マッピングで1行に相当する行のすべての文字列を取得する

stirng Extract(
string input,
string pattern,
int groupIdx=1,
int matchIdx=-1
)
正規表現を使った、特定の文字列から特定のパターンに合致した文字のみを抽出する機能
inputには入力となる文字列を、patternには正規表現を指定できる
またpatternの内容に則して、グループとなる位置の指定(指定しなかった場合、最初のグループ)、またパターンが繰り返し適合(マッチ)した場合に、何番目に適合した文字列を抽出するかの指定をする(指定しなかった場合、最後に適合した文字列を抽出する)
DateTime ConvSerialToDateTime(
string input,
bool withLocalTimeGap = true
)
シリアル値(Unix時間、秒)を日付時間に変換する
Inputに入力された文字列をUnix時間(秒数)と勘案し、DateTimeに変換する
変換の際に、withLocalTimeGapをtrueにすると、入力された時間にALogサーバのUTC時差を付加し、出力する
falseの場合には、与えられた入力値をUTC0のまま出力する
DateTime ConvSerialMSToDateTime(
string input,
bool withLocalTimeGap = true
)
シリアル値(Unix時間、ミリ秒)を日付時間に変換する
Inputに入力された文字列をUnix時間(ミリ秒数)と勘案し、DateTimeに変換する
変換の際に、withLocalTimeGapをtrueにすると、入力された時間にALogサーバのUTC時差を付加し、出力する
falseの場合には、与えられた入力値をUTC0のまま出力する

int FCount()

分割した列の総数を返す

string KeySearch(
string line, string key, string
delimiter="\t", char
escapeChar='\\', string
escapedChars="\"\'\\", string
quotes="\"\'"
)
与えられた文字列から、指定したKey 項目に対する「値(Value)」を探す
line で指定した文字列の中からKey で指定したキー項目を探し、もしquotes で指定されている文字で引用されている場合は、quote で示された文字列を、そうでなければ、delimiter で指定した文字までを抽出し返す
もし当該のKey が発見されなかった場合は空文字を返す
詳細は「関数「KeySearch」の使用方法」を参照
5.1.2.4.2. CSV/TSV/DSV形式のログのみに使用できる関数

CSV/TSV/DSV形式のログに対しては以下の関数も使用できます。

関数

説明

string F(string rowName)

「マッピング-入力」設定で、[入力ファイルにヘッダーを含む]を有効にした場合、関数の引数にヘッダー名を使用することが可能
また、プレビュー画面でマッピング用の列名にヘッダー名が表示される
[入力ファイルにヘッダーを含む]を無効にして本関数を利用した場合、あるいは存在しないヘッダー名(列名)が指定された場合には、本関数は空文字を返す
5.1.2.4.3. JSON形式のログのみに使用できる関数

JSON形式のログに対しては以下の関数が使用できます。

関数

説明

string F(<JSONパス書式>)

JSON形式のログでフィールドの内容を取得するには、関数の引数にJSONパス書式で記述して指定する
例えば、取得したいオブジェクトのキー名が「Operation」の場合、本関数では「F("Operation")」と書く

以下の記号を用いて特定のオブジェクトの値を取得する事も可能

記号

意味

$

オブジェクトや要素のルート

. or [ ]

子オペレーター

[ ]

配列の指定

 例: JSONパスが /store/book[0]/titleの値を取得したい場合 「$.store.book[0].title」

注意

JSON形式では、添え字(数字)によるF()関数の指定が利用できません。

5.1.2.4.4. プレーンテキストのログのみに使用できる関数

プレーンテキストのログに対しては以下の関数が使用できます。

関数

説明

string FormatName()

自動フォーマット設定画面で指定したフォーマット名を使用することが可能

string F(string GroupName)

自動フォーマット設定画面で指定したグループ名を使用することが可能
また、プレビュー画面でマッピング用の列名にグループ名が表示される
5.1.2.4.5. 関数「KeySearch」の使用方法

「KeySearch」という関数は、入力データで順序に規則性のない「キー=値」のような組み合わせが複数出力されている場合に、「キー 名」を指定することで「キー名」で検索し、紐づく「値」を返すものです。

ここでは、代表でsyslog のメッセージ部分を例にし、キー名から値を検索する使用方法を説明します。
(例)

日付(F1)

ホスト (F2)

メッセージ (F3)

1 行目

Jan 6

10.249.3.13

version="1.0" class="high"uid="0"

2 行目

Jan 6

10.249.3.13

class="high"

3 行目

Jan 6

10.249.3.13

sshd="15880" version="1.1" class="high"uid="0"

メッセージ部分は複数の情報が含まれています。キーによっては存在する行と存在しない行があり得ます。
この中から「version の情報があった場合に値を出したい」という要望がある場合、メッセージ部の順番指定では切り出すことができません。
このようなときに 「KeySearch(F(3), "version=")」と指定すると、メッセージ内で「version」を探し、それに紐づく値を返すことができます。

関数返り値

1 行目

1.0

2 行目

(なし)

3 行目

1.1

【省略可能なオプション引数】
省略可能なオプションは、通常の使い方においてユーザーが指定する必要はありませんが、エスケープ文字の違いや区切り文字の異なったフォーマットの場合には、ユーザーが適宜、適切な文字を指定することで、KeyValue の探索ができるようになります。

オプション引数

初期値

解説

delimiter

「 」(空白)
「\t」(タブ)
ここで指定するのは「キーと値の組み合わせ」の間で分割する区切り文字である
通常このパラメタを変更する必要はないが、特殊な文字、例えば「,」などで区切られている場合にはdelimiter="," と指定する

escapeChar

「\」

クォートの中でエスケープが必要な際に、エスケープの開始文字を指定する
デフォルト値は「\」キャラクタで、後続に指定する被エスケープ文字(escapedChars)をエスケープするシーケンス開始として認識する

escapedChars

「"」「'」「\」

ここで指定される文字は、前述のescapeChar の後続で指定される「エスケープされる文字」を指定する

quotes

「"」「'」

Key に対する値が発見された場合に、それらの文字が「クォートされている」ときの、クォート文字を指定する

注意

「KeySearch」の関数は毎行キーを検索することになるため変換タスクのパフォーマンスは低下します。規則性のないログに限定して使用することを推奨します。

5.1.2.5. 時刻のマッピング処理

時刻へのマッピングにあたっては、時刻を自動認識する方法とユーザーが独自に時刻フォーマットを指定する方法の2つから選択できます。
下図のとおり、[時刻フォーマットを指定する]チェックボックスを外した状態(既定値)にするとマッピング処理において、ログ内で時刻に相当する項目を自動的に評価し、時刻を判別します。
独自書式の時刻フォーマットを指定する場合は、[時刻フォーマットを指定する]チェックボックスにチェックを入れ、[時刻フォーマット]に指定したい時刻フォーマットを入力します。
ここに指定できる文字列は、Microsoft C# の「カスタム日付書式」と同じものになります。
../_images/TimeMappingProcess.png

注意

時刻に代入しようとする文字列が自動判別可能な時刻フォーマットまたは、任意に指定した時刻フォーマットに該当しない場合、変換処理がエラーとなります。 プレビュー画面で変換後の時刻の文字列を確認し、正しい時刻フォーマットになっているかを確認してください。

5.1.2.5.1. 自動判別可能な時刻フォーマット

ALog(クラウド版)では、標準で以下の時刻フォーマットを自動で判別できます。

No.

フォーマット

例示

1

yyyy/MM/dd[T]HH:mm:ss.FFFFFFF

1999/12/31 23:59:59.123

2

yyyy/MM/dd[T]H:mm:ss.FFFFFFF

1999/12/31 9:59:59.123

3

yyyy-MM-dd[T]HH:mm:ss.FFFFFFF

1999-12-31 23:59:59.123

4

yyyy-MM-dd[T]H:mm:ss.FFFFFFF

1999-12-31 9:59:59.123

5

yyyy/MM/dd[T]HH:mm:ss

1999/12/31 23:59:59

6

yyyy/MM/dd[T]H:mm:ss

1999/12/31 9:59:59

7

yyyy-MM-dd[T]HH:mm:ss

1999-12-31 23:59:59

8

yyyy-MM-dd[T]H:mm:ss

1999-12-31 9:59:59

9

yyyyMMdd[T]HHmmssFFFFFFF

19991231 235959123

10

yyyyMMdd[T]HHmmss

19991231 235959

11

MMM dd HH:mm:ss.FFFFFFF

Dec 02 23:59:59.123

12

MMM d HH:mm:ss.FFFFFFF

Dec 2 23:59:59.123

13

MMM dd HH:mm:ss

Dec 02 23:59:59

14

MMM d HH:mm:ss

Dec 2 23:59:59

15

M d HH:mm:ss

12 2 23:59:59

16

MMMM d HH:mm:ss

December 2 23:59:59

ヒント

[T]は"T"あるいは空白であることを意味します。

注意

上記フォーマットにおいてss(秒指定)の部分は正のうるう秒を判定する事が可能です。
例えば23:59:60となった場合、翌日の00:00:00となります。

注意

MMMの指定に関して、ログ内で年にあたる情報が無い場合、変換時の月と、ログに示される月を比較し、自動的に年を補填します。 変換時点で経過した月の場合は今年を、経過していない月の場合は前年を自動的に補填します。

5.1.2.5.2. 独自書式での時刻フォーマット指定の例
ALog(クラウド版)では、時刻フォーマットを独自に指定できます。
ただし、設定する書式は、Microsoft C# で定義されているカスタム日時書式と同じ書式である必要があります。

以下にユーザーが独自に時刻フォーマットの書式を設定することで読み込める日時書式を例示します。

時刻フォーマットの例

設定値

1999/12/31 23:59:59 +09:00

yyyy/MM/dd HH:mm:ss zzz

Dec 31 1999 23:59:59

MMM dd yyyy HH:mm:ss

5.1.2.6. 除外フィルター

ALog(クラウド版)では、ユーザーが任意の条件を[除外フィルター]に指定することで、ログ内でその条件にマッチした行を出力対象外にできます。
この機能を利用することで、ユーザーはログ内の不必要な行を排除できます。

除外フィルターの条件は、Microsoft C#のbool(真偽値)を返す式で定義する必要があります。

../_images/ExclusionFilterSetting.png
5.1.2.6.1. 除外フィルターの指定の例
例として、下記のログに対し、除外フィルターとして、「F(3) != "WARN"」を指定した場合、1行目の「F(3)」は「INFO」のため、「F(3) != "WARN"」の評価結果は「真(True)」となり、式が成立するので、1行目は「出力対象外」のレコードとして処理されます。
しかし、2行目では、「F(3)」の内容が「WARN」となり、式の評価結果は「偽(False)」となり、出力対象のレコードとして処理されます。
このようにユーザーが定義した条件式を行毎に評価し、行の出力を制御できます。
../_images/ExclusionFilterLog.png

注意

除外フィルターの条件式は、マッチした場合に出力対象とするのではなく、出力対象外にするという点にご注意ください。

注意

除外フィルターの条件式がboolを返さない場合、[エラー時のふるまい]の設定の如何に関わらず、falseと評価され、除外されずに処理対象となります。

5.1.2.7. エラー時のふるまい

「エラー時のふるまい」は「エラーを無視し、フィールドを空文字にする」をご利用ください。

5.1.2.8. 重複する行を1行にマージする

ALog(クラウド版)ではアクセスログへの変換処理において、5秒以内に同じ内容のログレコードが連続して発生した場合、これらをマージできます。

制限事項がありますので、「ログ変換時のマージ処理について」 を確認してください。

../_images/DuplicateRowMergeSetting.png

注意

「重複する行を1行にマージ」にチェックが入っている場合、プレビュー画面でもマージ処理を行います。
ただし、プレビュー対象となるサンプルログの中にエラーとなる行が存在する場合、プレビュー画面ではマージされずに表示されます。
マージ結果を確認したい場合は、サンプルログに存在するエラーの原因を解消した上で再表示してください。

5.1.2.9. 特別な文字列のエスケープ方法

「マッピング設定―出力」設定には、以下のエスケープシーケンスが利用されます。 (これはMicrosoft C#における補間文字列の仕様と同等です。)

エスケープ

文字列名

\'

単一引用符(シングルクォーテーション)

\"

二重引用符(ダブルクォーテーション)

\\

バックスラッシュ(円記号に相当)

\0

Null

\a

警告

\b

バックスペース

\f

フォーム フィード

\n

改行

\r

キャリッジ リターン

\t

水平タブ

\U

サロゲート ペアの Unicode エスケープ シーケンス (例:\Unnnnnnnn)

\u

Unicode エスケープ シーケンス (例:\u0041 は "A"に相当)

\v

垂直タブ

\x

Unicode エスケープ シーケンス (可変長である点を除き "\u" に類似)

{{

波括弧(左辺) (このエスケープシーケンスは除外フィルターでは使用しない)

}}

波括弧(右辺) (このエスケープシーケンスは除外フィルターでは使用しない)

ヒント

上記一覧にて円記号で表記されている箇所は、UI上ではバックスラッシュ表記となります。