Container Insights でのデータ変換

この記事では、Container Insights でデータ変換を実装する方法について説明します。 Azure Monitor の変換を使用すると、Log Analytics ワークスペースに取り込まれる前にデータを変更またはフィルター処理できます。 クラスターから収集されたデータをフィルター処理してコストを抑えたり、受信データを処理してデータ クエリを支援したりするなどのアクションを実行できます。

データ収集ルール (DCR)

データ収集ルール (DCR) に変換を実装し、Azure Monitor でのデータ収集を構成するために使用します。 クラスターの Container Insights をオンボードすると、そのための DCR が、"MSCI-<クラスター リージョン>-<\クラスター名>" という名前で作成されます。 この DCR は、Azure portal で [監視] メニューの [データ収集ルール] から表示できます。 変換を作成するには、この DCR を変更するか、変換を含むカスタム DCR を使用してクラスターをオンボードする必要があります。

次の表では、DCR を編集するさまざまな方法について説明しますが、この記事の残りの部分では、Container Insights データを変換するために実行する必要がある編集の詳細を示します。

メソッド 説明
新しいクラスター 既存の ARM テンプレートを使用して、AKS クラスターを Container Insights にオンボードします。 そのテンプレートの DCR の dataFlows セクションを変更して、次のいずれかのサンプルのように変換を含めます。
既存の DCR クラスターが Container Insights にオンボードされたら、その DCR を編集し、「データ収集ルールの編集」のプロセスを使用して変換を含めます。

データ ソース

DCR の dataSources セクションには、DCR が処理するさまざまな種類の受信データを定義します。 Container Insights の場合、これには ContainerInsights 拡張機能が含まれます。これに、プレフィックス Microsoft- で始まる 1 つ以上の定義済み streams が含まれます。

DCR の Container Insights ストリームの一覧は、クラスターに対して選択したコスト プリセットによって異なります。 すべてのテーブルを収集する場合、DCR は Microsoft-ContainerInsights-Group-Default ストリームを使用します。これは、Stream 値に一覧表示されているすべてのストリームを含むグループ ストリームです。 変換を使用する場合は、これを個々のストリームに変更する必要があります。 その他のコスト プリセット設定では、既に個々のストリームが使用されるようになっています。

次のスニペットは Microsoft-ContainerInsights-Group-Default ストリームを示しています。 個々のストリームのサンプルについては、「サンプル DCR」を参照してください。

"dataSources": {
    "extensions": [
        {
            "name": "ContainerInsightsExtension",
            "extensionName": "ContainerInsights",
            "extensionSettings": { },
            "streams": [
                "Microsoft-ContainerInsights-Group-Default"
            ]
        }
    ]
}

データ フロー

DCR の dataFlows セクションは、ストリームと宛先を照合します。 変換を必要としないストリームは、ワークスペースの宛先のみを含む 1 つのエントリにまとめることができます。 変換を必要とするストリーム用に個別のエントリを作成します。これには、ワークスペースの定義と transformKql プロパティを含めます。

次のスニペットは、変換を含む 1 つのストリームの dataFlows セクションを示しています。 1 つの DCR 内の複数のデータ フローについては、「サンプル DCR」を参照してください。

"dataFlows": [
    {
        "streams": [
            "Microsoft-ContainerLogV2"
        ],
        "destinations": [
            "ciworkspace"
        ],
        "transformKql": "source | where PodNamespace == 'kube-system'"
    }
]

サンプル DCR

次のサンプルは、変換を使用する Container Insights の DCR を示しています。 これらのサンプルを出発点として使用し、必要に応じて特定の要件を満たすようにカスタマイズします。

特定の名前空間のフィルター処理

このサンプルでは、ログ クエリ source | where PodNamespace == 'kube-system' を使用して、1 つの名前空間のデータを ContainerLogsV2 で収集します。 このクエリの kube-system を別の名前空間に置き換えるか、where 句を別のフィルターに置き換えて、収集する特定のデータと一致させることができます。 他のストリームは別のデータ フローにグループ化され、変換は適用されません。

