Skip to main content

Fast, efficient and useful syslog collector using TCP and optional TLS

Project description

pysyslog

https://img.shields.io/pypi/v/pysyslog.svg https://img.shields.io/travis/ilovetux/pysyslog.svg Documentation Status

Fast, efficient and useful syslog collector using TCP and optional TLS

Features

  • TLS support

  • Persistent TCP connections

  • Flexible logging configuration (powered by Python’s logging module)

  • Fast

About

pysyslog is a fast and flexible Syslog-over-TCP collector written in Python with TLS support.

In order to achieve the speed required, we have made some compromises the most notable one is that we do not attempt to be compliant with any RFCs. We do not parse any of the messages nor do we offer any syslog-specific functionality. That being said, since syslog is just plain-text over a transport we should be interoperable with most (if not all) syslog clients.

Installation

you can install with:

$ pip install pysyslog

Usage

To start a local syslog collector (listening on TCP 127.0.0.1:514) you can issue the following command:

$ pysyslog

If you want to customize the listening host and port they can be passed as positional arguments respectively. For instance, if you want to listen on all available interfaces at port 8000 you can issue the following command:

$ pysyslog 0.0.0.0 8000

If you want to enable TLS, you must provide the path to the key and cert (must be in PEM format) you can issue the following command:

$ pysyslog --cert /path/to/cert.pem --key /path/to/key.pem

If the key and cert are contained within the same file, you must pass that file path to both the –key and –cert:

$ pysyslog --cert /path/to/key-and-cert.pem --key /path/to/key-and-cert.pem

All log messages will be sent to stdout. If you want to customize the destination, you must provide a logging configuration in json format:

$ pysyslog --logging-config /path/to/logging.json

And in logging.json, something like this would send everything to stdout and also send everything from 127.0.0.1 to a file ./localhost.log:

{
  "version": 1,
  "root": {
      "level": "DEBUG",
      "propagate": true,
      "handlers": ["stdout"]
  },
  "formatters": {
      "brief": {
          "format": "%(asctime)s %(message)s"
      }
  },
  "handlers": {
      "stdout": {
        "class": "logging.StreamHandler",
        "formatter": "brief",
        "level": "DEBUG",
        "stream": "ext://sys.stdout"
      },
      "localhost-file": {
          "class": "logging.FileHandler",
          "formatter": "brief",
          "level": "DEBUG",
          "filename": "./localhost.log",
          "delay": true
      }
  },
  "loggers": {
      "127.0.0.1": {
          "handlers": ["localhost-file"],
          "level": "DEBUG",
          "propagate": true
    }
  }
}

for more information on the logging configuration format please see https://docs.python.org/3/library/logging.config.html#configuration-dictionary-schema

Architecture

The Python’s socketserver module provides the TCP server functionality. When a client connects, a thread is spawned and the socket will be polled for data. These connections are not closed after receiving one message, rather we utilize the streaming capabilities of TCP to keep these connections open so we do not need to perform our three-way-handshake more than once unless the client closes the connection.

Once a connection is established each line received will be placed on a queue. The queue is read by a seperate writer process. Which then submits the message to the Python logging system through a logger named after the IP Address of the remote peer. This allows a fine-grained configuration where the output can be sent to many destinations such as a file, stdout or even another syslog collector.

Credits

This package was created with Cookiecutter and the audreyr/cookiecutter-pypackage project template.

History

0.1.0 (2018-07-20)

  • First release on PyPI.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysyslog-0.1.0.tar.gz (11.3 kB view details)

Uploaded Source

Built Distribution

pysyslog-0.1.0-py2.py3-none-any.whl (5.5 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pysyslog-0.1.0.tar.gz.

File metadata

  • Download URL: pysyslog-0.1.0.tar.gz
  • Upload date:
  • Size: 11.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pysyslog-0.1.0.tar.gz
Algorithm Hash digest
SHA256 0ddac17771b4b9eaceb6aeaa6e400ffffa7c3e7ac00a746c06b25ccd25eb75ff
MD5 82f07640d71216b8c7855daddcd824db
BLAKE2b-256 bb61db11c55464b65325b9ce5fcdffce67968a524ad3a8c149c8482e64efe894

See more details on using hashes here.

File details

Details for the file pysyslog-0.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pysyslog-0.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 a36698fcb8646c3df9b1837258d18e5f0c1083329abc24aa99cf9f38170a93d0
MD5 44ca04e8ce5ec39d3756ab8d80926375
BLAKE2b-256 41c7643022399b208f2dc6626b3adc8b36a9fb7ee72434be08d8d910557ec7ef

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page