Azure Monitor での変換のサンプル
Azure Monitor の変換を使用すると、受信データが Log Analytics ワークスペースに送信される前に、それをフィルター処理または変更することができます。 この記事では、独自の変換を作り始めるために使用できる、一般的なシナリオ向けのサンプル クエリも提供します。 これらの変換のテストとデータ収集ルール (DCR) へのその追加について詳しくは、「Azure Monitor で変換を作成する」をご覧ください。
データ コストを削減する
Log Analytics ワークスペースに送信されるデータについてはインジェスト コストが発生するため、コストを削減するには、不要なデータを除外する必要があります。
データの行をフィルター処理する
特定の要件に一致する着信データをフィルター処理するには、where
ステートメントを使います。 着信レコードがステートメントと一致しない場合、レコードは宛先に送信されません。 次の例では、重大度が Critical
のレコードのみが収集されます。
source | where severity == "Critical"
データの列をフィルター処理する
データ インジェスト コストを節約するため、不要な列をデータ ソースから削除します。 出力内の列を指定するには project
ステートメントを使い、削除する列のみを指定するには project-away
を使います。 次の例では、RawData
列が出力から削除されます。
source | project-away RawData
列の重要なデータを解析する
重要なデータを含む列が、多すぎるテキストに埋もれてしまう場合があります。 価値のあるデータのみを保持し、必要のないテキストを削除します。 目的のデータを解析するには、substring
やextract
などの文字列関数を使います。 parse
や split
を使って、1 つの列を複数の値に分割してデータを解析し、目的の列を選ぶこともできます。 その後、extend
を使って解析の済んだデータを含む新しい列を作成し、project-away
で元の列を削除します。
警告
複雑な解析コマンドの使用に関するヒントについては、「大きな解析コマンドを分割する」をご覧ください。
次の例の RequestContext
列には、ワークスペース ResourceId に関する JSON が含まれています。 parse_json
と split
関数を使って、ワークスペースの単純な名前を抽出します。 この値のための新しい列を作成して、他の列を削除します。
source
| extend Context = parse_json(RequestContext)
| extend Workspace_CF = tostring(Context['workspaces'][0])
| extend WorkspaceName_CF = split(Workspace_CF,"/")[8]
| project-away RequestContext, Context, Workspace_CF
行を基本ログに送信する
基本的なクエリ機能を必要とするデータ内の行を基本ログ テーブルに送信することで、インジェスト コストを削減できます。 複数のテーブルにデータを送信する方法について詳しくは、「データを複数のテーブルに送信する」をご覧ください。
機密データを削除する
データ ソースによっては、プライバシーやコンプライアンス上の理由から、保存するのが望ましくない情報が送信される場合があります。
機密情報をフィルター処理する
機密情報を含む行全体または特定の列を除外するには、「データ コストを削減する」で説明されているのと同じ戦略を使います。 次の例では、ClientIP
列が出力から削除されます。
source | project-away ClientIP
機密情報を難読化する
IP アドレスや電話番号に含まれる数字などの情報を共通の文字に置き換えるには、文字列関数を使います。 次の例では、メール アドレスのユーザー名を "*****" に置き換えています。
source | extend Email = replace_string(Email,substring(Email,0,indexof(Email,"@")),"*****")
代替テーブルに送信する
ロールベースのアクセス制御構成が異なる別のテーブルに機密レコードを送信します。 複数のテーブルにデータを送信する方法について詳しくは、「データを複数のテーブルに送信する」をご覧ください。
データをエンリッチ化する
変換を使用してデータに情報を追加することで、ビジネス コンテキストを提供したり、その後のデータ クエリを簡略化したりすることができます。 文字列関数を使って列から重要な情報を抽出した後、extend
ステートメントを使って新しい列をデータ ソースに追加します。 次の例では、別の列の IP アドレスが内部のものか外部のものかを識別する列を追加しています。
source | extend IpLocation = iff(split(ClientIp,".")[0] in ("10","192"), "Internal", "External")
変換先に合わせてデータをフォーマットする
変換先テーブルの構造と一致しない形式でデータがデータ ソースから送信されることがあります。 変換を利用し、必須のスキーマにデータを再フォーマットします。
スキーマを変更する
着信データのスキーマをターゲット テーブルと一致するように変更するには、extend
や project
などのコマンドを使います。 次の例では、KQL 関数を使って現在時刻を返す発信データに、TimeGenerated
という新しい列を追加しています。
source | extend TimeGenerated = now()
データを解析する
データを解析して変換先テーブルで複数の列にするには、split
または parse
演算子を使います。 次の例では、着信データに含まれる RawData
という名前のコンマ区切り列を、変換先テーブルで個別の列に分割しています。
source
| project d = split(RawData,",")
| project TimeGenerated=todatetime(d[0]), Code=toint(d[1]), Severity=tostring(d[2]), Module=tostring(d[3]), Message=tostring(d[4])
警告
複雑な解析コマンドの使用に関するヒントについては、「大きな解析コマンドを分割する」をご覧ください。