Przekształcenia zbierania danych w usłudze Azure Monitor

Za pomocą przekształceń w usłudze Azure Monitor można filtrować lub modyfikować dane przychodzące przed wysłaniem ich do obszaru roboczego usługi Log Analytics. Ten artykuł zawiera podstawowy opis przekształceń i sposobu ich implementacji. Udostępnia on linki do innej zawartości służącej do tworzenia transformacji.

Przekształcenia są wykonywane w usłudze Azure Monitor w potoku pozyskiwania danych po źródle danych dostarcza dane i przed wysłaniem ich do miejsca docelowego. Źródło danych może wykonać własne filtrowanie przed wysłaniem danych, ale następnie polegać na przekształceniu w celu dalszej manipulacji przed wysłaniem ich do miejsca docelowego.

Przekształcenia są definiowane w regule zbierania danych (DCR) i używają instrukcji język zapytań Kusto (KQL), która jest stosowana indywidualnie do każdego wpisu w danych przychodzących. Musi on zrozumieć format danych przychodzących i utworzyć dane wyjściowe w strukturze oczekiwanej przez miejsce docelowe.

Na poniższym diagramie przedstawiono proces przekształcania danych przychodzących i pokazano przykładowe zapytanie, które może być używane. Aby uzyskać szczegółowe informacje na temat tworzenia zapytań przekształcania, zobacz Struktura transformacji w usłudze Azure Monitor .

Diagram przedstawiający transformację czasu pozyskiwania danych przychodzących.

Dlaczego warto używać przekształceń

W poniższej tabeli opisano różne cele, które można osiągnąć przy użyciu przekształceń.

Kategoria Szczegóły
Usuwanie poufnych danych Być może masz źródło danych, które wysyła informacje, których nie chcesz przechowywać ze względów prywatności lub zgodności.

Filtrowanie poufnych informacji. Odfiltruj całe wiersze lub określone kolumny zawierające poufne informacje.

Zaciemniaj poufne informacje. Zastąp informacje, takie jak cyfry w adresie IP lub numerze telefonu wspólnym znakiem.

Wyślij do tabeli alternatywnej. Wysyłanie poufnych rekordów do alternatywnej tabeli z inną konfiguracją kontroli dostępu na podstawie ról.
Wzbogacanie danych przy użyciu większej liczby lub informacji obliczeniowych Użyj przekształcenia, aby dodać informacje do danych, które udostępniają kontekst biznesowy lub upraszczają wykonywanie zapytań dotyczących danych później.

Dodaj kolumnę z więcej informacji. Możesz na przykład dodać kolumnę identyfikującą, czy adres IP w innej kolumnie jest wewnętrzny, czy zewnętrzny.

Dodaj informacje specyficzne dla firmy. Możesz na przykład dodać kolumnę wskazującą dział firmy na podstawie informacji o lokalizacji w innych kolumnach.
Obniżanie kosztów danych Ponieważ opłaty są naliczane za pozyskiwanie danych wysyłanych do obszaru roboczego usługi Log Analytics, chcesz odfiltrować wszystkie dane, których nie potrzebujesz, aby zmniejszyć koszty.

Usuń całe wiersze. Na przykład może istnieć ustawienie diagnostyczne służące do zbierania dzienników zasobów z określonego zasobu, ale nie wymaga wszystkich wpisów dziennika, które generuje. Utwórz przekształcenie, które filtruje rekordy spełniające określone kryteria.

Usuń kolumnę z każdego wiersza. Na przykład dane mogą zawierać kolumny z danymi, które są nadmiarowe lub mają minimalną wartość. Utwórz przekształcenie, które filtruje kolumny, które nie są wymagane.

Przeanalizuj ważne dane z kolumny. Być może masz tabelę z cennymi danymi pochowanymi w określonej kolumnie. Użyj przekształcenia, aby przeanalizować cenne dane w nowej kolumnie i usunąć oryginał.

