-
Bug
-
Resolution: Done-Errata
-
Normal
-
Logging 5.7.z, Logging 5.6.z
-
False
-
None
-
False
-
NEW
-
VERIFIED
-
-
Bug Fix
-
-
-
Log Collection - Sprint 243, Log Collection - Sprint 244
-
Moderate
Description of problem:
When in the clusterLogForwarder is set parse: json using the default outputRefs and without setting outputDefaults.elasticsearch.structuredTypeKey or outputDefaults.elasticsearch.structuredTypeName, then, any change done in the clusterlogging CR is not applied and no an error is visible in the clusterLogForwarder. It's only visible in the clusterLogging pod something like:
$ clo=$(oc get pod -l name=cluster-logging-operator -n openshift-logging -o name) $ oc logs $clo -n openshift-logging |grep -i "structuredTypeKey or structuredTypeName must be defined for Elasticsearch output" |tail -1 {"_ts":"2023-08-14T14:27:27.865948363Z","_level":"0","_component":"cluster-logging-operator","_message":"Error reconciling clusterlogging instance","_error":{"msg":"structuredTypeKey or structuredTypeName must be defined for Elasticsearch output named \"default\" when JSON parsing is enabled on pipeline \"container-logs\" that references it"}}
This could lead that the change applied is correct since no error in the clusterLogForwarder visible:
$ oc get clusterlogforwarder instance -o yaml -n openshift-logging apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: creationTimestamp: "2023-08-14T14:13:39Z" generation: 2 name: instance namespace: openshift-logging resourceVersion: "335236" uid: 066a36a2-b104-43a5-a4d1-7c8fe39184c1 spec: pipelines: - inputRefs: - application - infrastructure - audit name: container-logs outputRefs: - default parse: json status: conditions: - lastTransitionTime: "2023-08-14T14:27:01Z" status: "True" type: Ready outputs: default: - lastTransitionTime: "2023-08-14T14:27:01Z" status: "True" type: Ready pipelines: container-logs: - lastTransitionTime: "2023-08-14T14:27:01Z" status: "True" type: Ready
It should be expected that in the the CLF status is showed an error indicating that the pipeline or configuration created is not correct as it shows in other situations or even not allowing to apply a wrong configuration.
Version-Release number of selected component (if applicable):
$ oc get csv NAME DISPLAY VERSION REPLACES PHASE cluster-logging.v5.7.4 Red Hat OpenShift Logging 5.7.4 cluster-logging.v5.7.3 Succeeded elasticsearch-operator.v5.7.4 OpenShift Elasticsearch Operator 5.7.4 elasticsearch-operator.v5.7.3 Succeeded
How reproducible:
Always
Steps to Reproduce:
- Create or edit the clusterLogforwarder using a configuration similar to [1]
- Review the logs from the clusterlogging operator pod and check that any posterior changes applied to the clusterLogging instance won't be applied since the clusterLogforwarder configuration is wrong and showed the error structuredTypeKey or structuredTypeName must be defined for Elasticsearch output named
- Verify that in the clusterlogforwader instance status not errors are visible [3]
- Apply any change to the clusterLogging instance and observe is not applied
Actual results:
The clusterLogForwarder is not showing any error and also allowing to create a wrong configuration.
Expected results:
The clusterlogforwarder shows an error indicating that the configuration is wrong. Added to this, for improving the user experience, really, applying this configuration should be given an error and not allowing it
Additional info:
[1]
$ cat clf.yaml
apiVersion: logging.openshift.io/v1
kind: ClusterLogForwarder
metadata:
name: instance
namespace: openshift-logging
spec:
pipelines:
- name: container-logs
inputRefs:
- application
- infrastructure
- audit
outputRefs:
- default
parse: json
$ oc create -f clf.yaml
[2]
$ oc logs $clo -n openshift-logging |grep -i "structuredTypeKey or structuredTypeName must be defined for Elasticsearch output" |tail -1 {"_ts":"2023-08-14T14:27:27.865948363Z","_level":"0","_component":"cluster-logging-operator","_message":"Error reconciling clusterlogging instance","_error":{"msg":"structuredTypeKey or structuredTypeName must be defined for Elasticsearch output named \"default\" when JSON parsing is enabled on pipeline \"container-logs\" that references it"}}
[3]
$ oc get clusterlogforwarder instance -o yaml apiVersion: logging.openshift.io/v1 kind: ClusterLogForwarder metadata: creationTimestamp: "2023-08-14T14:32:26Z" generation: 1 name: instance namespace: openshift-logging resourceVersion: "340727" uid: d6b48f9c-270f-46ed-b6ab-1a10bac5439b spec: pipelines: - inputRefs: - application - infrastructure - audit name: container-logs outputRefs: - default parse: json status: conditions: - lastTransitionTime: "2023-08-14T14:38:05Z" status: "True" type: Ready outputs: default: - lastTransitionTime: "2023-08-14T14:38:05Z" status: "True" type: Ready pipelines: container-logs: - lastTransitionTime: "2023-08-14T14:38:05Z" status: "True" type: Ready
[4]
$ oc get clusterlogging instance -o yaml apiVersion: "logging.openshift.io/v1" kind: "ClusterLogging" metadata: name: "instance" namespace: "openshift-logging" spec: collection: logs: type: "fluentd" fluentd: resources: {} nodeSelector: test: failure