2016-11-21 74 views
4

在用於定期簽入服務的lambda內我檢查服務器結果的值,並且希望將該值發佈到AWS cloudwatch作爲形成線圖的度量。如何在Node.js中將AWS lambda發佈到雲觀察指標

我不能爲了我的生活想象我們是如何做到這一點的。 2個小時圍繞AWS文檔進行無處不在。這甚至有可能嗎?

要明確這不是一個度量關於lambda,它是從lamdba發佈的度量。

代碼:

'use strict'; 

const https = require('http'); 


exports.handler = (event, context, callback) => { 
    const now = new Date() 
    const yesterday = new Date(now.toISOString()) 
    yesterday.setTime(now.getTime() - (1000 * 60 * 60 * 24)); // 1 day ago) 

    const params = [ 
    ['limit',0], 
    ['pageStart',0], 
    ['startsOnOrAfter',encodeURIComponent(yesterday.toISOString())], 
    ['startsOnOrBefore',encodeURIComponent(now.toISOString())] 
    ].map(kv => `${kv[0]}=${kv[1]}&`).reduce((s1,s2) => s1.concat(s2)) 

    var uri = `http://service/query?${params}` 
    const req = https.request(uri, (res) => { 
    let body = ''; 
    res.setEncoding('utf8'); 
    res.on('data', (chunk) => body += chunk); 
    res.on('end',() => { 
     if (!res.headers[ 'content-type' ].match('application/.*?json')) { 
     return callback(`unknown content type ${res.headers[ 'content-type' ]}`,body) 
     } 
     body = JSON.parse(body); 
     if(body.total && body.total > 0) { 
     callback(null, body.total); // body.total to form a line chart 
     } 
     else { 
     callback({ 
      message: 'No plans found for time period', 
      uri: uri 
     }) 
     } 
    }); 
    }); 
    req.on('error', callback); 
    req.end(); 
}; 

回答

9

是的,這是可能的:

const AWS = require('aws-sdk'); 

const metric = { 
    MetricData: [ /* required */ 
    { 
     MetricName: 'YOUR_METRIC_NAME', /* required */ 
     Dimensions: [ 
     { 
      Name: 'URL', /* required */ 
      Value: url /* required */ 
     }, 
     /* more items */ 
     ], 
     Timestamp: new Date(), 
     Unit: 'Count', 
     Value: SOME_VALUE 
    }, 
    /* more items */ 
    ], 
    Namespace: 'YOUR_METRIC_NAMESPACE' /* required */ 
}; 

const cloudwatch = new AWS.CloudWatch({region: 'eu-west-1'}); 
cloudwatch.putMetricData(metric, (err, data) => { 


if (err) { 
    console.log(err, err.stack); // an error occurred 
    } else { 
    console.log(data);   // successful response 
} 
}); 

首先你創建一個要存儲的度量數據時,您使用的CloudWatch API將其發送到CloudWatch。 (當然,函數必須具有寫權限的CloudWatch。)

更多的文檔是在這裏:https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html

+0

這讓我正確的道路上。謝謝! –