Apigee
セキュリティモニタリングが使用可能です セキュリティモニタリングが使用可能です

Apigee

概要

Apigee プロキシログを収集して、エラー、応答時間、期間、レイテンシーを追跡し、1 つの場所に集約されたプロキシのパフォーマンスと問題を監視します。

セットアップ

ログの収集

Apigee の JavaScript ポリシーを使用して、Apigee プロキシログを Datadog に送信します。

JavaScript は、必須のフロー変数を Datadog のログ属性としてキャプチャするように構成されています。属性は、標準属性のリストに従って名前が付けられます。

Apigee ログを Datadog に送信するように JavaScript ポリシーを設定する
  1. Datadog にログを送信する Apigee プロキシを選択します。
  2. 選択したプロキシの概要ページで、右上隅にある ‘DEVELOP’ タブをクリックします。
  1. ‘Navigator’ で、新しい JavaScript ポリシーを追加します。次に、’Resources –> jsc’ ドロップダウンで作成された JavaScript ファイルを編集します。
  2. 次の JavaScript コードスニペットを追加します。必ず dd_api_url 変数に Datadog API KEY を設定してください。

    // ここに Datadog API URL を設定します。
    // 注: Datadog EU サイト (app.datadoghq.eu) にいる場合、HTTP ログエンドポイントは http-intake.logs.datadoghq.eu です。
    var dd_api_url = "https://http-intake.logs.datadoghq.com/v1/input/<API_キー>?ddsource=apigee";
    
    // デバッグ
    // print(dd_api_url);
    // print('フローの名前: ' + context.flow);
    
    // クライアント、ターゲット、合計の応答時間を計算します
    var request_start_time = context.getVariable('client.received.start.timestamp');
    var request_end_time = context.getVariable('client.received.end.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 = request_end_time - 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');
    
    
    // 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'
    };
    
    
    // デバッグ
    // print('ロギングオブジェクト' + JSON.stringify(logObject));
    
    var myLoggingRequest = new Request(dd_api_url, "POST", headers, JSON.stringify(logObject));
    
    // Datadog にログを送信します
    httpClient.send(myLoggingRequest);

: 公式の Apigee フロー変数のドキュメントから JavaScript にさらにフロー変数を追加します。

トラブルシューティング

ご不明な点は、Datadog のサポートチームまでお問合せください。

その他の参考資料

お役に立つドキュメント、リンクや記事: