Logic Apps kullanarak Log Analytics çalışma alanından depolama hesabına veri aktarma

Bu makalede, Azure İzleyici'deki Log Analytics çalışma alanından verileri sorgulamak ve Azure Depolama'e göndermek için Azure Logic Apps'i kullanma yöntemi açıklanmaktadır. Denetim ve uyumluluk senaryoları için Azure İzleyici Günlükleri verilerinizi dışarı aktarmanız veya başka bir hizmetin bu verileri almasına izin vermeniz gerektiğinde bu işlemi kullanın.

Diğer dışarı aktarma yöntemleri

Bu makalede açıklanan yöntem, mantıksal uygulama kullanarak günlük sorgusundan zamanlanmış dışarı aktarmayı açıklar. Belirli senaryolar için verileri dışarı aktarmaya yönelik diğer seçenekler şunlardır:

  • Log Analytics çalışma alanınızdan bir depolama hesabına veya Azure Event Hubs'a veri aktarmak için Azure İzleyici Günlükleri'nin Log Analytics çalışma alanı verilerini dışarı aktarma özelliğini kullanın. Bkz. Azure İzleyici'de Log Analytics çalışma alanı verilerini dışarı aktarma.
  • Mantıksal uygulama kullanarak tek seferlik dışarı aktarma. Bkz . Logic Apps için Azure İzleyici Günlükleri bağlayıcısı.
  • PowerShell betiği kullanarak yerel makineye tek seferlik dışarı aktarma. Bkz. Invoke-AzOperational Analizler QueryExport.

Genel Bakış

Bu yordam, bir mantıksal uygulamadan günlük sorgusu çalıştırmanıza ve çıkışını iş akışındaki diğer eylemlerde kullanmanıza olanak tanıyan Azure İzleyici Günlükleri bağlayıcısını kullanır. Azure Blob Depolama bağlayıcısı bu yordamda sorgu çıkışını depolama alanına göndermek için kullanılır.

Screenshot that shows a Logic Apps overview.

Log Analytics çalışma alanından verileri dışarı aktardığınızda Logic Apps iş akışınız tarafından işlenen veri miktarını sınırlayın. Gerekli verileri azaltmak için sorgudaki günlük verilerinizi filtreleyin ve birleştirin. Örneğin, oturum açma olaylarını dışarı aktarmanız gerekiyorsa, gerekli olayları filtreleyin ve yalnızca gerekli alanları yansıtın. Örnek:

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

Verileri bir zamanlamaya göre dışarı aktardığınızda, geç gelen verileri kaçırmadığınızdan emin olmak için sorgunuzdaki işlevini kullanın ingestion_time() . Veriler ağ veya platform sorunları nedeniyle gecikirse, veri alımı süresinin kullanılması verilerin bir sonraki Logic Apps yürütmesine dahil edilmesini sağlar. Bir örnek için Logic Apps yordamı bölümündeki "Azure İzleyici Günlükleri Ekle eylemi" adımına bakın.

Önkoşullar

Bu yordama başlamadan önce aşağıdaki önkoşulların tamamlanması gerekir:

  • Log Analytics çalışma alanı: Mantıksal uygulamayı oluşturan kullanıcının çalışma alanında en azından okuma izni olmalıdır.
  • Depolama hesabı: Depolama hesabının Log Analytics çalışma alanınızla aynı abonelikte olması gerekmez. Mantıksal uygulamayı oluşturan kullanıcının depolama hesabına yazma izni olmalıdır.

Bağlan veya sınırları

Azure İzleyici'deki Log Analytics çalışma alanı ve günlük sorguları, müşterileri korumak ve yalıtmak ve hizmet kalitesini korumak için sınırlar içeren çok kiracılı hizmetlerdir. Büyük miktarda veri için sorgu yaptığınızda, Logic Apps yinelenme biçimini ve günlük sorgunuzu nasıl yapılandırabileceğinizi etkileyebilecek aşağıdaki sınırları göz önünde bulundurun:

  • Günlük sorguları 500.000'den fazla satır döndüremez.
  • Günlük sorguları 64.000.000 bayttan fazlasını döndüremez.
  • Günlük sorguları 10 dakikadan uzun süre çalışamaz.
  • Log Analytics bağlayıcısı dakikada 100 çağrı ile sınırlıdır.

Logic Apps yordamı

Aşağıdaki bölümlerde yordamda size yol gösterir.

Depolama hesabında kapsayıcı oluşturma

