LogicMonitor REST API v3 を使用したサービスの作成
最終更新日: 22 年 2024 月 XNUMX 日LogicMonitor Service Insight を使用すると、サービス レベルで監視する論理サービスを作成できます。サービスは、「リソース」で使用可能な 1 つ以上の監視対象デバイス上に作成できます。リソースには、デバイス、クラウド リソース、Kubernetes リソース (ポッド、ノード、サービス、デプロイメントなど) が含まれます。詳細については、「」を参照してください。 LMサービスインサイトについて.
LogicMonitor REST API デバイス エンドポイントを使用してサービスを管理できます。 LogicMonitor では、サービスはデバイスのタイプと見なされ、デバイス API エンドポイントはリソース API エンドポイントと見なされ、デバイス API エンドポイントを使用してサービスをプログラムで管理 (追加、作成、更新、および削除) できます。
LogicMonitor REST API v3 を使用したサービスの作成
- タイプ 6 のデバイスを追加します (POST
/device/devices
). - 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.members | JSONオブジェクト | これはカスタム プロパティであり、サービス内でグループ化する必要があるデバイスとインスタンスを定義します。最上位のオブジェクトは、 device • instance これにより、デバイスとインスタンスをそれぞれ追加できるようになります。注: 値は文字列であるため、値内の二重引用符をエスケープする必要がある場合があります。たとえば、Python では、値文字列内のすべての二重引用符の前に「\\」を置きます。例– “customProperties”:[{“name”:”predef.bizservice.members”,”value”:”{“device”:[{“deviceGroupFullPath”:”*”,”deviceDisplayName”:”*”,”deviceProperties”:[{“name”:”kubernetes.label.app”,”value”:”argus”}]}],”instance”:[]}”}] |
predef.bizservice.evalMembersInterval | JSONオブジェクト | これはカスタム プロパティであり、サービスのメンバーシップが再評価される頻度を制御します。 例– “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 |
customProperties | JSONオブジェクト | このサービスに定義されたカスタム プロパティ。各プロパティには名前と値が必要です。 例– “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)