Mengekspor data dari ruang kerja Analitik Log ke akun penyimpanan dengan menggunakan Logic Apps

Artikel ini menjelaskan metode untuk menggunakan Azure Logic Apps untuk mengkueri data dari ruang kerja Analitik Log di Azure Monitor dan mengirimkannya ke Azure Storage. Gunakan proses ini saat Anda perlu mengekspor data Log Azure Monitor untuk skenario audit dan kepatuhan atau untuk memungkinkan layanan lain mengambil data ini.

Metode ekspor lainnya

Metode yang dibahas dalam artikel ini menjelaskan ekspor terjadwal dari kueri log dengan menggunakan aplikasi logika. Opsi lain untuk mengekspor data untuk skenario tertentu meliputi:

Gambaran Umum

Prosedur ini menggunakan konektor Log Azure Monitor, yang memungkinkan Anda menjalankan kueri log dari aplikasi logika dan menggunakan outputnya dalam tindakan lain dalam alur kerja. Konektor Azure Blob Storage digunakan dalam prosedur ini untuk mengirim output kueri ke penyimpanan.

Screenshot that shows a Logic Apps overview.

Saat Anda mengekspor data dari ruang kerja Analitik Log, batasi jumlah data yang diproses oleh alur kerja Logic Apps Anda. Filter dan agregat data log Anda dalam kueri untuk mengurangi data yang diperlukan. Misalnya, jika Anda perlu mengekspor peristiwa masuk, filter untuk peristiwa yang diperlukan dan proyeksakan hanya bidang yang diperlukan. Contohnya:

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

Saat Anda mengekspor data sesuai jadwal, gunakan ingestion_time() fungsi dalam kueri Anda untuk memastikan bahwa Anda tidak melewatkan data yang terlambat tiba. Jika data tertunda karena masalah jaringan atau platform, menggunakan waktu penyerapan memastikan bahwa data disertakan dalam eksekusi Logic Apps berikutnya. Misalnya, lihat langkah "Tambahkan tindakan Log Azure Monitor" di bagian prosedur Logic Apps.

Prasyarat

Prasyarat berikut harus diselesaikan sebelum Anda memulai prosedur ini:

  • Ruang kerja Analitik Log: Pengguna yang membuat aplikasi logika harus memiliki setidaknya izin baca ke ruang kerja.
  • Akun penyimpanan: Akun penyimpanan tidak harus berada dalam langganan yang sama dengan ruang kerja Analitik Log Anda. Pengguna yang membuat aplikasi logika harus memiliki izin tulis ke akun penyimpanan.

Batasan konektor

Ruang kerja Log Analytics dan kueri log di Azure Monitor adalah layanan multipenyewa yang mencakup batasan untuk melindungi dan mengisolasi pelanggan dan mempertahankan kualitas layanan. Saat Anda mengkueri sejumlah besar data, pertimbangkan batas berikut, yang dapat memengaruhi cara Anda mengonfigurasi pengulangan Logic Apps dan kueri log Anda:

  • Kueri log tidak dapat mengembalikan lebih dari 500.000 baris.
  • Kueri log tidak dapat mengembalikan lebih dari 64.000.000 byte.
  • Kueri log tidak dapat berjalan lebih dari 10 menit.
  • Konektor Analitik Log dibatasi hingga 100 panggilan per menit.

Prosedur Logic Apps

Bagian berikut memanding Anda melalui prosedur.

Membuat kontainer di akun penyimpanan

Gunakan prosedur dalam Membuat kontainer untuk menambahkan kontainer ke akun penyimpanan Anda untuk menyimpan data yang diekspor. Nama yang digunakan untuk kontainer dalam artikel ini adalah loganalytics-data, tetapi Anda dapat menggunakan nama apa pun.

