Eksportowanie danych z obszaru roboczego usługi Log Analytics do usługi Azure Storage 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ą:
- Aby wyeksportować dane z obszaru roboczego usługi Log Analytics do konta magazynu lub usługi Azure Event Hubs, użyj funkcji eksportowania danych obszaru roboczego usługi Log Analytics w dziennikach usługi Azure Monitor. Zobacz Eksportowanie danych obszaru roboczego usługi Log Analytics w usłudze Azure Monitor.
- Jednorazowy eksport przy użyciu aplikacji logiki. Zobacz Łącznik dzienników usługi Azure Monitor dla usługi Logic Apps.
- Jednorazowy eksport do komputera lokalnego przy użyciu skryptu programu PowerShell. Zobacz Invoke-AzOperationalInsightsQueryExport.
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.
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. Na 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 łączników
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
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.
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ć projektanta aplikacji 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.
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.
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.
Wybierz pozycję Azure Log Analytics — uruchom zapytanie i wyświetl wyniki.
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.
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
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.
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 .
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": "aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e", "Category": "Administrative", "EventSubmissionTimestamp": "2020-09-29T23:11:02Z", "ClientIpAddress": "192.168.1.100", "ResourceId": "/subscriptions/aaaa0a0a-bb1b-cc2c-dd3d-eeeeee4e4e4e/resourcegroups/monitoring/providers/microsoft.storage/storageaccounts/my-storage-account" }
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.
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.
Skopiuj zapisany wcześniej przykładowy rekord. Wybierz pozycję Użyj przykładowego ładunku, aby wygenerować schemat i wkleić.
Dodawanie akcji Redagowanie
Akcja Redaguj pobiera przeanalizowane dane wyjściowe JSON i tworzy obiekt, który ma być przechowywany w obiekcie blob.
Wybierz pozycję + Nowy krok, a następnie wybierz pozycję + Dodaj akcję. W obszarze Wybierz operację wprowadź compose. Następnie wybierz akcję Utwórz .
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.
Dodawanie akcji Tworzenie obiektu blob
Akcja Utwórz obiekt blob zapisuje skomponowany kod JSON do magazynu.
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 .
Wprowadź nazwę połączenia z kontem magazynu w polu Nazwa połączenia. 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')
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 .
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.
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.
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
- Dowiedz się więcej o zapytaniach dzienników w usłudze Azure Monitor.
- Dowiedz się więcej na temat usługi Logic Apps.
- Dowiedz się więcej o usłudze Power Automate.