• /
  • EnglishEspañolFrançais日本語한국어Português
  • Se connecterDémarrer

Cette traduction automatique est fournie pour votre commodité.

En cas d'incohérence entre la version anglaise et la version traduite, la version anglaise prévaudra. Veuillez visiter cette page pour plus d'informations.

Créer un problème

fichier exécutable d'intégration sur hôte : spécifications JSON

Une intégration d'agent infrastructure New Relic sur hôte sera composée d'au moins deux fichiers : un fichier exécutable et au moins un fichier configuration . Le fichier exécutable génère des données JSON qui sont consommées par l'agent d'infrastructure et envoyées à New Relic. Nous appelons l'objet JSON le protocole d'intégration SDK.

Exigences relatives aux fichiers exécutables

L'exécutable peut être n'importe quel fichier qui s'exécute à partir d'une interface de ligne de commande ; par exemple :

  • Un script shell
  • Un script
  • Un binaire compilé

La seule exigence de votre fichier exécutable est qu'il exporte des données JSON, dans un format sur une seule ligne, qui répond aux spécifications de ce document.

Recommandation : Utilisez Go pour créer l'intégration ; c'est le langage que nous utilisons pour créer l'intégration sur hôte et les outils de construction d'intégration. Cependant, vous pouvez créer une intégration dans n'importe quelle langue.

Placement des fichiers

Le fichier exécutable va dans ce répertoire :

  • Linux:

    /var/db/newrelic-infra/custom-integrations
  • Windows:

    C:\Program Files\New Relic\newrelic-infra\newrelic-integrations

Protocole d'intégration v4 : exemple de sortie JSON

