728x90
Prometheus 메모리 튜닝
Prometheus를 운영하다 보면 많은 메트릭 저장으로 인해 메트릭 보관주기를 짧게 설정해도 메모리를 많이 사용합니다. 과도한 메모리 사용 시 아래의 방법으로 메모리 사용율을 낮출 수 있습니다.
TSDB analyze
Prometheus와 함께 제공되는 promtool 명령어를 사용합니다. promtool tsdb analyze 사용하여 분석하고, 분석한 결과에서 Highest cardinality labels 목록에서 사용하지 않은 label을 골라 삭제하면 메모리 사용율을 낮출 수 있습니다.
# promtool tsdb analyze [data path]
$ promtool tsdb analyze /data
Duration: 2h0m0s
Series: 5547383
Label names: 248
Postings (unique label pairs): 159621
Postings entries (total label pairs): 44259261
Label pairs most involved in churning:
235023 kubernetes_io_os=linux
235023 beta_kubernetes_io_os=linux
235023 kubernetes_io_arch=amd64
235023 beta_kubernetes_io_arch=amd64
171437 app_kubernetes_io_managed_by=Helm
157630 app_kubernetes_io_component=metrics
Label names most involved in churning:
244783 instance
244783 job
244783 __name__
235023 beta_kubernetes_io_os
235023 kubernetes_io_arch
235023 beta_kubernetes_io_arch
235023 kubernetes_io_os
235023 kubernetes_io_hostname
233527 namespace
Most common label pairs:
2851712 beta_kubernetes_io_os=linux
2851712 kubernetes_io_arch=amd64
2851712 beta_kubernetes_io_arch=amd64
2851712 kubernetes_io_os=linux
2085329 app_kubernetes_io_managed_by=Helm
Label names with highest cumulative label value length:
928176 lease
872902 id
855778 container_id
639203 uid
599520 mountpoint
148595 pod
120729 __name__
77262 owner_name
65469 created_by_name
28118 address
27212 interface
25276 secret
24380 image_id
23028 replicaset
17923 instance
14984 device
14900 image
14014 ip
13599 pod_ip
12806 image_spec
9337 kubernetes_io_hostname
Highest cardinality labels:
31204 lease
21321 id
15463 uid
11114 container_id
5329 mountpoint
4746 pod
3028 __name__
3009 owner_name
2689 created_by_name
1948 interface
1654 address
1091 device
1049 ip
1016 pod_ip
889 secret
878 replicaset
644 instance
418 resource
333 cluster_ip
302 type
263 le
252 configmap
205 endpoint
Highest cardinality metric names:
93302 apiserver_request_duration_seconds_bucket
63602 apiserver_request_slo_duration_seconds_bucket
46852 coredns_dns_request_duration_seconds_bucket
45120 kubelet_runtime_operations_duration_seconds_bucket
38290 storage_operation_duration_seconds_bucket
34305 container_tasks_state
32670 coredns_dns_request_size_bytes_bucket
32670 coredns_dns_response_size_bytes_bucket
27444 container_memory_failures_total
22710 kube_pod_status_phase
22710 kube_pod_status_reason
21577 container_blkio_device_usage_total
20556 kubelet_http_requests_duration_seconds_bucket
20224 apiserver_response_sizes_bucket
Prometheus labeldrop 설정
prometheus scrape_configs에 아래의 설정을 적절한 곳에 추가합니다. metric_relabel_configs 설정하면 메트릭 저장 시 아래의 label을 삭제하고 저장하게 됩니다.
metric_relabel_configs:
- regex: "id"
action: labeldrop
- regex: "uid"
action: labeldrop
- regex: "lease"
action: labeldrop
결과
tsdb analyze 결과를 토대로 id, uid, lease에 어떤값들이 들어가는지 확인하여 사용하지 않은 label이라 판단하고 삭제하였더니 메모리 사용율을 낮출 수 있었습니다. 3개의 label삭제로 메모리 60GB 사용 중 18GB가 줄어드는 걸 확인할 수 있었습니다.
728x90
'Kubernetes' 카테고리의 다른 글
AWS EKS 클러스터 버전 업그레이드 (0) | 2023.03.09 |
---|---|
Kubernetes RuntimeClass 사용하여 gVisor로 컨테이너 실행 (0) | 2023.03.03 |
containerd 로그 수집을 위한 AWS Fluent Bit 설정 (0) | 2022.12.02 |
Grafana Mimir (0) | 2022.10.28 |
Kyverno - Kubernetes Native Policy Management (0) | 2022.10.21 |