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-integrationsWindows:
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
etmetrics
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 :

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 |
---|---|
| Requis. Doit être identique au champ Recommandation : utilisez des noms de domaine inversés pour générer des noms d’intégration uniques. |
| 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.
|
| 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. |
| 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 |
---|---|
| Requis. Données ou propriétés d'entité. |
| Facultatif. liste métrique liée à l'entité. |
| Facultatif. Articles d'inventaire liés à l'entité. |
| Facultatif. liste des événements liés à l'entité. |
| Facultatif. Booléen. Si |
À 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 |
---|---|
| 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. |
| 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 |
| 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 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:
|
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 :
- ID du fournisseur de cloud d'instance, récupéré par l'agent le cas échéant
- Nom d'affichage, défini via l'option de configuration de l'agent display_name
- 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.