본문으로 바로가기 본문 바로가기
WIKI 기술 지식 베이스

Prometheus로 Typha 모니터링하기

원문 보기 위키 갱신

Typha는 Prometheus를 통해 여러 메트릭을 보고하도록 구성할 수 있습니다. 메트릭 보고를 활성화하는 방법은 구성 참조 문서에 나와 있습니다. 이 문서에서는 Typha가 내보내는 메트릭의 종류와 의미를 하나씩 살펴봅니다.

출처: 문서

본문

Typha는 Prometheus를 통해 여러 가지 메트릭을 보고하도록 구성할 수 있습니다. 메트릭 보고를 활성화하는 방법은 구성 참조를 참고하세요.

메트릭 참조

Typha 전용 메트릭

Typha는 여러 Prometheus 메트릭을 내보냅니다. 현재 제공되는 메트릭은 다음과 같습니다. 일부 메트릭은 Typha 내부의 특정 구현 방식에 묶여 있기 때문에, 릴리스가 바뀌어도 메트릭이 반드시 유지된다는 강한 보장은 드릴 수 없습니다. 다만 기존 메트릭을 불필요하게 변경하지 않도록 노력하고 있습니다.

용어

Syncer: Typha 메트릭 상당수는 이제 "syncer 타입"으로 구분됩니다. Typha는 지원하는 각 클라이언트 타입마다 하나의 "syncer"를 실행합니다. "syncer"는 Typha의 데이터스토어 로컬 캐시를 업스트림 데이터스토어와 동기화하는 컴포넌트입니다. syncer 타입은 Prometheus 레이블 syncer="..."를 통해 메트릭에 붙습니다.

Breadcrumb: Typha의 내부 캐시는 데이터스토어 상태의 스냅샷들과, 이전 스냅샷과 비교한 변경 목록을 함께 저장합니다. 이렇게 스냅샷과 변경 목록을 합친 것을 "breadcrumb"이라고 부릅니다. Breadcrumb은 생성되는 순서대로 연결 리스트로 이어집니다. 클라이언트가 연결하면 Typha는 가장 최근 breadcrumb의 스냅샷을 클라이언트에 보낸 뒤, 그 클라이언트를 대신해 "breadcrumb을 따라가며" 각 breadcrumb의 변경 목록을 전송합니다.

이름 설명
typha_cache_size Typha 인메모리 캐시에 들어 있는 키/값 쌍의 총 개수입니다.
typha_snapshots_generated Typha가 생성한 바이너리 스냅샷의 총 개수입니다. 바이너리 스냅샷은 한 번 생성된 뒤 성능을 위해 여러 클라이언트가 공유합니다.
typha_snapshots_reused Typha가 여러 클라이언트를 위해 재사용한 바이너리 스냅샷 수로, CPU 사용량을 줄여 줍니다.
typha_snapshot_raw_bytes 가장 최근 바이너리 스냅샷의 압축 전 크기(바이트)입니다.
typha_snapshot_compressed_bytes 가장 최근 바이너리 스냅샷의 압축 후 크기(바이트)입니다.
typha_breadcrumb_block Typha가 블로킹된 후 다음 Breadcrumb을 가져온 횟수입니다.
typha_breadcrumb_non_block typha_breadcrumb_non_block Typha가 블로킹 없이 다음 Breadcrumb을 가져온 횟수입니다.
typha_breadcrumb_seq_number 현재(서버 로컬) 시퀀스 번호로, 처리한 스냅샷 델타의 개수입니다.
typha_breadcrumb_size 각 breadcrumb에 기록된 KV 개수입니다.
typha_client_latency_secs 클라이언트별 지연 시간입니다. 즉, 각 클라이언트가 현재 상태보다 얼마나 뒤처져 있는지를 나타냅니다.
typha_client_snapshot_send_secs 각 클라이언트에 초기 스냅샷을 보내는 데 걸린 시간입니다.
typha_client_write_latency_secs 클라이언트별 쓰기 지연 시간입니다. 각 write 호출이 걸리는 시간을 나타냅니다.
typha_connections_accepted 누적 수락된 연결의 총 개수입니다.
typha_connections_active 열려 있는 클라이언트 연결 수입니다(핸드셰이크가 아직 완료되지 않은 연결 포함).
typha_connections_streaming 활발히 스트리밍 중인 클라이언트 연결 수입니다(핸드셰이크를 성공적으로 완료한 연결).
typha_connections_dropped 리밸런싱으로 인해 끊긴 연결의 총 개수입니다.
typha_kvs_per_msg 메시지당 전송된 KV 쌍의 개수입니다.
typha_log_errors 로깅 중 발생한 오류 수입니다.
typha_logs_dropped 출력 스트림이 막혀서 버려진 로그 수입니다.
typha_next_breadcrumb_latency_secs 이미 뒤처져 있을 때 다음 breadcrumb을 가져오는 데 걸리는 시간입니다.
typha_ping_latency 클라이언트와의 왕복 ping/pong 지연 시간입니다. Typha 프로토콜에는 연결이 살아 있는지 확인하기 위한 주기적인 ping/pong keepalive가 포함되어 있습니다.
typha_updates_skipped 데이터스토어 변경이 관련 없어서 건너뛴 업데이트의 총 개수입니다. (예: Calico가 읽지 않는 쿠버네티스 Pod 필드에 대한 업데이트)
typha_updates_total 데이터스토어에서 수신한 업데이트의 총 개수입니다.
remote_cluster_connection_status 페더레이션에서 원격 클러스터 연결의 상태입니다. 숫자 값 0(NotConnecting), 1(Connecting), 2(InSync), 3(ReSyncInProgress), 4(ConfigChangeRestartRequired), 5(ConfigInComplete)로 표현됩니다. remote_cluster_name 레이블을 사용해 페더레이션에서 원격 클러스터의 이름을 나타냅니다.