La section suivante explique le nouveau schéma JSON (protocole d'intégration v4). Le SDK v4 ne prend en charge que cette nouvelle version du protocole. Voici les changements les plus importants :

  • Un nouvel objet integration au niveau supérieur.
  • Les objets entity et metrics ont été modifiés.

Consultez le guide de migration v3 vers v4 pour plus d'informations.

{
"protocol_version":"4", # protocol version number
"integration":{ # this data will be added to all metrics and events as attributes,
# and also sent as inventory
"name":"integration name",
"version":"integration version"
},
"data":[ # List of objects containing entities, metrics, events and inventory
{
"entity":{ # this object is optional. If it's not provided, then the Entity will get
# the same entity ID as the agent that executes the integration.
"name":"redis:192.168.100.200:1234", # unique entity name per customer account
"type":"RedisInstance", # entity's category
"displayName":"my redis instance", # human readable name
"metadata":{} # can hold general metadata or tags. Both are key-value pairs that will
# be also added as attributes to all metrics and events
},
"metrics":[ # list of metrics using the dimensional metric format
{
"name":"redis.metric1",
"type":"count", # gauge, count, summary, cumulative-count, rate or cumulative-rate
"value":93,
"attributes":{} # set of key-value pairs that define the dimensions of the metric
}
],
"inventory":{...}, # Inventory remains the same
"events":[...] # Events remain the same
}
]
}

Protocole d'intégration v3 : exemple de sortie JSON

Le JSON comprend :

  • Un en-tête, avec des données d'intégration de base (nom, version)
  • Une liste de données, qui comprend une ou plusieurs données de rapport d'entité (données métriques, d'inventaire et/ou d'événement)

Ce diagramme montre cette structure :

New Relic Integrations SDK data structure diagram

Voici un exemple de sortie JSON (formaté avec des sauts de ligne pour plus de lisibilité). Les définitions et spécifications suivent cet exemple :

{
"name": "my.company.integration",
"protocol_version": "3",
"integration_version": "x.y.z",
"data": [
{
"entity": {
"name": "my_garage",
"type": "building",
"id_attributes": [
{
"key": "environment",
"value": "production"
},
{
"key": "node",
"value": "master"
}
]
},
"metrics": [
{
"temperature": 25.3,
"humidity": 0.45,
"displayName": "my_garage",
"entityName": "building:my_garage",
"event_type": "BuildingStatus"
}
],
"inventory": {
"out_door": {
"status": "open"
}
},
"events": []
},
{
"entity": {
"name": "my_family_car",
"type": "car",
"id_attributes": [
{
"key": "environment",
"value": "production"
},
{
"key": "node",
"value": "master"
}
]
},
"metrics": [
{
"speed": 95,
"fuel": 768,
"displayName": "my_family_car",
"entityName": "car:my_family_car",
"event_type": "VehicleStatus"
}
],
"inventory": {
"motor": {
"brand": "renault",
"cc": 1800
}
},
"events": [
{
"category": "gear",
"summary": "gear has been changed"
}
],
"add_hostname": true
}
]
}

JSON : Spécifications générales

Voici les spécifications générales pour la sortie JSON :

JSON : En-tête

Voici un exemple de la première partie de la sortie JSON d'une intégration sur hôte :

"name":"com.myorg.nginx",
"protocol_version":"3",
"integration_version":"1.0.0",
"data": [ {entities}...]

Une charge utile minimale serait un objet JSON avec uniquement les champs d'en-tête. Recommandation : S'il n'y a pas de données à collecter, utilisez le code de retour du programme et le message de log écrit dans stderr.

Champs d'en-tête JSON

Description

name

Requis. Doit être identique au champ name dans le fichier de configuration.

Recommandation : utilisez des noms de domaine inversés pour générer des noms d’intégration uniques.

protocol_version

Requis. Le numéro de version du protocole d’échange entre l’intégration et l’agent utilisé par l’exécutable d’intégration.

  • La version actuelle est la 3. Ce protocole nécessite l'agent d'infrastructure 1.2.25 ou supérieur.

  • Le protocole 2 nécessite l'agent d'infrastructure 1.0.859 ou supérieur.

  • Le protocole 1 est compatible avec tous les agents.

    Pour plus d'informations, voir Modifications du SDK.

integration_version

Facultatif. La version d'intégration. Utilisé pour suivre la version d'intégration exécutée sur chaque hôte.

Une intégration peut avoir plusieurs exécutables. Il ne s’agit donc pas simplement de la version de l’exécutable.

data

Obligatoire pour la création de rapports de données. Une liste contenant les données rapportées par une ou plusieurs entités.

JSON : entité

À l'intérieur de la listedata de la sortie JSON se trouvent une ou plusieurs entités. Les champs de saisie de l'entité incluent :

Champs JSON d'entité

Description

entity

Requis. Données ou propriétés d'entité.

metrics

Facultatif. liste métrique liée à l'entité.

inventory

Facultatif. Articles d'inventaire liés à l'entité.

events

Facultatif. liste des événements liés à l'entité.

add_hostname

Facultatif. Booléen. Si true, les métriques de l'entité seront décorées avec hostname.

À l'intérieur de la listedata de la sortie JSON se trouvent une ou plusieurs entités et leurs données. L'entrée entity comporte deux champs :

Champs JSON de données d'entité

Description

name

Requis. L'identifiant/nom de l'entité.

Recommandation : utilisez des noms de domaine inversés pour générer des noms d’intégration uniques.

type

Requis. Le type d'entité. Il sera utilisé par l'agent infrastructure comme espace de nommage pour composer un unique identifier en conjonction avec le name.

id_attributes

Facultatif. Une liste d'attributs de valeur clé qui confèrent un caractère unique à une entité. Ils sont attachés au nom sous la forme key=value pour faciliter la lisibilité, fournir des informations supplémentaires et améliorer l'unicité du nom de l'entité.

Les attributs identifiant sont utiles lorsque le nom de l'entité n'est pas suffisant pour fonctionner comme un identifiant unique, ou lorsqu'il ne fournit pas suffisamment d'informations significatives. Par exemple:

[
{
"key": "service",
"value": "mysql"
},
{
"key": "role",
"value": "master"
}, ...
]

Remplacement d'adresse de bouclage sur les noms d'entité

À partir de la infrastructure version 1.2.25 ou supérieure de l'agent , le protocole v3 améliore l'unicité des entités distantes en ajoutant le remplacement d'adresse locale sur les noms d'entité au niveau de l'agent.

Lorsque plusieurs entités distantes ont leur nom basé sur un point de terminaison (soit ip soit hostname), et que ce nom contient des adresses de bouclage, deux problèmes se posent :

  • Cette valeur localhost ne fournit pas d'informations précieuses sans plus de contexte.
  • Le name pourrait entrer en conflit avec un autre service nommé avec une adresse locale.

Cela se produit lorsque :

  • les noms de points de terminaison sont comme localhost:port.
  • Les ports ont tendance à être les mêmes pour un service donné ; par exemple, 3306 pour MySQL.

Lors de l'entrée de données du protocole v3, l'agent d'infrastructure remplace les adresses de bouclage sur le nom de l'entité (et la clé) par le premier élément disponible de la liste suivante :

  1. ID du fournisseur de cloud d'instance, récupéré par l'agent le cas échéant
  2. Nom d'affichage, défini via l'option de configuration de l'agent display_name
  3. nom d'hôte, tel que récupéré par l'agent

Par exemple, si une intégration utilisant le protocole v3 renvoie une entité avec le localhost:3306 nom, et que l'agent s'exécute sur du bare metal (n'a pas d'ID d'instance de fournisseur de cloud), que le display_name n'a pas été défini et que le nom d'hôte prod-mysql-01 est, alors l'agent remplacera le localhost et produira le nom prod-mysql-01:3306 d'entité.

L'agent d'infrastructure permet le remplacement automatique de l'adresse de bouclage pour le protocole d'intégration v3. Vous pouvez également l'activer pour la version 2 via l'indicateur de configuration de l'agent replace_v2_loopback_entity_names. Dans ce cas, toutes les intégrations exécutées par l'agent utilisant v2 verront leurs noms remplacés chaque fois qu'elles porteront une adresse locale.

JSON : données métriques, d'inventaire et d'événements

Les valeurs de données suivent l’en-tête du fichier exécutable. Vous pouvez enregistrer trois types de données:

Important

Du point de vue du dashboard New Relic, les métriques infrastructure et les événements sont tous deux classés comme données d'événement.

Droits d'auteur © 2025 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.