기본 OpenTelemetry 레이블 제거
Grafana Loki가 OpenTelemetry를 처음 지원하기 시작했을 때, 우리는 레이블로 승격할 기본 리소스 속성 집합을 선택했습니다. Promtail 및 Grafana Alloy에 대해 수년 동안 제안해 온 스크레이프 구성과 일치하도록 k8s.pod.name
과 같은 일부 레이블을 포함했습니다. 그러나 Loki는 수년에 걸쳐 많이 발전했으며 구조화된 메타데이터의 도입으로 인해 기본값에 포함된 몇 가지 레이블은 더 이상 인덱싱을 권장하지 않습니다. 이러한 레이블은 종종 매우 높은 카디널리티를 가지며 구조화된 메타데이터가 훨씬 더 나은 위치이기 때문입니다. 다음은 더 이상 기본 레이블로 권장하지 않습니다.
k8s.pod.name
service.instance.id
레이블에서 이러한 리소스 속성을 제거하면 기존 사용자에게 ব্রে킹 체인지가 되므로 아직 사용 중단되지 않았습니다. Grafana Loki를 처음 사용하는 경우 Grafana Alloy 또는 OpenTelemetry Collector 구성을 수정하여 이러한 리소스 속성을 인덱스 레이블에서 구조화된 메타데이터로 변환하는 것이 좋습니다.
Alloy 구성 파일 예제
Grafana Alloy를 사용하여 로그를 수집하는 경우 다음 예는 alloy.config
파일을 업데이트하여 k8s.pod.name
을 인덱스 레이블에서 구조화된 메타데이터로 강등하는 방법을 보여줍니다.
// discovery.kubernetes는 쿠버네티스 리소스에서 스크레이프 대상을 찾을 수 있도록 합니다.
// 클러스터 상태를 감시하고 대상이 클러스터에서 현재 실행 중인 것과 지속적으로 동기화되도록 합니다.
discovery.kubernetes "pod" {
role = "pod"
}
// discovery.relabel은 하나 이상의 재레이블링 규칙을 적용하여 입력 대상의 레이블 집합을 다시 작성합니다.
// 규칙이 정의되지 않은 경우 입력 대상은 그대로 내보내집니다.
discovery.relabel "pod_logs" {
targets = discovery.kubernetes.pod.targets
// 레이블 생성 - "__meta_kubernetes_namespace"에서 "namespace" 필드
rule {
source_labels = ["__meta_kubernetes_namespace"]
action = "replace"
target_label = "namespace"
}
// 레이블 생성 - "__meta_kubernetes_pod_name"에서 "pod" 필드
//rule {
// source_labels = ["__meta_kubernetes_pod_name"]
// action = "replace"
// target_label = "pod"
//}
// 레이블 생성 - "__meta_kubernetes_pod_container_name"에서 "container" 필드
rule {
source_labels = ["__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "container"
}
// 레이블 생성 - "__meta_kubernetes_pod_label_app_kubernetes_io_name"에서 "app" 필드
rule {
source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"]
action = "replace"
target_label = "app"
}
// 레이블 생성 - "__meta_kubernetes_namespace" 및 "__meta_kubernetes_pod_container_name"에서 "job" 필드
// 값 연결 __meta_kubernetes_namespace/__meta_kubernetes_pod_container_name
rule {
source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "job"
separator = "/"
replacement = "$1"
}
// 레이블 생성 - "__meta_kubernetes_pod_uid" 및 "__meta_kubernetes_pod_container_name"에서 "container" 필드
// 값 연결 __meta_kubernetes_pod_uid/__meta_kubernetes_pod_container_name.log
rule {
source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
action = "replace"
target_label = "__path__"
separator = "/"
replacement = "/var/log/pods/*$1/*.log"
}
// 레이블 생성 - "__meta_kubernetes_pod_container_id"에서 "container_runtime" 필드
rule {
source_labels = ["__meta_kubernetes_pod_container_id"]
action = "replace"
target_label = "container_runtime"
regex = "^(\\S+):\\/\\/.+$"
replacement = "$1"
}
}
// loki.source.kubernetes는 쿠버네티스 API를 사용하여 쿠버네티스 컨테이너에서 로그를 테일링합니다.
loki.source.kubernetes "pod_logs" {
targets = discovery.relabel.pod_logs.output
forward_to = [loki.process.pod_logs.receiver]
}
// loki.process는 다른 Loki 구성 요소에서 로그 항목을 수신하고, 하나 이상의 처리 단계를 적용하고,
// 결과를 구성 요소의 인수에 있는 수신자 목록으로 전달합니다.
loki.process "pod_logs" {
stage.static_labels {
values = {
cluster = "<CLUSTER_NAME>",
}
}
forward_to = [loki.write.<WRITE_COMPONENT_NAME>.receiver]
}
Kubernetes Monitoring Helm 차트 구성 예제
Kubernetes Monitoring Helm 차트를 사용하여 쿠버네티스 로그를 수집하여 Loki로 보내는 경우 다음 예는 Helm 차트의 values.yaml
파일을 업데이트하여 k8s.pod.name
및 service.instance.id
를 인덱스 레이블에서 구조화된 메타데이터로 강등하는 방법을 보여줍니다.
# 클러스터에 대한 파드 로그 수집을 활성화합니다. 메타 및 로키 네임스페이스 모두에서 모든 파드의 로그를 수집합니다.
podLogs:
enabled: true
collector:
alloy-singleton:
#Loki에서 인덱스 레이블로 사용할 속성 목록
labelsToKeep:
- app
- app_kubernetes_io_name
- component
- container
- job
- level
- namespace
- service_name
- cluster
gatherMethod: kubernetesApi
namespaces:
- meta
- loki
#k8s.pod.name 및 service.instance.id를 구조화된 메타데이터로 보내도록 지정하는 섹션입니다.
structuredMetadata:
instance_id:
pod:
Loki 구성 예제
Docker 컨테이너 또는 온프레미스에서 Loki를 실행하는 경우 다음은 Loki values.yaml
파일을 수정하여 k8s.pod.name
및 service.instance.id
를 인덱스 레이블에서 구조화된 메타데이터로 강등하는 방법의 예입니다.
distributor:
otlp_config:
# 인덱스 레이블로 선택될 기본 otlp 리소스 속성 목록 - 목록에서 k8s.pod.name 및 service.instance.id를 제거하도록 편집
# CLI 플래그: -distributor.otlp.default_resource_attributes_as_index_labels
default_resource_attributes_as_index_labels:
[
service.name service.namespace deployment.environment deployment.environment.name cloud.region cloud.availability_zone k8s.cluster.name k8s.namespace.name k8s.container.name container.name k8s.replicaset.name k8s.deployment.name k8s.statefulset.name k8s.daemonset.name k8s.cronjob.name k8s.job.name,
]
쿠버네티스 예제 values.yaml
:
loki:
distributor:
otlp_config:
# 인덱스 레이블로 선택될 기본 otlp 리소스 속성 목록 - 목록에서 k8s.pod.name 및 service.instance.id를 제거하도록 편집
# CLI 플래그: -distributor.otlp.default_resource_attributes_as_index_labels
default_resource_attributes_as_index_labels:
[
service.name service.namespace deployment.environment deployment.environment.name cloud.region cloud.availability_zone k8s.cluster.name k8s.namespace.name k8s.container.name container.name k8s.replicaset.name k8s.deployment.name k8s.statefulset.name k8s.daemonset.name k8s.cronjob.name k8s.job.name,
]
원본: https://grafana.com/docs/loki/latest/get-started/labels/remove-default-labels/ (opens in a new tab)