Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -38,11 +38,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.output_default_loki_apps.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

[sinks.output_default_loki_apps.tls]
min_tls_version = "VersionTLS12"
Expand Down
73 changes: 64 additions & 9 deletions internal/generator/vector/output/loki/loki.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package loki

import (
"fmt"
"github.com/openshift/cluster-logging-operator/internal/api/observability"
"strings"

"github.com/openshift/cluster-logging-operator/internal/api/observability"

"github.com/openshift/cluster-logging-operator/internal/generator/vector/output/common/tls"

. "github.com/openshift/cluster-logging-operator/internal/generator/framework"
Expand All @@ -14,7 +15,6 @@ import (
obs "github.com/openshift/cluster-logging-operator/api/observability/v1"
genhelper "github.com/openshift/cluster-logging-operator/internal/generator/helpers"
. "github.com/openshift/cluster-logging-operator/internal/generator/vector/elements"
"github.com/openshift/cluster-logging-operator/internal/generator/vector/helpers"
vectorhelpers "github.com/openshift/cluster-logging-operator/internal/generator/vector/helpers"
commontemplate "github.com/openshift/cluster-logging-operator/internal/generator/vector/output/common/template"
"github.com/openshift/cluster-logging-operator/internal/utils/sets"
Expand All @@ -27,6 +27,13 @@ const (
lokiLabelKubernetesHost = "kubernetes.host"
lokiLabelKubernetesContainerName = "kubernetes.container_name"
podNamespace = "kubernetes.namespace_name"

// OTel
otellogType = "openshift.log_type"
otellokiLabelKubernetesNamespaceName = "k8s.namespace_name"
otellokiLabelKubernetesPodName = "k8s.pod_name"
otellokiLabelKubernetesContainerName = "k8s.container_name"
otellokiLabelKubernetesNodeName = "k8s.node_name"
)

var (
Expand All @@ -38,6 +45,12 @@ var (
lokiLabelKubernetesNamespaceName,
lokiLabelKubernetesPodName,
lokiLabelKubernetesContainerName,

// OTel labels
otellogType,
otellokiLabelKubernetesNamespaceName,
otellokiLabelKubernetesPodName,
otellokiLabelKubernetesContainerName,
}

containerLabels = []string{
Expand All @@ -47,8 +60,16 @@ var (
}

requiredLabelKeys = []string{
otellokiLabelKubernetesNodeName,
lokiLabelKubernetesHost,
}

viaqOtelLabelMap = map[string]string{
logType: otellogType,
lokiLabelKubernetesNamespaceName: otellokiLabelKubernetesNamespaceName,
lokiLabelKubernetesPodName: otellokiLabelKubernetesPodName,
lokiLabelKubernetesContainerName: otellokiLabelKubernetesContainerName,
}
)

type Loki struct {
Expand Down Expand Up @@ -173,6 +194,8 @@ func lokiLabelKeys(l *obs.Loki) []string {
var keys sets.String
if l != nil && len(l.LabelKeys) != 0 {
keys = *sets.NewString(l.LabelKeys...)
// Determine which of the OTel labels need to also be added based on spec'd custom labels
keys.Insert(addOtelEquivalentLabels(l.LabelKeys)...)
} else {
keys = *sets.NewString(DefaultLabelKeys...)
}
Expand All @@ -190,17 +213,49 @@ func lokiLabels(lo *obs.Loki) []Label {
Name: name,
Value: formatLokiLabelValue(k),
}
if k == lokiLabelKubernetesHost {
l.Value = "${VECTOR_SELF_NODE_NAME}"
}
if k == lokiLabelKubernetesNamespaceName {
l.Value = fmt.Sprintf("{{%s}}", podNamespace)
if val := generateCustomLabelValues(k); val != "" {
l.Value = val
}
ls = append(ls, l)
}
return ls
}

// addOtelEquivalentLabels checks spec'd custom label keys to add matching otel labels
// e.g kubernetes.namespace_name = k8s.namespace_name
func addOtelEquivalentLabels(customLabelKeys []string) []string {
matchingLabels := []string{}

for _, label := range customLabelKeys {
if val, ok := viaqOtelLabelMap[label]; ok {
matchingLabels = append(matchingLabels, val)
}
}
return matchingLabels
}

// generateCustomLabelValues generates custom values for specific labels like kubernetes.host, k8s_* labels
func generateCustomLabelValues(value string) string {
var labelVal string

switch value {
case otellogType:
labelVal = logType
case otellokiLabelKubernetesContainerName:
labelVal = lokiLabelKubernetesContainerName
case lokiLabelKubernetesNamespaceName, otellokiLabelKubernetesNamespaceName:
labelVal = podNamespace
case otellokiLabelKubernetesPodName:
labelVal = lokiLabelKubernetesPodName
// Special case for the kubernetes node name (same as kubernetes.host)
case lokiLabelKubernetesHost, otellokiLabelKubernetesNodeName:
return "${VECTOR_SELF_NODE_NAME}"
default:
return ""
}
return fmt.Sprintf("{{%s}}", labelVal)
}

func remapLabelsVrl(labels []string) string {
k8sEventLabel := `
if !exists(.%s) {
Expand All @@ -227,7 +282,7 @@ func formatLokiLabelValue(value string) string {
func RemapLabels(id string, o obs.OutputSpec, inputs []string) Element {
return Remap{
ComponentID: id,
Inputs: helpers.MakeInputs(inputs...),
Inputs: vectorhelpers.MakeInputs(inputs...),
VRL: remapLabelsVrl(containerLabels),
}
}
Expand All @@ -253,7 +308,7 @@ func Tenant(l *obs.Loki, tenant string) Element {
func CleanupFields(id string, inputs []string) Element {
return Remap{
ComponentID: id,
Inputs: helpers.MakeInputs(inputs...),
Inputs: vectorhelpers.MakeInputs(inputs...),
VRL: "del(.tag)",
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

[sinks.loki_receiver.auth]
strategy = "bearer"
Expand Down
2 changes: 2 additions & 0 deletions internal/generator/vector/output/loki/with_custom_labels.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,8 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_labels_app = "{{kubernetes.labels.\"app\"}}"
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,13 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_default_tls.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

[sinks.loki_receiver.tls]
min_tls_version = "VersionTLS12"
Expand Down
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_insecure.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"


[sinks.loki_receiver.tls]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"


[sinks.loki_receiver.tls]
Expand Down
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_sa_token.toml
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

[sinks.loki_receiver.auth]
strategy = "bearer"
Expand Down
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_tenant_id.toml
Original file line number Diff line number Diff line change
Expand Up @@ -41,8 +41,13 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_tls.toml
Original file line number Diff line number Diff line change
Expand Up @@ -33,11 +33,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"


[sinks.loki_receiver.tls]
Expand Down
5 changes: 5 additions & 0 deletions internal/generator/vector/output/loki/with_tuning.toml
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,14 @@ retry_initial_backoff_secs = 20
retry_max_duration_secs = 35

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,16 @@ codec = "json"
except_fields = ["_internal"]

[sinks.loki_receiver.labels]
k8s_container_name = "{{kubernetes.container_name}}"
k8s_namespace_name = "{{kubernetes.namespace_name}}"
k8s_node_name = "${VECTOR_SELF_NODE_NAME}"
k8s_pod_name = "{{kubernetes.pod_name}}"
kubernetes_container_name = "{{kubernetes.container_name}}"
kubernetes_host = "${VECTOR_SELF_NODE_NAME}"
kubernetes_namespace_name = "{{kubernetes.namespace_name}}"
kubernetes_pod_name = "{{kubernetes.pod_name}}"
log_type = "{{log_type}}"
openshift_log_type = "{{log_type}}"

[sinks.loki_receiver.auth]
strategy = "basic"
Expand Down
Loading