Wysyłanie niektórych wierszy do podstawowych dzienników. Wysyłaj wiersze w danych, które wymagają podstawowych możliwości zapytań, aby uzyskać podstawowe tabele dzienników w celu uzyskania niższych kosztów pozyskiwania.
Formatowanie danych dla miejsca docelowego Być może masz źródło danych, które wysyła dane w formacie, który nie jest zgodny ze strukturą tabeli docelowej. Użyj przekształcenia, aby ponownie sformatować dane w wymaganym schemacie.

Obsługiwane tabele

Zobacz Tabele, które obsługują przekształcenia w dziennikach usługi Azure Monitor, aby uzyskać listę tabel, które mogą być używane z przekształceniami. Możesz również użyć dokumentacji danych usługi Azure Monitor, która zawiera listę atrybutów dla każdej tabeli, w tym informacje o tym, czy obsługuje przekształcenia. Oprócz tych tabel obsługiwane są również wszystkie tabele niestandardowe (sufiks _CL).

  • Dowolna tabela platformy Azure wymieniona w tabelach, które obsługują przekształcenia w dziennikach usługi Azure Monitor. Możesz również użyć dokumentacji danych usługi Azure Monitor, która zawiera listę atrybutów dla każdej tabeli, w tym informacje o tym, czy obsługuje przekształcenia.
  • Dowolna tabela niestandardowa utworzona dla agenta usługi Azure Monitor. (Tabela niestandardowa MMA nie może używać przekształceń)

Tworzenie przekształcenia

Istnieje wiele metod tworzenia przekształceń w zależności od metody zbierania danych. W poniższej tabeli wymieniono wskazówki dotyczące różnych metod tworzenia przekształceń.

Zbieranie danych Odwołanie
Interfejs API pozyskiwania dzienników Wysyłanie danych do dzienników usługi Azure Monitor przy użyciu interfejsu API REST (Azure Portal)
Wysyłanie danych do dzienników usługi Azure Monitor przy użyciu interfejsu API REST (szablony usługi Azure Resource Manager)
Maszyna wirtualna z agentem usługi Azure Monitor Dodawanie przekształcenia do dziennika usługi Azure Monitor
Klaster Kubernetes ze szczegółowymi informacjami o kontenerze Przekształcenia danych w usłudze Container Insights
Azure Event Hubs Samouczek: pozyskiwanie zdarzeń z usługi Azure Event Hubs do dzienników usługi Azure Monitor (publiczna wersja zapoznawcza)

Wiele miejsc docelowych

Dzięki przekształceniom można wysyłać dane do wielu miejsc docelowych w obszarze roboczym usługi Log Analytics przy użyciu pojedynczego kontrolera domeny. Podajesz zapytanie KQL dla każdego miejsca docelowego, a wyniki każdego zapytania są wysyłane do odpowiedniej lokalizacji. Różne zestawy danych można wysyłać do różnych tabel lub używać wielu zapytań do wysyłania różnych zestawów danych do tej samej tabeli.

Możesz na przykład wysyłać dane zdarzeń do usługi Azure Monitor przy użyciu interfejsu API pozyskiwania dzienników. Większość zdarzeń powinna być wysyłana do tabeli analitycznej, w której można regularnie wykonywać zapytania, podczas gdy zdarzenia inspekcji powinny być wysyłane do niestandardowej tabeli skonfigurowanej dla dzienników podstawowych w celu zmniejszenia kosztów.

Aby użyć wielu miejsc docelowych, należy obecnie ręcznie utworzyć nowy kontroler domeny lub edytować istniejący. Zobacz sekcję Przykłady, aby zapoznać się z przykładami kontrolerów domeny korzystających z wielu miejsc docelowych.

Ważne

Obecnie tabele w kontrolerze domeny muszą znajdować się w tym samym obszarze roboczym usługi Log Analytics. Aby wysłać do wielu obszarów roboczych z jednego źródła danych, użyj wielu kontrolerów domeny i skonfiguruj aplikację do wysyłania danych do każdego źródła danych.

