More metadata logged to es, also es apikey setting

This commit is contained in:
2022-11-28 00:44:30 +01:00
parent 23d7b7513f
commit 8af5301d34
2 changed files with 33 additions and 12 deletions

View File

@@ -6,9 +6,11 @@ user=
remote= remote=
local= local=
[DELUGE] [LOGGER]
script= CH_LEVEL=INFO
[ELASTIC] [ELASTIC]
host= host=
port= port=
ssl=
api_key=

View File

@@ -3,6 +3,7 @@
import logging import logging
import os import os
import json import json
import math
import uuid import uuid
import datetime import datetime
import urllib.request import urllib.request
@@ -28,21 +29,33 @@ ch.setLevel(logging.ERROR)
class ESHandler(logging.Handler): class ESHandler(logging.Handler):
def __init__(self, *args, **kwargs): def __init__(self, *args, **kwargs):
self.host = kwargs.get('host') self.host = kwargs.get('host')
self.port = kwargs.get('port') or 9200 self.port = kwargs.get('port')
self.ssl = kwargs.get('ssl') or False
self.apiKey = kwargs.get('apiKey')
self.date = datetime.date.today() self.date = datetime.date.today()
self.sessionID = uuid.uuid4() self.sessionID = uuid.uuid4()
self.pid = str(os.getpid())
logging.StreamHandler.__init__(self) logging.StreamHandler.__init__(self)
def emit(self, record): def emit(self, record):
self.format(record) self.format(record)
indexURL = 'http://{}/transatlantic_torrent_express/_doc'.format(self.host, self.date.strftime('%Y.%m'))
headers = { 'Content-Type': 'application/json', 'User-Agent': 'transatlanticTorrentExpress/v0.1'}
if self.ssl:
indexURL = indexURL.replace('http', 'https')
if self.port:
indexURL = indexURL.replace(self.host, '{}:{}'.format(self.host, self.port))
if self.apiKey:
headers['Authorization'] = 'ApiKey {}'.format(self.apiKey)
indexURL = 'http://{}:{}/transatlantic_torrent_express-{}/_doc'.format(self.host, self.port, self.date.strftime('%Y.%m.%d'))
doc = { doc = {
'severity': record.levelname, 'severity': record.levelname,
'message': record.message, 'message': record.message,
'@timestamp': int(record.created*1000), '@timestamp': math.trunc(record.created*1000),
'sessionID': str(self.sessionID) 'sessionID': str(self.sessionID),
'pid': self.pid
} }
if hasattr(record, 'es'): if hasattr(record, 'es'):
@@ -53,11 +66,15 @@ class ESHandler(logging.Handler):
doc = {**record.es, **doc} doc = {**record.es, **doc}
payload = json.dumps(doc).encode('utf8') payload = json.dumps(doc).encode('utf8')
req = urllib.request.Request(indexURL, data=payload, req = urllib.request.Request(indexURL, data=payload, headers=headers)
headers={'content-type': 'application/json'})
response = urllib.request.urlopen(req) try:
response = response.read().decode('utf8') response = urllib.request.urlopen(req)
return response response = response.read().decode('utf8')
return response
except urllib.error.HTTPError as e:
print('Unable to reach elastic, error:', e)
return asdf
class ElasticFieldParameterAdapter(logging.LoggerAdapter): class ElasticFieldParameterAdapter(logging.LoggerAdapter):
def __init__(self, logger, extra={}): def __init__(self, logger, extra={}):
@@ -74,7 +91,9 @@ class ElasticFieldParameterAdapter(logging.LoggerAdapter):
config = getConfig() config = getConfig()
esHost = config['ELASTIC']['host'] esHost = config['ELASTIC']['host']
esPort = config['ELASTIC']['port'] esPort = config['ELASTIC']['port']
eh = ESHandler(host=esHost, port=esPort) esSSL = config['ELASTIC']['ssl']
esApiKey = config['ELASTIC']['api_key']
eh = ESHandler(host=esHost, port=esPort, ssl=esSSL, apiKey=esApiKey)
eh.setLevel(logging.DEBUG) eh.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s %(levelname)8s | %(message)s') formatter = logging.Formatter('%(asctime)s %(levelname)8s | %(message)s')