메트릭 카디널리티 누수 차단과 수집 주기 60s 조정 - #44
Conversation
- Grafana Cloud 무료 한도 초과(실측 billable 13,598/10,000)의 원인을 조사해 셋으로 갈라 대응. 시계열을 많이 만들어서가 아니라 수집 설정 문제였다 - 30s -> 60s: billable 은 활성 시계열 x DPM 이라 30s 수집이 청구량을 그대로 2배로 만든다(active 5.8k인데 billable 13.6k). 알림은 전부 로그 기반이라 1분 해상도로 실사용 영향이 없고, 부하테스트 때만 일시적으로 되돌린다 - veth·/snap 제외: 배포마다 veth 이름이, snap 업데이트마다 마운트 경로가 바뀌어 시계열이 영구 누적되던 누수(인터페이스 12개 중 9개가 veth, 마운트 13개 중 10개가 /snap). 감축보다 이 누수 차단이 본질 - 안 막으면 정리해도 다시 차오른다 - collector 41 -> 12: 24h 실패 목록이 tapestats(테이프 드라이브)·fibrechannel(SAN)·bonding·nfs 여서, 없는 장치를 긁는 collector 가 대부분임이 드러났다. 남은 collector 의 success 는 유지해 진짜 수집 실패 감시는 오히려 선명해진다 - textfile 은 유지 - DB 백업 지표가 이 경로로 들어와 끄면 백업 알림이 죽는다 - squashfs 를 fs_types_exclude 에 추가(/snap 의 파일시스템 타입이라 이중 방어) - 예상 결과: active 5,814 -> 약 4,070, billable 13,598 -> 약 4,760(한도의 48%) - 검증: 운영 버전(v1.16.1) alloy validate 통과. netdev·device_exclude 인자가 이 버전에 실재하는지 오타 주입으로 역검증(오타 시 validation failed)
|
Warning Review limit reached
Next review available in: 116 minutes You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (1)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
Situation
Task
Action
1. 카디널리티 누수 차단 (핵심)
감축보다 이쪽이 본질이다. 아래 둘은 시간이 갈수록 저절로 불어나는 구조여서, 막지 않으면 정리해도 다시 한도에 닿는다.
veth7730075·veth7a96d8f·veth18e7998등 veth 9개 +docker0·br-*·lo·ens5netdev.device_exclude로 veth·docker0·br-*·lo 제외/snap/snapd/26869·/snap/snapd/27595·/snap/snapd/27406등/snap/*10개 +/·/boot·/boot/efimount_points_exclude에/snap/.+추가 (+squashfs타입 제외로 이중 방어)컨테이너 트래픽은 어차피 docker0·주 NIC 를 통과하며 합산되므로 개별 veth 를 볼 이유도 없다. 주 NIC 이름은 박스·AMI 마다 다를 수 있어(ens5·eth0) include 화이트리스트 대신 exclude 로 두어, 이름이 달라도 주 NIC 은 항상 남게 했다.
2. collector 41개 → 12개
기본 활성 collector 대부분이 우리 박스에 없는 장치를 긁고 있었다. 근거는 24시간 내 "수집 실패" 목록이다:
EC2 에 테이프 드라이브가 있을 리 없다. 이 실패들은 고장 신호가 아니라 "해당 없음" 이고, 진짜 수집 실패를 가리는 노이즈였다. 반면 실제로 쓰는 cpu·meminfo·filesystem 은 실패한 적이 한 번도 없다.
남긴 것: cpu · meminfo · filesystem · diskstats · netdev · loadavg · stat · vmstat(swap 의존 박스라 필수) · pressure · filefd(fd 고갈은 실제 장애 원인) · uname · textfile.
textfile은 처음에 "커스텀 지표를 안 쓴다"고 판단해 제거 목록에 넣었다가, config 주석에서 DB 백업 지표가 이 경로로 들어온다는 것을 확인하고 되돌렸다. 껐다면 백업 알림(#909 트랙)이 조용히 죽었을 자리다.collector 를 끄면 그 메트릭뿐 아니라 collector 당 2개씩 붙는
scrape_collector_success/duration도 함께 줄어든다. 그러면서 남은 collector 의 success 는 그대로라, "진짜 수집 실패" 감시는 오히려 선명해진다.3. 수집 주기 30s → 60s
billable 은 활성 시계열 × DPM(분당 샘플 수)으로 환산되므로, 30초 수집은 시계열을 하나도 안 늘리고도 청구량을 2배로 만든다. 이것이 active 5.8k 인데 billable 13.6k 였던 이유다.
검토했으나 택하지 않은 안
30초를 유지하고 정리만 하는 안도 계산했다. billable 약 9,500 으로 한도 안에 들어가긴 하지만 여유가 5% 뿐이라, API 엔드포인트 몇 개 추가(
http_server_requests_seconds_bucket이 URI 수에 비례)나 박스 하나 추가(약 200 시리즈)로 곧장 다시 넘친다. 그때 이 조사를 반복하게 되므로 버렸다.Result
v1.16.1)으로alloy validate통과. 이 버전에netdev·device_exclude인자가 실재하는지 확인하려고 인자명에 오타를 주입해validation failed가 나는 것까지 역검증했다(검증이 실제로 인자를 검사한다는 증거).연관 이슈