Megosztás:


Kubernetes-naplók speciális szűrése és átalakítása az Azure Monitorban

Ez a cikk azt ismerteti, hogyan implementálhat adatátalakításokat a Kubernetes-fürtből származó tárolónapló-adatokkal. Az átalakítások az Azure Monitorban lehetővé teszik az adatok módosítását vagy szűrését, mielőtt azok bekerülnének a Log Analytics munkaterületére. Lehetővé teszik, hogy olyan műveleteket hajtson végre, mint a fürtből gyűjtött adatok szűrése a költségek megtakarítása vagy a bejövő adatok feldolgozása az adat lekérdezések segítése érdekében.

  • Sorok szűrése adott feltételek alapján
  • Oszlopok elvetése vagy átnevezése
  • Bizalmas mezők maszkolása
  • Számított mezők hozzáadása

Jótanács

Bár az átalakítások hatékony és megbízható funkciók, csak akkor használhatók, ha más szűrési módszereket használnak a Kubernetes-naplókhoz. Az átalakítások összetettebbek a hálózati használat implementálásához és növeléséhez, mivel az adatok a fürtből lesznek elküldve a szűrés előtt. Nézze meg a Kubernetes-fürtök adatgyűjtésének szűrését és testreszabását a különböző konfigurációk leírásáért.

Adatgyűjtési szabályok

Az átalakítások olyan adatgyűjtési szabályokban (DCR-ekben) valósulnak meg, amelyek az Azure Monitor adatgyűjtésének konfigurálására szolgálnak. Ha engedélyezi a Prometheus-metrikák és a tárolónaplózás figyelését a Kubernetes-fürtökhöz az Azure Monitorban, minden adattípushoz külön DCR-ek jönnek létre. Az átalakítások hozzáadhatók a tárolónaplókat gyűjtő DCR-hez.

Megjegyzés

A Kubernetes-fürtökhöz létrehozott DCR-ek részletes listájáért lásd a DCR-eket és a kapcsolódó erőforrásokat.

Átalakítás létrehozásához hajtsa végre az alábbi műveletek egyikét:

  • Új klaszter. Egy meglévő ARM-sablonnal bekapcsolhat egy AKS-fürtöt a Container Insights szolgáltatásba. Módosítsa a sablonban lévő DCR-t a szükséges konfigurációval, beleértve az alábbi mintákhoz hasonló átalakítást is.
  • Meglévő DCR. Miután egy fürt be lett állítva a Container Insights szolgáltatásba és az adatgyűjtés konfigurálva van, szerkessze az adatgyűjtési szabályait (DCR), hogy az átalakítást tartalmazza a szerkesztési módszerek bármelyikével .

Megjegyzés

A DCR-ek szerkesztéséhez jelenleg minimális felhasználói felület szükséges, ami átalakítások hozzáadásához szükséges. A legtöbb esetben manuálisan kell szerkesztenie a DCR-t. Ez a cikk a megvalósítandó DCR-struktúrát ismerteti. A struktúra megvalósításával kapcsolatos útmutatásért tekintse meg az Azure Monitor adatgyűjtési szabályainak (DCR-k) létrehozását és szerkesztését.

Adatforrások

A DCR Adatforrások szakasza határozza meg a DCR által feldolgozni kívánt bejövő adatok különböző típusait. A Container Insights esetében ez a Container Insights bővítmény, amely egy vagy több előre definiált streams microsoftos előtaggal kezdődik.

A Kontejner-elemzési adatfolyamok listája a DCR-ben a fürthöz kiválasztott költségbeállítástól függ. Ha összegyűjti az összes táblát, a DCR a Microsoft-ContainerInsights-Group-Default streamet fogja használni, amely egy csoportos stream, amely tartalmazza a Stream-értékekben felsorolt összes streamet. Ha átalakítást szeretne használni, ezt egyéni streamekre kell módosítania. Minden más előre beállított költségbeállítás eleve különálló streameket használ.

