Вывести результаты запроса рабочей области Log Analytics в концентратор событий - PullRequest
0 голосов
/ 05 ноября 2019

Я выполняю запрос для вывода журналов, записанных в рабочей области Azure Log Analytics, например: Invoke-AzOperationalInsightsQuery -WorkspaceId '' -Query "AzureDiagnostics |, где Category == 'AzureFirewallApplicationRule'"

ОднакоМне нужно отправить результаты этого в концентратор событий для дальнейшей обработки.

Я пытаюсь использовать REST API (https://docs.microsoft.com/en-us/rest/api/eventhub/send-batch-events), но пытаюсь динамически генерировать тело запроса для отправки вКонцентратор событий, основанный на полях вывода запроса. Это может быть не лучшим способом сделать это, какие-либо предложения?

1 Ответ

0 голосов
/ 06 ноября 2019

Я предлагаю вам использовать Отправить событие api, посылая простые данные json одну за другой. Потому что если вы используете send batch api, вам нужно создать более сложные исходные данные.

Вы можете использовать следующий код powershell для отправки данных в концентратор событий, используя send event api.

$queryResults = Invoke-AzOperationalInsightsQuery -WorkspaceId "xxx" -Query "your query"    

#generate sas token
$URI_1 = "event_hub_namespace.servicebus.windows.net/eventhub_path"
$Access_Policy_Name="RootManageSharedAccessKey"
$Access_Policy_Key="the key"

#Token expires now+3000
$Expires=([DateTimeOffset]::Now.ToUnixTimeSeconds())+3000
$SignatureString=[System.Web.HttpUtility]::UrlEncode($URI_1)+ "`n" + [string]$Expires
$HMAC = New-Object System.Security.Cryptography.HMACSHA256
$HMAC.key = [Text.Encoding]::ASCII.GetBytes($Access_Policy_Key)
$Signature = $HMAC.ComputeHash([Text.Encoding]::ASCII.GetBytes($SignatureString))
$Signature = [Convert]::ToBase64String($Signature)
$SASToken = "SharedAccessSignature sr=" + [System.Web.HttpUtility]::UrlEncode($URI_1) + "&sig=" + [System.Web.HttpUtility]::UrlEncode($Signature) + "&se=" + $Expires + "&skn=" + $Access_Policy_Name
$SASToken

$method = "POST"
$url = "https://event_hub_namespace.servicebus.windows.net/eventhub_path/messages"
$signature = $SASToken

# API headers
$headers = @{
            "Authorization"=$signature;
            "Content-Type"="application/atom+xml;type=entry;charset=utf-8";
            }

#use foreach to send data
foreach($s in $queryResults.Results){
    #Write-Output "hello"
    $json = $s | ConvertTo-Json
    #Write-Output $json

    Invoke-WebRequest -Method $method -Headers $headers -Body $json -uri $url
}

Write-Output "**completed**"

После выполнения выполнения powershell я использую код для получения данных из концентратора событий и могу подтвердить, что все данные отправлены в концентратор событий. Скриншот как показано ниже:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...