Dışarı aktarılan verileri barındırmak üzere depolama hesabınıza kapsayıcı eklemek için Kapsayıcı oluşturma bölümünde verilen yordamı kullanın. Bu makalede kapsayıcı için kullanılan ad loganalytics-data'dır, ancak herhangi bir adı kullanabilirsiniz.

Mantıksal uygulama iş akışı oluşturma

  1. Azure portalında Logic Apps'e gidin ve Ekle'yi seçin. Yeni mantıksal uygulamayı depolamak için bir Abonelik, Kaynak grubu ve Bölge seçin. Ardından benzersiz bir ad verin. Azure İzleyici Günlüklerini ayarlama ve Azure Logic Apps için tanılama verilerini toplama başlığı altında açıklandığı gibi çalışma zamanı verileri ve olayları hakkında bilgi toplamak için Log Analytics ayarını açabilirsiniz. Bu ayar, Azure İzleyici Günlükleri bağlayıcısını kullanmak için gerekli değildir.

    Screenshot that shows creating a logic app.

  2. Gözden Geçir + oluştur’u ve sonra da Oluştur’u seçin. Dağıtım tamamlandıktan sonra Kaynağa git'i seçerek Logic Apps Tasarım Aracı açın.

İş akışı için tetikleyici oluşturma

Ortak tetikleyiciyle başla'nın altında Yinelenme'yi seçin. Bu ayar, düzenli aralıklarla otomatik olarak çalışan bir mantıksal uygulama iş akışı oluşturur. Eylemin Sıklık kutusunda Gün'e tıklayın. Aralık kutusuna iş akışını günde bir kez çalıştırmak için 1 girin.

Screenshot that shows a Recurrence action.

Azure İzleyici Günlükleri eylemi ekleme

Azure İzleyici Günlükleri eylemi, çalıştırılacak sorguyu belirtmenize olanak tanır. Bu örnekte kullanılan günlük sorgusu saatlik yineleme için iyileştirilmiştir. Belirli bir yürütme süresi için alınan verileri toplar. Örneğin, iş akışı 4:35'te çalışıyorsa zaman aralığı 3:00 ile 4:00 arasında olabilir. Mantıksal uygulamayı farklı bir sıklıkta çalışacak şekilde değiştirirseniz, sorguyu da değiştirmeniz gerekir. Örneğin, yinelenmeyi günlük çalışacak şekilde ayarlarsanız, sorguda olarak startofday(make_datetime(year,month,day,0,0))ayarlarsınızstartTime.

İş akışının sorguyu çalıştırmak için kullanacağı hesapla Log Analytics çalışma alanına erişim vermek için bir kiracı seçmeniz istenir.

  1. Yinelenme eyleminden sonra çalışan bir eylem eklemek için + Yeni adım'ı seçin. Eylem seçin bölümüne azure izleyicisi girin. Ardından Azure İzleyici Günlükleri'ne tıklayın.

    Screenshot that shows an Azure Monitor Logs action.

  2. Azure Log Analytics – Sorguyu çalıştır ve sonuçları listele'yi seçin.

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

  3. Log Analytics çalışma alanınız için Abonelik ve Kaynak Grubu'na tıklayın. Kaynak Türü için Log Analytics Çalışma Alanı'nı seçin. Ardından Kaynak Adı'nın altındaki çalışma alanı adını seçin.

  4. Sorgu penceresine aşağıdaki günlük sorgusunu ekleyin:

    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. Zaman Aralığı, TimeGenerated sütununa göre sorguya dahil edilecek kayıtları belirtir. Değer, sorguda seçilen zaman aralığından büyük olmalıdır. Bu sorgu TimeGenerated sütununu kullanmadığından Sorguda ayarla seçeneği kullanılamaz. Zaman aralığı hakkında daha fazla bilgi için bkz . Sorgu kapsamı. Zaman Aralığı için Son 4 saat'i seçin. Bu ayar, Alma süresi TimeGenerated değerinden uzun olan tüm kayıtların sonuçlara eklenmesini sağlar.

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

JSON Ayrıştır eylemi ekleme (isteğe bağlı)

Sorguyu çalıştır ve sonuçları listele eyleminin çıkışı JSON biçiminde biçimlendirilir. Bu verileri ayrıştırabilir ve Oluştur eyleminin hazırlığı kapsamında işleyebilirsiniz.

