Eksportowanie danych z obszaru roboczego usługi Log Analytics do konta magazynu przy użyciu usługi Logic Apps

W tym artykule opisano metodę używania usługi Azure Logic Apps do wykonywania zapytań o dane z obszaru roboczego usługi Log Analytics w usłudze Azure Monitor i wysyłania ich do usługi Azure Storage. Użyj tego procesu, gdy musisz wyeksportować dane dzienników usługi Azure Monitor na potrzeby inspekcji i scenariuszy zgodności lub zezwolić innej usłudze na pobieranie tych danych.

Inne metody eksportu

Metoda omówiona w tym artykule opisuje zaplanowany eksport z zapytania dziennika przy użyciu aplikacji logiki. Inne opcje eksportowania danych dla określonych scenariuszy obejmują:

Omówienie

Ta procedura używa łącznika dzienników usługi Azure Monitor, który umożliwia uruchamianie zapytania dziennika z aplikacji logiki i używanie jej danych wyjściowych w innych akcjach w przepływie pracy. Łącznik usługi Azure Blob Storage jest używany w tej procedurze do wysyłania danych wyjściowych zapytania do magazynu.

Screenshot that shows a Logic Apps overview.

Podczas eksportowania danych z obszaru roboczego usługi Log Analytics ogranicz ilość danych przetwarzanych przez przepływ pracy usługi Logic Apps. Filtruj i agreguj dane dziennika w zapytaniu, aby zmniejszyć wymagane dane. Jeśli na przykład musisz wyeksportować zdarzenia logowania, przefiltruj wymagane zdarzenia i przeprojektuj tylko wymagane pola. Przykład:

SecurityEvent
| where EventID == 4624 or EventID == 4625
| project TimeGenerated , Account , AccountType , Computer

Podczas eksportowania danych zgodnie z harmonogramem użyj ingestion_time() funkcji w zapytaniu, aby upewnić się, że nie przegapisz opóźnionych danych. Jeśli dane są opóźnione z powodu problemów z siecią lub platformą, użycie czasu pozyskiwania gwarantuje, że dane zostaną uwzględnione w następnym wykonaniu usługi Logic Apps. Aby zapoznać się z przykładem, zobacz krok "Dodawanie akcji Dzienniki usługi Azure Monitor" w sekcji procedury usługi Logic Apps.

Wymagania wstępne

Przed rozpoczęciem tej procedury należy wykonać następujące wymagania wstępne:

  • Obszar roboczy usługi Log Analytics: użytkownik tworzący aplikację logiki musi mieć co najmniej uprawnienie do odczytu do obszaru roboczego.
  • Konto magazynu: konto magazynu nie musi znajdować się w tej samej subskrypcji co obszar roboczy usługi Log Analytics. Użytkownik tworzący aplikację logiki musi mieć uprawnienie do zapisu na koncie magazynu.

limity Połączenie or

Obszar roboczy usługi Log Analytics i zapytania dzienników w usłudze Azure Monitor to usługi wielodostępności, które obejmują limity ochrony i izolowania klientów oraz utrzymania jakości usług. Podczas wykonywania zapytań dotyczących dużej ilości danych należy wziąć pod uwagę następujące limity, które mogą mieć wpływ na sposób konfigurowania cyklu usługi Logic Apps i zapytania dziennika:

  • Kwerendy dziennika nie mogą zwracać więcej niż 500 000 wierszy.
  • Zapytania dziennika nie mogą zwracać więcej niż 64 000 000 bajtów.
  • Kwerendy dziennika nie mogą działać dłużej niż 10 minut.
  • Łącznik usługi Log Analytics jest ograniczony do 100 wywołań na minutę.

Procedura usługi Logic Apps

W poniższych sekcjach przedstawiono procedurę.

Tworzenie kontenera na koncie magazynu

Użyj procedury w temacie Tworzenie kontenera, aby dodać kontener do konta magazynu w celu przechowywania wyeksportowanych danych. Nazwa używana dla kontenera w tym artykule to loganalytics-data, ale możesz użyć dowolnej nazwy.

Tworzenie przepływu pracy aplikacji logiki

  1. Przejdź do usługi Logic Apps w witrynie Azure Portal i wybierz pozycję Dodaj. Wybierz subskrypcję, grupę zasobów i region, aby zapisać nową aplikację logiki. Następnie nadaj mu unikatową nazwę. Możesz włączyć ustawienie usługi Log Analytics, aby zbierać informacje o danych i zdarzeniach środowiska uruchomieniowego zgodnie z opisem w temacie Konfigurowanie dzienników usługi Azure Monitor i zbieranie danych diagnostycznych dla usługi Azure Logic Apps. To ustawienie nie jest wymagane do korzystania z łącznika dzienników usługi Azure Monitor.

    Screenshot that shows creating a logic app.

  2. Wybierz pozycję Przeglądanie i tworzenie, a następnie wybierz pozycję Utwórz. Po zakończeniu wdrażania wybierz pozycję Przejdź do zasobu, aby otworzyć Projektant usługi Logic Apps.