Membuat alur kerja aplikasi logika

  1. Buka Azure Logic Apps di portal Azure dan klik Tambahkan. Pilih Langganan, Grup sumber daya, dan Wilayah untuk menyimpan aplikasi logika baru. Kemudian beri nama yang unik. Anda dapat mengaktifkan pengaturan Analitik Log untuk mengumpulkan informasi tentang data runtime dan peristiwa seperti yang dijelaskan dalam Menyiapkan Log Azure Monitor dan mengumpulkan data diagnostik untuk Azure Logic Apps. Pengaturan ini tidak diperlukan untuk menggunakan konektor Log Azure Monitor.

    Screenshot that shows creating a logic app.

  2. Pilih Tinjauan + buat kemudian pilih Buat. Setelah penyebaran selesai, pilih Buka sumber daya untuk membuka Logic Apps Designer.

Membuat pemicu untuk alur kerja

Pada Mulai dengan pemicu umum, pilih Pengulangan. Pengaturan ini membuat alur kerja aplikasi logika yang secara otomatis berjalan pada interval reguler. Dalam kotak Frekuensi tindakan, pilih Hari. Dalam kotak Interval , masukkan 1 untuk menjalankan alur kerja sekali per hari.

Screenshot that shows a Recurrence action.

Menambahkan tindakan Log Azure Monitor

Tindakan Azure Monitor Logs memungkinkan Anda menentukan kueri yang akan dijalankan. Kueri log yang digunakan dalam contoh ini dioptimalkan untuk pengulangan per jam. Ini mengumpulkan data yang diserap untuk waktu eksekusi tertentu. Misalnya, jika alur kerja berjalan pada 4:35, rentang waktunya adalah 3:00 hingga 4:00. Jika Anda mengubah aplikasi logika untuk dijalankan pada frekuensi yang berbeda, Anda juga perlu mengubah kueri. Misalnya, jika Anda mengatur pengulangan untuk dijalankan setiap hari, Anda mengatur startTime dalam kueri ke startofday(make_datetime(year,month,day,0,0)).

Anda diminta untuk memilih penyewa untuk memberikan akses ke ruang kerja Analitik Log dengan akun yang akan digunakan alur kerja untuk menjalankan kueri.

  1. Klik + Langkah baru untuk menambahkan tindakan yang dijalankan setelah tindakan pengulangan. Di bawah Pilih tindakan, masukkan azure monitor. Lalu pilih Log Azure Monitor.

    Screenshot that shows an Azure Monitor Logs action.

  2. Pilih Azure Log Analytics – Jalankan kueri dan daftar hasil.

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

  3. Pilih Langganan dan Grup Sumber Daya untuk ruang kerja Analitik Log Anda. Pilih Ruang Kerja Analitik Log untuk Jenis Sumber Daya. Lalu pilih nama ruang kerja di bawah Nama Sumber Daya.

  4. Tambahkan kueri log berikut ke jendela Kueri :

    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. Rentang waktu menentukan rekaman yang akan dicakupkan dalam kueri berdasarkan kolom TimeGenerated. Nilai harus lebih besar dari rentang waktu yang dipilih dalam kueri. Karena kueri ini tidak menggunakan kolom TimeGenerated , opsi Atur dalam kueri tidak tersedia. Untuk informasi selengkapnya tentang rentang waktu, lihat Cakupan kueri. Pilih 4 jam terakhir untuk Rentang Waktu. Pengaturan ini memastikan bahwa setiap rekaman dengan waktu penyerapan yang lebih besar dari TimeGenerated akan disertakan dalam hasilnya.

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

Menambahkan tindakan Urai JSON (opsional)

Output dari tindakan Jalankan kueri dan cantumkan hasil diformat dalam JSON. Anda dapat mengurai data ini dan memanipulasinya sebagai bagian dari persiapan untuk tindakan Buat .

Anda dapat memberikan skema JSON yang menjelaskan payload yang diharapkan diterima. Perancang tersebut menguraikan konten JSON dengan menggunakan skema ini dan menghasilkan token yang mudah digunakan yang mewakili properti dalam konten JSON Anda. Anda kemudian dapat dengan mudah mereferensikan dan menggunakan properti tersebut di seluruh alur kerja Aplikasi Logika Anda.

