diff options
| author | Jenkins <jenkins@review.openstack.org> | 2016-11-04 14:28:24 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2016-11-04 14:28:24 +0000 |
| commit | 705226de74b9b290546b257a0b0cad1dfe6d78cc (patch) | |
| tree | 35c04f8f387636b5577d63d53da3c86ca5187ece /docker | |
| parent | fbedc6145d088d08950ee216f94550da5282b71c (diff) | |
| parent | 504852d528ef7b56060fa11388849ead912c3152 (diff) | |
| download | kolla-705226de74b9b290546b257a0b0cad1dfe6d78cc.tar.gz kolla-705226de74b9b290546b257a0b0cad1dfe6d78cc.zip | |
Merge "add grafana log in heka"
Diffstat (limited to 'docker')
| -rw-r--r-- | docker/heka/plugins/decoders/os_grafana_log.lua | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/docker/heka/plugins/decoders/os_grafana_log.lua b/docker/heka/plugins/decoders/os_grafana_log.lua new file mode 100644 index 000000000..794145d6b --- /dev/null +++ b/docker/heka/plugins/decoders/os_grafana_log.lua @@ -0,0 +1,72 @@ +-- Copyright 2015-2016 Mirantis, Inc. +-- +-- 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. +local dt = require "date_time" +local l = require 'lpeg' +l.locale(l) + +local patt = require 'os_patterns' +local utils = require 'os_utils' + +local msg = { + Timestamp = nil, + Type = 'log', + Hostname = nil, + Payload = nil, + Pid = nil, + Fields = nil, + Severity = nil, +} + +-- Grafana message logs are formatted like this: +-- =ERROR REPORT==== 2-Jan-2015::09:17:22 === +-- Blabla +-- Blabla +-- +local message = l.Cg(patt.Message / utils.chomp, "Message") +-- The token before 'REPORT' isn't standardized so it can be a valid severity +-- level as 'INFO' or 'ERROR' but also 'CRASH' or 'SUPERVISOR'. +local severity = l.Cg(l.R"AZ"^1, "SeverityLabel") +local day = l.R"13" * l.R"09" + l.R"19" +local datetime = l.Cg(day, "day") * patt.dash * dt.date_mabbr * patt.dash * dt.date_fullyear * + "::" * dt.rfc3339_partial_time +local timestamp = l.Cg(l.Ct(datetime)/ dt.time_to_ns, "Timestamp") + +local grammar = l.Ct("=" * severity * " REPORT==== " * timestamp * " ===" * l.P'\n' * message) + +function process_message () + local log = read_message("Payload") + + local m = grammar:match(log) + if not m then + return -1 + end + + msg.Timestamp = m.Timestamp + msg.Payload = m.Message + msg.Logger = read_message("Logger") + + if utils.label_to_severity_map[m.SeverityLabel] then + msg.Severity = utils.label_to_severity_map[m.SeverityLabel] + elseif m.SeverityLabel == 'CRASH' then + msg.Severity = 2 -- CRITICAL + else + msg.Severity = 5 -- NOTICE + end + + msg.Fields = {} + msg.Fields.severity_label = utils.severity_to_label_map[msg.Severity] + msg.Fields.programname = 'grafana' + + return utils.safe_inject_message(msg) +end |
