open-telemetry

3 개의 포스트

line5분 읽기큐레이션 요약

Grafana에서 자연어로 장애 원인을 분석하기: LLM 에이전트 기반 SRELens 개발기

관측성 데이터가 메트릭·로그·트레이스·프로파일별로 분산되면, 장애 원인을 파악하기 위해 사람이 여러 도구를 오가며 맥락을 연결해야 합니다. LY Corporation의 Home SRE 팀은 이를 해결하기 위해 Grafana 플러그인인 SRELens를 개발했습니다. SRELens는 자연어 질문을 바탕으로 LLM 에이전트가 관측성 데이터를 조회하고, 도구 호출과 비용·권한·안전 정책을 백엔드에서 통제하며 원인 후보를 근거와 함께 제시합니다. ## 관측성 데이터가 분산되며 발생한 문제 - 메트릭은 Grafana·IMON, 로그는 LaaS·IU, 트레이스는 IMON 트레이스·Tempo, 프로파일은 별도 도구에서 확인해야 했습니다. - 장애 분석 과정에서 시간 범위, 서비스명, 라벨, 트레이스 ID 등의 맥락을 여러 시스템에 반복해서 옮겨야 했습니다. - 자체 호스팅형 LGTM-P 스택을 구축해 데이터를 통합했습니다. - Mimir: 메트릭 - Loki: 로그 - Tempo: 트레이스 - Pyroscope: 프로파일 - OpenTelemetry Collector: 데이터 수집 및 전달 - 데이터가 한곳에 모여도 사용자가 적절한 데이터소스와 라벨, 쿼리 방법을 알아야 한다는 문제는 남았습니다. - 예를 들어 서비스명이 데이터소스마다 `service_name`, `resource.service.name` 등 다른 필드로 표현될 수 있습니다. ## 오픈소스 PoC에서 확인한 한계 - **사용자 컨텍스트와 권한 전파** - Grafana 인증 사용자 정보를 대화 기록, 사용량 한도, 조회 권한에 안정적으로 연결하기 어려웠습니다. - **시스템 프롬프트 제어** - 도구 호출 순서, 재시도, 위험 작업 제한 같은 운영 정책을 사용자 질의와 분리해 보호하기 어려웠습니다. - **짧은 도구 호출 라운드** - 메트릭·트레이스·로그를 순차적으로 확인해야 하는 장애 분석을 충분히 수행하지 못했습니다. - **데이터소스별 라벨 차이** - 올바른 데이터소스를 선택해도 라벨이나 필드가 다르면 검색 결과가 0건이 될 수 있었습니다. - **운영 및 라이선스 제약** - 사내 환경에 맞게 수정하고 배포하는 데 한계가 있었습니다. - 이를 통해 단순한 자연어 질의 기능보다, LLM 에이전트의 행동을 운영 환경에 맞게 통제하는 것이 더 중요하다는 결론을 얻었습니다. ## SRELens 아키텍처 - SRELens는 Grafana 애플리케이션 플러그인으로 동작합니다. - 프런트엔드는 Grafana 내부에 채팅 UI를 제공합니다. - 백엔드는 다음을 담당합니다. - LLM 호출 - 시스템 프롬프트 합성 - 도구 오케스트레이션 - 사용량 및 비용 제한 - 결과 크기와 재시도 제어 - 관측성 데이터 조회는 MCP 게이트웨이를 통해 수행합니다. - 업스트림 MCP 도구 외에도 Grafana 패널 검색과 이미지 렌더링을 위한 로컬 도구를 제공합니다. - `find_grafana_panel` - `render_grafana_panel` - 업스트림 도구와 로컬 도구는 `CompositeClient`를 통해 LLM에 일관된 인터페이스로 노출됩니다. ## 세 계층으로 분리한 프롬프트 설계 ### 베이스 시스템 프롬프트 - 조직 전체에 적용되는 전역 행동 정책입니다. - 다음과 같은 규칙을 포함합니다. - 도구 호출 순서 - 결과가 없을 때의 폴백 전략 - 결과가 잘렸을 때 집계 쿼리를 재실행하는 방법 - 대시보드 생성·수정·삭제 등 위험 작업의 안전 규칙 - 응답 형식과 분석 근거 제시 방식 - 관리자만 수정할 수 있으며, 별도 설정이 없으면 코드에 포함된 기본 프롬프트를 사용합니다. ### 데이터소스 프래그먼트 - 환경별 관측성 시스템 정보를 YAML 형태로 제공합니다. - 주요 내용은 다음과 같습니다. - 우선 사용할 Mimir·Loki·Tempo 데이터소스 UID - 서비스명을 찾기 위한 라벨 후보 - Loki 로그의 JSON 파싱 및 구조화 메타데이터 처리 방법 - SRE의 운영 지식을 미리 제공해 불필요한 탐색을 줄이고 분석 성공률과 속도를 높입니다. ### 사용자 프롬프트 - 담당 서비스, 선호 응답 형식, 자주 사용하는 대시보드 등 개인·팀의 맥락을 저장합니다. - Redis에 저장되며 시스템 프롬프트의 추가 컨텍스트로 주입됩니다. - 베이스 프롬프트를 덮어쓰지 않으므로 개인화가 조직 공통 안전 정책보다 우선할 수 없습니다. ## 백엔드 중심의 툴 오케스트레이션 - 프런트엔드가 시스템 프롬프트를 조립하지 않고, 백엔드 오케스트레이터가 모든 프롬프트 합성을 담당합니다. - 에이전트는 다음 루프를 반복합니다. 1. 사용자 질문을 LLM에 전달 2. LLM이 요청한 MCP 또는 로컬 도구 실행 3. 도구 결과를 다시 LLM에 전달 4. 최종 분석이 나올 때까지 반복 - 운영 안정성을 위해 코드 수준의 가드레일을 적용했습니다. - 최대 10라운드로 도구 호출 제한 - 동일 도구·동일 인자의 중복 호출 차단 - 도구별 재시도 최대 2회 - 개별 도구 결과 크기 제한 - 전체 요청이 커질 경우 오래된 도구 결과를 플레이스홀더로 치환 - `tool_call_id`를 유지해 호출과 결과의 연결 보장 - 결과가 없으면 라벨, 시간 범위, 데이터소스를 바꿔 재시도하도록 유도 ## 비용·요청량 및 장애 대응 정책 - 사용자별 일일 토큰 한도를 적용합니다. - 분당 요청 수를 제한하고, 한도 초과 시 HTTP 429를 반환합니다. - 응답 후 OpenAI가 반환한 실제 프롬프트·출력 토큰 사용량을 사용자별 일일 버킷에 기록합니다. - 사용량은 Asia/Seoul 기준 자정에 초기화됩니다. - Redis는 대화 기록, 사용자 프롬프트, 쿼터 저장에 사용됩니다. - Redis 장애가 발생해도 단일 채팅 요청은 계속 처리할 수 있도록 설계했습니다. - 대화 기록 및 개인화 기능은 제한될 수 있습니다. - SRELens 전체가 동시에 중단되지는 않습니다. ## 실제 장애 분석 방식의 변화 - 사용자는 “특정 시간대에 왜 에러가 늘었는가”처럼 자연어로 질문할 수 있습니다. - SRELens는 하나의 분석 흐름에서 메트릭, 로그, 트레이스를 연결해 확인합니다. - 예시 시나리오에서는 베타 환경의 오류 급증을 분석하면서 특정 API 요청인 `CopyMedia` 호출 증가와 관련된 원인까지 범위를 좁혔습니다. - 기존처럼 대시보드, 로그 검색 시스템, 트레이스 도구를 오가며 사람이 상관관계를 직접 맞출 필요가 줄어듭니다. - 분석 결과는 단순한 결론이 아니라 조회된 관측성 데이터와 근거를 함께 제시하는 것을 목표로 합니다. 운영 환경에서 LLM 기반 장애 분석을 도입할 때는 자연어 인터페이스보다 통제 구조를 먼저 설계하는 것이 중요합니다. 조직 정책과 환경별 데이터소스 지식을 프롬프트 계층으로 분리하고, 도구 호출·권한·비용·재시도를 백엔드 코드로 제한해야 안정적이고 재현 가능한 분석 도구를 만들 수 있습니다.