Az alábbi mintában a Microsoft-ContainerInsights-Group-Default adatfolyam látható. Az egyes streameket használó mintákért tekintse meg az alábbi szakaszokat.

"dataSources": {
    "extensions": [
        {
            "streams": [
                "Microsoft-ContainerInsights-Group-Default"
            ],
            "name": "ContainerInsightsExtension",
            "extensionName": "ContainerInsights",
            "extensionSettings": { 
                "dataCollectionSettings": {
                    "interval": "1m",
                    "namespaceFilteringMode": "Off",
                    "namespaces": null,
                    "enableContainerLogV2": true
                }
            }
        }
    ]
}

Adatfolyamok

A DCR Adatfolyamok szakasza megegyezik a destinations szakaszában definiált rendeltetési helyekkel a DCR-ben. Az ismert streamekhez nem kell táblaneveket megadni, ha az adatokat az alapértelmezett táblába küldik. Az átalakítást nem igénylő streamek egyetlen bejegyzésben csoportosíthatók, amely csak a munkaterület célhelyét tartalmazza. Mindegyik az alapértelmezett táblába lesz elküldve.

Hozzon létre egy külön bejegyzést az átalakítást igénylő streamekhez. Ennek tartalmaznia kell a munkaterület célját és a tulajdonságot transformKql . Ha másik táblába küld adatokat, akkor a outputStream céltábla nevét meghatározó tulajdonságot is tartalmaznia kell.

Az alábbi minta egyetlen adatfolyam dataFlows szakaszát mutatja be, átalakítással. Az alábbi mintákban több adatfolyamot is megtekinthet egyetlen DCR-ben.

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

Adatok szűrése

Az alábbi példa az ContainerLogV2 adatait szűri ki a LogLevel oszlop alapján. Csak olyan rekordokat gyűjtünk össze, amelyek rendelkeznek LogLevel, error vagy critical értékkel, mivel ezek azok a bejegyzések, amelyeket a problémafigyeléshez és a fürt problémáinak azonosításához használhat. Más szintek összegyűjtése és tárolása, például info és debug költségeket okoz jelentős érték nélkül.

Ezeket a rekordokat az alábbi napló lekérdezéssel kérdezheti le.

ContainerLogV2 | where LogLevel in ('error', 'critical')

Ez a logika az alábbi ábrán látható.

A tárolónaplók transzformációval történő szűrését bemutató ábra.

Az átalakítás során a rendszer a tábla nevét source használja a bejövő adatok megjelenítéséhez. Az alábbiakban az átalakításhoz használandó módosított lekérdezés látható.

source | where LogLevel in ('error', 'critical')

Az alábbi minta a Container Insights DCR-hez hozzáadott átalakítást mutatja be. Vegye figyelembe, hogy a rendszer külön adatfolyamot Microsoft-ContainerLogV2 használ, mivel ez az egyetlen bejövő adatfolyam, amellyel az átalakítást alkalmazni kell. A rendszer külön adatfolyamot használ a többi adatfolyamhoz.

{
    "properties": {
        "location": "eastus2",
        "kind": "Linux",
        "dataSources": {
            "syslog": [],
            "extensions": [
                {
                    "streams": [
                        "Microsoft-ContainerLogV2",
                        "Microsoft-KubeEvents",
                        "Microsoft-KubePodInventory"
                    ],
                    "extensionName": "ContainerInsights",
                    "extensionSettings": {
                        "dataCollectionSettings": {
                            "interval": "1m",
                            "namespaceFilteringMode": "Off",
                            "enableContainerLogV2": true
                        }
                    },
                    "name": "ContainerInsightsExtension"
                }
            ]
        },
        "destinations": {
            "logAnalytics": [
                {
                    "workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
                    "workspaceId": "00000000-0000-0000-0000-000000000000",
                    "name": "ciworkspace"
                }
            ]
        },
        "dataFlows": [
            {
                "streams": [
                    "Microsoft-KubeEvents",
                    "Microsoft-KubePodInventory"
                ],
                "destinations": [
                    "ciworkspace"
                ],
            },
            {
                "streams": [
                    "Microsoft-ContainerLogV2"
                ],
                "destinations": [
                    "ciworkspace"
                ],
                "transformKql": "source | where LogLevel in ('error', 'critical')"
            }
        ],
    },
}

