I have added 3 filters in Logstash but at a time only 2 are working, but all the three are not working at the same time. One of the filter is throwing error. When I applied single filter that is working fine, when 2 that is also working fine but when all are applied, one of the filter is not working.
Below is my filter configuration:
else if [type] == "tls_log" {
json {
source => "message"
target => "json"
remove_field=>["message"]
}
mutate {
rename => {
"path" => "filename"
}
}
if "_jsonparsefailure" in [tags] {
mutate {
add_field => {
"checker" => "value_tls_parseerror"
"logplane" => {{ .Values.log.logplane.default | quote }}
}
remove_field => [ "json" ]
}
}
else {
mutate {
add_field => {
"checker" => "value_tls"
"service_id" => "%{[json][service_id]}"
"version" => "%{[json][version]}"
"[metadata][container_name]" => "%{[json][metadata][container_name]}"
"[metadata][node_name]" => "%{[json][metadata][node_name]}"
"[metadata][namespace]" => "%{[json][metadata][namespace]}"
"[metadata][pod_name]" => "%{[json][metadata][pod_name]}"
"[metadata][pod_uid]" => "%{[json][metadata][pod_uid]}"
"logplane" => {{ .Values.log.logplane.default | quote }}
"severity" => "%{[json][severity]}"
"message" => "%{[json][message]}"
"timestamp" => "%{[json][timestamp]}"
}
remove_field => [ "json" ]
}
}
}
else if [type] == "metrics_log" {
json {
source => "message"
target => "json"
remove_field=>["message"]
}
mutate {
rename => {
"path" => "filename"
}
add_field => {
"checker" => "value_metric"
"service_id" => "%{[json][service_id]}"
"version" => "%{[json][version]}"
"timestamp" => "%{[json][timestamp]}"
"[metadata][container_name]" => "%{[json][metadata][container_name]}"
"logplane" => {{ .Values.log.logplane.default | quote }}
"severity" => "%{[json][severity]}"
"message" => "%{[json][message]}"
}
remove_field => [ "json" ]
}
}
else if [type] == "log" {
json {
source => "message"
target => "json"
remove_field=>["message"]
}
if [json][facility] {
mutate {
add_field => { "facility" => "%{[json][facility]}" }
}
}
if [json][metadata][proc_id] {
mutate {
add_field => { "proc_id" => "%{[json][metadata][proc_id]}" }
}
}
if [json][metadata][category] {
mutate {
add_field => { "category" => "%{[json][metadata][category]}" }
}
}
mutate {
rename => {
"path" => "filename"
}
add_field => {
"checker" => "value"
"logplane" => {{ .Values.log.logplane.default | quote }}
"version" => "%{[json][version]}"
"severity" => "%{[json][severity]}"
"service_id" => "%{[json][service_id]}"
"[kubernetes][pod][name]" => "%{[json][metadata][pod_name]}"
"[kubernetes][pod][uid]" => "%{[json][metadata][pod_uid]}"
"[kubernetes][namespace]" => "%{[json][metadata][namespace]}"
"[kubernetes][node][name]" => "%{[json][metadata][node_name]}"
"[metadata][container_name]" => "%{[json][metadata][container_name]}"
"[metadata][node_name]" => "%{[json][metadata][node_name]}"
"[metadata][namespace]" => "%{[json][metadata][namespace]}"
"[metadata][pod_name]" => "%{[json][metadata][pod_name]}"
"[metadata][pod_uid]" => "%{[json][metadata][pod_uid]}"
"message" => "%{[json][message]}"
}
remove_field => [ "type", "host", "json" ]
}
}
Below is the error in case of [type] = "log":
{
"_index" : "adp-app-logs-2022.07.20",
"_type" : "_doc",
"_id" : "JpSlHIIBBZFaCg47krlI",
"_score" : 0.0023733466,
"_source" : {
"version" : "%{[json][version]}",
"kubernetes" : {
"namespace" : "%{[json][metadata][namespace]}",
"pod" : {
"uid" : "%{[json][metadata][pod_uid]}",
"name" : "%{[json][metadata][pod_name]}"
},
"node" : {
"name" : "%{[json][metadata][node_name]}"
}
},
"logplane" : "adp-app-logs",
"checker" : "value",
"@timestamp" : "2022-07-20T17:26:09.911Z",
"filename" : "/logs/logtransformer.log",
"severity" : "%{[json][severity]}",
"@version" : "1",
"metadata" : {
"namespace" : "%{[json][metadata][namespace]}",
"container_name" : "%{[json][metadata][container_name]}",
"pod_name" : "%{[json][metadata][pod_name]}",
"pod_uid" : "%{[json][metadata][pod_uid]}",
"node_name" : "%{[json][metadata][node_name]}"
},
"service_id" : "%{[json][service_id]}",
"tags" : [
"_jsonparsefailure"
],
"message" : [
"{\"version\": \"1.1.0\", \"timestamp\": \"2022-07-20T17:26:04.694Z\", \"severity\": \"warning\", \"service_id\": \"eric-log-transformer\", \"metadata\" : {\"namespace\": \"zyadros\", \"pod_name\": \"eric-log-transformer-59577c5f7b-24btq\", \"node_name\": \"node-10-63-142-143\", \"pod_uid\": \"58b1e1ef-318a-4a06-ba00-ba0345972b13\", \"container_name\": \"logtransformer\"}, \"message\": \"Error parsing json {:source=>'message', :raw=>' at [Source: (byte[])'{'version': '1.1.0', 'timestamp': '2022-07-20T17:25:50.100Z', 'severity': 'warning', 'service_id': 'eric-log-transformer', 'metadata' : {'namespace': 'zyadros', 'pod_name': 'eric-log-transformer-59577c5f7b-24btq', 'node_name': 'node-10-63-142-143', 'pod_uid': '58b1e1ef-318a-4a06-ba00-ba0345972b13', 'container_name': 'logtransformer'}, 'message': 'Error parsing json {:source=>'message', :raw=>'{\\\\'version\\\\': \\\\'1.1.0\\\\', \\\\'timestamp\\\\': \\\\'2022-07-20T17:25:48.011Z\\\\', \\\\'severity\\\\': \\\\'warning\\\\', \\\\'servi'[truncated 1147 bytes]; line: 1, column: 400]>}\\'}', :exception=>#<LogStash::Json::ParserError: Unrecognized token 'at': was expecting ('true', 'false' or 'null')",
"%{[json][message]}"
]
}
}
But when applied only a single filter, each one is giving all the values correctly.