Apigee

L'intégration Apigee n'est pas disponible pour le site Datadog que vous avez sélectionné ().

Présentation

Recueillez des logs sur les proxies Apigee afin de surveiller les erreurs, les délais de réponse, les durées, la latence ainsi que les performances des monitors et les problèmes des proxies depuis un seul outil.

Configuration

Collecte de logs

Vous pouvez recueillir les logs Apigee de deux façons différentes :

  1. Utilisez la stratégie JavaScript d’Apigee pour envoyer des logs à Datadog.
  2. Si vous disposez d’un serveur syslog, utilisez le type de stratégie MessageLogging d’Apigee pour enregistrer vos logs sur un compte syslog.
Paramètre syslog

Utilisez le type de stratégie MessageLogging avec un paramètre syslog sur votre API pour enregistrer des messages personnalisés dans syslog. Indiquez l’endpoint d’entrée des logs Datadog (), le port () et le protocole de votre région. Exemple :

<MessageLogging name="LogToSyslog">
    <DisplayName>datadog-logging</DisplayName>
    <Syslog>
        <Message><VOTRE_CLÉ_API> test</Message>
        <Host>intake.logs.datadoghq.com</Host>
        <Port>10516</Port>
        <Protocol>TCP</Protocol>
    </Syslog>
</MessageLogging>
Stratégie JavaScript

Envoyer des logs sur les proxies Apigee à Datadog en exploitant la stratégie JavaScript d’Apigee.

JavaScript a été configuré de façon à enregistrer les variables de flux importantes en tant qu’attributs de log dans Datadog. Les noms des attributs correspondent à la liste d’attributs standards.

  1. Sélectionnez le proxy Apigee à partir duquel vous souhaitez envoyer des logs à Datadog.
  2. Sur la page de présentation du proxy de votre choix, cliquez sur l’onglet DEVELOP en haut à droite.
Develop
  1. Sous ‘Navigator’, ajoutez une nouvelle stratégie JavaScript. Modifiez ensuite le fichier JavaScript créé, accessible depuis la liste déroulante ‘Resources –> jsc’.
  2. Ajoutez-y l’extrait de code JavaScript suivant. Assurez-vous de configurer votre CLÉ_API dans la variable dd_api_url.
// Définir ici l'URL de l'API Datadog
// Remarque : si vous êtes sur le site européen de Datadog (app.datadoghq.eu), l'endpoint de log HTTP est http-intake.logs.datadoghq.eu.
var dd_api_url = "https://http-intake.logs.datadoghq.com/api/v2/logs?dd-api-key=<CLÉ_API_DATADOG>&ddsource=apigee";

// Debugging
// print(dd_api_url);
// print('Name of the flow: ' + context.flow);

// Calculer les délais de réponse pour le client, la cible et le total
var request_start_time = context.getVariable('client.received.start.timestamp');
var request_end_time = context.getVariable('client.received.end.timestamp');
var system_timestamp = context.getVariable('system.timestamp');
var target_start_time = context.getVariable('target.sent.start.timestamp');
var target_end_time = context.getVariable('target.received.end.timestamp');
var total_request_time = system_timestamp - request_start_time;
var total_target_time = target_end_time - target_start_time;
var total_client_time = total_request_time - total_target_time;

var timestamp = crypto.dateFormat('YYYY-MM-dd HH:mm:ss.SSS');
var organization = context.getVariable("organization.name");
var networkClientIP = context.getVariable("client.ip");
var httpPort = context.getVariable("client.port");
var environment = context.getVariable("environment.name");
var apiProduct = context.getVariable("apiproduct.name");
var apigeeProxyName = context.getVariable("apiproxy.name");
var apigeeProxyRevision = context.getVariable("apiproxy.revision");
var appName = context.getVariable("developer.app.name");
var httpMethod = context.getVariable("request.verb");
var httpUrl = '' + context.getVariable("client.scheme") + '://' + context.getVariable("request.header.host") + context.getVariable("request.uri");
var httpStatusCode = context.getVariable("message.status.code");
var statusResponse = context.getVariable("message.reason.phrase");
var clientLatency = total_client_time;
var targetLatency = total_target_time;
var totalLatency = total_request_time;
var userAgent = context.getVariable('request.header.User-Agent');
var messageContent = context.getVariable('message.content');


// Attributs de log Datadog
var logObject = {
    "timestamp": timestamp,
    "organization": organization,
    "network.client.ip": networkClientIP,
    "env": environment,
    "apiProduct": apiProduct,
    "apigee_proxy.name": apigeeProxyName,
    "apigee_proxy.revision": apigeeProxyRevision,
    "service": appName,
    "http.method": httpMethod,
    "http.url": httpUrl,
    "http.status_code": httpStatusCode,
    "http.port": httpPort,
    "status": statusResponse,
    "clientLatency": clientLatency,
    "targetLatency": targetLatency,
    "totalLatency": totalLatency,
    "http.client.start_time_ms": request_start_time,
    "http.client.end_time_ms": request_end_time,
    "http.useragent": userAgent,
    "message": messageContent,
};


var headers = {
    'Content-Type': 'application/json'
};


// Debugging
// print('LOGGING OBJECT' + JSON.stringify(logObject));

var myLoggingRequest = new Request(dd_api_url, "POST", headers, JSON.stringify(logObject));

// Envoyer les logs à Datadog
httpClient.send(myLoggingRequest);

Remarque : pour ajouter de nouvelles variables de flux à JavaScript, consultez la référence sur les variables de flux de la documentation Apigee officielle (en anglais).

Dépannage

Besoin d’aide ? Contactez l’assistance Datadog.

Pour aller plus loin

Documentation, liens et articles supplémentaires utiles: