サポートセンターホーム


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

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

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

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

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

統合の設定

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

LogicMonitorでAWSリソースをすでに監視している場合は、統合をセットアップするために次の手順を実行する必要があります。 AWS Lambda関数とCloudWatchイベントはどちらもリージョン固有であるため、イベントを受信するリージョンごとに次の手順を実装する必要があります。

  1. APIトークンのセットを作成します 統合が使用するLogicMonitorアカウント内。 OpsNotesを作成するには、これらのAPIトークンが属するユーザーがすべてのデバイスを管理する権限を持っている必要があることに注意してください。 ベストプラクティスとして、統合用に指定されたAPIユーザーを作成することをお勧めします。
  2. サーバーレスアプリケーションリポジトリから新しいLambda関数を作成し、「logicmonitor-send-cloudwatch-events」を選択します。
  3. 関数の名前を追加してデプロイします。
  4. 関数のトリガーとしてCloudWatchイベントを追加してから、 CloudWatchイベントルールを作成または選択する これは、LogicMonitorアカウントに表示するイベントと一致します。 イベントパターンに基づいてルールを作成するのが最も簡単です。 トリガーを有効にすると、一致するイベントの作成直後にLambda関数がトリガーされます。
  5. ACCOUNT_NAME、API_ACCESS_ID、およびAPI_ACCESS_KEYの値を環境変数として追加します。 ACCOUNT_NAMEは、LogicMonitorアカウント名と一致する必要があります。アカウント名は、アカウントURLの「.logicmonitor.com」の前の名前です。 API_ACCESS_KEYは、手順1で作成したAPIトークンのアクセスキーと一致する必要があり、API_ACCESS_IDは、手順1で作成したAPIトークンペアのアクセスIDと一致する必要があります。API_ACCESS_IDとAPI_ACCESS_KEYは暗号化された環境変数である必要があるため、有効にする必要があります。暗号化ヘルパーとKMSキーの選択。 関数用に自動作成されたロールには、選択したキーを使用して実行時に変数を復号化する権限が必要です。

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

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

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

セットアップ手順:

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

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

  1. APIトークンのセットを作成します 関数が使用するLogicMonitorアカウント内。 OpsNotesを作成するには、これらのAPIトークンが属するユーザーがすべてのデバイスを管理する権限を持っている必要があることに注意してください。 ベストプラクティスとして、統合用に指定された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. モニターサービス内で、[アラート]セクションを選択し、LogicMonitorに表示するイベントに一致するアクティビティログアラートを構成します。 次のように、タイプWebhookの新しいアクションを追加し、説明として関数URLを追加する必要があります。

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