Prometheus 메트릭은 스스로 설명이 붙는(self-documenting) 형태입니다. 메트릭을 켜 두면 curl을 사용해 메트릭 목록과 함께 도움말 텍스트, 타입 정보를 확인할 수 있습니다.

curl -s http://localhost:9091/metrics | head

응답 예시:

# HELP typha_breadcrumb_block Count of the number of times Typha got the next Breadcrumb after blocking.
# TYPE typha_breadcrumb_block counter
typha_breadcrumb_block 57
# HELP typha_breadcrumb_non_block Count of the number of times Typha got the next Breadcrumb without blocking.
# TYPE typha_breadcrumb_non_block counter
typha_breadcrumb_non_block 0
# HELP typha_breadcrumb_seq_number Current (server-local) sequence number; number of snapshot deltas processed.
# TYPE typha_breadcrumb_seq_number gauge
typha_breadcrumb_seq_number 22215
...

CPU / 메모리 메트릭

Typha는 Prometheus가 기본으로 제공하는 메트릭 세트도 함께 내보냅니다. 현재 포함된 항목은 다음과 같습니다:

이름 설명
go_gc_duration_seconds GC 호출 소요 시간에 대한 요약입니다.
go_goroutines 현재 존재하는 고루틴 수입니다.
go_memstats_alloc_bytes 할당되어 아직 사용 중인 바이트 수입니다.
go_memstats_alloc_bytes_total 해제 여부와 관계없이 할당된 총 바이트 수입니다.
go_memstats_buck_hash_sys_bytes 프로파일링 버킷 해시 테이블이 사용하는 바이트 수입니다.
go_memstats_frees_total 총 해제(free) 횟수입니다.
go_memstats_gc_sys_bytes 가비지 컬렉션 시스템 메타데이터에 사용되는 바이트 수입니다.
go_memstats_heap_alloc_bytes 할당되어 아직 사용 중인 힙 바이트 수입니다.
go_memstats_heap_idle_bytes 사용 대기 중인 힙 바이트 수입니다.
go_memstats_heap_inuse_bytes 현재 사용 중인 힙 바이트 수입니다.
go_memstats_heap_objects 할당된 객체 수입니다.
go_memstats_heap_released_bytes_total OS로 반환된 힙 바이트의 총합입니다.
go_memstats_heap_sys_bytes 시스템에서 확보한 힙 바이트 수입니다.
go_memstats_last_gc_time_seconds 마지막 가비지 컬렉션 시점부터 1970년 기준으로 지난 시간(초)입니다.
go_memstats_lookups_total 포인터 조회 총 횟수입니다.
go_memstats_mallocs_total 총 malloc 횟수입니다.
go_memstats_mcache_inuse_bytes mcache 구조가 사용 중인 바이트 수입니다.
go_memstats_mcache_sys_bytes 시스템에서 확보한 mcache 구조용 바이트 수입니다.
go_memstats_mspan_inuse_bytes mspan 구조가 사용 중인 바이트 수입니다.
go_memstats_mspan_sys_bytes 시스템에서 확보한 mspan 구조용 바이트 수입니다.
go_memstats_next_gc_bytes 다음 가비지 컬렉션이 수행될 시점의 힙 바이트 수입니다.
go_memstats_other_sys_bytes 기타 시스템 할당에 사용되는 바이트 수입니다.
go_memstats_stack_inuse_bytes 스택 할당자가 사용 중인 바이트 수입니다.
go_memstats_stack_sys_bytes 시스템에서 확보한 스택 할당자용 바이트 수입니다.
go_memstats_sys_bytes 시스템에서 확보한 바이트 수입니다. 모든 시스템 할당의 합계입니다.
process_cpu_seconds_total 사용자 및 시스템 CPU 시간의 총합(초)입니다.
process_max_fds 열 수 있는 파일 디스크립터의 최대 개수입니다.
process_open_fds 열려 있는 파일 디스크립터 수입니다.
process_resident_memory_bytes 상주 메모리 크기(바이트)입니다.
process_start_time_seconds Unix epoch 기준 프로세스 시작 시간(초)입니다.
process_virtual_memory_bytes 가상 메모리 크기(바이트)입니다.
promhttp_metric_handler_requests_in_flight 현재 처리 중인 스크랩 수입니다.
promhttp_metric_handler_requests_total HTTP 상태 코드별 스크랩 총 횟수입니다.

더 알아보기 (Learn more)

Typha 구성 참조에서 메트릭 보고를 활성화하는 방법을 확인할 수 있습니다. 메트릭을 켠 뒤 curl로 실제 출력을 살펴보면 각 항목의 의미를 더 쉽게 익힐 수 있습니다.