{
    "properties": {
        "dataSources": {
            "syslog": [],
            "extensions": [
                {
                    "name": "ContainerInsightsExtension",                    
                    "extensionName": "ContainerInsights",
                    "extensionSettings": { },
                    "streams": [
                        "Microsoft-ContainerLog",
                        "Microsoft-ContainerLogV2",
                        "Microsoft-KubeEvents",
                        "Microsoft-KubePodInventory",
                        "Microsoft-KubeNodeInventory",
                        "Microsoft-KubePVInventory",
                        "Microsoft-KubeServices",
                        "Microsoft-KubeMonAgentEvents",
                        "Microsoft-InsightsMetrics",
                        "Microsoft-ContainerInventory",
                        "Microsoft-ContainerNodeInventory",
                        "Microsoft-Perf"
                    ]
                }
            ]
        },
        "destinations": {
            "logAnalytics": [
                {
                    "workspaceResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
                    "name": "ciworkspace"
                }
            ]
        },
        "dataFlows": [
            {
                "streams": [
                    "Microsoft-ContainerLog",
                    "Microsoft-KubeEvents",
                    "Microsoft-KubePodInventory",
                    "Microsoft-KubeNodeInventory",
                    "Microsoft-KubePVInventory",
                    "Microsoft-KubeServices",
                    "Microsoft-KubeMonAgentEvents",
                    "Microsoft-InsightsMetrics",
                    "Microsoft-ContainerNodeInventory",
                    "Microsoft-Perf"
                ],
                "destinations": [
                    "ciworkspace"
                ]
            },
            {
                "streams": [
                    "Microsoft-ContainerLogV2"
                ],
                "destinations": [
                    "ciworkspace"
                ],
                "transformKql": "source | where PodNamespace == 'kube-system'"
            }
        ] 
    }
}

テーブルに列を追加する

このサンプルでは、ログ クエリ source | extend new_CF = ContainerName を使用して、ContainerLogV2 テーブルに追加されたカスタム列にデータを送信します。 この変換では、「カスタム列を追加または削除する」で説明されているプロセスを使用して、カスタム列をテーブルに追加する必要があります。 他のストリームは別のデータ フローにグループ化され、変換は適用されません。

{
    "properties": {
        "dataSources": {
            "syslog": [],
            "extensions": [
                {
                    "extensionName": "ContainerInsights",
                    "extensionSettings": { },
                    "name": "ContainerInsightsExtension",
                    "streams": [
                        "Microsoft-ContainerLog",
                        "Microsoft-ContainerLogV2",
                        "Microsoft-KubeEvents",
                        "Microsoft-KubePodInventory",
                        "Microsoft-KubeNodeInventory",
                        "Microsoft-KubePVInventory",
                        "Microsoft-KubeServices",
                        "Microsoft-KubeMonAgentEvents",
                        "Microsoft-InsightsMetrics",
                        "Microsoft-ContainerInventory",
                        "Microsoft-ContainerNodeInventory",
                        "Microsoft-Perf"
                    ]
                }
            ]
        },
        "destinations": {
            "logAnalytics": [
                {
                    "workspaceResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
                "name": "ciworkspace"
                }
            ]
        },
        "dataFlows": [
            {
                "streams": [
                    "Microsoft-ContainerLog",
                    "Microsoft-KubeEvents",
                    "Microsoft-KubePodInventory",
                    "Microsoft-KubeNodeInventory",
                    "Microsoft-KubePVInventory",
                    "Microsoft-KubeServices",
                    "Microsoft-KubeMonAgentEvents",
                    "Microsoft-InsightsMetrics",
                    "Microsoft-ContainerNodeInventory",
                    "Microsoft-Perf"
                ],
                "destinations": [
                "ciworkspace"
                ]
            },
            {
                "streams": [
                    "Microsoft-ContainerLogV2"
                ],
                "destinations": [
                    "ciworkspace"
                ],
                "transformKql": "source\n | extend new_CF = ContainerName"
            }
        ]
    }
}

次のステップ