カスタムイベント統合の設定

最終更新日: 21 年 2022 月 XNUMX 日

LM Cloudは、LogicMonitorでAWS、GCP、Azure固有のイベントを確認し、イベント(EC2インスタンスの状態変更通知、CloudTrailログ、Azureアクティビティログなど)をパフォーマンスデータと関連付けることができるカスタムイベント統合を提供します。

これらの統合のセットアップと詳細は、AWS、GCP、Azureによって大きく異なるため、追加情報については次のセクションを参照してください。

LogicMonitorでのAWSCloudWatchイベントの視覚化

LogicMonitorのAWSイベント統合により、LogicMonitorのパフォーマンスデータグラフと一緒にCloudWatchイベントを表示できます。 これは、AWSアカウントで発生したモニタリングの傾向とイベントを相互に関連付けるのに役立つ場合があります。

統合の設定

イベント統合は、AWSLambda関数に基づいています。 Lambda関数を追加し、目的のイベントに基づいて関数をトリガーするCloudWatchイベントルールを設定する必要があります。 Lambda関数は、トリガーされると、LogicMonitorのREST APIを使用して、関連する特定のデバイスのOpsNotesとしてイベントを追加します。 イベントが関連付けられている監視対象リソースの運用メモが作成されると、それらのリソースのすべてのデバイスとダッシュボードのグラフに表示されます。 Ops Notesパネルを使用して、表示されるイベントをさらにフィルタリングできます。

LogicMonitorでAWSリソースをすでに監視している場合は、統合を設定するために次の手順を実行する必要があります。 

AWSLambda関数とCloudWatchイベントはどちらもリージョン固有です。 イベントを受信するには、リージョンごとに次の手順を実装する必要があります。

1.統合で使用する一連のAPIトークンをLogicMonitorアカウントに作成します。 詳細については、を参照してください。 APIトークン.

注意: これらのAPIトークンを使用するには、ユーザーはOpsNotesを作成するためにすべてのデバイスを管理する権限を持っている必要があります。 統合用に指定されたAPIユーザーを作成することをお勧めします。

2.サーバーレスアプリケーションリポジトリから新しいLambda関数を作成し、 'を選択しますlogicmonitor-send-cloudwatch-events'。

3.関数の名前を追加し、関数をデプロイします。

4.関数のトリガーとしてCloudWatchイベントを追加します。

5.LogicMonitorアカウントに表示するイベントに一致するCloudWatchイベントルールを作成または選択します。 イベントパターンに基づいてルールを作成するのが最も簡単です。 詳細については、を参照してください。 AmazonCloudWatchイベント。

トリガーを有効にすると、一致するイベントの作成直後にLambda関数がトリガーされます。

6。 追加 ACCOUNT_NAME, API_ACCESS_ID, API_ACCESS_KEY 環境変数としての値。 The ACCOUNT_NAME LogicMonitorアカウント名と一致する必要があります。アカウント名は、アカウントURLの「.logicmonitor.com」の前にある名前です。 

注意API_ACCESS_KEY 手順6で作成したAPIトークンのアクセスキーと一致する必要があります。 API_ACCESS_ID 手順6で作成したAPIトークンペアのアクセスIDと一致する必要があります。 

7.暗号化ヘルパーを有効にし、KMSキーを選択して、次のようにします。 API_ACCESS_ID 及び API_ACCESS_KEY 暗号化された環境変数です。 関数用に自動作成されたロールには、選択したキーを使用して実行時に変数を復号化する権限が必要です。

すべてのステップが完了したら、ステップ4で設定したルールに一致するすべてのCloudWatchイベントを、関連する特定のモニター対象リソースのLogicMonitor OpsNotesとして追加する必要があります。

LogicMonitorでのAzureアクティビティログの視覚化

Azure関数を使用して、Azureアクティビティログを送信できます。 これは、Azureアカウントで発生した監視の傾向とイベントを相互に関連付けるのに役立つ場合があります。

セットアップ手順

イベントの統合は、Azure関数に基づいています。 具体的には、関数を追加し、目的のアクティビティログイベントに基づいて関数をトリガーするAzureアクティビティログアラートルールを設定する必要があります。 関数は、トリガーされると、LogicMonitorのREST APIを使用して、イベントが関連する特定のデバイスのOpsNotesとしてイベントを追加します。 イベントが関連付けられている監視対象リソースの運用メモが作成されると、それらのリソースのすべてのデバイスとダッシュボードのグラフに表示されます。 Ops Notesパネルを使用して、表示されるイベントをさらにフィルタリングできます。

LogicMonitorで既にAzureリソースを監視している場合は、統合をセットアップするために次の手順を実行する必要があります。

1.統合で使用する一連のAPIトークンをLogicMonitorアカウントに作成します。 詳細については、を参照してください。 APIトークン.

注意: これらのAPIトークンを使用するには、ユーザーはOpsNotesを作成するためにすべてのデバイスを管理する権限を持っている必要があります。 統合用に指定されたAPIユーザーを作成することをお勧めします。

