5. 高度なマッピング設定¶
5.1. ログのマッピング¶
本章ではログタイプで「その他」を選択した場合の、ログの入出力およびマッピングについて説明します。
5.1.1. マッピング設定 – 入力¶
5.1.1.1. ログフォーマットの選択¶
各画面で設定する項目について解説します。
ログフォーマット
項目
説明
プレーンテキスト
文字コード
入力されるログファイルの文字コードを指定する
自動フォーマット設定
入力されるサンプルデータから候補となる正規表現を自動生成する- 詳細は「[自動フォーマット設定]」CSV/TSV/DSV
文字コード
入力されるログファイル(テキスト)の文字コードを指定する
区切り文字
各列を区切る文字を指定するカンマ、タブ、スペースなど、ユーザーは任意の文字を指定できるただし、ダブルクォーテーションや連続した同じ文字などは指定できない入力ファイルにヘッダーを含む
この設定を有効にすると、ファイルの最初の行はファイルのヘッダーとして扱われ、マッピング処理の対象から除外される
空のフィールドを除外
この設定を有効にすると、指定した区切り文字で区切られたフィールドの内容が空だった場合にフィールドとして扱われない例: 区切り文字「空白」の際、連続空白を除外したいコメント行の先頭文字
ここで指定した文字が行頭に出現した場合、当該行はコメント行として扱われ、マッピング処理の対象から除外される
イベントログ
イベントID
収集したイベントログのうち、イベントIDを限定したい場合に使用する- 複数のイベントIDを指定したい場合は、カンマ区切りで列挙する- 特定の範囲のイベントIDを指定したい場合は、「数字-数字」のようにする- 処理対象外(除外)とするイベントIDの指定はできない- イベントIDの指定は最大23個Syslog
文字コード
入力されるSyslog形式のログファイルの文字コードを指定する
JSON
文字コード
入力されるJSON形式のログファイルの文字コードを指定する
![]()
![]()
![]()
![]()
![]()
ヒント
注意
5.1.1.2. [自動フォーマット設定]¶
ポイント
使い方
1
適切なサンプルデータを指定する
2
[時刻フォーマット]タブ で時刻の正規表現を決定する
3
[フォーマット(数字)]タブ で時刻以外の正規表現を決定する
4
プレビューで確認する、必要に応じてフォーマット設定を調整する
ヒント
サンプルデータは先頭から2000行分を表示します。
注意
5.1.1.2.1. [時刻フォーマット]タブ¶
サンプルデータから時刻フォーマットを抽出するため[自動抽出]ボタンをクリックする
ALogが自動でフォーマットを抽出することを確認
サンプルデータの時刻部分がマークされる
「正規表現文字列」欄に正規表現が表示される
![]()
変更したい場合は、「正規表現文字列」欄を手動で変更し[自動抽出]ボタンをクリックする
ヒント
Microsoft C#で使われる一般的な正規表現文字列が使用可能です。
自動判別できる時刻フォーマットは 自動判別可能な時刻フォーマット と同様です。
1つの対象サーバに対し、時刻フォーマットは1つのみ設定できます。
ヒント
5.1.1.2.2. [フォーマット(数字)]タブ¶
[追加]ボタンをクリックし、フォーマットタブを作成、この時点でALogが自動でフォーマットを抽出することを確認
サンプルデータ内に存在するフォーマットの正規表現が「正規表現文字列の候補一覧」に表示される
このとき自動生成される正規表現は、時刻として指定した箇所の次の文字からとなる
候補一覧をクリックしながら、希望の正規表現を決定する
フォーマット名、正規表現文字列、グループ名を必要に応じて変更し、プレビューで確認する
フォーマット名についてそのログを指し示すわかりやすい名前を付ける例:1つ目のフォーマットに「LOGIN」、2つ目のフォーマットに「LOGOUT」など正規表現文字列についてMicrosoft C#で使われる一般的な正規表現を使用して変更することができるグループ名についてグループ名は、次に設定する「マッピング設定 - 出力」において関数として使用される出力側でわかりやすくしたい場合は事前にここで変更する同一フォーマット内で同じグループ名を設定することはできない複数フォーマットでは同じグループ名を設定することができる![]()
複数のフォーマットを作成したい場合は、この作業を繰り返す
複数のフォーマットを作成する例サンプルデータのログが100行あり、最初に定義したフォーマット1では10行目~30行目のログが抽出できなかった場合、フォーマット2を作成して10行目~30行目のログを抽出する
タブ数の制限はない
同じ行のログで複数のフォーマット設定で抽出された場合、左側のフォーマット設定タブの内容を優先する
5.1.2. マッピング設定 - 出力¶
5.1.2.1. マッピング処理の概要¶
5.1.2.2. デコーダ部¶
「デコーダ部」では、以下のような処理を行っています。
5.1.2.2.1. 行の分割処理¶
注意
Windowsアクセスログ以外のログタイプでは、複数行のログを1つの行として扱うことができません。そのため、1つの処理で複数行のログが出力されるケースでは対象ホスト側のログ出力設定を変更し、1行のログにする必要があります。
5.1.2.2.2. 列の分割処理および列の展開¶
5.1.2.3. マッピング部¶
「マッピング部」では、テンプレートおよびマッピング設定で使用可能な関数を使って出力内容を指定します。
5.1.2.3.1. 「マッピング – 出力」の設定例¶
![]()
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)}」のように中括弧でくくり、並べて記載することで簡単に行えます。
ヒント
注意
日付、時刻が別の列として現れる場合、時刻の自動判別には、日付と時刻の間にスペースが必要です。
注意
注意
5.1.2.4. マッピング設定で使用可能な関数¶
5.1.2.4.1. ALog(クラウド版)が標準で用意している関数¶
関数
説明
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, stringdelimiter="\t", charescapeChar='\\', stringescapedChars="\"\'\\", stringquotes="\"\'") 与えられた文字列から、指定した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」という関数は、入力データで順序に規則性のない「キー=値」のような組み合わせが複数出力されている場合に、「キー 名」を指定することで「キー名」で検索し、紐づく「値」を返すものです。
日付(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" |
関数返り値 |
|
---|---|
1 行目 |
1.0 |
2 行目 |
(なし) |
3 行目 |
1.1 |
オプション引数 |
初期値 |
解説 |
---|---|---|
delimiter |
「 」(空白)
「\t」(タブ)
|
ここで指定するのは「キーと値の組み合わせ」の間で分割する区切り文字である
通常このパラメタを変更する必要はないが、特殊な文字、例えば「,」などで区切られている場合にはdelimiter="," と指定する
|
escapeChar |
「\」 |
クォートの中でエスケープが必要な際に、エスケープの開始文字を指定する
デフォルト値は「\」キャラクタで、後続に指定する被エスケープ文字(escapedChars)をエスケープするシーケンス開始として認識する
|
escapedChars |
「"」「'」「\」 |
ここで指定される文字は、前述のescapeChar の後続で指定される「エスケープされる文字」を指定する |
quotes |
「"」「'」 |
Key に対する値が発見された場合に、それらの文字が「クォートされている」ときの、クォート文字を指定する |
注意
5.1.2.5. 時刻のマッピング処理¶
![]()
注意
時刻に代入しようとする文字列が自動判別可能な時刻フォーマットまたは、任意に指定した時刻フォーマットに該当しない場合、変換処理がエラーとなります。 プレビュー画面で変換後の時刻の文字列を確認し、正しい時刻フォーマットになっているかを確認してください。
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. 独自書式での時刻フォーマット指定の例¶
以下にユーザーが独自に時刻フォーマットの書式を設定することで読み込める日時書式を例示します。
時刻フォーマットの例
設定値
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. 除外フィルター¶
除外フィルターの条件は、Microsoft C#のbool(真偽値)を返す式で定義する必要があります。
5.1.2.6.1. 除外フィルターの指定の例¶
注意
除外フィルターの条件式は、マッチした場合に出力対象とするのではなく、出力対象外にするという点にご注意ください。
注意
除外フィルターの条件式がboolを返さない場合、[エラー時のふるまい]の設定の如何に関わらず、falseと評価され、除外されずに処理対象となります。
5.1.2.7. エラー時のふるまい¶
「エラー時のふるまい」は「エラーを無視し、フィールドを空文字にする」をご利用ください。
5.1.2.8. 重複する行を1行にマージする¶
ALog(クラウド版)ではアクセスログへの変換処理において、5秒以内に同じ内容のログレコードが連続して発生した場合、これらをマージできます。
制限事項がありますので、「ログ変換時のマージ処理について」 を確認してください。
注意
「重複する行を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上ではバックスラッシュ表記となります。