linkerd-viz 확장은 자체 Prometheus 인스턴스를 포함하고 있지만, 운영 환경이나 특정 요구사항에 따라 외부 Prometheus를 사용하는 것이 더 적합한 경우가 있습니다. 이 방법은 Prometheus 설정에 수동으로 추가 스크래핑 구성을 작성하고 유지보수해야 한다는 점에 유의하세요.
이 문서에서는 사용자와 Linkerd 제어 평면 컴포넌트(web 등)가 모두 접근 가능한 형식으로 제어 평면 및 프록시 메트릭을 수집할 수 있도록 외부 Prometheus 인스턴스를 구성하는 방법을 소개합니다.
다음 두 가지 핵심 작업이 필요합니다.
- 외부 Prometheus 인스턴스가 Linkerd 메트릭을 가져오도록 설정
- linkerd-viz 확장이 해당 외부 Prometheus를 사용하도록 설정
Prometheus 스크래핑 설정
다음 스크래핑 구성을 외부 Prometheus 인스턴스에 반드시 적용해야 합니다. 아래 설정은 linkerd-prometheus가 사용하는 기본 스크래핑 구성의 일부입니다.
설정을 적용하기 전에 {{}}로 감싸인 템플릿 값들을 실제 값으로 대체해야 정상 동작합니다.
- job_name: 'linkerd-controller'
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- 'linkerd'
- 'linkerd-viz'
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_container_port_name
action: keep
regex: admin-http
- source_labels: [__meta_kubernetes_pod_container_name]
action: replace
target_label: component
- job_name: 'linkerd-service-mirror'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_label_linkerd_io_control_plane_component
- __meta_kubernetes_pod_container_port_name
action: keep
regex: linkerd-service-mirror;admin-http$
- source_labels: [__meta_kubernetes_pod_container_name]
action: replace
target_label: component
- job_name: 'linkerd-proxy'
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels:
- __meta_kubernetes_pod_container_name
- __meta_kubernetes_pod_container_port_name
- __meta_kubernetes_pod_label_linkerd_io_control_plane_ns
action: keep
regex: ^linkerd-proxy;linkerd-admin;linkerd$
- source_labels: [__meta_kubernetes_namespace]
action: replace
target_label: namespace
- source_labels: [__meta_kubernetes_pod_name]
action: replace
target_label: pod
- source_labels: [__meta_kubernetes_pod_label_linkerd_io_proxy_job]
action: replace
target_label: k8s_job
- action: labeldrop
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_job
- action: labelmap
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
- action: labeldrop
regex: __meta_kubernetes_pod_label_linkerd_io_proxy_(.+)
- action: labelmap
regex: __meta_kubernetes_pod_label_linkerd_io_(.+)
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
replacement: __tmp_pod_label_$1
- action: labelmap
regex: __tmp_pod_label_linkerd_io_(.+)
replacement: __tmp_pod_label_$1
- action: labeldrop
regex: __tmp_pod_label_linkerd_io_(.+)
- action: labelmap
regex: __tmp_pod_label_(.+)
내장 Prometheus의 실제 동작 구성을 참조하려면 다음 명령어를 사용하세요.
kubectl -n linkerd-viz get configmap prometheus-config -o yaml
Linkerd-Viz 확장 설정
Linkerd의 시각화 확장 컴포넌트(metrics-api 등)는 대시보드와 CLI의 메트릭 데이터를 제공하기 위해 Prometheus 인스턴스에 의존합니다.
prometheusUrl 필드는 이러한 모든 컴포넌트가 외부 Prometheus URL을 가리키도록 설정할 수 있는 위치입니다. 이 설정은 CLI와 Helm을 통해 적용할 수 있습니다.
CLI를 통한 설정
다음과 같이 prometheusUrl 값을 포함하는 파일을 준비한 후 linkerd viz install 명령의 --values 플래그로 전달합니다.
prometheusUrl: http://existing-prometheus.xyz:9090
이 설정은 설치 시에만 적용되며, 재설치나 업그레이드 시에는 다시 전달해야 합니다. 또한 외부 Prometheus를 사용하면서도 기본 Prometheus를 비활성화하려면 다음 설정도 함께 포함하세요.
prometheus:
enabled: false
Helm을 통한 설정
Helm을 사용하는 경우, values.yaml 파일에 동일한 설정을 적용합니다. Helm을 사용하면 업그레이드 과정에서도 설정이 유지되므로 더 안정적입니다.