From 2d55474511a5057015e77547c326120c1649c0b7 Mon Sep 17 00:00:00 2001 From: ahothan Date: Tue, 22 Aug 2017 17:41:16 -0700 Subject: NFVBENCH-6 Add support for sending logs to fluentd with fluentd client library Change-Id: I1bc01b26f9e43f78c169b5fcd26247debcfe31bf Signed-off-by: ahothan --- nfvbench/fluentd.py | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 nfvbench/fluentd.py (limited to 'nfvbench/fluentd.py') diff --git a/nfvbench/fluentd.py b/nfvbench/fluentd.py new file mode 100644 index 0000000..683d4ce --- /dev/null +++ b/nfvbench/fluentd.py @@ -0,0 +1,47 @@ +# Copyright 2017 Cisco Systems, Inc. All rights reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +from datetime import datetime +from fluent import sender +import logging + +class FluentLogHandler(logging.Handler): + '''This is a minimalist log handler for use with Fluentd + + Needs to be attached to a logger using the addHandler method. + It only picks up from every record: + - the formatted message (no timestamp and no level) + - the level name + - the runlogdate (to tie multiple run-related logs together) + The timestamp is retrieved by the fluentd library. + ''' + def __init__(self, tag, fluentd_ip='127.0.0.1', fluentd_port=24224): + logging.Handler.__init__(self) + self.tag = tag + self.formatter = logging.Formatter('%(message)s') + self.sender = sender.FluentSender(self.tag, port=fluentd_port) + self.start_new_run() + + def start_new_run(self): + '''Delimitate a new run in the stream of records with a new timestamp + ''' + self.runlogdate = str(datetime.now()) + + def emit(self, record): + data = { + "runlogdate": self.runlogdate, + "loglevel": record.levelname, + "message": self.formatter.format(record) + } + self.sender.emit(None, data) -- cgit 1.2.3-korg