Tworzenie wyzwalacza dla przepływu pracy

W obszarze Rozpocznij od wspólnego wyzwalacza wybierz pozycję Cykl. To ustawienie tworzy przepływ pracy aplikacji logiki, który jest uruchamiany automatycznie w regularnych odstępach czasu. W polu Częstotliwość akcji wybierz pozycję Dzień. W polu Interwał wprowadź wartość 1 , aby uruchomić przepływ pracy raz dziennie.

Screenshot that shows a Recurrence action.

Dodawanie akcji Dzienniki usługi Azure Monitor

Akcja Dzienniki usługi Azure Monitor umożliwia określenie zapytania do uruchomienia. Zapytanie dziennika używane w tym przykładzie jest zoptymalizowane pod kątem cyklu godzinowego. Zbiera dane pozyskane przez określony czas wykonywania. Jeśli na przykład przepływ pracy działa o godzinie 4:35, zakres czasu będzie wynosić od 3:00 do 4:00. Jeśli zmienisz aplikację logiki tak, aby działała z inną częstotliwością, musisz również zmienić zapytanie. Jeśli na przykład ustawisz cykl do uruchamiania codziennie, ustawisz startTime w zapytaniu wartość startofday(make_datetime(year,month,day,0,0)).

Zostanie wyświetlony monit o wybranie dzierżawy w celu udzielenia dostępu do obszaru roboczego usługi Log Analytics przy użyciu konta, za pomocą którego przepływ pracy uruchomi zapytanie.

  1. Wybierz pozycję + Nowy krok , aby dodać akcję uruchamianą po akcji cyklu. W obszarze Wybierz akcję wprowadź azure monitor. Następnie wybierz pozycję Dzienniki usługi Azure Monitor.

    Screenshot that shows an Azure Monitor Logs action.

  2. Wybierz pozycję Azure Log Analytics — uruchom zapytanie i wyświetl wyniki.

    Screenshot that shows Azure Monitor Logs is highlighted under Choose an action.

  3. Wybierz subskrypcję i grupę zasobów dla obszaru roboczego usługi Log Analytics. Wybierz pozycję Obszar roboczy usługi Log Analytics dla typu zasobu. Następnie wybierz nazwę obszaru roboczego w obszarze Nazwa zasobu.

  4. Dodaj następujące zapytanie dziennika do okna Zapytanie :

    let dt = now();
    let year = datetime_part('year', dt);
    let month = datetime_part('month', dt);
    let day = datetime_part('day', dt);
     let hour = datetime_part('hour', dt);
    let startTime = make_datetime(year,month,day,hour,0)-1h;
    let endTime = startTime + 1h - 1tick;
    AzureActivity
    | where ingestion_time() between(startTime .. endTime)
    | project 
        TimeGenerated,
        BlobTime = startTime, 
        OperationName ,
        OperationNameValue ,
        Level ,
        ActivityStatus ,
        ResourceGroup ,
        SubscriptionId ,
        Category ,
        EventSubmissionTimestamp ,
        ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,
        ResourceId = _ResourceId 
    
  5. Zakres czasu określa rekordy, które zostaną uwzględnione w zapytaniu na podstawie kolumny TimeGenerated. Wartość powinna być większa niż zakres czasu wybrany w zapytaniu. Ponieważ to zapytanie nie korzysta z kolumny TimeGenerated , opcja Ustaw w zapytaniu jest niedostępna. Aby uzyskać więcej informacji na temat zakresu czasu, zobacz Zakres zapytania. Wybierz pozycję Ostatnie 4 godziny dla zakresu czasu. To ustawienie zapewnia, że wszystkie rekordy z czasem pozyskiwania większym niż TimeGenerated zostaną uwzględnione w wynikach.

    Screenshot that shows the settings for the new Azure Monitor Logs action named Run query and visualize results.

Dodawanie akcji Analizowanie kodu JSON (opcjonalnie)

Dane wyjściowe z akcji Uruchom zapytanie i listy wyników są formatowane w formacie JSON. Możesz przeanalizować te dane i manipulować nimi w ramach przygotowania do akcji Redagowanie .

