컨테이너 인사이트의 데이터 변환

이 문서에서는 컨테이너 인사이트에서 데이터 변환을 구현하는 방법을 설명합니다. Azure Monitor의 변환을 사용하면 Log Analytics 작업 영역에 데이터가 수집되기 전에 데이터를 수정하거나 필터링할 수 있습니다. 이를 통해 클러스터에서 수집된 데이터를 필터링하여 비용을 절약하거나 들어오는 데이터를 처리하여 데이터 쿼리를 지원하는 등의 작업을 수행할 수 있습니다.

DCR(데이터 수집 규칙)

변환은 Azure Monitor에서 데이터 수집을 구성하는 데 사용되는 DCR(데이터 수집 규칙)에서 구현됩니다. 클러스터에 대한 컨테이너 인사이트를 온보딩하면 해당 클러스터에 대해 MSCI-<cluster-region>-<\cluster-name>이라는 이름의 DCR이 만들어집니다. Azure Portal의 모니터링 메뉴에 있는 데이터 수집 규칙에서 이 DCR을 볼 수 있습니다. 변환을 만들려면 이 DCR을 수정하거나 변환이 포함된 사용자 지정 DCR을 사용하여 클러스터를 온보딩해야 합니다.

다음 표에서는 DCR을 편집하는 다양한 방법을 설명하고, 이 문서의 나머지 부분에서는 컨테이너 인사이트 데이터를 변환하기 위해 수행해야 하는 편집에 대한 세부 정보를 제공합니다.

메서드 설명
새 클러스터 기존 ARM 템플릿을 사용하여 AKS 클러스터를 컨테이너 인사이트에 온보딩합니다. 아래 샘플 중 하나와 유사한 변환을 포함하도록 해당 템플릿에서 DCR의 dataFlows 섹션을 수정합니다.
기존 DCR 클러스터가 컨테이너 인사이트에 온보딩된 후 데이터 수집 규칙 편집 프로세스를 사용하여 변환을 포함하도록 DCR을 편집합니다.

데이터 원본

DCR의 dataSources 섹션은 DCR이 처리할 다양한 형식의 수신 데이터를 정의합니다. 컨테이너 인사이트의 경우 여기에는 접두사 Microsoft-로 시작하는 하나 이상의 미리 정의된 streams가 포함된 ContainerInsights 확장이 포함됩니다.

DCR의 컨테이너 인사이트 스트림 목록은 클러스터에 대해 선택한 비용 사전 설정에 따라 다릅니다. 모든 테이블을 수집하는 경우 DCR은 스트림 값에 나열된 모든 스트림을 포함하는 그룹 스트림인 Microsoft-ContainerInsights-Group-Default 스트림을 사용합니다. 변환을 사용하려면 이를 개별 스트림으로 변경해야 합니다. 다른 비용 사전 설정 설정은 이미 개별 스트림을 사용합니다.

아래 코드 조각은 Microsoft-ContainerInsights-Group-Default 스트림을 보여 줍니다. 개별 스트림의 샘플은 샘플 DCR을 참조하세요.

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

데이터 흐름

DCR의 dataFlows 섹션은 스트림을 대상과 일치시킵니다. 변환이 필요하지 않은 스트림은 작업 영역 대상만 포함하는 단일 항목으로 그룹화할 수 있습니다. 작업 영역 대상과 transformKql 속성을 포함하는 변환이 필요한 스트림에 대해 별도의 항목을 만듭니다.

아래 코드 조각은 변환이 포함된 단일 스트림에 대한 dataFlows 섹션을 보여 줍니다. 단일 DCR의 여러 데이터 흐름에 대해서는 샘플 DCR을 참조하세요.

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

샘플 DCR

다음 샘플은 변환을 사용한 컨테이너 인사이트에 대한 DCR을 보여 줍니다. 이러한 샘플을 시작점으로 사용하고 특정 요구 사항을 충족하도록 필요에 따라 사용자 지정합니다.

특정 네임스페이스에 대한 필터링

이 샘플은 로그 쿼리 source | where PodNamespace == 'kube-system'을 사용하여 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"
            }
        ]
    }
}

다음 단계