Research
Security News
Malicious npm Packages Inject SSH Backdoors via Typosquatted Libraries
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
@goodware/winston-cloudwatch
Advanced tools
Send logs to Amazon Cloudwatch using Winston.
Send logs to Amazon Cloudwatch using Winston
Starting from version 3.0.0 we moved aws-sdk into devDependencies to reduce the size of the package, so if you're not using this on AWS Lambda make sure you add aws-sdk dependency into your application package.json.
If you were using this library before version 2.0.0 have a look at the migration guide for Winston and at the updated examples.
$ npm install --save winston winston-cloudwatch @aws-sdk/client-cloudwatch-logs
AWS configuration works using ~/.aws/credentials
as written in AWS JavaScript SDK guide.
As a best practice remember to use one stream per resource, so for example if you have 4 servers you should setup 4 streams on AWS CloudWatch Logs, this is a general best practice to avoid incurring in token clashes and to avoid limits of the service (see usage for more).
As specified in the docs:
The AWS SDK for Node.js doesn't select the region by default.
so you should take care of that. See the examples below.
If either the group or the stream do not exist they will be created for you.
For displaying time in AWS CloudWatch UI you should click on the gear in the top right corner in the page with your logs and enable checkbox "Creation Time".
Remember to install types for both winston and this library.
Please refer to AWS CloudWatch Logs documentation for possible contraints that might affect you. Also have a look at AWS CloudWatch Logs limits.
In ES5
var winston = require('winston'),
WinstonCloudWatch = require('winston-cloudwatch');
In ES6
import winston from 'winston';
import WinstonCloudWatch from 'winston-cloudwatch';
winston.add(new WinstonCloudWatch({
logGroupName: 'testing',
logStreamName: 'first'
}));
winston.error('1');
You can also specify a function for the logGroupName
and logStreamName
options. This is handy if you are using this module in a server, say with express, as it enables you to easily split streams across dates, for example. There is an example of this here.
You could also log to multiple streams with / without different log levels, have a look at this example.
Consider that when using this feature you will have two instances of winston-cloudwatch, each with its own setInterval
running.
Think AWS Lambda for example, you don't want to leave the process running there for ever waiting for logs to arrive.
You could have winston-cloudwatch to flush and stop the setInterval loop (thus exiting), have a look at this example.
const AWS = require('aws-sdk');
AWS.config.update({
region: 'us-east-1',
});
winston.add(new WinstonCloudWatch({
cloudWatchLogs: new AWS.CloudWatchLogs(),
logGroupName: 'testing',
logStreamName: 'first'
}));
This is the list of options you could pass as argument to winston.add
:
string
info
string
or function
string
or function
AWS.CloudWatchLogs
instance, used to set custom AWS instance.object
, params as per docs, values in awsOptions
are overridden by any other if specified, run this example to have a lookboolean
, format the message as JSONfunction
, format the message the way you like. This function will receive a log
object that has the following properties: level
, message
, and meta
, which are passed by winston to the log
function (see CustomLogger.prototype.log as an example)Number
, how often logs have to be sent to AWS. Be careful of not hitting AWS CloudWatch Logs limits, the default is 2000ms.function
, invoked with an error object, if not provided the error is sent to console.error
Number
, defaults to 0
, if set to one of the possible values 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827, and 3653
the retention policy on the log group written will be set to the value provided.AWS keys are usually picked by aws-sdk
so you don't have to specify them, I provided the option just in case. Remember that awsRegion
should still be set if you're using IAM roles.
Please refer to the provided examples for more hints.
Note that when running the examples the process will not exit because of the setInterval
You could simulate how winston-cloudwatch runs by using the files in
examples/simulate
:
running-process.js
represents a winston-cloudwatch process that sits there,
sends a couple logs then waits for a signal to send morelog.sh
is a script that you could run to send logs to the aboveAt this point you could for example run log.sh
in a tight loop, like so
$ while true; do ./examples/simulate/log.sh $PID; sleep 0.2; done
and see what happens in the library, this might be useful to test if you need
more streams for example, all you need to do is change running-process.js
to
better reflect your needs.
If you want more detailed information you could do
$ WINSTON_CLOUDWATCH_DEBUG=true node examples/simulate/running-process.js
which will print lots of debug statements as you might've guessed.
1.0.1
Update dependencies
FAQs
Send logs to Amazon Cloudwatch using Winston.
We found that @goodware/winston-cloudwatch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Research
Security News
Socket’s threat research team has detected six malicious npm packages typosquatting popular libraries to insert SSH backdoors.
Security News
MITRE's 2024 CWE Top 25 highlights critical software vulnerabilities like XSS, SQL Injection, and CSRF, reflecting shifts due to a refined ranking methodology.
Security News
In this segment of the Risky Business podcast, Feross Aboukhadijeh and Patrick Gray discuss the challenges of tracking malware discovered in open source softare.