Partager via


Transformations de données dans Container Insights

Cet article explique comment implémenter des transformations de données dans Container Insights. Les transformations dans Azure Monitor vous permettent de modifier ou de filtrer les données avant leur ingestion dans votre espace de travail Log Analytics. Elles vous permettent d'effectuer des actions comme filtrer les données collectées à partir de votre cluster afin de réduire les coûts ou de traiter les données entrantes pour faciliter vos requêtes de données.

Règles de collecte des données (DCR)

Les transformations sont implémentées dans les règles de collecte de données (DCR) utilisées pour configurer la collecte de données dans Azure Monitor. Lorsque vous intégrez Container insights pour un cluster, une DCR est créée pour elle avec le nom MSCI-<cluster-region> – <\Namecluster>. Vous pouvez afficher ce DCR à partir des Règles de collecte des données dans le menu Monitor du portail Azure. Pour créer une transformation, vous devez soit modifier cette DCR, soit embarquer votre cluster avec une DCR personnalisée qui inclut votre transformation.

Le tableau suivant décrit les différentes méthodes pour modifier la DCR, tandis que la suite de cet article fournit des détails sur les modifications que vous devez effectuer pour transformer les données dans Container Insights.

Méthode Description
Nouveau cluster Utilisez un modèle ARM existant pour intégrer un cluster AKS à Container Insights. Modifier la section dataFlows des DCR dans ce modèle pour inclure une transformation, similaire à l'un des échantillons ci-dessous.
DCR existante Une fois qu'un cluster a été intégré à Container Insights, modifiez sa DCR pour y inclure une transformation en suivant la procédure décrite dans Modification des règles de collecte des données.

Sources de données

La section dataSources de la DCR définit les différents types de données entrantes que la DCR traitera. Pour les Container Insights, ces données comprennent l'extension ContainerInsights, qui inclut un ou plusieurs streams prédéfinis commençant par le préfixe Microsoft-.

La liste des flux Container Insights dans la DCR dépend de la présélection des coûts que vous avez sélectionnée pour le cluster. Si vous collectez toutes les tables, la DCR utilisera le flux Microsoft-ContainerInsights-Group-Default, qui est un flux de groupe comprenant tous les flux énumérés dans Valeurs de flux. Vous devez passer à des flux individuels si vous souhaitez utiliser une transformation. Tous les autres paramètres de présélection des coûts utilisent déjà des flux individuels.

L'extrait ci-dessous montre le flux Microsoft-ContainerInsights-Group-Default. Reportez-vous à Échantillon de DCR pour obtenir un échantillon de flux individuels.

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

Flux de données

La section dataFlows de la DCR fait correspondre les flux avec les destinations. Les flux qui ne nécessitent pas de transformation peuvent être regroupés dans une entrée unique qui ne comprend que la destination de l'espace de travail. Créez une entrée distincte pour les flux qui nécessitent une transformation et qui comprend la destination de l'espace de travail et la propriété transformKql.

L'extrait ci-dessous montre la section dataFlows pour un flux unique avec une transformation. Reportez-vous aux Échantillons de DCR pour plusieurs flux de données dans un seul DCR.

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

Échantillons de DCR

Les échantillons suivants présentent des DCR pour Container Insights utilisant des transformations. Utilisez ces échantillons comme point de départ et personnalisez-les si nécessaire pour répondre à vos besoins particuliers.

Filtrer pour un espace de noms particulier

Cet exemple utilise la requête de journal source | where PodNamespace == 'kube-system' pour collecter des données pour un seul espace de noms dans ContainerLogsV2. Vous pouvez remplacer kube-system dans cette requête par un autre espace de noms ou remplacer la clause where par un autre filtre correspondant aux données particulières que vous souhaitez collecter. Les autres flux sont regroupés dans un flux de données distinct et ne subissent aucune transformation.

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

Ajouter une colonne à une table

Cet échantillon utilise la requête de journal source | extend new_CF = ContainerName pour envoyer des données à une colonne personnalisée ajoutée à la table ContainerLogV2. Cette transformation exige que vous ajoutiez la colonne personnalisée à la table en utilisant le processus décrit dans Ajouter ou supprimer une colonne personnalisée. Les autres flux sont regroupés dans un flux de données distinct et ne subissent aucune transformation.

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

Étapes suivantes