원문 읽기(새 탭에서 열림)
kakao4분 읽기큐레이션 요약

메시징 서버의 스트레스 테스트 노하우와 AI 가 덜어 준 부분

메시징 서버의 안정적 운영을 위해서는 실서비스와 동일한 환경에서 상시 스트레스 테스트를 수행하고, 실제 트래픽 패턴과 최악의 시나리오를 재현해야 한다. 테스트는 단순히 서버가 장애 없이 버티는지를 보는 것이 아니라 RPS, 지연 시간, 오류율, 시스템 자원 등을 계층적으로 분석해 병목 원인을 찾아내는 과정이다. 관측성 도구, 프레임워크, OS·보안 시스템, 신규 기능 변경 전후에도 스트레스 테스트를 적용해야 운영 장애를 예방할 수 있다. ## 상시 스트레스 테스트 환경 구성 - 테스트 대상 서버는 실운영 서버와 동일한 JVM heap, CPU·메모리 한도, 네트워크 사양으로 구성한다. - 운영 서버 대수가 다르면 측정값을 그대로 비교하기 어렵기 때문에 필요한 경우 수치 보정을 적용한다. - 부하 생성에는 Locust를 사용하며, 클러스터 리소스에 따라 수백 개의 워커 파드까지 확장한다. - 부하 생성 클라이언트의 자원 부족이 서버 성능 측정에 영향을 주지 않도록 클라이언트 리소스를 충분히 확보한다. - 경우에 따라 `org.openjdk.jmh:jmh-core`를 이용해 프레임워크나 프로토콜 자체를 벤치마크한다. ## 실제 트래픽을 반영한 시나리오 설계 - 여러 사용자 동작을 실제 환경의 비율에 맞춰 조합한다. - 평시 정오에는 메시지 전송, 채팅방 입장, 채팅방 목록 조회, 메시지 조회가 비교적 고르게 분포한다. - 신년 자정에는 메시지 전송 비중이 52%에서 61%로 증가하고, 채팅방 목록 조회는 18%에서 8%로 감소한다. - 같은 RPS라도 READ·WRITE 프로토콜 비율에 따라 병목 지점과 최대 처리량이 달라질 수 있다. - 새로운 시나리오마다 부하 코드를 새로 작성하지 않고, 사용자 수·요청 비율·동시성 등 설정값을 조합해 다양한 트래픽을 재현한다. ## 변경 유형별 스트레스 테스트 ### 관측성과 로깅 인프라 추가 - Logstash, Fluent Bit, OpenTelemetry, Vector DB 등 관측성 컴포넌트가 애플리케이션 처리량과 응답 시간에 미치는 영향을 확인한다. - 메트릭 수집 때문에 애플리케이션 부하가 증가하거나 CPU·메모리·네트워크 사용량이 변하지 않는지 측정한다. - 높은 트래픽에서 내부 메트릭과 알림 시스템 자체가 지연되는지도 검증한다. ### 프로토콜·프레임워크 벤치마크와 포팅 - 비즈니스 로직을 제외하고 동일한 I/O 부하를 주어 프로토콜이나 프레임워크별 성능을 비교한다. - WebFlux, virtual thread 등 기술 선택을 추상적인 장점이 아니라 실제 RPS, latency, CPU 사용량으로 판단한다. - CPU 부하와 I/O 대기 시간을 단계적으로 늘려 현재 서비스가 CPU-bound인지 IO-bound인지 확인한다. - C++에서 Kotlin으로 메인 서버를 포팅할 때도 전후 시스템 지표를 비교하고, GC 튜닝 등을 통해 성능 차이를 줄였다. ### OS 변경과 보안 시스템 도입 - 온프레미스 호스트 OS 변경, 백신, 보안·모니터링 에이전트 추가가 고부하 상황에서 미치는 영향을 검증한다. - 평상시에는 드러나지 않던 slab 메모리 누수나 백신 동작 시 리소스 급증이 대규모 트래픽에서 문제가 될 수 있다. - 적용 전후 응답 시간과 처리량이 악화되지 않는지 확인한 뒤 인프라 변경을 진행한다. ### 메시징 도메인 특화 임계 상황 - 한 채팅방에서 여러 사용자가 동시에 메시지를 전송하는 상황을 재현한다. - 자정 메시지 burst, 수백 명 규모의 단체 채팅방 입장 등 최악의 시나리오를 별도로 검증한다. - 신규 기능도 부하 상황에서 예상되는 병목을 먼저 파악한 후 출시한다. ## 지표를 계층적으로 분석하는 방법 ### 엔드포인트 지표 - **RPS**: 워커 수를 점진적으로 늘려 포화 지점을 찾거나, 동일한 부하에서 RPS가 안정적으로 유지되는지 확인한다. - 예상보다 낮은 RPS에서 포화되거나 처리량이 급격히 흔들리면 내부 원인 분석으로 넘어간다. - **Latency**: - P50은 대부분 사용자의 일반적인 경험을 나타낸다. - P95·P99는 최악의 응답 시간과 내부 병목을 파악하는 데 유용하다. - P95·P99가 급증하면 처리량 한계나 대기열 문제를 의심한다. - P50 자체가 목표치나 실제 환경보다 높아도 비정상으로 판단한다. - **Error rate**: - 5xx는 서버 처리 한계에 도달했을 가능성이 있다. - timeout은 클라이언트 자원 부족이나 타임아웃 설정을 확인해야 한다. - 400 오류는 테스트 데이터나 비즈니스 시나리오가 잘못되었을 가능성이 있다. ### 시스템 자원 지표 - 본문은 시스템 자원 레이어 설명 중간에서 끝나지만, 엔드포인트 지표에서 이상이 발견되면 CPU·메모리·네트워크 등 하위 시스템 지표를 세부적으로 확인하는 방식으로 이어진다. - 스트레스 테스트 결과는 단순한 성공·실패가 아니라, 어느 계층에서 병목이 발생했는지 추적하는 디버깅 과정으로 해석해야 한다. 실무에서는 운영과 유사한 테스트 환경을 상시 유지하고, 평시 트래픽뿐 아니라 도메인 특유의 폭증 시나리오까지 자동화하는 것이 중요하다. 또한 변경 사항을 도입할 때 RPS, P50/P95/P99 latency, 오류율, 시스템 자원을 동일한 기준으로 비교해 정량적으로 판단하는 것이 권장된다.

