All Projects → lazywithclass → Winston Cloudwatch

lazywithclass / Winston Cloudwatch

Licence: mit
Send logs to Amazon Cloudwatch using Winston.

Programming Languages

javascript
184084 projects - #8 most used programming language

Projects that are alternatives of or similar to Winston Cloudwatch

Terraform Modules
Reusable Terraform modules
Stars: ✭ 63 (-63.37%)
Mutual labels:  aws, logging
Systemdlogger
Exports systemd logs to an external service, eg cloudwatch, elasticsearch
Stars: ✭ 91 (-47.09%)
Mutual labels:  aws, logging
Limes
Limes provides an easy work flow with MFA protected access keys, temporary credentials and access to multiple roles/accounts.
Stars: ✭ 67 (-61.05%)
Mutual labels:  aws, aws-sdk
Serverless Es Logs
A Serverless plugin to transport logs to ElasticSearch
Stars: ✭ 51 (-70.35%)
Mutual labels:  aws, logging
Trackiam
A project to collate IAM actions, AWS APIs and managed policies from various public sources.
Stars: ✭ 115 (-33.14%)
Mutual labels:  aws, aws-sdk
Aws Sdk Java V2
The official AWS SDK for Java - Version 2
Stars: ✭ 1,083 (+529.65%)
Mutual labels:  aws, aws-sdk
Awesome Aws
A curated list of awesome Amazon Web Services (AWS) libraries, open source repos, guides, blogs, and other resources. Featuring the Fiery Meter of AWSome.
Stars: ✭ 9,895 (+5652.91%)
Mutual labels:  aws, aws-sdk
Reactive Aws Clients
AWS Client libraries for Scala (Automatic generation from AWS source code)
Stars: ✭ 30 (-82.56%)
Mutual labels:  aws, aws-sdk
Smart Security Camera
A Pi Zero and Motion based webcamera that forwards images to Amazon Web Services for Image Processing
Stars: ✭ 103 (-40.12%)
Mutual labels:  aws, aws-sdk
Foundatio
Pluggable foundation blocks for building distributed apps.
Stars: ✭ 1,365 (+693.6%)
Mutual labels:  aws, logging
Go Sqs Poller
An AWS SQS Poller
Stars: ✭ 50 (-70.93%)
Mutual labels:  aws, aws-sdk
Paws
Paws, a package for Amazon Web Services in R
Stars: ✭ 145 (-15.7%)
Mutual labels:  aws, aws-sdk
Angular Aws Amplify
Sample implementation for AWS Amplify in Angular project
Stars: ✭ 40 (-76.74%)
Mutual labels:  aws, aws-sdk
Aws Pagination Rules
The rules for pagination in AWS SDKs
Stars: ✭ 57 (-66.86%)
Mutual labels:  aws, aws-sdk
Amazon Cognito Identity Js
Amazon Cognito Identity SDK for JavaScript
Stars: ✭ 965 (+461.05%)
Mutual labels:  aws, aws-sdk
Awsconsolerecorder
Records actions made in the AWS Management Console and outputs the equivalent CLI/SDK commands and CloudFormation/Terraform templates.
Stars: ✭ 1,152 (+569.77%)
Mutual labels:  aws, aws-sdk
Lambdalogs
A CLI tool to trace AWS Lambda calls over multiple CloudWatch log groups.
Stars: ✭ 18 (-89.53%)
Mutual labels:  aws, logging
Aws Sdk Go
AWS SDK for the Go programming language.
Stars: ✭ 7,270 (+4126.74%)
Mutual labels:  aws, aws-sdk
Awesome Cloud Security
Curated list of awesome cloud security blogs, podcasts, standards, projects, and examples.
Stars: ✭ 98 (-43.02%)
Mutual labels:  aws, logging
Node Lambda Log
Basic logging mechanism for Node 6.10+ Lambda Functions
Stars: ✭ 115 (-33.14%)
Mutual labels:  aws, logging

winston-cloudwatch v2.5.0

Build Status Coverage Status Dependency Status dev dependencies peer dependencies

Send logs to Amazon Cloudwatch using Winston

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.

Features

Installing

$ npm install --save winston winston-cloudwatch

Configuring

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).

Region note

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.

AWS UI

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".

TypeScript

Remember to install types for both winston and this library.

Usage

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.

Logging to multiple streams

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.

Programmatically flush logs and exit

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.

Custom AWS.CloudWatchLogs instance

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

AWS.config.update({
  region: 'us-east-1',
});

winston.add(new WinstonCloudWatch({
  cloudWatchLogs: new AWS.CloudWatchLogs(),
  logGroupName: 'testing',
  logStreamName: 'first'
}));

Options

This is the list of options you could pass as argument to winston.add:

  • level - defaults to info
  • logGroupName - string or function
  • logStreamName - string or function
  • cloudWatchLogs - AWS.CloudWatchLogs instance, used to set custom AWS instance. aws* and proxyServer options do not get used if this is set.
  • awsAccessKeyId
  • awsSecretKey
  • awsRegion
  • awsOptions - object, params as per docs, values in awsOptions are overridden by any other if specified, run this example to have a look
  • jsonMessage - boolean, format the message as JSON
  • messageFormatter - function, 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)
  • proxyServer - String, use proxyServer as proxy in httpOptions
  • uploadRate - Number, how often logs have to be sent to AWS. Be careful of not hitting AWS CloudWatch Logs limits, the default is 2000ms.
  • errorHandler - function, invoked with an error object, if not provided the error is sent to console.error
  • retentionInDays - 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.

Examples

Please refer to the provided examples for more hints.

Note that when running the examples the process will not exit because of the setInterval

Simulation

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 more
  • log.sh is a script that you could run to send logs to the above

At 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.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].