ETCD 메트릭 모니터링 가이드
안녕하세요! 오늘은 Kubernetes와 같은 분산 시스템의 핵심 구성 요소인 etcd의 모니터링 방법에 대해 자세히 알아보겠습니다. etcd는 분산 키-값 저장소로, 시스템의 안정성을 위해 적절한 모니터링이 필수적입니다.
etcd 모니터링의 중요성
etcd는 Kubernetes와 같은 분산 시스템에서 모든 클러스터 데이터를 저장하는 핵심 컴포넌트입니다. etcd가 제대로 작동하지 않으면 전체 시스템이 영향을 받을 수 있으므로, 성능과 상태를 지속적으로 모니터링하는 것이 중요합니다.
Metrics 엔드포인트 활용하기
etcd 서버는 기본적으로 클라이언트 포트의 /metrics 경로를 통해 다양한 메트릭 정보를 제공합니다. 기본 클라이언트 포트는 2379입니다.
$ curl http://127.0.0.1:2379/metrics
...
etcd_disk_wal_fsync_duration_seconds_count 4.9931728e+07
# HELP etcd_grpc_proxy_cache_hits_total Total number of cache hits
# TYPE etcd_grpc_proxy_cache_hits_total gauge
etcd_grpc_proxy_cache_hits_total 0
# HELP etcd_mvcc_db_total_size_in_bytes Total size of the underlying database physically allocated in bytes.
# TYPE etcd_mvcc_db_total_size_in_bytes gauge
etcd_mvcc_db_total_size_in_bytes 1.0145792e+07
# HELP etcd_mvcc_db_total_size_in_use_in_bytes Total size of the underlying database logically in use in bytes.
# TYPE etcd_mvcc_db_total_size_in_use_in_bytes gauge
etcd_mvcc_db_total_size_in_use_in_bytes 4.77184e+06
...위 출력에서 볼 수 있듯이, etcd는 다양한 성능 지표를 제공합니다. 이 중에서 특히 주목할 만한 지표들은 다음과 같습니다:
etcd_disk_wal_fsync_duration_seconds: WAL(Write Ahead Log) 동기화 시간, 디스크 성능 문제를 파악하는 데 유용etcd_mvcc_db_total_size_in_bytes: 데이터베이스의 물리적 크기etcd_mvcc_db_total_size_in_use_in_bytes: 실제 사용 중인 데이터베이스 크기
TLS 설정 환경에서의 메트릭 엔드포인트
보안을 위해 TLS 인증 기반으로 etcd를 구성했다면, 메트릭을 확인하기 위해서도 인증서가 필요합니다. 이러한 불편함을 해소하기 위해 etcd v3.3.0부터는 별도의 메트릭 엔드포인트를 지정할 수 있는 기능이 추가되었습니다.
--listen-metrics-urls 플래그를 사용하면 인증이 필요 없는 별도의 엔드포인트를 설정할 수 있습니다:
etcd --listen-metrics-urls=http://0.0.0.0:2381 [기타 옵션...]이렇게 설정하면 2381 포트를 통해 인증 없이 /metrics와 /health 엔드포인트에 접근할 수 있게 됩니다.
또는 환경 변수나 설정 파일에 다음과 같이 설정할 수도 있습니다:
ETCD_LISTEN_METRICS_URLS=http://0.0.0.0:2381Health 엔드포인트 활용하기
etcd는 /health 엔드포인트를 통해 서버의 상태를 간단히 확인할 수 있는 방법을 제공합니다:
$ curl http://127.0.0.1:2379/health
{"health":"true"}이 엔드포인트는 etcd 클러스터가 정상적으로 작동하는지 빠르게 확인할 수 있어 헬스 체크에 유용합니다. 상태가 좋지 않을 경우 {"health":"false"} 응답을 반환합니다.
Prometheus를 통한 모니터링 구성
Prometheus는 etcd 메트릭을 수집하고 시각화하는 데 널리 사용되는 도구입니다. Prometheus 설정 파일에 다음과 같이 etcd 스크랩 설정을 추가하면 됩니다:
scrape_configs:
- job_name: etcd
static_configs:
- targets: ['x.x.x.x:2381','y.y.y.y:2381','z.z.z.z:2381']이 설정은 etcd 클러스터의 각 노드에서 메트릭을 수집하도록 Prometheus에 지시합니다. 여기서 x.x.x.x, y.y.y.y, z.z.z.z는 etcd 노드의 IP 주소입니다.
중요 모니터링 지표
etcd 클러스터의 안정성을 위해 특히 주의 깊게 모니터링해야 할 몇 가지 중요한 지표들이 있습니다:
- 디스크 성능:
etcd_disk_wal_fsync_duration_seconds와 같은 지표로 디스크 I/O 성능을 모니터링합니다. - 데이터베이스 크기:
etcd_mvcc_db_total_size_in_bytes를 통해 데이터베이스 크기 증가를 추적합니다. - 리더 변경:
etcd_server_leader_changes_seen_total로 리더 변경 빈도를 모니터링합니다. - 클라이언트 요청 지연 시간:
etcd_network_client_grpc_received_bytes_total로 네트워크 성능을 추적합니다.
Grafana 대시보드 설정
Prometheus로 수집한 데이터는 Grafana를 통해 시각화할 수 있습니다. etcd 공식 문서에서 제공하는 Grafana 대시보드 템플릿을 활용하면 빠르게 모니터링 환경을 구축할 수 있습니다.
정리
etcd 모니터링은 분산 시스템의 안정성을 유지하는 데 필수적입니다. 메트릭 엔드포인트와 헬스 체크를 통해 기본적인 모니터링을 구성할 수 있으며, Prometheus와 Grafana를 활용하면 더욱 강력한 모니터링 환경을 구축할 수 있습니다.
특히 TLS 환경에서는 별도의 메트릭 엔드포인트를 설정하여 인증 없이도 모니터링할 수 있는 방법을 활용하는 것이 좋습니다.
참고 문서
이 글이 여러분의 etcd 모니터링 구성에 도움이 되었기를 바랍니다. 궁금한 점이나 추가 정보가 필요하시면 댓글로 남겨주세요!