원문 읽기(새 탭에서 열림)
aws원문

AWS 주간 소식: Amazon Bedrock의 Claude Mythos 프리뷰, AWS Agent Registry 등 (2026년 4월 13일) | Amazon Web Services (새 탭에서 열림)

AWS는 이번 발표를 통해 AI 모델의 실험 단계를 넘어 실제 운영 환경에서의 비용 투명성과 관리 효율성을 높이는 데 주력하고 있습니다. 특히 Amazon Bedrock의 비용 할당 기능과 새로운 에이전트 레지스트리는 기업이 AI 자원을 체계적으로 거버넌스하고 최적화할 수 있는 기틀을 마련해 줍니다. 결과적으로 개발 가속화와 동시에 재무적 가시성을 확보하려는 기업들에게 실질적인 해결책을 제시하고 있습니다. ### AI 비용 관리 및 거버넌스 체계 구축 * **IAM 기반 Bedrock 비용 할당**: 이제 IAM 사용자 및 역할별로 Amazon Bedrock 사용 비용을 할당할 수 있습니다. 팀이나 비용 센터별로 태그를 지정해 AWS Cost Explorer 및 상세 비용 보고서(CUR)에서 모델 추론 비용을 명확히 추적할 수 있어 AI 투자의 가시성이 크게 향상되었습니다. * **AWS Agent Registry 출시**: 기업 내 AI 에이전트, 도구, MCP(Model Context Protocol) 서버 등을 통합 관리하는 프라이빗 카탈로그입니다. 시맨틱 검색과 승인 워크플로를 통해 중복 개발을 방지하고, CloudTrail을 통한 감사 추적 기능을 제공하여 에이전트 기반 시스템의 거버넌스를 강화합니다. ### 보안 및 관리형 AI 서비스 확장 * **Claude Mythos 프리뷰**: Anthropic의 가장 정교한 보안 특화 모델이 Amazon Bedrock에 연구 프리뷰 형태로 출시되었습니다. 소프트웨어 취약점 식별 및 대규모 코드베이스 분석에 탁월하며, 현재는 인터넷 주요 인프라 기업 및 오픈소스 유지 관리자를 중심으로 접근이 제한적으로 허용됩니다. * **Amazon WorkSpaces Advisor**: 생성형 AI를 활용하여 IT 관리자의 업무를 돕는 도구입니다. 가상 데스크톱 환경의 구성을 분석하고 문제를 자동으로 감지하여, 서비스 복구 및 성능 최적화를 위한 구체적인 권장 사항을 제공합니다. ### 고성능 데이터 스토리지 및 관측성 강화 * **Amazon S3 Files**: S3 버킷을 Amazon EFS 기술 기반의 파일 시스템으로 직접 연결하여 사용할 수 있습니다. 코드 수정 없이도 기존 파일 시스템 세맨틱을 유지하면서 초당 수 테라비트의 읽기 처리량을 확보할 수 있으며, S3 API와 파일 인터페이스를 동시에 사용할 수 있는 유연성을 제공합니다. * **OpenSearch 통합 관측성 지원**: Managed Prometheus 및 에이전트 트레이싱 기능이 추가되었습니다. 로그, 메트릭, 트레이스를 하나의 인터페이스에서 통합 관리할 수 있으며, 특히 LLM 실행 가시성을 위한 OpenTelemetry GenAI 시맨틱 컨벤션을 지원하여 AI 운영의 효율성을 높였습니다. ### 양자 컴퓨팅 및 고급 컴퓨팅 옵션 * **Rigetti 108 큐비트 QPU 지원**: Amazon Braket에서 Rigetti의 'Cepheus' 프로세서를 사용할 수 있게 되었습니다. 100 큐비트 이상의 초전도 양자 프로세서로, 펄스 수준의 제어가 가능하여 연구자들이 더 복잡한 양자 알고리즘을 테스트할 수 있는 환경을 제공합니다. * **AWS Lambda 매니지드 인스턴스**: 서버리스의 장점을 유지하면서도 메모리 집약적인 애플리케이션을 지원할 수 있도록 Lambda 인프라 옵션이 확장되어, 가벼운 워크로드를 넘어선 복잡한 계산 작업도 처리가 가능해졌습니다. 성공적인 AI 운영을 위해서는 도입 초기부터 **IAM 태그를 활용한 비용 할당 정책**을 수립하는 것이 권장됩니다. 또한, Amazon Bedrock에서 사용 중인 파운데이션 모델의 **생명주기(Lifecycle)** 문서를 정기적으로 확인하여, 모델 업데이트 및 단종 계획에 따른 서비스 중단 위험을 사전에 방지하시기 바랍니다.