Files
service-catalog/manifests/helm/opentelemetry-collector/0.156.2/custom-values.yaml
T
wbsong111 aef64390f1 fix(otelcol): use AccountID/ProjectID headers for VictoriaLogs multitenancy
로그 테넌트 라우팅이 동작하지 않던 결함 수정. otelcol exporter가
'VictoriaLogs-AccountID' 헤더를 사용했으나 VictoriaLogs는 이를 인식하지 못해
모든 로그가 account 0 으로 적재됨(dev 실측: AccountID:1 쓰기는 acct1,
VictoriaLogs-AccountID:1 쓰기는 acct0). 올바른 헤더 AccountID/ProjectID 로 교체.

- opentelemetry-collector custom-values(로그 3파이프라인) + events(acct0)
- docs: deploy-guide §1.4 relabel '[]'=격리아님 경고+예시, vmagent CUSTOM-README keep 규칙 예시
- .gitignore: tenant-verification/ (로컬 검증 산출물)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-01 15:37:46 +09:00

192 lines
5.7 KiB
YAML

# =============================================================================
# OpenTelemetry Collector (DaemonSet) — PaaSup 커스텀 오버라이드
# 차트: open-telemetry/opentelemetry-collector
# 배포: DaemonSet (모든 노드에서 파드 로그 수집)
# 릴리스명: otelcol
#
# 파이프라인 (로그 전용):
# logs/demo01 : filelog → filter(namespace=demo01-*) → vlinsert AccountID 1
# logs/demo02 : filelog → filter(namespace=demo02-*) → vlinsert AccountID 2
# logs/platform: filelog → filter(나머지) → vlinsert AccountID 0
#
# 참고: K8s 이벤트 수집은 Deployment 모드의 custom-values-events.yaml로 별도 배포.
# =============================================================================
mode: daemonset
image:
repository: otel/opentelemetry-collector-contrib
# 로그 전용 — 차트 기본 trace/OTLP 인바운드 포트 비활성화 (filelog는 호스트 파일을 읽음)
ports:
otlp:
enabled: false
otlp-http:
enabled: false
jaeger-compact:
enabled: false
jaeger-thrift:
enabled: false
jaeger-grpc:
enabled: false
zipkin:
enabled: false
resources:
requests:
cpu: 100m
memory: 256Mi
limits:
cpu: 500m
memory: 512Mi
# 호스트 로그 접근
extraVolumes:
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
extraVolumeMounts:
- name: varlogpods
mountPath: /var/log/pods
readOnly: true
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
config:
# 차트 기본 트레이스/메트릭 컴포넌트 제거 (로그 전용 collector)
receivers:
jaeger: null
zipkin: null
otlp: null
prometheus: null
filelog:
include:
- /var/log/pods/*/*/*.log
exclude:
- /var/log/pods/monitoring_otelcol*/*/*.log
start_at: end
include_file_path: true
include_file_name: false
operators:
- type: router
id: get-format
routes:
- output: parser-docker
expr: 'body matches "^\\{"'
- output: parser-crio
expr: 'body matches "^[^ ]+ "'
- type: json_parser
id: parser-docker
output: extract-metadata-from-filepath
- type: regex_parser
id: parser-crio
regex: '^(?P<time>[^ ]+) (?P<stream>stdout|stderr) (?P<logtag>[^ ]+) ?(?P<log>.*)$'
output: extract-metadata-from-filepath
timestamp:
parse_from: attributes.time
layout: '%Y-%m-%dT%H:%M:%S.%LZ'
- type: regex_parser
id: extract-metadata-from-filepath
regex: '^.*\/(?P<namespace>[^_]+)_(?P<pod_name>[^_]+)_(?P<uid>[a-f0-9\-]+)\/(?P<container_name>[^\._]+)\/(?P<restart_count>\d+)\.log$'
parse_from: attributes["log.file.path"]
- type: move
from: attributes.log
to: body
processors:
memory_limiter:
check_interval: 5s
limit_percentage: 80
spike_limit_percentage: 25
batch:
send_batch_size: 10000
timeout: 10s
k8sattributes:
auth_type: serviceAccount
passthrough: false
extract:
metadata:
- k8s.namespace.name
- k8s.pod.name
- k8s.container.name
- k8s.node.name
pod_association:
- sources:
- from: resource_attribute
name: k8s.pod.ip
- sources:
- from: connection
# namespace는 filelog regex가 log record attributes에 저장 → OTTL attributes["namespace"]
filter/demo01:
logs:
log_record:
- 'not IsMatch(attributes["namespace"], "^demo01-.*")'
filter/demo02:
logs:
log_record:
- 'not IsMatch(attributes["namespace"], "^demo02-.*")'
filter/platform:
logs:
log_record:
- 'IsMatch(attributes["namespace"], "^(demo01|demo02)-.*")'
exporters:
# VictoriaLogs 멀티테넌시 헤더는 AccountID/ProjectID 다. (VictoriaLogs-AccountID는
# 인식되지 않아 전량 account 0 으로 적재됨 — dev 실측으로 확인. docs/victorialogs #multitenancy)
otlphttp/vlogs-0:
endpoint: "http://vlogs-victoria-logs-cluster-vlinsert.monitoring.svc.cluster.local:9481/insert/opentelemetry"
tls:
insecure: true
headers:
AccountID: "0"
ProjectID: "0"
otlphttp/vlogs-1:
endpoint: "http://vlogs-victoria-logs-cluster-vlinsert.monitoring.svc.cluster.local:9481/insert/opentelemetry"
tls:
insecure: true
headers:
AccountID: "1"
ProjectID: "0"
otlphttp/vlogs-2:
endpoint: "http://vlogs-victoria-logs-cluster-vlinsert.monitoring.svc.cluster.local:9481/insert/opentelemetry"
tls:
insecure: true
headers:
AccountID: "2"
ProjectID: "0"
service:
pipelines:
# 차트 기본 파이프라인 제거 (로그 전용)
traces: null
metrics: null
logs: null
logs/demo01:
receivers: [filelog]
processors: [memory_limiter, k8sattributes, filter/demo01, batch]
exporters: [otlphttp/vlogs-1]
logs/demo02:
receivers: [filelog]
processors: [memory_limiter, k8sattributes, filter/demo02, batch]
exporters: [otlphttp/vlogs-2]
logs/platform:
receivers: [filelog]
processors: [memory_limiter, k8sattributes, filter/platform, batch]
exporters: [otlphttp/vlogs-0]
# k8sattributes 프로세서용 RBAC
clusterRole:
create: true
rules:
- apiGroups: [""]
resources: [pods, namespaces, nodes]
verbs: [get, list, watch]
- apiGroups: ["apps"]
resources: [replicasets]
verbs: [get, list, watch]