Ingestion de métriques avec l'API REST Push Metrics
Dernière mise à jour – 22 avril 2026
Vous pouvez utiliser l'API REST LogicMonitor Push Metrics pour ingérer par programmation des métriques pour plusieurs instances associées à une ou plusieurs ressources et sources de données.
L'API REST Push Metrics requiert une authentification via le jeton d'API LMv1 ou le jeton Bearer. Pour plus d'informations, consultez la documentation. Jetons API et Jeton porteur.
Demander des informations
Le point de terminaison d'ingestion de métriques permet d'envoyer les métriques d'une ou plusieurs instances associées à une source de données et à une ressource. Une seule ressource et une seule source de données sont prises en charge par requête. Si c'est la première fois que des métriques sont envoyées à une ressource, cette requête générera une erreur. nouvelle source de données et éventuellement une nouvelle ressource (en fonction des paramètres).
| Méthode | Publiez |
| URL de base | https://{ACCOUNTNAME}.logicmonitor.com/rest |
| Chemin | métrique/ingestion |
| En-tête | Autorisation : jeton LMv1 ou jeton Bearer |
| Paramètre | (Facultatif)https://companyxyz.logicmonitor.com/rest/metric/ingest?créer=vraiSi la valeur de create est true, une nouvelle ressource sera créée si aucune ressource ne correspond aux identifiants fournis. La valeur par défaut est false. |
| Content-Type | application / json |
{ |
À noter: Supprimez les commentaires du code avant utilisation. Le format JSON ne prend pas en charge les commentaires ; leur présence rend l’exemple invalide et inutilisable par copier-coller.
Veuillez utiliser les champs obligatoires et facultatifs suivants dans votre demande.
| Nom de domaine | Description | Type | Champs obligatoires? | Validation |
| nom de la ressource | Nom unique de la ressource. Pris en compte uniquement lors de la création d'une nouvelle ressource. | Chaîne | Requis uniquement si le paramètre create est défini sur TRUE (create=true). La valeur par défaut est FALSE. | – Limite de 255 caractères – Doit être unique – Ne doit pas commencer ni se terminer par des espaces, des tabulations, etc. – Ne doit pas contenir de sauts de ligne Les caractères AZ, az et les chiffres de 0 à 9 sont autorisés, ainsi que les deux-points, les tirets, les traits de soulignement et les points. – Aucun espace blanc autorisé |
| description de la ressource | Description de la ressource. Prise en compte uniquement lors de la création d'une nouvelle ressource. | Chaîne | Facultatif. Par défaut : « ». | – Limite de 65535 caractères |
| identifiants de ressources | Un ensemble de propriétés de ressources existantes est utilisé pour identifier la ressource. Pour plus d'informations sur les types de propriétés utilisables, consultez Gestion des ressources qui ingèrent des métriques push Pour plus d'informations sur les types de propriétés utilisables, consultez la documentation. Si aucune ressource ne correspond et que le paramètre de création est défini sur VRAI, une nouvelle ressource est créée avec les identifiants spécifiés. Si les propriétés `system.displayname` et/ou `system.hostname` sont incluses comme identifiants de ressource, elles seront utilisées respectivement comme nom d'hôte et nom d'affichage dans la ressource résultante. À noter: Les identifiants de ressources fournis n'ont pas besoin de correspondre totalement ou partiellement (ET logique, OU) aux ressources existantes. | Objet JSON | Requis | – Prend en entrée des paires clé-valeur sous la forme d'un nom de propriété et d'une valeur assignée (par exemple, « system.displayname » : « mcentos ») – Les clés et les valeurs sont des chaînes de caractères Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. -Espaces autorisés sauf au début ou à la fin Les clés et les valeurs ne doivent pas contenir de barres obliques inverses (\). Les clés et valeurs nulles ne sont pas autorisées. – Les clés sont limitées à 255 caractères ; les valeurs sont limitées à 24 000 caractères. – Insensible à la casse |
| Propriétés de la ressource | Nouvelles propriétés pour la ressource. Les mises à jour des propriétés existantes ne sont pas prises en compte. Selon leur nom, ces propriétés seront converties en propriétés système, automatiques ou personnalisées. | Objet JSON | Facultatif. Par défaut : « ». | – Prend en entrée des paires clé-valeur sous la forme d'un nom de propriété et d'une valeur attribuée (Exemple : « version » : « 5.0 ») – Les propriétés système ne sont pas autorisées (par exemple, system.xxx). – Les propriétés automatiques ne sont pas autorisées (par exemple, auto.xxx). – Les propriétés réservées ne sont pas autorisées (par exemple, predef.xxx). Les clés et les valeurs sont des chaînes de caractères. Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. – Espaces autorisés sauf au début ou à la fin – Les clés et les valeurs ne doivent pas contenir de barres obliques inverses (\). Les clés et valeurs nulles ne sont pas autorisées. Les clés sont limitées à 255 caractères ; les valeurs, à 24 000 caractères. La casse n'est pas prise en compte. |
| dataSourceId | Identifiant unique de la source de données. Utilisé uniquement pour faire correspondre une source de données existante. Si aucune source de données existante ne correspond à l'identifiant fourni, une erreur se produit. Si ce champ est utilisé en combinaison avec le champ dataSource, l'ID et le nom fournis doivent correspondre à une seule et même source de données, sous peine de générer une erreur. | Entier | L'un des champs dataSourceId ou dataSource est obligatoire. | – limite à 9 chiffres Seuls les nombres entiers positifs sont autorisés. |
| source de données | Nom unique de la source de données. Permet de faire correspondre une source de données existante. Si aucune source de données existante ne correspond au nom indiqué ici, une nouvelle source de données est créée avec ce nom. Si ce champ est utilisé en combinaison avec le champ dataSourceId, l'ID et le nom fournis doivent correspondre à une seule et même source de données, sinon une erreur sera renvoyée. | Chaîne | L'un des champs dataSourceId ou dataSource est obligatoire. | – Limite de 64 caractères – Doit être unique Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. – Espaces autorisés sauf au début ou à la fin – Le trait d’union n’est autorisé qu’à la fin ; il doit être associé à au moins un autre caractère. |
| Nom d'affichage de la source de données | Nom d'affichage de la source de données. Pris en compte uniquement lors de la création d'une nouvelle source de données. | Chaîne | Optionnel. Par défaut, la source de données. | – Limite de 64 caractères Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. Les espaces sont autorisés sauf au début et à la fin. – Les clés et les valeurs ne doivent pas contenir de barres obliques inverses (\). – Le trait d’union n’est autorisé qu’à la fin ; il doit être associé à au moins un autre caractère. |
| dataSourceGroup | Nom du groupe de sources de données. Ce nom est pris en compte uniquement si la source de données n'appartient à aucun groupe. Il permet d'organiser la source de données au sein d'un groupe. Si aucun groupe existant ne correspond, un nouveau groupe est créé avec ce nom et la source de données y est intégrée. | Chaîne | Optionnel. Par défaut, « PushModules ». | – Limite de 128 caractères – Prend uniquement en charge les caractères AZ, az, 0-9, deux-points, tiret, trait de soulignement et espaces. – Les valeurs ne doivent pas être nulles, vides ou comporter d'espaces de fin. |
| cas | Un tableau d'instances DataSource. | Objet JSON | Requis | |
| nom_instance | Nom de l'instance. Si aucune instance existante ne correspond, une nouvelle instance est créée sous ce nom. | Chaîne | Requis | – Limite de 255 caractères Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. – Espaces autorisés sauf au début ou à la fin – Ne doit pas contenir de barres obliques inverses (\). – Prend uniquement en charge les caractères suivants : AZ, az, 0 à 9, deux-points, tiret, trait de soulignement et point. – Aucun espace blanc autorisé |
| instanceDisplayName | Nom d'affichage de l'instance. Pris en compte uniquement lors de la création d'une nouvelle instance. | Chaîne | Facultatif. Par défaut : {instanceName}. | – Limite de 255 caractères Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. – Espaces autorisés sauf au début ou à la fin – Ne doit pas contenir de barres obliques inverses (\).* |
| propriété_instance | Par exemple, les nouvelles propriétés. Les mises à jour des propriétés d'instance existantes ne sont pas prises en compte. Selon le nom de la propriété, nous la convertirons en propriété système, automatique ou personnalisée. | Objet JSON | Optionnel. Par défaut, la valeur est « ». | – Prend en entrée des paires clé-valeur, sous la forme d'un nom de propriété et d'une valeur assignée. – Les propriétés système ne sont pas autorisées (par exemple, system.xxx). – Les propriétés automatiques ne sont pas autorisées (par exemple, auto.xxx). – Les propriétés réservées ne sont pas autorisées (par exemple, predef.xxx). Les clés et les valeurs sont des chaînes de caractères. Tous les caractères sont autorisés, à l'exception de , ; / * [ ] ? ' ” ` ## et du saut de ligne. – Espaces autorisés sauf au début ou à la fin – Les clés et les valeurs ne doivent pas contenir de barres obliques inverses (\). – Les clés sont limitées à 255 caractères ; les valeurs sont limitées à 24 000 caractères. – Insensible à la casse Les clés et les valeurs ne doivent pas être nulles, vides ou comporter d'espaces de fin. |
| nom du point de données | Nom du point de données. Si aucun point de données existant ne correspond à la source de données spécifiée, un nouveau point de données est créé sous ce nom. | Chaîne | Requis | – Limite de 128 caractères Seuls les caractères AZ, az et 0-9 sont autorisés. – Ne doit pas contenir de mots clés réservés tels que COS, SIN, etc. |
| description du point de données | Description du point de données. Prise en compte uniquement lors de la création d'un nouveau point de données. | Chaîne | Optionnel. Par défaut, {dataPointName}. | 1024-limite de caractères |
| type de point de données | Type de mesure sous forme de nombre (chaîne de caractères). Pris en compte uniquement lors de la création d'un nouveau point de données. | Chaîne | Optionnel. Par défaut, « jauge ». | Seules les valeurs « counter », « deriv » ou « gauge » sont acceptées. – Insensible à la casse |
| type d'agrégation des points de données | L'intervalle d'agrégation est d'une minute. L'agrégation est calculée en fonction du type d'agrégation (somme/moyenne/aucune/min/max) des données survenant dans une minute. Pour plus d'informations, voir À propos de l'API REST Push Metrics. | Chaîne | Optionnel. Par défaut, « aucun ». | Seules les valeurs « min », « max », « none », « avg », « sum » ou « percentile » sont acceptées. – Insensible à la casse |
| valeur du percentile | Si « percentile » est spécifié pour dataPointAggregationType, ce champ est obligatoire pour spécifier la valeur de pourcentage à utiliser. | Entier | Requis lorsque dataPointAggregationType est un percentile | – Tout pourcentage entier compris entre 0 et 100. Exemple : 99|95|90|70|50 (pas de valeur par défaut) |
| valeurs | Un tableau de valeurs de points de données | Objet JSON | Requis | – Prend en entrée des paires clé-valeur au format temps Unix et valeur du point de données. Exemple : « 1584902069 » : « 10 » Seules les valeurs de type long sont acceptées dans les clés. – Les chiffres sont acceptés sous forme numérique ou scientifique. Exemple : 4.93e-2, 1.89502e202 |
Prise en charge de l'ingestion de ressources multiples
Le rest/v2/metric/ingest L'API permet l'ingestion de plusieurs ressources simultanément en un seul appel d'API. créer des et type de correspondance Les paramètres de l'API s'appliquent à toutes les ressources ingérées.
Ingestion de charges utiles à ressources multiples
[
{
single resource payload
},
{
single resource payload
}
]Réponse à ressources multiples
{
"success": false,
"message": "Some events were not accepted. See the 'errors' property for additional information.",
"errors" : [
{
"code": <custom code>,
"message": "The request has been accepted for processing, but the processing has not been completed.",
"resourceIds": {
"system.displayname": "test088"
},
},
{
"message": "Resource Name is mandatory.",
"resourceIds": {
"system.displayname": "test096"
},
}
}Exemple d'ingestion de métriques à l'aide de l'API REST Push Metrics
L'exemple Python 3 suivant surveille l'utilisation du processeur.
#!/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 = "<enter your access ID>"
AccessKey = '<enter your access key>'
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)