A Python logging handler that sends your logs to Splunk
Project description
# Splunk Handler
[![Build](https://img.shields.io/travis/zach-taylor/splunk_handler.svg?style=flat-square)](https://travis-ci.org/zach-taylor/splunk_handler)
[![Code Climate](https://img.shields.io/codeclimate/github/zach-taylor/splunk_handler.svg?style=flat-square)](https://codeclimate.com/github/zach-taylor/splunk_handler)
[![PyPI](https://img.shields.io/pypi/v/splunk_handler.svg?style=flat-square)](https://pypi.python.org/pypi/splunk_handler)
**Splunk Handler is a Python Logger for sending logged events to an installation of Splunk Enterprise.**
*This logger requires the destination Splunk Enterprise server to have enabled and configured the [Splunk HTTP Event Collector](http://dev.splunk.com/view/event-collector/SP-CAAAE6M).*
## Installation
Pip:
pip install splunk_handler
Manual:
python setup.py install
## Usage
from splunk_handler import SplunkHandler
Then use it like any other regular Python [logging handler](https://docs.python.org/2/howto/logging.html#handlers).
Example:
~~~python
import logging
from splunk_handler import SplunkHandler
splunk = SplunkHandler(
host='splunk.example.com',
port='8088',
token='851A5E58-4EF1-7291-F947-F614A76ACB21',
index='main'
#hostname='hostname', # manually set a hostname parameter, defaults to socket.gethostname()
#source='source', # manually set a source, defaults to the log record.pathname
#sourcetype='sourcetype', # manually set a sourcetype, defaults to 'text'
#verify=True, # turn SSL verification on or off, defaults to True
#timeout=60, # timeout for waiting on a 200 OK from Splunk server, defaults to 60s
#flush_interval=15.0, # send batches of log statements every n seconds, defaults to 15.0
#queue_size=5000, # a throttle to prevent resource overconsumption, defaults to 5000
#debug=False, # turn on debug mode; prints module activity to stdout, defaults to False
)
logging.getLogger('').addHandler(splunk)
logging.warning('hello!')
~~~
I would recommend using a JSON formatter with this to receive your logs in JSON format.
Here is an open source one: https://github.com/madzak/python-json-logger
### Logging Config
Sometimes it's a good idea to create a logging configuration using a Python dict
and the `logging.config.dictConfig` function. This method is used by default in Django.
Here is an example dictionary config and how it might be used in a settings file:
~~~python
import os
# Splunk settings
SPLUNK_HOST = os.getenv('SPLUNK_HOST', 'splunk.example.com')
SPLUNK_PORT = int(os.getenv('SPLUNK_PORT', '8088'))
SPLUNK_TOKEN = os.getenv('SPLUNK_TOKEN', '851A5E58-4EF1-7291-F947-F614A76ACB21')
SPLUNK_INDEX = os.getenv('SPLUNK_INDEX', 'main')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': '%(asctime)s %(created)f %(exc_info)s %(filename)s %(funcName)s %(levelname)s %(levelno)s %(lineno)d %(module)s %(message)s %(pathname)s %(process)s %(processName)s %(relativeCreated)d %(thread)s %(threadName)s'
}
},
'handlers': {
'splunk': {
'level': 'DEBUG',
'class': 'splunk_handler.SplunkHandler',
'formatter': 'json',
'host': SPLUNK_HOST,
'port': SPLUNK_PORT,
'token': SPLUNK_TOKEN,
'index': SPLUNK_INDEX,
'sourcetype': 'json',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
}
},
'loggers': {
'': {
'handlers': ['console', 'splunk'],
'level': 'DEBUG'
}
}
}
~~~
Then, do `logging.config.dictConfig(LOGGING)` to configure your logging.
Note: I included a configuration for the JSON formatter mentioned above.
## Contributing
Feel free to contribute an issue or pull request:
1. Check for existing issues and PRs
2. Fork the repo, and clone it locally
3. Create a new branch for your contribution
4. Push to your fork and submit a pull request
## License
This project is licensed under the terms of the [MIT license](http://opensource.org/licenses/MIT).
[![Build](https://img.shields.io/travis/zach-taylor/splunk_handler.svg?style=flat-square)](https://travis-ci.org/zach-taylor/splunk_handler)
[![Code Climate](https://img.shields.io/codeclimate/github/zach-taylor/splunk_handler.svg?style=flat-square)](https://codeclimate.com/github/zach-taylor/splunk_handler)
[![PyPI](https://img.shields.io/pypi/v/splunk_handler.svg?style=flat-square)](https://pypi.python.org/pypi/splunk_handler)
**Splunk Handler is a Python Logger for sending logged events to an installation of Splunk Enterprise.**
*This logger requires the destination Splunk Enterprise server to have enabled and configured the [Splunk HTTP Event Collector](http://dev.splunk.com/view/event-collector/SP-CAAAE6M).*
## Installation
Pip:
pip install splunk_handler
Manual:
python setup.py install
## Usage
from splunk_handler import SplunkHandler
Then use it like any other regular Python [logging handler](https://docs.python.org/2/howto/logging.html#handlers).
Example:
~~~python
import logging
from splunk_handler import SplunkHandler
splunk = SplunkHandler(
host='splunk.example.com',
port='8088',
token='851A5E58-4EF1-7291-F947-F614A76ACB21',
index='main'
#hostname='hostname', # manually set a hostname parameter, defaults to socket.gethostname()
#source='source', # manually set a source, defaults to the log record.pathname
#sourcetype='sourcetype', # manually set a sourcetype, defaults to 'text'
#verify=True, # turn SSL verification on or off, defaults to True
#timeout=60, # timeout for waiting on a 200 OK from Splunk server, defaults to 60s
#flush_interval=15.0, # send batches of log statements every n seconds, defaults to 15.0
#queue_size=5000, # a throttle to prevent resource overconsumption, defaults to 5000
#debug=False, # turn on debug mode; prints module activity to stdout, defaults to False
)
logging.getLogger('').addHandler(splunk)
logging.warning('hello!')
~~~
I would recommend using a JSON formatter with this to receive your logs in JSON format.
Here is an open source one: https://github.com/madzak/python-json-logger
### Logging Config
Sometimes it's a good idea to create a logging configuration using a Python dict
and the `logging.config.dictConfig` function. This method is used by default in Django.
Here is an example dictionary config and how it might be used in a settings file:
~~~python
import os
# Splunk settings
SPLUNK_HOST = os.getenv('SPLUNK_HOST', 'splunk.example.com')
SPLUNK_PORT = int(os.getenv('SPLUNK_PORT', '8088'))
SPLUNK_TOKEN = os.getenv('SPLUNK_TOKEN', '851A5E58-4EF1-7291-F947-F614A76ACB21')
SPLUNK_INDEX = os.getenv('SPLUNK_INDEX', 'main')
LOGGING = {
'version': 1,
'disable_existing_loggers': False,
'formatters': {
'json': {
'()': 'pythonjsonlogger.jsonlogger.JsonFormatter',
'format': '%(asctime)s %(created)f %(exc_info)s %(filename)s %(funcName)s %(levelname)s %(levelno)s %(lineno)d %(module)s %(message)s %(pathname)s %(process)s %(processName)s %(relativeCreated)d %(thread)s %(threadName)s'
}
},
'handlers': {
'splunk': {
'level': 'DEBUG',
'class': 'splunk_handler.SplunkHandler',
'formatter': 'json',
'host': SPLUNK_HOST,
'port': SPLUNK_PORT,
'token': SPLUNK_TOKEN,
'index': SPLUNK_INDEX,
'sourcetype': 'json',
},
'console': {
'level': 'DEBUG',
'class': 'logging.StreamHandler',
}
},
'loggers': {
'': {
'handlers': ['console', 'splunk'],
'level': 'DEBUG'
}
}
}
~~~
Then, do `logging.config.dictConfig(LOGGING)` to configure your logging.
Note: I included a configuration for the JSON formatter mentioned above.
## Contributing
Feel free to contribute an issue or pull request:
1. Check for existing issues and PRs
2. Fork the repo, and clone it locally
3. Create a new branch for your contribution
4. Push to your fork and submit a pull request
## License
This project is licensed under the terms of the [MIT license](http://opensource.org/licenses/MIT).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
splunk_handler-2.0.1.tar.gz
(6.2 kB
view details)
Built Distribution
File details
Details for the file splunk_handler-2.0.1.tar.gz
.
File metadata
- Download URL: splunk_handler-2.0.1.tar.gz
- Upload date:
- Size: 6.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | cdc9d0d54bfdd4d579a2a41f02d009343ab379d9e19bd7d3515d4ca2aa8ca9e7 |
|
MD5 | 9c6e286d0a2b40404e68069bed0c0ef7 |
|
BLAKE2b-256 | 38fe65fd162e0a6c86f0d8b2e9850f8a0e4e9316473b368277745b85e9ea7101 |
File details
Details for the file splunk_handler-2.0.1-py2.py3-none-any.whl
.
File metadata
- Download URL: splunk_handler-2.0.1-py2.py3-none-any.whl
- Upload date:
- Size: 8.3 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | d13cca2ca8958be8967c5eb1c5f5379233234f1c4fde5e67b5bed9277d8c35e9 |
|
MD5 | dad2fa1310a02ce3bde7fa53f1617231 |
|
BLAKE2b-256 | 97213116e6726ba700f9ed8a0358fbff8c99685b646eb4e1567a0565d5712371 |