Diagram przedstawiający przekształcanie wysyłające dane do wielu tabel.

Monitorowanie przekształceń

Aby uzyskać szczegółowe informacje na temat dzienników i metryk monitorujących kondycję i wydajność przekształceń, zobacz Monitorowanie i rozwiązywanie problemów z zbieraniem danych DCR w usłudze Azure Monitor . Obejmuje to identyfikowanie wszelkich błędów występujących w języku KQL i metrykach w celu śledzenia ich czasu trwania.

Koszt przekształceń

Chociaż same przekształcenia nie generują bezpośrednich kosztów, następujące scenariusze mogą spowodować dodatkowe opłaty:

  • Jeśli transformacja zwiększy rozmiar danych przychodzących, na przykład przez dodanie kolumny obliczeniowej, zostanie naliczona standardowa stawka pozyskiwania dodatkowych danych.
  • Jeśli transformacja zmniejszy pozyskane dane o ponad 50%, zostanie naliczona opłata za ilość przefiltrowanych danych powyżej 50%.

Aby obliczyć opłatę za przetwarzanie danych wynikające z przekształceń, użyj następującej formuły:
[GB odfiltrowane według przekształceń] — ([GB danych pozyskanych przez potok] / 2). W poniższej tabeli przedstawiono przykłady.

Dane pozyskane przez potok Dane porzucone przez przekształcenie Dane pozyskane przez obszar roboczy usługi Log Analytics Opłata za przetwarzanie danych Opłata za pozyskiwanie
20 GB 12 GB 8 GB 2 GB 1 8 GB
20 GB 8 GB 12 GB 0 GB 12 GB

1 Ta opłata wyklucza opłatę za dane pozyskane przez obszar roboczy usługi Log Analytics.

Aby uniknąć tej opłaty, należy filtrować pozyskane dane przy użyciu alternatywnych metod przed zastosowaniem przekształceń. Dzięki temu można zmniejszyć ilość danych przetwarzanych przez przekształcenia, a tym samym zminimalizować wszelkie dodatkowe koszty.

Zobacz Cennik usługi Azure Monitor, aby uzyskać bieżące opłaty za pozyskiwanie i przechowywanie danych dzienników w usłudze Azure Monitor.

Ważne

Jeśli usługa Azure Sentinel jest włączona dla obszaru roboczego usługi Log Analytics, nie ma opłaty za pozyskiwanie filtrów niezależnie od tego, ile danych filtruje transformacja.

Przykłady

Poniższe szablony usługi Resource Manager pokazują przykładowe wzorce DCR z różnymi wzorcami. Możesz użyć tych szablonów jako punktu wyjścia do tworzenia kontrolerów domeny z transformacjami dla własnych scenariuszy.

Jedno miejsce docelowe

Poniższy przykład to dcR dla agenta usługi Azure Monitor, który wysyła dane do Syslog tabeli. W tym przykładzie przekształcenie filtruje dane dla rekordów za pomocą error w komunikacie .

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        {
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "singleDestinationDCR", 
            "apiVersion": "2021-09-01-preview", 
            "location": "eastus", 
            "properties": { 
              "dataSources": { 
                "syslog": [ 
                  { 
                    "name": "sysLogsDataSource", 
                    "streams": [ 
                      "Microsoft-Syslog" 
                    ], 
                    "facilityNames": [ 
                      "auth",
                      "authpriv",
                      "cron",
                      "daemon",
                      "mark",
                      "kern",
                      "mail",
                      "news",
                      "syslog",
                      "user",
                      "uucp"
                    ], 
                    "logLevels": [ 
                      "Debug", 
                      "Critical", 
                      "Emergency" 
                    ] 
                  } 
                ] 
              }, 
              "destinations": { 
                "logAnalytics": [ 
                  { 
                    "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                    "name": "centralWorkspace" 
                  } 
                ] 
              }, 
              "dataFlows": [ 
                { 
                  "streams": [ 
                    "Microsoft-Syslog" 
                  ], 
                  "transformKql": "source | where message has 'error'", 
                  "destinations": [ 
                    "centralWorkspace" 
                  ] 
                } 
              ] 
            }
        }
    ]
} 

