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로 실제 출력을 살펴보면 각 항목의 의미를 더 쉽게 익힐 수 있습니다.