2016-11-21 30 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

这让我正确的道路上。谢谢! –

相关问题