Transformação de dados em insights de contêiner

Este artigo descreve como implementar transformações de dados em insights de contêiner. As transformações no Azure Monitor permite modificar ou filtrar dados antes de serem ingeridos no workspace do Log Analytics. Elas permitem que você execute ações como filtrar dados coletados do cluster para reduzir custos ou processar dados de entrar para ajudar nas consultas de dados.

DCRs (regras de coleta de dados)

As transformações são implementadas em DCRs (regras de coleta de dados) que são usadas para configurar a coleta de dados no Azure Monitor. Quando você integra insights de contêiner para um cluster, uma DCR é criada para ele com o nome MSCI-<cluster-region>-<\cluster-name>. Você pode exibir essa DCR de Regras de Coleta de Dados no menu Monitor no portal do Azure. Para criar uma transformação, você deve modificar essa DCR ou integrar seu cluster com uma DCR personalizada que inclua sua transformação.

A tabela a seguir descreve os diferentes métodos para editar a DCR, enquanto o restante deste artigo fornece detalhes das edições que você precisa executar para transformar dados de insights de contêiner.

Método Descrição
Novo cluster Use um modelo do Resource Manager existente para integrar um cluster do AKS aos insights de contêiner. Modifique a seção dataFlows da DCR nesse modelo para incluir uma transformação, semelhante a um dos exemplos abaixo.
DCR existente Depois que um cluster tiver sido integrado aos insights de contêiner, edite sua DCR para incluir uma transformação usando o processo em Editar Regras de Coleta de Dados.

Fontes de dados

A seção dataSources da DCR define os diferentes tipos de dados de entrada que a DCR irá processar. Para insights de contêiner, isso inclui a extensão ContainerInsights, que inclui uma ou mais streams predefinidas, começando com o prefixo Microsoft-

A lista de fluxos de insights de contêiner na DCR depende da Predefinição de custo selecionada para o cluster. Se você coletar todas as tabelas, a DCR usará o fluxo Microsoft-ContainerInsights-Group-Default, que é um fluxo de grupo que inclui todos os fluxos listados em Valores de fluxo. Você deve alterar isso para fluxos individuais se quiser usar uma transformação. Qualquer outra configuração predefinida de custo já estará usando fluxos individuais.

O snippet abaixo mostra o fluxo Microsoft-ContainerInsights-Group-Default. Consulte as DCRS de exemplo para obter um exemplo de fluxos individuais.

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

Fluxos de dados

A seção dataFlows da DCR corresponde a fluxos com destinos. Os fluxos que não exigem uma transformação podem ser agrupados em uma única entrada que inclui apenas o destino do workspace. Crie uma entrada separada para fluxos que exijam uma transformação que inclua o destino do workspace e a propriedade transformKql.

O snippet abaixo mostra a seção dataFlows para um único fluxo com uma transformação. Consulte as DCRs de exemplo para vários fluxos de dados em uma única DCR.

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

DCRs de exemplo

Os exemplos a seguir mostram DCRs para insights de contêiner usando transformações. Use esses exemplos como ponto de partida e personalize-os conforme necessário para atender aos seus requisitos específicos.

Filtrar um namespace específico

Este exemplo usa a consulta de log source | where PodNamespace == 'kube-system' para coletar dados para um único namespace em ContainerLogsV2. Você pode substituir kube-system nessa consulta por outro namespace ou substituir a cláusula where por outro filtro para corresponder aos dados específicos que deseja coletar. Os outros fluxos são agrupados em um fluxo de dados separado e nenhuma transformação é aplicada a eles.

{
    "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'"
            }
        ] 
    }
}

Adicionar uma coluna a uma tabela

Este exemplo usa a consulta de log source | extend new_CF = ContainerName para enviar dados para uma coluna personalizada adicionada à tabela ContainerLogV2. Essa transformação requer que você adicione a coluna personalizada à tabela usando o processo descrito em Adicionar ou excluir uma coluna personalizada. Os outros fluxos são agrupados em um fluxo de dados separado e nenhuma transformação é aplicada a eles.

{
    "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"
            }
        ]
    }
}

Próximas etapas