Skip to content

Commit

Permalink
LOG-4095: fix loki labelKeys that contain slash
Browse files Browse the repository at this point in the history
  • Loading branch information
jcantrill authored and openshift-cherrypick-robot committed Jun 13, 2023
1 parent 8000621 commit f58c669
Show file tree
Hide file tree
Showing 3 changed files with 16 additions and 9 deletions.
3 changes: 3 additions & 0 deletions internal/generator/fluentd/output/loki/loki.go
Original file line number Diff line number Diff line change
Expand Up @@ -181,7 +181,9 @@ func LokiLabelFilter(l *logging.Loki) Element {
rs := []Record{}
for _, k := range lokiLabelKeys(l) {
tempName := strings.Replace(k, ".", "_", -1)
tempName = strings.Replace(tempName, "/", "_", -1)
recordKeys := strings.Replace(k, ".", `","`, -1)
recordKeys = strings.Replace(recordKeys, "/", "_", -1)
var r Record
switch k {
case lokiLabelKubernetesHost:
Expand Down Expand Up @@ -214,6 +216,7 @@ func LokiLabel(l *logging.Loki) []string {
labels := []string{}
for _, k := range lokiLabelKeys(l) {
tempName := strings.Replace(k, ".", "_", -1)
tempName = strings.Replace(tempName, "/", "_", -1)
labels = append(labels, fmt.Sprintf("%v _%v", tempName, tempName))
}
return labels
Expand Down
15 changes: 7 additions & 8 deletions internal/generator/fluentd/output/loki/loki_conf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,11 @@ var _ = Describe("[internal][generator][fluentd][output][loki] #Conf", func() {
Secret: &logging.OutputSecretSpec{
Name: "es-1",
},
OutputTypeSpec: logging.OutputTypeSpec{
Loki: &logging.Loki{
LabelKeys: []string{"kubernetes.labels.foo/bar"},
},
},
},
},
},
Expand All @@ -113,11 +118,8 @@ var _ = Describe("[internal][generator][fluentd][output][loki] #Conf", func() {
<filter **>
@type record_modifier
<record>
_kubernetes_container_name ${record.dig("kubernetes","container_name")}
_kubernetes_host "#{ENV['NODE_NAME']}"
_kubernetes_namespace_name ${record.dig("kubernetes","namespace_name")}
_kubernetes_pod_name ${record.dig("kubernetes","pod_name")}
_log_type ${record.dig("log_type")}
_kubernetes_labels_foo_bar ${record.dig("kubernetes","labels","foo_bar")}
</record>
</filter>
Expand All @@ -129,11 +131,8 @@ var _ = Describe("[internal][generator][fluentd][output][loki] #Conf", func() {
min_version TLS1_2
ciphers TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
<label>
kubernetes_container_name _kubernetes_container_name
kubernetes_host _kubernetes_host
kubernetes_namespace_name _kubernetes_namespace_name
kubernetes_pod_name _kubernetes_pod_name
log_type _log_type
kubernetes_labels_foo_bar _kubernetes_labels_foo_bar
</label>
<buffer>
@type file
Expand Down
7 changes: 6 additions & 1 deletion test/functional/outputs/loki/application_logs_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,14 @@ func TestLokiOutput(t *testing.T) {
ts = functional.CRIOTime(tsTime)
)

const myValue = "foobarvalue"

// testCase does common setup/teardown around a testFunc
testCase := func(name string, lokiSpec *logging.Loki, testFunc func(t *testing.T)) {
t.Helper()
t.Run(name, func(t *testing.T) {
f = functional.NewFluentdFunctionalFrameworkForTest(t)
f.Labels["foo/bar"] = myValue
defer f.Cleanup()

// Start a Loki server
Expand Down Expand Up @@ -109,13 +112,14 @@ func TestLokiOutput(t *testing.T) {
"kubernetes.labels.k8s",
"openshift.labels.logging",
"kubernetes.container_name",
"kubernetes.labels.foo/bar",
}},
func(t *testing.T) {
msg := functional.NewFullCRIOLogMessage(ts, "application log message")
require.NoError(t, f.WriteMessagesToApplicationLog(msg, 1))

// Verify we can query by Loki labels
query := fmt.Sprintf(`{kubernetes_labels_k8s=%q, openshift_labels_logging=%q}`, "k8s-value", "logging-value")
query := fmt.Sprintf(`{kubernetes_labels_k8s=%q, openshift_labels_logging=%q, kubernetes_labels_foo_bar=%q}`, "k8s-value", "logging-value", myValue)
r, err := l.QueryUntil(query, "", 1)
assert.NoError(t, err, query)
records := r[0].Records()
Expand All @@ -126,6 +130,7 @@ func TestLokiOutput(t *testing.T) {
"kubernetes_container_name": f.Pod.Spec.Containers[0].Name,
"kubernetes_labels_k8s": "k8s-value",
"openshift_labels_logging": "logging-value",
"kubernetes_labels_foo_bar": myValue,
"kubernetes_host": functional.FunctionalNodeName,
}
labels := r[0].Stream
Expand Down

0 comments on commit f58c669

Please sign in to comment.