diff --git a/charts/loghouse/templates/fluentd/fluentd-configmap.yaml b/charts/loghouse/templates/fluentd/fluentd-configmap.yaml
index a434f9c..9f2a2ff 100644
--- a/charts/loghouse/templates/fluentd/fluentd-configmap.yaml
+++ b/charts/loghouse/templates/fluentd/fluentd-configmap.yaml
@@ -120,6 +120,9 @@ data:
@type record_modifier
_json_log_ ${ log = record["log"].strip; if log[0].eql?('{') && log[-1].eql?('}'); begin; JSON.parse(log); rescue JSON::ParserError; end; end }
+ _json_fields_select_ ${ record["_json_log_"] ? record["_json_log_"].select{|_, v| v.is_a?(Hash) && !v.nil? } : nil }
+ _json_fields_keys_ ${ !record["_json_fields_select_"].nil? ? record["_json_fields_select_"].map{|topKey, innerRecord| innerRecord.keys.map{ |key| topKey + '.' + key } }.flatten(1) : []}
+ _json_fields_values_ ${ !record["_json_fields_select_"].nil? ? record["_json_fields_select_"].map{|topKey, innerRecord| innerRecord.values.map(&:to_s) }.flatten(1) : []}
timestamp ${time}
nsec ${record["time"].split('.').last.to_i}
# static fields
@@ -132,8 +135,8 @@ data:
# dynamic fields
labels.names ${record["kubernetes"].key?("labels") ? record["kubernetes"]["labels"].keys : []}
labels.values ${record["kubernetes"].key?("labels") ? record["kubernetes"]["labels"].values : []}
- string_fields.names ${record["_json_log_"] ? record["_json_log_"].select{|_, v| !v.nil? && !v.is_a?(Numeric) && !v.is_a?(TrueClass) && !v.is_a?(FalseClass)}.keys : ["log"]}
- string_fields.values ${record["_json_log_"] ? record["_json_log_"].select{|_, v| !v.nil? && !v.is_a?(Numeric) && !v.is_a?(TrueClass) && !v.is_a?(FalseClass)}.values.map(&:to_s) : [record["log"]]}
+ string_fields.names ${record["_json_log_"] ? record["_json_log_"].select{|_, v| !v.is_a?(Hash) && !v.nil? && !v.is_a?(Numeric) && !v.is_a?(TrueClass) && !v.is_a?(FalseClass)}.keys + record["_json_fields_keys_"] : ["log"]}
+ string_fields.values ${record["_json_log_"] ? record["_json_log_"].select{|_, v| !v.is_a?(Hash) && !v.nil? && !v.is_a?(Numeric) && !v.is_a?(TrueClass) && !v.is_a?(FalseClass)}.values.map(&:to_s) + record["_json_fields_values_"] : [record["log"]]}
number_fields.names ${record["_json_log_"] ? record["_json_log_"].select{|_, v| v.is_a?(Numeric)}.keys : []}
number_fields.values ${record["_json_log_"] ? record["_json_log_"].select{|_, v| v.is_a?(Numeric)}.values : []}
@@ -143,7 +146,7 @@ data:
null_fields.names ${record["_json_log_"] ? record["_json_log_"].select{|_, v| v.nil?}.keys : []}
- remove_keys kubernetes, docker, master_url, time, log, _json_log_
+ remove_keys kubernetes, docker, master_url, time, log, _json_log_, _json_fields_select_, _json_fields_keys_, _json_fields_values_