aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-11-04 14:28:24 +0000
committerGerrit Code Review <review@openstack.org>2016-11-04 14:28:24 +0000
commit705226de74b9b290546b257a0b0cad1dfe6d78cc (patch)
tree35c04f8f387636b5577d63d53da3c86ca5187ece
parentfbedc6145d088d08950ee216f94550da5282b71c (diff)
parent504852d528ef7b56060fa11388849ead912c3152 (diff)
downloadkolla-705226de74b9b290546b257a0b0cad1dfe6d78cc.tar.gz
kolla-705226de74b9b290546b257a0b0cad1dfe6d78cc.zip
Merge "add grafana log in heka"
-rw-r--r--ansible/roles/common/tasks/config.yml2
-rw-r--r--ansible/roles/common/templates/cron-logrotate-grafana.conf.j23
-rw-r--r--ansible/roles/common/templates/cron.json.j21
-rw-r--r--ansible/roles/common/templates/heka-grafana.toml.j218
-rw-r--r--ansible/roles/common/templates/heka.json.j27
-rw-r--r--docker/heka/plugins/decoders/os_grafana_log.lua72
-rw-r--r--releasenotes/notes/add-grafana-in-heka-6397498442c00670.yaml3
7 files changed, 106 insertions, 0 deletions
diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index f6f1ac4a0..aefdfca6c 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -30,6 +30,7 @@
- { name: "elasticsearch", enabled: "{{ enable_elasticsearch }}" }
- { name: "global", enabled: "yes" }
- { name: "gnocchi", enabled: "{{ enable_gnocchi }}" }
+ - { name: "grafana", enabled: "{{ enable_grafana }}" }
- { name: "haproxy", enabled: "{{ enable_haproxy }}" }
- { name: "horizon", enabled: "{{ enable_horizon }}" }
- { name: "keepalived", enabled: "{{ enable_haproxy }}" }
@@ -78,6 +79,7 @@
- { name: "glance", enabled: "{{ enable_glance }}" }
- { name: "global", enabled: "yes" }
- { name: "gnocchi", enabled: "{{ enable_gnocchi }}" }
+ - { name: "grafana", enabled: "{{ enable_grafana }}" }
- { name: "haproxy", enabled: "{{ enable_haproxy }}" }
- { name: "heat", enabled: "{{ enable_heat }}" }
- { name: "iscsid", enabled: "{{ enable_iscsid }}" }
diff --git a/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2 b/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2
new file mode 100644
index 000000000..2a3a0889a
--- /dev/null
+++ b/ansible/roles/common/templates/cron-logrotate-grafana.conf.j2
@@ -0,0 +1,3 @@
+"/var/log/kolla/grafana/*.log"
+{
+}
diff --git a/ansible/roles/common/templates/cron.json.j2 b/ansible/roles/common/templates/cron.json.j2
index 295ca660b..b9fc0d1df 100644
--- a/ansible/roles/common/templates/cron.json.j2
+++ b/ansible/roles/common/templates/cron.json.j2
@@ -8,6 +8,7 @@
( 'elasticsearch', enable_elasticsearch ),
( 'glance', enable_glance ),
( 'gnocchi', enable_gnocchi ),
+ ( 'grafana', enable_grafana ),
( 'haproxy', enable_haproxy ),
( 'heat', enable_heat ),
( 'iscsid', enable_iscsid ),
diff --git a/ansible/roles/common/templates/heka-grafana.toml.j2 b/ansible/roles/common/templates/heka-grafana.toml.j2
new file mode 100644
index 000000000..7565c083e
--- /dev/null
+++ b/ansible/roles/common/templates/heka-grafana.toml.j2
@@ -0,0 +1,18 @@
+[grafana_log_decoder]
+type = "SandboxDecoder"
+filename = "lua_decoders/os_grafana_log.lua"
+
+[grafana_log_splitter]
+type = "RegexSplitter"
+delimiter = '\n\n(=[^=]+====)'
+delimiter_eol = false
+deliver_incomplete_final = true
+
+[grafana_logstreamer_input]
+type = "LogstreamerInput"
+decoder = "grafana_log_decoder"
+splitter = "grafana_log_splitter"
+log_directory = "/var/log/kolla"
+file_match = 'grafana/(?P<Service>grafana.*)\.log\.?(?P<Seq>\d*)$'
+priority = ["^Seq"]
+differentiator = ["Service"]
diff --git a/ansible/roles/common/templates/heka.json.j2 b/ansible/roles/common/templates/heka.json.j2
index d94409c77..a49258e4a 100644
--- a/ansible/roles/common/templates/heka.json.j2
+++ b/ansible/roles/common/templates/heka.json.j2
@@ -30,6 +30,13 @@
"optional": {{ (not enable_gnocchi | bool) | string | lower }}
},
{
+ "source": "{{ container_config_directory }}/heka-grafana.toml",
+ "dest": "/etc/heka/heka-grafana.toml",
+ "owner": "heka",
+ "perm": "0600",
+ "optional": {{ (not enable_grafana | bool) | string | lower }}
+ },
+ {
"source": "{{ container_config_directory }}/heka-barbican.toml",
"dest": "/etc/heka/heka-barbican.toml",
"owner": "heka",
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
diff --git a/releasenotes/notes/add-grafana-in-heka-6397498442c00670.yaml b/releasenotes/notes/add-grafana-in-heka-6397498442c00670.yaml
new file mode 100644
index 000000000..20c9b250d
--- /dev/null
+++ b/releasenotes/notes/add-grafana-in-heka-6397498442c00670.yaml
@@ -0,0 +1,3 @@
+---
+features:
+ - add grafana log in heka