LogicMonitor REST API v3 を使用したサービスの作成

最終更新日: 22 年 2024 月 XNUMX 日

LogicMonitor Service Insight を使用すると、サービス レベルで監視する論理サービスを作成できます。サービスは、「リソース」で使用可能な 1 つ以上の監視対象デバイス上に作成できます。リソースには、デバイス、クラウド リソース、Kubernetes リソース (ポッド、ノード、サービス、デプロイメントなど) が含まれます。詳細については、「」を参照してください。 LMサービスインサイトについて

LogicMonitor REST API デバイス エンドポイントを使用してサービスを管理できます。 LogicMonitor では、サービスはデバイスのタイプと見なされ、デバイス API エンドポイントはリソース API エンドポイントと見なされ、デバイス API エンドポイントを使用してサービスをプログラムで管理 (追加、作成、更新、および削除) できます。

LogicMonitor REST API v3 を使用したサービスの作成

  1. タイプ 6 のデバイスを追加します (POST /device/devices).
  2. LogicMonitor ユーザー インターフェイスを使用して作成されたデータソース、または API を使用してインポートされたデータソースを追加します。
    データソースはサービスに自動的に適用され、データが集約されます。

必須フィールド

次の表は、 /device/devices エンドポイントを使用して定義します

プロパティタイプ説明
name文字列デバイスの場合は、ホスト名または IP アドレスです。サービスの場合、クラスター IP でクラスターを表している場合を除き、スペースを含まない表示名になります。
例– “name”:”Prod-Service”
displayName文字列サービスの表示名です。これにより、リソース ツリー上でサービスがどのように表示されるかが決まります。
例– “displayName”:”Reporting Service”
preferredCollectorId整数サービスの場合、これは常に -4 でなければなりません。これは、データ集約が LogicMonitor のバックエンドで行われることを示します。
例– “preferredCollectorId”:-4
deviceType整数サービスの場合、これは常に 6 である必要があります。
例– “deviceType”:6
predef.bizservice.membersJSONオブジェクトこれはカスタム プロパティであり、サービス内でグループ化する必要があるデバイスとインスタンスを定義します。最上位のオブジェクトは、 device & instance これにより、デバイスとインスタンスをそれぞれ追加できるようになります。注: 値は文字列であるため、値内の二重引用符をエスケープする必要がある場合があります。たとえば、Python では、値文字列内のすべての二重引用符の前に「\\」を置きます。
例– “customProperties”:[{“name”:”predef.bizservice.members”,”value”:”{“device”:[{“deviceGroupFullPath”:”*”,”deviceDisplayName”:”*”,”deviceProperties”:[{“name”:”kubernetes.label.app”,”value”:”argus”}]}],”instance”:[]}”}]
predef.bizservice.evalMembersIntervalJSONオブジェクトこれはカスタム プロパティであり、サービスのメンバーシップが再評価される頻度を制御します。
例– “customProperties”:[{“name”:”predef.bizservice.members”,”value”:”30″}]

オプションのフィールド

必須フィールドに加えて、メンバーシップの再評価率などのサービスを作成するために、次のオプションのフィールドを含めることができます。

プロパティタイプ説明
hostGroupIds文字列サービスが属するグループの ID。カンマで区切られたグループ ID のリストを指定できます。
例– “hostGroupIds”:"2,34,5"
description文字列サービスの説明。例 – “description”:”The production reporting service”
disableAlertingブーリアンアラートが無効かどうかを示します (true) または有効 (false)本サービスの対象となります。
例– “disableAlerting”:false
customPropertiesJSONオブジェクトこのサービスに定義されたカスタム プロパティ。各プロパティには名前と値が必要です。
例– “customProperties”:[{“name”:”team”,”value”:”prod”},{“name”:”location”,”value”:”Santa Barbara, CA”}]

次の Python の例では、サービスを追加します Reporting Service すべてのデバイスをプロパティでグループ化します kubernetes.label.app=argus。メンバーの再評価間隔は 30 分に設定されています。

#!/bin/env python
 
import requests
import json
import hashlib
import base64
import time
import hmac
import getpass
 
#Account Info: LogicMonitor recommends to NEVER hardcode the credentials. Instead, retrieve the values from a secure storage.
#Note: The below is provided for illustration purposes only.
AccessId = getpass.getpass("Enter your AccessId: ")
AccessKey = getpass.getpass("Enter your AccessKey: ")
Company = 'apiAccount'
 
#Request Info
httpVerb ='POST'
resourcePath = '/device/devices'
queryParams ='?v=2'
data = '{"name":"testAPIService","displayName":"Reporting Service","deviceType":6,"preferredCollectorId":-4,"customProperties":[{"name":"predef.bizService.evalMembersInterval","value":"30"},{"name":"predef.bizservice.members","value":"{\\"device\\":[{\\"deviceGroupFullPath\\":\\"*\\",\\"deviceDisplayName\\":\\"*\\",\\"deviceProperties\\":[{\\"name\\":\\"kubernetes.label.app\\",\\"value\\":\\"argus\\"}]}],\\"instance\\":[]}"}]}'
 
#Construct URL
url = 'https://'+ Company +'.logicmonitor.com/santaba/rest' + resourcePath +queryParams
 
#Get current time in milliseconds
epoch =str(int(time.time() * 1000))
 
#Concatenate Request details
requestVars = httpVerb + epoch + data + resourcePath
 
#Construct signature digest = hmac.new(
        AccessKey.encode('utf-8'),
        msg=requestVars.encode('utf-8'),
        digestmod=hashlib.sha256).hexdigest()
signature = base64.b64encode(digest.encode('utf-8')).decode('utf-8')  
 
#Construct headers auth = 'LMv1 ' + AccessId + ':' + str(signature) + ':' + epoch
headers = {'Content-Type':'application/json','Authorization':auth,'X-Version':'3'} 
 
#Make request
response = requests.post(url, data=data, headers=headers)
 
#Print status and body of response
print('Response Status:',response.status_code)
print('Response Body:',response.content)
Pythonの3
記事上で