2.新しいAzureFunctionアプリを追加します。

注意:関数は、AppServicesセクション内から表示または作成できます。 作成したら、アプリ内にHTTPTriggerPowershell関数を追加する必要があります。

3.次のスクリプトをHTTPトリガーPowerShell関数に追加します。

# POST method: $req
$requestBody = Get-Content $req -Raw | ConvertFrom-Json

$caller = $requestBody.data.context.activityLog.caller
$source = $requestBody.data.context.activityLog.eventSource
$time = $requestBody.data.context.activityLog.eventTimestamp
$operation = $requestBody.data.context.activityLog.operationName
$resourceId = $requestBody.data.context.activityLog.resourceId 
$resourceGroup = $requestBody.data.context.activityLog.resourceGroupName

Write-Output $resourceId | Out-String

<# account info #>
$accessId = 'API_ID'
$accessKey = 'API_KEY'
$company = 'LM_ACCOUNT'

$encoded = [uri]::EscapeDataString($resourceId)

<# Get Devices request details #>
$httpVerb = 'GET'
$resourcePath = '/device/devices'
$queryParams = '?filter=systemProperties.name:system.azure.resourceid,systemProperties.value:' + $encoded

Write-Output $queryParams | Out-String

<# Construct URL #>
$url = 'https://' + $company + '.logicmonitor.com/santaba/rest' + $resourcePath + $queryParams

<# Get current time in milliseconds #>
$epoch = [Math]::Round((New-TimeSpan -start (Get-Date -Date "1/1/1970") -end (Get-Date).ToUniversalTime()).TotalMilliseconds)

<# Concatenate Request Details #>
$requestVars = $httpVerb + $epoch + $resourcePath

<# Construct Signature #>
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Text.Encoding]::UTF8.GetBytes($accessKey)
$signatureBytes = $hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($requestVars))
$signatureHex = [System.BitConverter]::ToString($signatureBytes) -replace '-'
$signature = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($signatureHex.ToLower()))

<# Construct Headers #>
$auth = 'LMv1 ' + $accessId + ':' + $signature + ':' + $epoch
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization",$auth)
$headers.Add("Content-Type",'application/json')

<# Make Request #>
$response = Invoke-RestMethod -Uri $url -Method $httpVerb -Header $headers 

<# Print status and body of response #>
$status = $response.status
$body = $response.data

Write-Output "Status:$status"

$deviceId = $body.items.id

Write-Output $deviceId | Out-String

If ($deviceId -ne $Null) {

#####################################

<# Add Ops Note request details #>
$httpVerb = 'POST'
$resourcePath = '/setting/opsnotes'
$data = '{"note":"caller:' + $caller + ', source:' + $source + ', operation:' + $operation + '","tags":[{"name":"Azure Activity Log"}],"scopes":[{"type":"device","deviceId":"' + $deviceId + '"}]}'

<# Construct URL #>
$url = 'https://' + $company + '.logicmonitor.com/santaba/rest' + $resourcePath

<# Get current time in milliseconds #>
$epoch = [Math]::Round((New-TimeSpan -start (Get-Date -Date "1/1/1970") -end (Get-Date).ToUniversalTime()).TotalMilliseconds)

<# Concatenate Request Details #>
$requestVars = $httpVerb + $epoch + $data + $resourcePath

<# Construct Signature #>
$hmac = New-Object System.Security.Cryptography.HMACSHA256
$hmac.Key = [Text.Encoding]::UTF8.GetBytes($accessKey)
$signatureBytes = $hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($requestVars))
$signatureHex = [System.BitConverter]::ToString($signatureBytes) -replace '-'
$signature = [System.Convert]::ToBase64String([System.Text.Encoding]::UTF8.GetBytes($signatureHex.ToLower()))

<# Construct Headers #>
$auth = 'LMv1 ' + $accessId + ':' + $signature + ':' + $epoch
$headers = New-Object "System.Collections.Generic.Dictionary[[String],[String]]"
$headers.Add("Authorization",$auth)
$headers.Add("Content-Type",'application/json')

<# Make Request #>
$response = Invoke-RestMethod -Uri $url -Method $httpVerb -Body $data -Header $headers 

<# Print status and body of response #>
$status = $response.status
$body = $response.data | ConvertTo-Json -Depth 5

Write-Output "Status:$status"
Write-Output "Response:$body"
}

4.関数のURL(関数テキストの右上)を取得します–これをAzureアクティビティログアラートルールに追加する必要があります。

5. Monitorサービス内で、[アラート]セクションを選択し、LogicMonitorに表示するイベントに一致するアクティビティログアラートを構成します。 Webhookタイプの新しいアクションを追加し、説明として関数URLを追加する必要があります。

手順が完了したら、手順5で構成したルールに一致するすべてのAzureアクティビティログを、関連する特定の監視対象リソースのLogicMonitor OpsNotesとして追加する必要があります。

記事上で