Inside a lambda I use to periodically check in on a service I check the value of the result from the server and I want that value published to AWS cloudwatch as a metric to form
if you want to avoid the latency impact that introducing a sync cloudwatch call would introduce, you could use Metric Filters on the asynchronous logs that are being published.
Ref: https://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/MonitoringLogData.html
Yes, that is possible:
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
}
});
First your create the data that you want to store as a metric, the you use the CloudWatch API to send it to CloudWatch. (Of course the function must have permission to write to CloudWatch.)
More documentation is here: https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/CloudWatch.html