データ収集ルールを使用すると、Azure テーブルまたはカスタム テーブルにデータを送信する前に、ログ データをフィルター処理して変換できます。 この記事では、カスタム テーブルを作成し、Log Analytics ワークスペース内のテーブルにカスタム列を追加する方法について説明します。
重要
テーブル スキーマを更新するときは必ず、テーブルにデータを送信するデータ収集ルールを更新してください。 データ収集ルールで定義するテーブル スキーマによって、Azure Monitor でターゲット テーブルにデータがストリーミングされる方法が決まります。 テーブル スキーマを変更しても、Azure Monitor によってデータ収集ルールが自動的に更新されることはありません。
前提条件
アクション |
アクセス許可が必要 |
テーブルの管理 |
Log Analytics ワークスペース以上のスコープでの Microsoft.OperationalInsights/workspaces/* アクセス許可。
たとえば、特権組み込みロールによって提供される Log Analytics 共同作成者などです。 |
テーブルにデータを取り込むには、次のものが必要な場合があります。
データ収集エンドポイント (DCE)。 詳細については、 DCE を参照してください。
JSON ファイル内のソース データの少なくとも 1 つのレコードのサンプル。 これは、VM からテキストと JSON データ ソースを収集するために必要なものなど、ポータルでカスタム テーブルを作成するために使用されます
[
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
},
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
},
{
"TimeGenerated": "supported_datetime_format",
"<column_name_1>": "<column_name_1_value>",
"<column_name_2>": "<column_name_2_value>"
}
]
Log Analytics ワークスペース内のすべてのテーブルには、レコードのインジェスト時間を識別するために使用される TimeGenerated
列が必要です。 列がない場合は、テーブルの DCR の変換に自動的に追加されます。 詳細については、 サポートされている datetime 形式を参照してください。
カスタム テーブルを作成する
Azure テーブルには、定義済みのスキーマがあります。 ログ データを別のスキーマで格納するには、データ収集ルールを使用してデータを収集、変換し、Log Analytics ワークスペースのカスタム テーブルに送信する方法を定義します。 補助プランを使用してカスタム テーブルを作成するには、「補助プラン を使用してテーブルを設定する」を参照してください。
重要
カスタム テーブルには、_CL というサフィックスが付いています。たとえば tablename_CL です。 Azure portal では、テーブル名に _CL サフィックスが自動的に追加されます。 別の方法を使用してカスタム テーブルを作成する場合は、_CL サフィックスを自分で追加する必要があります。 データ収集ルールの DataFlows Streams プロパティの tablename_CL は、Log Analytics ワークスペースの tablename_CL 名と一致する必要があります。
警告
テーブル名は課金目的で使用されるため、機密情報を含めないようにします。
Azure portal を使ってカスタム テーブルを作成するには:
[Log Analytics ワークスペース] メニューから [テーブル] を選択します。
[作成] を選択してから、[New custom log (DCR based)] (新しいカスタム ログ (DCR ベース)) を選択します。
テーブルの名前と、必要に応じて説明を指定します。
_CL サフィックスをカスタム テーブルの名前に追加する必要はありません。これは、ポータルで指定した名前に自動的に追加されます。
[データ収集ルール] ドロップダウンから既存のデータ収集ルールを選択します。または、[新しいデータ収集ルールの作成] を選択して、新しいデータ収集ルールの [サブスクリプション]、[リソース グループ]、[名前] を指定します。
[データ収集エンドポイント] を選択し、[次へ] を選択します。
[ファイルの参照] を選択し、新しいテーブルのサンプル データを含む JSON ファイルを見つけます。
サンプル データに TimeGenerated
列が含まれていない場合は、この列で変換が作成されていることを示すメッセージが表示されます。
テーブルに取り込む前にログ データを変換する場合:
[変換エディター] を選択します。
変換エディターを使用すると、受信データ ストリームの変換を作成できます。 これは、受信した各レコードに対して実行される KQL クエリです。 Azure Monitor ログでは、クエリの結果が変換先のテーブルに格納されます。
[実行] をクリックして結果を表示します。
[適用] を選択して変換を保存し、作成しようとしているテーブルのスキーマを表示します。
[次へ] をクリックして続行します。
最後の詳細を確認し、[作成] を選択してカスタム ログを保存します。
次の PowerShell コードを使用してカスタム テーブルを作成するには、 Tables - Update PATCH API を使用します。 このコードでは、2 つの列を含む MyTable_CL という名前のテーブルを作成します。 このスキーマを変更して、別のテーブルを収集します。
Azure portal で [Cloud Shell] ボタンを選択して、環境が [PowerShell] に設定されていることを確認します。
次の PowerShell コードをコピーし、 コマンドの Invoke-AzRestMethod
パラメーターをワークスペースの適切な値に置き換えます。 それを Cloud Shell のプロンプトに貼り付けて、実行します。
$tableParams = @'
{
"properties": {
"schema": {
"name": "MyTable_CL",
"columns": [
{
"name": "TimeGenerated",
"type": "DateTime"
},
{
"name": "RawData",
"type": "String"
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/MyTable_CL?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
テーブルを削除する
Azure テーブルではないテーブルは削除できますが、データの削除方法はテーブルの種類によって異なります。
詳細については、「Log Analytics ワークスペース内のテーブルを削除したときにデータがどうなるか」を参照してください。
Azure portal からテーブルを削除するには:
[Log Analytics ワークスペース] メニューから [テーブル] を選択します。
削除するテーブルを名前で検索するか、[種類] フィールドで検索結果を選んで検索します。
削除するテーブルを選択し、テーブルの右側にある省略記号 (...)、[削除] の順に選択します。「yes」と入力して削除を確定します。
PowerShell を使用してテーブルを削除するには、次のようにします。
Azure portal で [Cloud Shell] ボタンを選択して、環境が [PowerShell] に設定されていることを確認します。
次の PowerShell コードをコピーし、 コマンドの Invoke-AzRestMethod
パラメーターをワークスペースの適切な値に置き換えます。 それを Cloud Shell のプロンプトに貼り付けて、実行します。
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/NewCustom_CL?api-version=2021-12-01-preview" -Method DELETE
カスタム列を追加または削除する
カスタム テーブルでは、テーブルの作成後に列を追加または削除することで、スキーマを変更できます。 Azure テーブルでは、カスタム列の追加と削除のみが許可されます。
カスタム テーブルの列名を定義する場合は、次の規則を使用します。
列名は文字 (A ~ Z または a ~ z) で始まる必要があります。
最初の文字の後には、文字、数字、またはアンダースコアのみを使用します。
列名にスペース、ドット、ダッシュ、またはその他の句読点を使用しないでください。
ASCII 以外の文字 (Æ、É、Ö など) は列名ではサポートされていません。
列名の大文字と小文字が区別されるのは、Analytics と Basic テーブルの場合のみです。 補助ログ テーブルのインジェストでは、相違が大文字と小文字の違いのみである重複する列名のデータは破棄されます。
列名の長さは 2 ~ 45 文字にする必要があります。
Azure テーブルのカスタム列名の末尾が _CF
id
、BilledSize
、IsBillable
、InvalidTimeGenerated
、TenantId
、Title
、Type
、UniqueId
、_ItemId
、_ResourceGroup
、_ResourceId
、_SubscriptionId
、_TimeReceived
など、システムまたは予約列と競合する名前は使用しないでください。
重要
カスタム テーブルのスキーマ規則は、 一般的な Kusto 識別子規則よりも厳密です。 Kusto はクエリで引用符で囲まれた通常とは異なるプロパティ名を参照できますが、カスタム テーブル スキーマでは列名に対して文字、数字、アンダースコアのみを受け入れます。
Log Analytics ワークスペースのテーブルにカスタム列を追加するか、列を削除するには:
[Log Analytics ワークスペース] メニューから [テーブル] を選択します。
編集するテーブルの右側にある省略記号 (...)、[スキーマの編集] の順に選択します。
[スキーマ エディター] 画面が開きます。
[スキーマ エディター] 画面の [カスタム列] セクションまで下にスクロールします。
新しい列を追加するには:
-
[列の追加] を選択します。
- 列の名前と説明 (省略可能) を設定し、[型] ドロップダウンから必要な値の型を選択します。
-
[保存] を選択して新しい列を保存します。
列を削除するには、削除する列の左側にある [削除] アイコンを選択します。
Azure またはカスタム テーブルに新しい列を追加するには、次を実行します。
$tableParams = @'
{
"properties": {
"schema": {
"name": "<TableName>",
"columns": [
{
"name": ""<ColumnName>",
"description": "First custom column",
"type": "string",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/<TableName>?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
PUT
呼び出しを使用すると、更新されたテーブル プロパティが返され、そこに、新しく追加した列が含まれています。
例
このコマンドを実行して、Custom1_CF
という名前のカスタム列を Azure Heartbeat
テーブルに追加します。
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
{
"name": "Custom1_CF",
"description": "The second custom column",
"type": "datetime",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
ここで、新しく追加した列を削除し、代わりに別のものを追加するには、次を実行します。
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
{
"name": "Custom2_CF",
"description": "The second custom column",
"type": "datetime",
"isDefaultDisplay": true,
"isHidden": false
}
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
テーブル内のすべてのカスタム列を削除するには、次を実行します。
$tableParams = @'
{
"properties": {
"schema": {
"name": "Heartbeat",
"columns": [
]
}
}
}
'@
Invoke-AzRestMethod -Path "/subscriptions/{subscription}/resourcegroups/{resourcegroup}/providers/microsoft.operationalinsights/workspaces/{workspace}/tables/Heartbeat?api-version=2021-12-01-preview" -Method PUT -payload $tableParams
関連コンテンツ