Możesz podać schemat JSON opisujący ładunek, który ma zostać odebrany. Projektant analizuje zawartość JSON przy użyciu tego schematu i generuje przyjazne dla użytkownika tokeny reprezentujące właściwości w zawartości JSON. Następnie możesz łatwo odwoływać się do tych właściwości i używać ich w przepływie pracy aplikacji logiki.

Przykładowe dane wyjściowe można użyć w kroku Uruchom zapytanie i wyświetlić wyniki .

  1. Wybierz pozycję Uruchom wyzwalacz na wstążce usługi Logic Apps. Następnie wybierz pozycję Uruchom i pobierz i zapisz rekord wyjściowy. W przypadku przykładowego zapytania z poprzedniego elementu macierzystego można użyć następujących przykładowych danych wyjściowych:

    {
        "TimeGenerated": "2020-09-29T23:11:02.578Z",
        "BlobTime": "2020-09-29T23:00:00Z",
        "OperationName": "Returns Storage Account SAS Token",
        "OperationNameValue": "MICROSOFT.RESOURCES/DEPLOYMENTS/WRITE",
        "Level": "Informational",
        "ActivityStatus": "Started",
        "ResourceGroup": "monitoring",
        "SubscriptionId": "00000000-0000-0000-0000-000000000000",
        "Category": "Administrative",
        "EventSubmissionTimestamp": "2020-09-29T23:11:02Z",
        "ClientIpAddress": "192.168.1.100",
        "ResourceId": "/subscriptions/00000000-0000-0000-0000-000000000000/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account"
    }
    
  2. Wybierz pozycję + Nowy krok , a następnie wybierz pozycję + Dodaj akcję. W obszarze Wybierz operację wprowadź ciąg json , a następnie wybierz pozycję Przeanalizuj kod JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Wybierz pole Zawartość, aby wyświetlić listę wartości z poprzednich działań. Wybierz pozycję Treść z akcji Uruchom zapytanie i wyświetl wyniki . Te dane wyjściowe pochodzą z zapytania dziennika.

    Screenshot that shows selecting a Body.

  4. Skopiuj zapisany wcześniej przykładowy rekord. Wybierz pozycję Użyj przykładowego ładunku, aby wygenerować schemat i wkleić.

    Screenshot that shows parsing a JSON payload.

Dodawanie akcji Redagowanie

Akcja Redaguj pobiera przeanalizowane dane wyjściowe JSON i tworzy obiekt, który ma być przechowywany w obiekcie blob.

  1. Wybierz pozycję + Nowy krok, a następnie wybierz pozycję + Dodaj akcję. W obszarze Wybierz operację wprowadź compose. Następnie wybierz akcję Utwórz .

    Screenshot that shows selecting a Compose action.

  2. Wybierz pole Dane wejściowe, aby wyświetlić listę wartości z poprzednich działań. Wybierz pozycję Treść z akcji Przeanalizuj kod JSON . Te przeanalizowane dane wyjściowe pochodzą z zapytania dziennika.

    Screenshot that shows selecting a body for a Compose action.

Dodawanie akcji Tworzenie obiektu blob

Akcja Utwórz obiekt blob zapisuje skomponowany kod JSON do magazynu.

  1. Wybierz pozycję + Nowy krok, a następnie wybierz pozycję + Dodaj akcję. W obszarze Wybierz operację wprowadź obiekt blob. Następnie wybierz akcję Utwórz obiekt blob .

    Screenshot that shows selecting the Create Blob action.

  2. Wprowadź nazwę połączenia z kontem magazynu w polu nazwa Połączenie ion. Następnie wybierz ikonę folderu w polu Ścieżka folderu, aby wybrać kontener na koncie magazynu. Wybierz pozycję Nazwa obiektu blob, aby wyświetlić listę wartości z poprzednich działań. Wybierz pozycję Wyrażenie i wprowadź wyrażenie zgodne z interwałem czasu. Dla tego zapytania, które jest uruchamiane co godzinę, następujące wyrażenie ustawia nazwę obiektu blob na poprzednią godzinę:

    subtractFromTime(formatDateTime(utcNow(),'yyyy-MM-ddTHH:00:00'), 1,'Hour')
    

    Screenshot that shows a blob expression.

  3. Wybierz pole Zawartość obiektu blob, aby wyświetlić listę wartości z poprzednich działań. Następnie wybierz pozycję Dane wyjściowe w sekcji Redagowanie .

    Screenshot that shows creating a blob expression.

Testowanie przepływu pracy

