GithubHelp home page GithubHelp logo

rapid7 / docker-logentries Goto Github PK

View Code? Open in Web Editor NEW
110.0 67.0 61.0 236 KB

Forward all your Docker logs to logentries, like a breeze

License: MIT License

JavaScript 61.70% Makefile 35.25% Dockerfile 3.04%

docker-logentries's Introduction

Using InsightOps?

Please use our updated library which supports specifying the region to send your log data to.

docker-logentries

Forward all your logs to Logentries, like a breeze.

logentries dashboard

See the Logentries community pack at http://revelops.com/community/packs/docker/.

Usage as a Container

The simplest way to forward all your container's log to Logentries is to run this repository as a container, with:

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           --read-only \
           --security-opt=no-new-privileges \
           logentries/docker-logentries \
           -t <TOKEN> \
           -j \
           -a host=`uname -n`

You can also use different tokens for logging, stats and events:

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           --read-only \
           --security-opt=no-new-privileges \
           logentries/docker-logentries \
           -l <LOGSTOKEN> \
           -k <STATSTOKEN> \
           -e <EVENTSTOKEN> \
           -j \
           -a host=`uname -n`

The --read-only docker flag specifies that the container file system will be read-only. This is not a requirement but since currently there's no need for writing, it makes the container more secure.

The --security-opt=no-new-privileges docker flag sets a kernel bit which stops the process or its children from gaining additional privileges via setuid or sgid.
Once again not required, but increases security.

You can pass the --no-stats flag if you do not want stats to be published to Logentries every second. You need this flag for Docker version < 1.5.

You can pass the --no-logs flag if you do not want logs to be published to Logentries.

You can pass the --no-dockerEvents flag if you do not want events to be published to Logentries.

The -i/--statsinterval <STATSINTERVAL> downsamples the logs sent to Logentries. It collects samples and averages them before sending to Logentries.

If you don't use -a a default host=`uname -n` value will be added.

You can also filter the containers for which the logs/stats are forwarded with:

  • --matchByName REGEXP: forward logs/stats only for the containers whose name matches the given REGEXP.
  • --matchByImage REGEXP: forward logs/stats only for the containers whose image matches the given REGEXP.
  • --skipByName REGEXP: do not forward logs/stats for the containers whose name matches the given REGEXP.
  • --skipByImage REGEXP: do not forward logs/stats for the containers whose image matches the given REGEXP.

Running container in a restricted environment.

Some environments(such as Google Compute Engine) does not allow to access the docker socket without special privileges. You will get EACCES(Error: read EACCES) error if you try to run the container. To run the container in such environments add --privileged to the docker run command.

Example:

docker run --privileged \
           -v /var/run/docker.sock:/var/run/docker.sock \
           --read-only \
           --security-opt=no-new-privileges \
           logentries/docker-logentries \
           -t <TOKEN> \
           -j \
           -a host=`uname -n`

Usage as a CLI

  1. npm install docker-logentries -g
  2. docker-logentries -t TOKEN -a host=\uname -n``
  3. ..there is no step 3

You can also pass the -j switch if you log in JSON format, like bunyan.

You can pass the --no-stats flag if you do not want stats to be published to Logentries every second.

You can pass the --no-logs flag if you do not want logs to be published to Logentries.

You can pass the --no-dockerEvents flag if you do not want events to be published to Logentries.

The -a/--add flag allows to add fixed values to the data being published. This follows the format 'name=value'.

The -i/--statsinterval downsamples the logs sent to Logentries. It collects samples and averages them before sending to Logentries.

You can also filter the containers for which the logs/stats are forwarded with:

  • --matchByName REGEXP: forward logs/stats only for the containers whose name matches the given REGEXP.
  • --matchByImage REGEXP: forward logs/stats only for the containers whose image matches the given REGEXP.
  • --skipByName REGEXP: do not forward logs/stats for the containers whose name matches the given REGEXP.
  • --skipByImage REGEXP: do not forward logs/stats for the containers whose image matches the given REGEXP.

Embedded usage

Install it with: npm install docker-logentries --save

Then, in your JS file:

var logentries = require('docker-logentries')({
  json: false, // or true to parse lines as JSON
  secure: true, // or false to connect over plain TCP
  token: process.env.TOKEN, // logentries TOKEN
  newline: true, // Split on newline delimited entries
  stats: true, // disable stats if false
  add: null, // an object whose properties will be added

  // the following options limit the containers being matched
  // so we can avoid catching logs for unwanted containers
  matchByName: /hello/, // optional
  matchByImage: /matteocollina/, //optional
  skipByName: /.*pasteur.*/, //optional
  skipByImage: /.*dockerfile.*/ //optional
})

// logentries is the source stream with all the
// log lines

setTimeout(function() {
  logentries.destroy()
}, 5000)

Building a docker repo from this repository

Using the plain docker file

First clone this repository, then:

docker build -t logentries .

docker run -v /var/run/docker.sock:/var/run/docker.sock \
           --read-only \
           --security-opt=no-new-privileges \
           logentries \
           -t <TOKEN> \
           -j \
           -a host=`uname -n`

Using Make - the official nodejs onbuild image

export BUILD_TYPE=node-onbuild
make build
make test
make tag

Using Make - the alpine linx build (~42Mb)

export BUILD_TYPE=alpine-node
make build
make test
make tag

Pushing to your own repo

After you've build, tested, tagged it locally

export DOCKER_REGISTRY_PREFIX=you-dockerhub-user/yourimage-name
make push

How it works

This module wraps four Docker APIs:

  • POST /containers/{id}/attach, to fetch the logs
  • GET /containers/{id}/stats, to fetch the stats of the container
  • GET /containers/json, to detect the containers that are running when this module starts
  • GET /events, to detect new containers that will start after the module has started

This module wraps docker-loghose and docker-stats to fetch the logs and the stats as a never ending stream of data.

All the originating requests are wrapped in a never-ending-stream.

License

MIT

docker-logentries's People

Contributors

ardimehist-r7 avatar arobinson-r7 avatar cammellos avatar cmckelvey-r7 avatar eshanley-r7 avatar gcallsen avatar gcurran-r7 avatar jedi4ever avatar kennethlimcp avatar knakayama avatar looztra avatar m0wfo avatar maxim-filimonov avatar mcollina avatar mihaidma avatar omgapuppy avatar pelger avatar ream88 avatar rsheng-r7 avatar sbialkowski-r7 avatar simonirwin-r7 avatar stephenhynes7 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.