Anda bisa menggunakan sampel output dari langkah Jalankan kueri dan daftar hasil .

  1. Pilih Jalankan Pemicu di pita Logic Apps. Lalu pilih Jalankan dan unduh dan simpan rekaman output. Untuk kueri sampel di batang sebelumnya, Anda bisa menggunakan contoh output berikut:

    {
        "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. Pilih + Langkah baru lalu pilih + Tambahkan tindakan. Di bawah Pilih operasi, masukkan json lalu pilih Uraikan JSON.

    Screenshot that shows selecting a Parse JSON operator.

  3. Pilih kotak Konten untuk menampilkan daftar nilai dari aktivitas sebelumnya. Pilih Isi dari tindakan Jalankan kueri dan cantumkan hasil. Output ini berasal dari kueri log.

    Screenshot that shows selecting a Body.

  4. Salin rekaman sampel yang disimpan sebelumnya. Pilih Gunakan contoh payload untuk menghasilkan skema dan tempel.

    Screenshot that shows parsing a JSON payload.

Menambahkan tindakan Tulis

Tindakan Tulis mengambil output JSON yang diurai dan membuat objek yang Anda perlukan untuk menyimpan dalam blob.

  1. Pilih + Langkah baru, lalu pilih + Tambahkan tindakan. Di bawah Pilih operasi, masukkan buat. Lalu pilih tindakan Buat .

    Screenshot that shows selecting a Compose action.

  2. Pilih kotak Input untuk menampilkan daftar nilai dari aktivitas sebelumnya. Pilih Isi dari tindakan Urai JSON. Output yang diurai ini berasal dari kueri log.

    Screenshot that shows selecting a body for a Compose action.

Menambahkan tindakan Buat blob

Tindakan Buat blob menulis JSON yang disusun ke penyimpanan.

  1. Pilih + Langkah baru, lalu pilih + Tambahkan tindakan. Di bawah Pilih operasi, masukkan blob. Lalu pilih tindakan Buat blob .

    Screenshot that shows selecting the Create Blob action.

  2. Masukkan nama untuk koneksi ke akun penyimpanan Anda di Nama Koneksi ion. Lalu pilih ikon folder di kotak Jalur folder untuk memilih kontainer di akun penyimpanan Anda. Pilih Nama blob untuk melihat daftar nilai dari aktivitas sebelumnya. Pilih Ekspresi dan masukkan ekspresi yang cocok dengan interval waktu Anda. Untuk kueri ini, yang dijalankan per jam, ekspresi berikut mengatur nama blob per jam sebelumnya:

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

    Screenshot that shows a blob expression.

  3. Pilih kotak Konten blob untuk menampilkan daftar nilai dari aktivitas sebelumnya. Lalu pilih Output di bagian Buat .

    Screenshot that shows creating a blob expression.

Menguji alur kerja

Untuk menguji alur kerja, pilih Jalankan. Jika alur kerja memiliki kesalahan, alur kerja ditunjukkan pada langkah dengan masalah. Anda dapat melihat eksekusi dan menelusuri setiap langkah untuk melihat input dan output untuk menyelidiki kegagalan. Lihat Memecahkan masalah dan mendiagnosis kegagalan alur kerja di Azure Logic Apps, jika perlu.

Screenshot that shows Runs history.

Melihat log dalam penyimpanan

Masuk ke menu Akun penyimpanan di portal Microsoft Azure dan pilih akun penyimpanan Anda. Pilih petak peta Blob . Kemudian pilih kontainer yang Anda tentukan dalam tindakan Buat blob . Pilih salah satu blob lalu pilih Edit blob.

Screenshot that shows blob data.

Templat Aplikasi Logika

Langkah Urai JSON opsional tidak disertakan dalam templat

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

Langkah berikutnya