Aby przetestować przepływ pracy, wybierz pozycję Uruchom. Jeśli przepływ pracy zawiera błędy, są one wskazywane na krok z problemem. Możesz wyświetlić wykonania i przejść do szczegółów poszczególnych kroków, aby wyświetlić dane wejściowe i wyjściowe w celu zbadania błędów. Zobacz Rozwiązywanie problemów i diagnozowanie błędów przepływu pracy w usłudze Azure Logic Apps, jeśli to konieczne.

Screenshot that shows Runs history.

Wyświetlanie dzienników w magazynie

Przejdź do menu Konta magazynu w witrynie Azure Portal i wybierz swoje konto magazynu. Wybierz kafelek Obiekty blob. Następnie wybierz kontener określony w akcji Utwórz obiekt blob . Wybierz jeden z obiektów blob, a następnie wybierz pozycję Edytuj obiekt blob.

Screenshot that shows blob data.

Szablon aplikacji logiki

Opcjonalny krok Analizowanie kodu JSON nie jest uwzględniony w szablonie

{
    "definition": {
        "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
        "actions": {
            "Compose": {
                "inputs": "@body('Run_query_and_list_results')",
                "runAfter": {
                    "Run_query_and_list_results": [
                        "Succeeded"
                    ]
                },
                "type": "Compose"
            },
            "Create_blob_(V2)": {
                "inputs": {
                    "body": "@outputs('Compose')",
                    "headers": {
                        "ReadFileMetadataFromServer": true
                    },
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azureblob']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/v2/datasets/@{encodeURIComponent(encodeURIComponent('AccountNameFromSettings'))}/files",
                    "queries": {
                        "folderPath": "/logicappexport",
                        "name": "@{utcNow()}",
                        "queryParametersSingleEncoded": true
                    }
                },
                "runAfter": {
                    "Compose": [
                        "Succeeded"
                    ]
                },
                "runtimeConfiguration": {
                    "contentTransfer": {
                        "transferMode": "Chunked"
                    }
                },
                "type": "ApiConnection"
            },
            "Run_query_and_list_results": {
                "inputs": {
                    "body": "let dt = now();\nlet year = datetime_part('year', dt);\nlet month = datetime_part('month', dt);\nlet day = datetime_part('day', dt);\n let hour = datetime_part('hour', dt);\nlet startTime = make_datetime(year,month,day,hour,0)-1h;\nlet endTime = startTime + 1h - 1tick;\nAzureActivity\n| where ingestion_time() between(startTime .. endTime)\n| project \n    TimeGenerated,\n    BlobTime = startTime, \n    OperationName ,\n    OperationNameValue ,\n    Level ,\n    ActivityStatus ,\n    ResourceGroup ,\n    SubscriptionId ,\n    Category ,\n    EventSubmissionTimestamp ,\n    ClientIpAddress = parse_json(HTTPRequest).clientIpAddress ,\n    ResourceId = _ResourceId ",
                    "host": {
                        "connection": {
                            "name": "@parameters('$connections')['azuremonitorlogs']['connectionId']"
                        }
                    },
                    "method": "post",
                    "path": "/queryData",
                    "queries": {
                        "resourcegroups": "resource-group-name",
                        "resourcename": "workspace-name",
                        "resourcetype": "Log Analytics Workspace",
                        "subscriptions": "workspace-subscription-id",
                        "timerange": "Set in query"
                    }
                },
                "runAfter": {},
                "type": "ApiConnection"
            }
        },
        "contentVersion": "1.0.0.0",
        "outputs": {},
        "parameters": {
            "$connections": {
                "defaultValue": {},
                "type": "Object"
            }
        },
        "triggers": {
            "Recurrence": {
                "evaluatedRecurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "recurrence": {
                    "frequency": "Day",
                    "interval": 1
                },
                "type": "Recurrence"
            }
        }
    },
    "parameters": {
        "$connections": {
            "value": {
                "azureblob": {
                    "connectionId": "/subscriptions/logic-app-subscription-id/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/blob-connection-name",
                    "connectionName": "blob-connection-name",
                    "id": "/subscriptions/logic-app-subscription-id/providers/Microsoft.Web/locations/canadacentral/managedApis/azureblob"
                },
                "azuremonitorlogs": {
                    "connectionId": "/subscriptions/blob-connection-name/resourceGroups/logic-app-resource-group-name/providers/Microsoft.Web/connections/azure-monitor-logs-connection-name",
                    "connectionName": "azure-monitor-logs-connection-name",
                    "id": "/subscriptions/blob-connection-name/providers/Microsoft.Web/locations/canadacentral/managedApis/azuremonitorlogs"
                }
            }
        }
    }
}

Następne kroki