Adatok küldése különböző táblákba

A fenti példában csak azok a rekordok gyűjtjük össze, amelyek LogLevel vagy error vagy critical állapotúak. Alternatív stratégia ahelyett, hogy egyáltalán nem gyűjtené ezeket a rekordokat, konfigurálja a ContainerLogV2-t az alapszintű naplókhoz, és küldje el ezeket a rekordokat egy másik táblába.

Ehhez a stratégiához két átalakításra van szükség. Az első átalakítás a rekordokat egy névvel ellátott egyéni táblával LogLevelerror vagy critical annak továbbítja ContainerLogV2_CL. A második átalakítás elküldi a többi rekordot a standardnak ContainerLogV2. Az egyes lekérdezések alább láthatók a bejövő adatokhoz az source használatával, a korábbi példában leírtak szerint.

# Return error and critical logs
source | where LogLevel in ('error', 'critical')

# Return logs that aren't error or critical
source | where LogLevel !in ('error', 'critical')

Ez a logika az alábbi ábrán látható.

Diagram, amely a tárolónaplók szűrését mutatja be egy olyan átalakítással, amely adatokat küld az elemzési táblába és más adatokat az alapszintű naplókba.

Fontos

Mielőtt telepíti a DCR-t ebben a mintában, létre kell hoznia egy új táblát ugyanazzal a sémával, mint ContainerLogV2a . Nevezze el a következőképpen: ContainerLogV2_CL.

Az alábbi minta a Container Insights DCR-hez hozzáadott átalakítást mutatja be. Ebben a DCR-ben két adatfolyam van Microsoft-ContainerLogV2 számára, egy-egy minden átalakításhoz. Az elsőt az alapértelmezett táblába küldi, amelyben nem kell megadnia a tábla nevét. A másodikhoz a outputStream tulajdonságnak meg kell adnia a céltáblát.

{
    "properties": {
        "location": "eastus2",
        "kind": "Linux",
        "dataSources": {
            "syslog": [],
            "extensions": [
                {
                    "streams": [
                        "Microsoft-ContainerLogV2",
                        "Microsoft-KubeEvents",
                        "Microsoft-KubePodInventory"
                    ],
                    "extensionName": "ContainerInsights",
                    "extensionSettings": {
                        "dataCollectionSettings": {
                            "interval": "1m",
                            "namespaceFilteringMode": "Off",
                            "enableContainerLogV2": true
                        }
                    },
                    "name": "ContainerInsightsExtension"
                }
            ]
        },
        "destinations": {
            "logAnalytics": [
                {
                    "workspaceResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/my-resource-group/providers/microsoft.operationalinsights/workspaces/my-workspace",
                    "workspaceId": "00000000-0000-0000-0000-000000000000",
                    "name": "ciworkspace"
                }
            ]
        },
        "dataFlows": [
            {
                "streams": [
                    "Microsoft-KubeEvents",
                    "Microsoft-KubePodInventory"
                ],
                "destinations": [
                    "ciworkspace"
                ],
            },
            {
                "streams": [
                    "Microsoft-ContainerLogV2"
                ],
                "destinations": [
                    "ciworkspace"
                ],
                "transformKql": "source | where LogLevel !in ('error', 'critical')"
            },
            {
                "streams": [
                    "Microsoft-ContainerLogV2"
                ],
                "destinations": [
                    "ciworkspace"
                ],
                "transformKql": "source | where LogLevel in ('error','critical')",
                "outputStream": "Custom-ContainerLogV2_CL"
            }
        ],
    },
}

Következő lépések