Almayı beklediğiniz yükü açıklayan bir JSON şeması sağlayabilirsiniz. Tasarımcı bu şemayı kullanarak JSON içeriğini ayrıştırıyor ve JSON içeriğinizdeki özellikleri temsil eden kullanıcı dostu belirteçler oluşturuyor. Daha sonra Mantıksal Uygulamanızın iş akışı boyunca bu özelliklere kolayca başvurabilir ve kullanabilirsiniz.

Sorguyu çalıştır ve sonuçları listele adımından örnek bir çıktı kullanabilirsiniz.

  1. Logic Apps şeridinde Tetikleyiciyi Çalıştır'ı seçin. Ardından Çalıştır'ı seçin ve bir çıkış kaydı indirin ve kaydedin. Önceki kökteki örnek sorgu için aşağıdaki örnek çıkışı kullanabilirsiniz:

    {
        "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. + Yeni adım'ı ve ardından + Eylem ekle'yi seçin. İşlem seçin'in altında json girin ve JSON Ayrıştır'ı seçin.

    Screenshot that shows selecting a Parse JSON operator.

  3. Önceki etkinliklere ait değerlerin listesini görüntülemek için İçerik kutusunu seçin. Sorguyu çalıştır ve sonuçları listele eyleminden Gövde'yi seçin. Bu çıkış günlük sorgusundan alınmaktadır.

    Screenshot that shows selecting a Body.

  4. Daha önce kaydedilen örnek kaydı kopyalayın. Şema oluşturmak ve yapıştırmak için Örnek yükü kullan'ı seçin.

    Screenshot that shows parsing a JSON payload.

Oluştur eylemini ekleme

Oluştur eylemi ayrıştırılmış JSON çıkışını alır ve blobda depolamanız gereken nesneyi oluşturur.

  1. + Yeni adım'ı ve ardından + Eylem ekle'yi seçin. İşlem seçin'in altına compose yazın. Ardından Oluştur eylemini seçin.

    Screenshot that shows selecting a Compose action.

  2. Önceki etkinliklere ait değerlerin listesini görüntülemek için Girişler kutusunu seçin. JSON Ayrıştır eyleminden Gövde'yi seçin. Bu ayrıştırılan çıkış günlük sorgusundan alınıyor.

    Screenshot that shows selecting a body for a Compose action.

Blob oluştur eylemini ekleme

Blob oluştur eylemi, oluşturulan JSON'u depolama alanına yazar.

  1. + Yeni adım'ı ve ardından + Eylem ekle'yi seçin. İşlem seçin bölümüne blob girin. Ardından Blob oluştur eylemini seçin.

    Screenshot that shows selecting the Create Blob action.

  2. Bağlan ion Name alanına depolama hesabınızla bağlantı için bir ad girin. Ardından, depolama hesabınızdaki kapsayıcıyı seçmek için Klasör yolu kutusundaki klasör simgesini seçin. Önceki etkinliklere ait değerlerin listesini görmek için Blob adı'na tıklayın. İfade'yi seçin ve zaman aralığınızla eşleşen bir ifade girin. Saatlik olarak çalıştırılan bu sorgu için aşağıdaki ifade blob adını önceki saat başına ayarlar:

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

    Screenshot that shows a blob expression.

  3. Önceki etkinliklere ait değerlerin listesini görüntülemek için Blob içerik kutusunu seçin. Ardından Oluştur bölümünde Çıkışlar'ı seçin.

    Screenshot that shows creating a blob expression.

İş akışını test etme

İş akışını test etmek için Çalıştır'ı seçin. İş akışında hatalar varsa, bunlar sorunla ilgili adımda belirtilir. Hataları araştırmak için giriş ve çıkışı görüntülemek için yürütmeleri görüntüleyebilir ve her adımda detaya gidebilirsiniz. Gerekirse bkz . Azure Logic Apps'te iş akışı hatalarını giderme ve tanılama.

Screenshot that shows Runs history.

Depolamadaki günlükleri görüntüleme

Azure portalında Depolama hesapları menüsüne gidin ve depolama hesabınızı seçin. Bloblar kutucuğunu seçin. Ardından Blob oluştur eyleminde belirttiğiniz kapsayıcıyı seçin. Bloblardan birini seçin ve ardından Blobu düzenle'yi seçin.

Screenshot that shows blob data.

Mantıksal Uygulama şablonu

İsteğe bağlı JSON Ayrıştır adımı şablona eklenmez

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

Sonraki adımlar