Datentransformationen in Container Insights

In diesem Artikel wird beschrieben, wie Datentransformationen in Container Insights implementiert werden. Transformationen in Azure Monitor ermöglichen es Ihnen, Daten zu verändern oder zu filtern, bevor sie in Ihrem Log Analytics-Arbeitsbereich erfasst werden. Sie ermöglichen es Ihnen, Aktionen wie das Filtern von Daten auszuführen, die in Ihrem Cluster gesammelt werden, um Kosten zu sparen oder eingehende Daten zu verarbeiten, um Ihre Datenabfragen zu unterstützen.

Datensammlungsregeln (Data Collections Rules, DCRs)

Transformationen werden in Datensammlungsregeln (Data Collections Rules, DCRs) implementiert, die zum Konfigurieren der Datensammlung in Azure Monitor verwendet werden. Wenn Sie das Onboarding von Container Insights für einen Cluster durchführen, wird dafür eine DCR mit dem Namen MSCI-<cluster-region>-<\cluster-name> erstellt. Sie können diese Datensammlungsregel im Azure-Portal unter Datensammlungsregeln im Menü Überwachen anzeigen. Um eine Transformation zu erstellen, müssen Sie entweder diese Datensammlungsregel ändern oder das Onboarding für Ihren Cluster mit einer benutzerdefinierten Datensammlungsregel, die Ihre Transformation enthält, durchführen.

In der folgenden Tabelle werden die verschiedenen Methoden zum Bearbeiten der Datensammlungsregel beschrieben. Der restliche Artikel beschäftigt sich detailliert mit den Bearbeitungsschritten, die Sie zum Transformieren von Container Insights-Daten ausführen müssen.

Methode Beschreibung
Neuer Cluster Verwenden Sie eine vorhandene ARM-Vorlage , um das Onboarding eines AKS-Cluster in Container Insights durchzuführen. Ändern Sie den Abschnitt dataFlows der Datensammlungsregel in dieser Vorlage so, dass sie eine Transformation enthält, die einem der folgenden Beispiele ähnelt.
Vorhandene DCR Nachdem das Onboarding eines Clusters in Container Insights durchgeführt wurde, bearbeiten Sie dessen Datensammlungsregel, um eine Transformation mithilfe des Prozesses einzuschließen, den Sie unter Bearbeitung von Datensammlungsregeln finden.

Datenquellen

Der DataSources-Abschnitt der Datensammlungsregel definiert die verschiedenen Arten eingehender Daten, die von der Datensammlungsregel verarbeitet werden. Für Container Insights umfasst dies die ContainerInsights-Erweiterung, die einen oder mehrere vordefinierte streams enthält, die mit dem Präfix Microsoft- beginnen.

Die Liste der Container Insights-Streams in der Datensammlungsregel ist von der Kostenvoreinstellung abhängig, die Sie für den Cluster ausgewählt haben. Wenn Sie alle Tabellen sammeln, verwendet die Datensammlungsregel den Microsoft-ContainerInsights-Group-Default-Stream. Dies ist ein Gruppenstream, der alle unter Streamwerte aufgeführten Streams enthält. Sie müssen dies in individuelle Streams ändern, wenn Sie eine Transformation verwenden möchten. Alle anderen Kostenvoreinstellungen verwenden bereits einzelne Datenströme.

Der folgende Codeschnipsel zeigt den Microsoft-ContainerInsights-Group-Default-Stream. Ein Beispiel für einzelne Streams finden Sie in den Beispiel-DCRs.

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

Datenflüsse

Der DataFlows-Abschnitt der Datensammlungsregel entspricht Streams mit Zielen. Die Streams, für die keine Transformation erforderlich ist, können in einem einzigen Eintrag gruppiert werden, der nur das Arbeitsbereichsziel enthält. Erstellen Sie einen separaten Eintrag für Streams, die eine Transformation erfordern. Dieser muss das Arbeitsbereichsziel und die transformKql-Eigenschaft enthalten.

Der folgende Codeschnipsel zeigt den dataFlows-Abschnitt für einen einzelnen Stream mit einer Transformation. Weitere Informationen zu mehreren Streams einer einzelnen Datensammlungsregel finden Sie in den Beispiel-DCRs.

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

Beispiel-DCRs

Die folgenden Beispiele zeigen Datensammlungsregeln für Container Insights beim Verwenden von Transformationen. Verwenden Sie diese Beispiele als Ausgangspunkt, und passen Sie sie dann nach Bedarf an, um Ihre speziellen Anforderungen zu erfüllen.

Filtern nach einem bestimmten Namespace

In diesem Beispiel wird die Protokollabfrage source | where PodNamespace == 'kube-system' verwendet, um Daten für einen einzelnen Namespace in ContainerLogsV2 zu sammeln. Sie können kube-system in dieser Abfrage durch einen anderen Namespace oder die Klausel where durch einen anderen Filter ersetzen, sodass sie den jeweiligen Daten entsprechen, die Sie sammeln möchten. Die anderen Streams werden in einem separaten Datenfluss gruppiert, und es wird keine Transformation auf sie angewendet.

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

Eine Spalte einer Tabelle hinzufügen

In diesem Beispiel wird die Protokollabfrage source | extend new_CF = ContainerName verwendet, um Daten an eine benutzerdefinierte Spalte zu senden, die der Tabelle ContainerLogV2 hinzugefügt wurde. Diese Transformation erfordert, dass Sie die benutzerdefinierte Spalte mithilfe des unter Hinzufügen oder Löschen einer benutzerdefinierten Spalte beschriebenen Prozesses zur Tabelle hinzufügen oder aus ihr löschen. Die anderen Streams werden in einem separaten Datenfluss gruppiert, und es wird keine Transformation auf sie angewendet.

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

Nächste Schritte