Flask and SQLAlchemy Telemetry: 경계에서 검증된 행까지
제어된 애플리케이션 경계에서 Flask and SQLAlchemy Telemetry를 사용하고, 이벤트 계약을 작게 유지하고, 집계 뷰를 구축하기 전에 알려진 결과를 확인하세요.
- 1
결과를 선택하세요
플라스크 API 신뢰성
- 2
계약 정의
request_id, 엔드포인트, route_template, 메소드 및 status_code
- 3
경계 계측
request.path 대신 Flask와 일치하는 url_rule를 사용하면 식별자로 인해 카디널리티나 개인 정보 보호 문제가 발생하지 않습니다.
- 4
증거를 확인하세요
Exercise a known fixture, then inspect api_request_completed for one correctly typed terminal row.
시작하기 전에
전제 조건 및 경계
- telemetry-sh는 각 Flask 작업자 프로세스에서 한 번 초기화됩니다.
- 안정적인 Flask 엔드포인트 분류 및 단조로운 요청 타이머
- 개수, 기간 및 안전한 작업 메타데이터로 제한된 SQLAlchemy 이벤트 리스너
배송 설정
서버 측 설치 및 초기화
서버 측 키를 사용하여 프로세스당 한 번씩 동기 코드의 경우 Telemetry를 초기화하고 비동기 코드의 경우 TelemetryAsync를 초기화합니다. 브라우저 번들, 클라이언트에 표시되는 환경 변수, 소스 제어, 로그 및 예외 메시지에서 수집 자격 증명을 유지하세요.
pip 설치
python -m pip install telemetry-sh- 1제한된 네트워크 동작을 갖춘 재사용 가능한 서버 측 전달 클라이언트 하나를 준비합니다.
- 2성공, 실패, 재시도 또는 시간 초과 경계에 결과 이벤트를 추가합니다.
- 3알림을 활성화하기 전에 제어된 고정 장치를 보내고 저장된 행을 검사하십시오.
스니펫
하나의 체계적인 이벤트로 시작하세요
워크플로가 완료, 실패 또는 재시도되는 위치에 이 셰이프를 추가합니다. 그런 다음 실제 필드에서 대시보드를 구축합니다.
Flask and SQLAlchemy Telemetry 이벤트
from flask import g, request
from time import monotonic
@app.before_request
def start_request_timer():
g.request_started_at = monotonic()
g.db_query_count = 0
@app.after_request
def record_request_outcome(response):
route = request.url_rule.rule if request.url_rule else "unmatched"
telemetry.log("api_request_completed", {
"request_id": request.headers.get("X-Request-ID"),
"endpoint": request.endpoint or "unmatched",
"route_template": route,
"method": request.method,
"status_code": response.status_code,
"status": "failed" if response.status_code >= 500 else "success",
"latency_ms": round((monotonic() - g.request_started_at) * 1000),
"db_query_count": g.db_query_count,
"release": app.config.get("APP_RELEASE"),
})
return response이벤트 계약
request_id, 엔드포인트, route_template, 메소드 및 status_code
상태, latency_ms, db_query_count, rollback_count 및 error_type
서비스, 환경, 릴리스 및 승인된 테넌트 컨텍스트
구현 체크포인트
체크포인트 1
request.path 대신 Flask와 일치하는 url_rule를 사용하면 식별자로 인해 카디널리티나 개인 정보 보호 문제가 발생하지 않습니다.
체크포인트 2
요청별 카운터를 플라스크.g에 저장하고 검토된 SQLAlchemy 후크에서 업데이트합니다. SQL 텍스트, 바인딩된 매개변수, 연결 문자열 또는 ORM 개체를 보내지 마세요.
체크포인트 3
응답이 구성된 후에 분해 예외가 발생할 수 있으므로 두 질문이 모두 중요한 경우 모델 요청 결과와 트랜잭션 롤백을 별도의 이벤트로 간주합니다.
검증
이벤트가 도착했음을 증명하세요.
알려진 성공 및 실패 사례를 연습한 후 이를 실행하십시오. 최종 이벤트 계약이 스니펫과 다른 경우 대체 테이블 이름을 바꾸세요.
Flask and SQLAlchemy Telemetry 확인 쿼리
SELECT *
FROM api_request_completed
ORDER BY timestamp_utc DESC
LIMIT 20;구현 참조
새로운 프로덕션 경로를 활성화하기 전에 이벤트 계약, 데이터 안전 지침, 업스트림 기본 문서를 검토하세요.
프로덕션 경계
결과 이벤트를 작고 복구 가능하게 유지
이 패턴은 다음을 제공합니다.
- 업스트림 워크플로우 옆에 제한된 SQL 지원 결과가 있습니다.
- 대시보드, 알림 및 교차 이벤트 상관 관계를 위한 안정적인 필드입니다.
- 성공, 실패, 재시도 및 시간 초과 동작을 검증하기 위한 고정 장치 기반 경로입니다.
이 패턴은 제공하지 않습니다
- OTLP 내보내기, 자동 수집 파이프라인 또는 자세한 추적 및 진단 로그를 대체합니다.
- 페이로드에 이벤트 ID가 포함되어 있기 때문에 정확히 한 번만 전달됩니다.
- 원시 공급자 페이로드, 사용자 콘텐츠, 자격 증명 또는 규제 데이터를 수집할 수 있는 권한입니다.
이벤트 스키마 시작점
이 워크플로우에 대한 이벤트 계약
쿼리 또는 스니펫을 프로덕션에 적용하기 전에 행 그레인, 방출 경계, 필수 유형, 개인 정보 보호 클래스, 예제 페이로드 및 유효성 검사 체크리스트를 검토하세요.
관련 제품 기능
이 워크플로를 다음에서 계속하세요. 알림
검토된 신뢰성 쿼리를 소유한 임계값 및 응답 워크플로로 승격합니다.
관련 SQL 레시피
SQL로 다음 질문에 답하세요
이 워크플로의 구조화된 필드에 대해 쿼리를 실행하고, 예제 결과를 검사하고, 유용한 답변을 대시보드 또는 알림으로 전환하세요.
경로별 API 오류율 계산
의미 있는 5xx 오류율이 가장 높은 API 경로는 무엇입니까?
레시피 열기p50, p95 및 p99 API 대기 시간 계산
꼬리 지연 시간이 가장 긴 엔드포인트는 무엇입니까?
레시피 열기지문으로 느린 데이터베이스 쿼리 찾기
조사할 만큼 지속적으로 느린 데이터베이스 작업은 무엇입니까?
레시피 열기데이터베이스 트랜잭션 롤백 비율 계산
데이터베이스 트랜잭션의 비정상적인 부분을 롤백하는 서비스는 무엇입니까?
레시피 열기총 시간 영향을 기준으로 데이터베이스 쿼리 순위 지정
가장 많은 누적 요청 시간을 소모하는 데이터베이스 작업은 무엇입니까?
레시피 열기구현 제품군별로 찾아보기
관련 통합 패턴 비교
이 통합과 페어링할 템플릿
더 많은 통합
MongoDB 작업 Telemetry
문서나 쿼리 값을 수집하지 않고도 명명된 MongoDB 작업, 대기 시간, 결과 수, 재시도, 트랜잭션 결과 및 릴리스 회귀를 추적합니다.
가이드 열기MySQL 쿼리 및 풀 Telemetry
원시 SQL 또는 매개변수를 저장하지 않고도 정규화된 MySQL 작업, 풀 대기, 트랜잭션 결과, 제어된 오류 범주 및 릴리스 회귀를 추적합니다.
가이드 열기Prisma ORM 데이터베이스 Telemetry
원시 쿼리 매개변수를 수집하지 않고도 Prisma 작업 지문, 모델 및 메서드 대기 시간, 실패, 결과 개수, 릴리스, 데이터베이스 종속 워크플로를 측정합니다.
가이드 열기