サポートセンターホーム


Push Metrics RESTAPIを使用したメトリックの取り込み

LogicMonitorプッシュメトリクスRESTAPIを使用して、単一のリソースとデータソースに関連付けられた複数のインスタンスのメトリクスをプログラムで取り込むことができます。

プッシュメトリクスRESTAPIには LMv1APIトークン認証.

お問い合わせ

メトリック取り込みエンドポイントは、データソースとリソースに関連付けられたXNUMXつ以上のインスタンスにメトリックをプッシュするために使用されます。 リクエストごとにサポートされるリソースとデータソースはXNUMXつだけです。 メトリックがリソースにプッシュされるのがこれが初めての場合、このリクエストは結果として 新しいデータソース オプションで新しいリソース(パラメーターによって異なります)。

方法ポスト
ベースURLhttps://{ACCOUNTNAME}.logicmonitor.com/rest
パスメートル法/摂取
ヘッダ承認:LMv1トークン
パラメーター(オプション)https://companyxyz.logicmonitor.com/rest/metric/ingest?create = truecreate = trueの場合、提供されたリソースIDに一致するものがない場合、新しいリソースが作成されます。 デフォルト値は「false」です。
コンテンツタイプアプリケーション/ json
製品仕様{「resourceName」:「 」、//作成フラグが指定されていない場合はオプション「resourceDescription」:「 ”、“ resourceIds”:{//必須の“ key1”:“ value1”、“ key2”:“ value2”、…//複数の値を受け入れる}、“ resourceProperties”:{“ key1”:“ value1”、“ key2 ”:“ value2”、…//複数の値を受け入れる}“ dataSourceId”:“ ” // dataSourceIdまたはdataSource必須の“ dataSource”:“ ” // dataSourceIdまたはdataSource必須の“ dataSourceDisplayName”:“ 」「dataSourceGroup」:「 ”“ instances”:[{“ instanceName”:“ 」、//必須の「instanceDisplayName」:「 ”“ instanceProperties”:{“ key1”:“ value1”、“ key2”:“ value2”、…}、“ dataPoints”:[{“ dataPointName”:“ 」、//必須の「dataPointDescription」:「 」、「dataPointType」:「 」、「dataPointDataType」:「 」、「dataPointAggregationType」:「 ”、“ values”:{//必須、複数の値を許可“ 」:「 ”、…}}、…//データポイントの配列]}、…//インスタンスの配列]}

リクエストでは、次の必須フィールドとオプションフィールドを使用してください。

フィールド名製品説明種類必須?検証
resourceNameリソースの一意の名前。 新しいリソースを作成するときにのみ考慮されます。 文字列createパラメーターがTRUE(create = true)に設定されている場合にのみ必要です。 FALSEがデフォルトです。–255文字の制限
–一意である必要があります
–スペース、タブなどで開始または終了しないでください
–改行を含めないでください
– AZ、az、および0〜9の文字、およびコロン、ハイフン、アンダースコア、ピリオド
–空白は許可されません
resourceDescriptionリソースの説明。 新しいリソースを作成するときにのみ考慮されます。文字列オプション。 デフォルトは「」です。–65535文字の制限
resourceIdsリソースを識別するために使用される既存のリソースプロパティの配列。 見る プッシュメトリックを取り込むリソースの管理 使用できるプロパティの種類については、こちらをご覧ください。 一致するリソースがなく、createパラメーターがTRUEに設定されている場合、これらの指定されたリソースIDが設定された新しいリソースが作成されます。 system.displaynameおよび/またはsystem.hostnameプロパティがリソースIDとして含まれている場合、それらは結果のリソースでそれぞれホスト名および表示名として使用されます。JSONオブジェクト必須–入力をプロパティ名と割り当てられた値の形式でキーと値のペアとして受け取ります(例:「system.displayname」:「mcentos」)
–キーと値は文字列です
– 、;を除くすべての文字/ * []? '” `##と改行が許可されます
-開始時または終了時を除いて許可されるスペース
–キーと値に円記号を含めることはできません(\)ヌルのキーと値は使用できません
–キーには255文字の制限があります。 値には24000文字の制限があります
- 大文字小文字を区別しません
resourcePropertiesリソースの新しいプロパティ。 既存のリソースプロパティの更新は考慮されません。 プロパティ名に応じて、これらのプロパティをシステム、自動、また​​はカスタムプロパティに変換します。JSONオブジェクトオプション。 デフォルトは「」です。–入力をプロパティ名と割り当てられた値の形式でキーと値のペアとして受け取ります(例:「バージョン」:「5.0」)
–システムプロパティは許可されていません(例:system.xxx)自動プロパティは許可されていません(例:auto.xxx)
–キーと値は文字列です。、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いて許可されるスペース
–キーと値に円記号(\)を含めることはできません
–ヌルキーと値は許可されていません
–キーには255文字の制限があります。 値には24000文字の制限がありますケースに依存しません
dataSourceIdデータソースの一意のID。 既存のデータソースを照合するためにのみ使用されます。 指定されたIDに一致する既存のデータソースがない場合、エラーが発生します。
このフィールドをdataSourceフィールドと組み合わせて使用​​する場合、提供されるIDと名前の両方が単一のデータソースと一致する必要があります。一致しない場合はエラーが発生します。
整数dataSourceIdまたはdataSourceのいずれかが必須です。–9桁の制限
–正の整数のみが許可されます
情報源データソースの一意の名前。 既存のデータソースと照合するために使用されます。 ここで指定した名前に一致する既存のデータソースがない場合は、この名前で新しいデータソースが作成されます。
このフィールドをdataSourceIdフィールドと組み合わせて使用​​する場合、指定されたIDと名前の両方が単一のデータソースと一致する必要があります。一致しない場合はエラーが返されます。
文字列dataSourceIdまたはdataSourceのいずれかが必須です。–64文字の制限
–一意である必要があります
– 、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いて許可されるスペース
–ハイフンは最後にのみ許可されます。 ハイフンは、少なくともXNUMXつの他の文字と一緒に使用する必要があります
dataSourceDisplayNameデータソースの表示名。 新しいデータソースを作成するときにのみ考慮されます。文字列任意。
デフォルトはdataSourceです。
–64文字の制限
– 、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いてスペースを使用できます
–キーと値に円記号(\)を含めることはできません
–ハイフンは最後にのみ許可されます。 ハイフンは、少なくともXNUMXつの他の文字と一緒に使用する必要があります
dataSourceGroupデータソースグループ名。 DataSourceがまだグループに属していない場合にのみ考慮されます。 DataSourceグループ内でDataSourceを編成するために使用されます。 一致する既存のデータソースグループがない場合、この名前で新しいグループが作成され、データソースは新しいグループの下に編成されます。文字列任意。
デフォルトは「PushModules」です。
–128文字の制限
– AZ、az、0-9、コロン、ハイフン、アンダースコア、および空白の文字のみをサポートします
–値をnull、空、または末尾にスペースを入れないでください
インスタンスDataSourceインスタンスの配列。JSONオブジェクト必須
インスタンス名インスタンス名。 一致する既存のインスタンスがない場合、この名前で新しいインスタンスが作成されます。文字列必須–255文字の制限
– 、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いて許可されるスペース
–円記号(\)を含めることはできません。
– AZ、az、0-9、コロン、ハイフン、アンダースコア、およびピリオドの文字のみをサポートします
–空白は許可されません
instanceDisplayNameインスタンスの表示名。 新しいインスタンスを作成するときにのみ考慮されます。文字列オプション。 デフォルトは{instanceName}です。–255文字の制限
– 、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いて許可されるスペース
–円記号(\)を含めることはできません。*
instancePropertiesたとえば、新しいプロパティ。 既存のインスタンスプロパティの更新は考慮されません。 プロパティ名に応じて、これらのプロパティをシステム、自動、また​​はカスタムプロパティに変換します。JSONオブジェクト任意。
デフォルトは「」です。
–プロパティ名と割り当てられた値の形式でキーと値のペアとして入力を受け取ります
–システムプロパティは許可されていません(例:system.xxx)
–自動プロパティは許可されていません(例:auto.xxx)
–キーと値は文字列です。、;を除くすべての文字/ * []? '” `##と改行が許可されます
–開始時または終了時を除いて許可されるスペース
–キーと値に円記号(\)を含めることはできません
–キーには255文字の制限があります。 値には24000文字の制限があります
- 大文字小文字を区別しません
–キーと値は、null、空、または末尾にスペースを入れないでください。
データポイント名データポイント名。 指定したデータソースに一致する既存のデータポイントがない場合、この名前で新しいデータポイントが作成されます。文字列必須–128文字の制限
AZ、az、および0〜9の文字のみが許可されます
– COS、SINなどの予約済みキーワードを含めることはできません。
dataPointDescriptionデータポイントの説明。 新しいデータポイントを作成するときにのみ考慮されます。文字列任意。
デフォルトは{dataPointName}です。
1024文字制限
dataPointType文字列形式の数値としてのメトリックタイプ。 新しいデータポイントを作成するときにのみ考慮されます。文字列任意。
デフォルトは「ゲージ」です。
–「counter」、「derive」、または「guage」の値のみが受け入れられます
- 大文字小文字を区別しません
dataPointAggregationTypeデフォルトの集約間隔はXNUMX分です。
集計は、XNUMX分以内に発生するデータの集計タイプ(合計/平均/なし/最小/最大)に基づいて計算されます。
詳細については、を参照してください。
プッシュメトリクスRESTAPIについて.
文字列任意。
デフォルトは「なし」です。
–「min」、「max」、「none」、「avg」、または「sum」の値のみが受け入れられます
- 大文字小文字を区別しません
データポイント値の配列 JSONオブジェクト必須–入力をエポック時間とデータポイント値の形式のキーと値のペアとして受け取ります。 例:「1584902069」:「10」キーで受け入れられるのは長い型の値のみ
–値で受け入れられる数字のみ

次のPython3の例では、CPU使用率を監視しています。

#!/usr/bin/env python3
import time, os, sys
import hmac, hashlib, base64
import requests
import json
import psutil

#--------------------------------------
# Constants - Do not change
#--------------------------------------
resource_path = '/metric/ingest'
headers =  {
	   'Content-Type': 'application/json'
	  }

#---------------------------------------
# Change Values below as per your setup
#---------------------------------------
def get_params():
	# Account info
	# Your account name
	Company = "ABC"
	# User account Access Id for which it must have permissions to manage resources and manage LogicModules 
	AccessId = "6wDEvh73taGMPP43SSmF"
	AccessKey = 'Q)cfY2w8u[G97jkz5^P8{HT)g-uq[6+E8LL%Mb{^'

	url = "https://"+Company+".logicmonitor.com/rest"+ resource_path
	return url, AccessId, AccessKey


#--------------------------------------------
# Function to send metric data to LM Platform
#--------------------------------------------
def send_metrics(timestamp, body):
		url, AccessId, AccessKey  = get_params()
		req_var =  "POST" + str(timestamp) + body +resource_path;
		signature = base64.b64encode(bytes(hmac.new(
                            bytes(AccessKey, 'latin-1'),
                            bytes(req_var, 'latin-1'),
                            digestmod=hashlib.sha256
                        ).hexdigest(), 'latin-1')).decode('latin-1')
		auth = "LMv1 "+AccessId+ ":"+ signature+":"+str(timestamp)
		headers['Authorization'] =  auth
		try:
			response = requests.post(url, verify=True, headers=headers, data=body,  params={"create":'true'})
			if response.status_code != 202:
				print('Failed to send metric. Error:', response.status_code, response.text)
			else:
				print("SUCCESS :",response.text)
		except Exception as e:
			print("Unable to connect. Error: ", e)

#--------------------------------------------
# Prepare REST payload
#--------------------------------------------
def prepare_request_body(metric, timestamp, data_value):
	return json.dumps({
	    "resourceName": metric["device_name"],
	    "resourceIds": {
			"system.displayname": metric["device_name"],
			"system.ips": metric["device_ip"]
	    },
	    "dataSource": metric["data_source"],
	    "dataSourceDisplayName": metric["data_source"],
	    "instances": [
			{
				"instanceName": metric["instance"],
				"instanceDisplayName": metric["instance"],
				"instanceProperties": {
					"version": "1",
				},
				"dataPoints": [
					{
						"dataPointName": metric["data_point"],
						"dataPointType": "GAUGE",
						"dataPointAggregationType": "sum",
						"values": {
							str(timestamp//1000): data_value
						}
					},
		    	]
			},
	    ]
	}).replace("'", '"')


#------------------
#====  MAIN =======
#------------------
if __name__ == "__main__":
	my_metric = {}
	my_metric["device_name"] = os.uname()[1]
	my_metric["device_ip"] = "192.168.1.1"
	my_metric["data_source"] = "CPU"
	my_metric["instance"] = "cpu-1"
	my_metric["data_point"] = "cpu_utilization"
	while True:
		timestamp = int(time.time()*1000)
		data_value = psutil.cpu_percent()

		body = prepare_request_body(my_metric, timestamp, data_value)
		send_metrics(timestamp, body)
		time.sleep(10)

記事上で