Wiele tabel platformy Azure

Poniższy przykład to dcR dla danych z interfejsu API pozyskiwania dzienników, który wysyła dane do Syslog tabel i SecurityEvent . Ten kontroler domeny wymaga oddzielnego dataFlow dla każdego z nich i transformKqlOutputStream dla każdego z nich. W tym przykładzie wszystkie dane przychodzące są wysyłane do Syslog tabeli, podczas gdy złośliwe dane są również wysyłane do SecurityEvent tabeli. Jeśli nie chcesz replikować złośliwych danych w obu tabelach, możesz dodać instrukcję where do pierwszego zapytania w celu usunięcia tych rekordów.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, Message = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | where (AdditionalContext has 'malicious traffic!' | project TimeGenerated = Time, Computer, Subject = AdditionalContext", 
                        "outputStream": "Microsoft-SecurityEvent" 
                    } 
                ] 
            } 
        }
    ]
}

Kombinacja platformy Azure i tabel niestandardowych

Poniższy przykład to dcR dla danych z interfejsu API pozyskiwania dzienników, który wysyła dane do Syslog tabeli i tabeli niestandardowej z danymi w innym formacie. Ten kontroler domeny wymaga oddzielnego dataFlow dla każdego z nich i transformKqlOutputStream dla każdego z nich. W przypadku korzystania z tabel niestandardowych należy upewnić się, że schemat miejsca docelowego (tabela niestandardowa) zawiera kolumny niestandardowe (instrukcje dodawania lub usuwania kolumn niestandardowych), które są zgodne ze schematem wysyłanych rekordów. Jeśli na przykład rekord ma pole o nazwie SyslogMessage, ale docelowa tabela niestandardowa ma tylko wartość TimeGenerated i RawData, otrzymasz zdarzenie w tabeli niestandardowej z wypełnionym tylko polem TimeGenerated, a pole RawData będzie puste. Pole SyslogMessage zostanie porzucone, ponieważ schemat tabeli docelowej nie zawiera pola ciągu o nazwie SyslogMessage.

{ 
    "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "resources" : [
        { 
            "type": "Microsoft.Insights/dataCollectionRules", 
            "name": "multiDestinationDCR", 
            "location": "eastus", 
            "apiVersion": "2021-09-01-preview", 
            "properties": { 
                "dataCollectionEndpointId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers//Microsoft.Insights/dataCollectionEndpoints/my-dce",
                "streamDeclarations": { 
                    "Custom-MyTableRawData": { 
                        "columns": [ 
                            { 
                                "name": "Time", 
                                "type": "datetime" 
                            }, 
                            { 
                                "name": "Computer", 
                                "type": "string" 
                            }, 
                            { 
                                "name": "AdditionalContext", 
                                "type": "string" 
                            } 
                        ] 
                    } 
                }, 
                "destinations": { 
                    "logAnalytics": [ 
                        { 
                            "workspaceResourceId": "/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/resourceGroups/my-resource-group/providers/Microsoft.OperationalInsights/workspaces/my-workspace", 
                            "name": "clv2ws1" 
                        }, 
                    ] 
                }, 
                "dataFlows": [ 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | project TimeGenerated = Time, Computer, SyslogMessage = AdditionalContext", 
                        "outputStream": "Microsoft-Syslog" 
                    }, 
                    { 
                        "streams": [ 
                            "Custom-MyTableRawData" 
                        ], 
                        "destinations": [ 
                            "clv2ws1" 
                        ], 
                        "transformKql": "source | extend jsonContext = parse_json(AdditionalContext) | project TimeGenerated = Time, Computer, AdditionalContext = jsonContext, ExtendedColumn=tostring(jsonContext.CounterName)", 
                        "outputStream": "Custom-MyTable_CL" 
                    } 
                ] 
            } 
        }
    ]
}

Następne kroki