From 4b31fdcf35d83a9ad04173657ba5d228bbc9183d Mon Sep 17 00:00:00 2001
From: Doug Szumski <doug@stackhpc.com>
Date: Fri, 14 Jun 2019 14:07:45 +0000
Subject: [PATCH] Ingest non-standard Monasca logs

Presently, errors can appear in Fluentd and Monasca Log API logs due
to log output from some Monasca services, which do not use Oslo log,
being processed alongside other OpenStack logs which do.

This change parses these log files separately to prevent these errors.

Change-Id: Ie3cbb51424989b01727b5ebaaeba032767073462
---
 ansible/roles/common/tasks/config.yml         |  1 +
 .../conf/filter/01-rewrite-0.12.conf.j2       |  1 +
 .../conf/filter/01-rewrite-0.14.conf.j2       |  5 +++++
 .../templates/conf/input/00-global.conf.j2    |  4 +++-
 .../templates/conf/input/09-monasca.conf.j2   | 22 +++++++++++++++++++
 5 files changed, 32 insertions(+), 1 deletion(-)
 create mode 100644 ansible/roles/common/templates/conf/input/09-monasca.conf.j2

diff --git a/ansible/roles/common/tasks/config.yml b/ansible/roles/common/tasks/config.yml
index 0f6914265f..f06acf5792 100644
--- a/ansible/roles/common/tasks/config.yml
+++ b/ansible/roles/common/tasks/config.yml
@@ -56,6 +56,7 @@
     - "06-zookeeper"
     - "07-kafka"
     - "08-opendaylight"
+    - "09-monasca"
   notify:
     - Restart fluentd container
 
diff --git a/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2 b/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
index 7b26ea2d16..db6a50d908 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite-0.12.conf.j2
@@ -34,4 +34,5 @@
     rewriterule31 programname ^(vitrage-ml|vitrage-notifier|vitrage-graph)$ openstack_python
     rewriterule32 programname ^(blazar-api|blazar-manager)$ openstack_python
     rewriterule33 programname ^(cyborg-api|cyborg-conductor|cyborg-agent)$ openstack_python
+    rewriterule34 programname ^(agent-collector|agent-forwarder|agent-statsd)$ openstack_python
 </match>
diff --git a/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2 b/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
index 35e80d3d0a..5efc025d8c 100644
--- a/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
+++ b/ansible/roles/common/templates/conf/filter/01-rewrite-0.14.conf.j2
@@ -171,4 +171,9 @@
     pattern ^(qinling-engine|qinling-api)$
     tag openstack_python
   </rule>
+  <rule>
+    key     programname
+    pattern ^(agent-collector|agent-forwarder|agent-statsd)$
+    tag openstack_python
+  </rule>
 </match>
diff --git a/ansible/roles/common/templates/conf/input/00-global.conf.j2 b/ansible/roles/common/templates/conf/input/00-global.conf.j2
index 9b5cba8e66..984425e40a 100644
--- a/ansible/roles/common/templates/conf/input/00-global.conf.j2
+++ b/ansible/roles/common/templates/conf/input/00-global.conf.j2
@@ -44,7 +44,9 @@
 <source>
   @type tail
   path {% for service, enabled in services if enabled | bool %}/var/log/kolla/{{ service }}/*.log{% if not loop.last %},{% endif %}{% endfor %}
-  exclude_path ["/var/log/kolla/neutron/dnsmasq.log",
+  exclude_path ["/var/log/kolla/monasca/agent*.log",
+                "/var/log/kolla/monasca/grafana.log",
+                "/var/log/kolla/neutron/dnsmasq.log",
                 "/var/log/kolla/*/*-access.log",
                 "/var/log/kolla/*/*-error.log"]
   pos_file /var/run/{{ fluentd_dir }}/kolla-openstack.pos
diff --git a/ansible/roles/common/templates/conf/input/09-monasca.conf.j2 b/ansible/roles/common/templates/conf/input/09-monasca.conf.j2
new file mode 100644
index 0000000000..d455a7bfe7
--- /dev/null
+++ b/ansible/roles/common/templates/conf/input/09-monasca.conf.j2
@@ -0,0 +1,22 @@
+<source>
+  @type tail
+  path /var/log/kolla/monasca/agent*.log
+  pos_file /var/run/fluentd/monasca-agent.pos
+  tag kolla.*
+  format multiline
+  format_firstline /^\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \S+ \| \S+ \| \S+ \| .*$/
+  format1 /^(?<Timestamp>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2} \S+) \| (?<log_level>\S+) \| (?<programname>\S+) \| (?<Payload>.*)$/
+  time_key Timestamp
+</source>
+
+<source>
+  @type tail
+  path /var/log/kolla/monasca/grafana.log
+  pos_file /var/run/fluentd/monasca-grafana.pos
+  tag infra.*
+  format multiline
+  format_firstline /^t=\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{4} lvl=\S+ msg=.*$/
+  format1 /^t=(?<Timestamp>\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\+\d{4}) lvl=(?<log_level>\S+) msg=(?<Payload>.*)$/
+  time_key Timestamp
+</source>
+