멋진 운영 경험을 위하여: Prometheus 레코딩 룰로 SLI 정하기 | 당근 SRE 밋업 4회
- 운영 복잡성 및 비효율성 문제 인식: 다양한 전문가들의 각기 다른 시선과 노하우로 인해 장애 발생 시 혼란스럽고, 운영 방향이 정돈되지 않아 노하우 축적이 어려웠습니다. 🤯
- SLI(Service Level Indicator) 도입의 필요성: 문제 해결을 위해 팀원들이 같은 방향을 보고 빠르게 대응할 수 있도록 서비스 상태를 결정하는 중요한 지표인 SLI를 정의하기로 했습니다. 🎯
- 매트릭과 SLI의 차이점 명확화: 모든 지표는 매트릭이지만, SLI는 서비스의 정상 상태를 판단하는 데 사용되는 핵심 지표로, 그 중요성을 강조했습니다. 💡
- SLI 정의 과정의 중요성: 팀원들의 설문조사와 논의를 통해 각기 다른 '정상 서비스'에 대한 멘탈 모델을 합의하고, 레디스 자원에 대한 SLI를 구체적으로 정의했습니다. 🤝
- 초기 SLI 구현의 한계 (Take 1): 개발자 포털 내 API를 통한 SLI 조회 방식은 POC에는 좋았으나, 확장성 부족, 복잡한 코드, 프로메테우스 쿼리 부하, 그라파나와의 불일치 등 단점이 있었습니다. 🚧
- Prometheus 레코딩 룰 활용을 통한 개선 (Take 2): 복잡한 쿼리를 미리 계산하여 새로운 매트릭으로 저장하는 레코딩 룰을 도입하여, 쿼리 속도 향상, 코드 복잡도 감소, 재사용성 증대, 일관된 모니터링 및 알림이 가능해졌습니다. 🚀
- SLI 매트릭 스키마 설계: 회사, 팀, 자원 카테고리, 지표 카테고리 등 구조화된 레이블을 포함하는 스키마를 설계하여 효율적인 쿼리와 관리를 가능하게 했습니다. 🏷️
- 개발자 경험 및 플랫폼 자율성 향상: SLI 도입으로 개발자 포털에서 작업과 모니터링을 한 곳에서 처리할 수 있게 되어 피드백 루프가 정돈되고, 개발자 플랫폼의 자기 완결성이 강화되었습니다. 🧑💻
- 알림 설정의 단순화: SLI를 기준으로 알림 규칙을 설정함으로써 복잡했던 프로메테우스 알림 설정이 훨씬 간결하고 명확해졌습니다. 🔔
- 지속 가능한 SLI 확장: 초기 우려와 달리 팀원들의 적극적인 참여로 새로운 SLI가 지속적으로 추가되며 운영 노하우가 축적되고 있습니다. 🌱
- 핵심 교훈: 작게 시작하고, 합의를 이끌어내며, SLI에 상징성을 부여하고, 기술 스택에 맞는 구현 방법을 찾아 점진적으로 확대하는 것이 중요합니다. 🧭
- 궁극적인 목표: SLI를 통해 공통의 운영 언어와 명확한 운영 기준을 마련하고, 이를 바탕으로 노하우를 쌓아 좋은 운영 경험을 만드는 것입니다. ✨
데브허브 | DEVHUB | 멋진 운영 경험을 위하여: Prometheus 레코딩 룰로 SLI 정하기 | 당근 SRE 밋업 4회