app-admin/stackdriver: rename container log fields
This change modifies the cos specific fluentd config used
by the logging agent so that metadata field keys names
(such as 'stream' and 'container_id') are unique to avoid
potential collisions with user created key names within
json logs. Also adds some clarification comments.
See b/137508822#comment24 for examples of new behavior.
Comment on release note being None: this change
preemptively fixes an issue that was introduced with CL
10520, therefore another release note would be redundant.
BUG=b/137508822
TEST=presubmit, validated behavior on VM
RELEASE_NOTE=None
Change-Id: I21d5aea85dfc2deed071d72909815aa8de49a9ed
Reviewed-on: https://cos-review.googlesource.com/c/cos/overlays/board-overlays/+/10700
Reviewed-by: Roy Yang <royyang@google.com>
Tested-by: Cusky Presubmit Bot <presubmit@cos-infra-prod.iam.gserviceaccount.com>
diff --git a/project-lakitu/app-admin/stackdriver/files/logging_configs/fluentd-lakitu.conf b/project-lakitu/app-admin/stackdriver/files/logging_configs/fluentd-lakitu.conf
index 8445617..08c1b61 100644
--- a/project-lakitu/app-admin/stackdriver/files/logging_configs/fluentd-lakitu.conf
+++ b/project-lakitu/app-admin/stackdriver/files/logging_configs/fluentd-lakitu.conf
@@ -77,22 +77,27 @@
read_from_head true
</source>
-# Adds container_id field in container logs.
+# Revise fields in container log records.
<match reform_containers.**>
@type record_reformer
enable_ruby true
<record>
+ # 1) Add container_id field in container logs.
# tag_parts[] looks like:
# ['reform_containers', 'var', 'lib', 'docker', 'containers', container_id]
- container_id ${tag_parts[5]}
- # Renames field 'log' to a more generic field 'message'. This way Stackdriver
- # will display the log message as the summary of the log entry.
+ cos.googleapis.com/container_id ${tag_parts[5]}
+ # 2) Rename field 'stream' to avoid collisions from container logs where
+ # users may be also using 'stream' as a key
+ cos.googleapis.com/stream ${record['stream']}
+ # 3) Rename field 'log' to a more generic field 'message'. This way Logs
+ # Explorer UI will display the log message as summary of the log entry.
message ${record['log']}
</record>
tag cos_containers
- remove_keys log
+ remove_keys log,stream
</match>
+# Parse message field in container log records as json, if applicable.
<filter cos_containers.**>
@type parser
key_name message
@@ -100,10 +105,14 @@
remove_key_name_field true
<parse>
@type multi_format
+ # multi_format will attempt to parse 'key_name' field from record based
+ # on 'format'. If a parse fails, it will move on to next 'format'.
<pattern>
+ # Attempt parsing as json
format json
</pattern>
<pattern>
+ # If above fails, leave as is (i.e. as text)
format none
</pattern>
</parse>
diff --git a/project-lakitu/app-admin/stackdriver/stackdriver-0.0.1-r20.ebuild b/project-lakitu/app-admin/stackdriver/stackdriver-0.0.1-r21.ebuild
similarity index 100%
rename from project-lakitu/app-admin/stackdriver/stackdriver-0.0.1-r20.ebuild
rename to project-lakitu/app-admin/stackdriver/stackdriver-0.0.1-r21.ebuild