Hướng dẫn theo framework
Theo dõi lỗi cho Python
Với Python, Belvador dùng sentry-sdk chính thức với DSN Belvador của bạn, cùng tuỳ chọn khởi tạo và hook scrub_event bỏ request body, cookie và thông tin đăng nhập trước khi event rời server của bạn.
Trả lời nhanh#
Dùng
sentry-sdkchính thức với DSN Belvador của bạn.Hook
scrub_eventbỏ request body, cookie và thông tin đăng nhập trước khi event rời server.Job định kỳ báo check-in, còn trace và log OpenTelemetry được lưu trên cùng node.
Đây là cách cài tương thích: Belvador kiểm thử hook của mình, không kiểm thử bản thân
sentry-sdk.
Cài đặt#
pip install --upgrade "sentry-sdk"Khởi tạo khi app bắt đầu chạy#
import osimport sentry_sdkimport reSENSITIVE_KEY = re.compile(r"password|passwd|pwd|secret|api_key|apikey|api-key|access_token|auth|credentials|credit_card|card_number|cvv|private_key|privatekey|session|cookie|token|bearer|ssn|dob", re.I)DROP_HEADER = re.compile(r"^(authorization|proxy-authorization|cookie|set-cookie|x-forwarded-for|x-real-ip|cf-connecting-ip|true-client-ip)$", re.I)IN_TEXT = [ (re.compile(r"\bBearer\s+[A-Za-z0-9._~+/-]+=*", re.I), "Bearer [Filtered]"), (re.compile(r"\beyJ[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}\.[A-Za-z0-9_-]{5,}"), "[Filtered]"), (re.compile(r"\b[sr]k_(live|test)_[A-Za-z0-9]{8,}\b"), "[Filtered]"), (re.compile(r"([?&#;\s\"']?[^=&#\s\"':]*(?:token|key|secret|password|session|auth)[^=&#\s\"':]*[\"']?\s*[=:]\s*[\"']?)[^&#\s\"',}]+", re.I), r"\1[Filtered]"),]def scrub_text(text): for pattern, repl in IN_TEXT: text = pattern.sub(repl, text) return textdef scrub_value(value, depth=0): if isinstance(value, str): return scrub_text(value) if depth > 8: return value if isinstance(value, (list, tuple)): return [scrub_value(v, depth + 1) for v in value] if isinstance(value, dict): return {k: "[Filtered]" if SENSITIVE_KEY.search(str(k)) else scrub_value(v, depth + 1) for k, v in value.items()} return valuedef scrub_event(event, hint): request = event.get("request") if request: for field in ("data", "cookies", "env"): request.pop(field, None) headers = request.get("headers") or {} for name in list(headers): if DROP_HEADER.match(name): del headers[name] elif SENSITIVE_KEY.search(name): headers[name] = "[Filtered]" if isinstance(request.get("url"), str): request["url"] = scrub_text(request["url"]) if request.get("query_string"): request["query_string"] = scrub_value(request["query_string"]) user = event.get("user") if user is not None: event["user"] = {"id": user["id"]} if "id" in user else None if event.get("message"): event["message"] = scrub_text(event["message"]) if event.get("logentry"): event["logentry"] = scrub_value(event["logentry"]) for ex in (event.get("exception") or {}).get("values") or []: if ex.get("value"): ex["value"] = scrub_text(ex["value"]) for field in ("extra", "contexts", "tags"): if event.get(field): event[field] = scrub_value(event[field]) crumbs = event.get("breadcrumbs") if isinstance(crumbs, dict) and crumbs.get("values"): crumbs["values"] = [scrub_value(b) for b in crumbs["values"]] return eventsentry_sdk.init( dsn=os.environ.get("BELVADOR_DSN", "https://<public-key>@ingest.belvador.dev/<project-id>"), release=os.environ.get("APP_VERSION"), environment=os.environ.get("APP_ENV", "production"), send_default_pii=False, traces_sample_rate=0, max_breadcrumbs=50, max_value_length=8192, before_send=scrub_event,)Khởi tạo trước khi import web framework để tích hợp của framework cũng được gắn. Hướng dẫn Python giải thích từng tuỳ chọn.
Cách cài này là gì#
Đây là cách cài tương thích, không phải gói của Belvador. Test của Belvador chạy scrub_event trên dữ liệu độc hại, nhưng Belvador không chứng nhận sentry-sdk hay các tích hợp framework của nó. Node của bạn lọc lần nữa trước khi lưu (bảo vệ dữ liệu).
Job định kỳ#
from sentry_sdk.crons import monitor@monitor(monitor_slug="nightly-invoices", monitor_config={"schedule": {"type": "crontab", "value": "0 2 * * *"}, "timezone": "UTC"})def nightly_invoices(): ... # your jobCelery beat, script cron và management command báo được theo cùng cách (theo dõi cron).
Trace và log#
Dùng OpenTelemetry Python SDK hoặc instrumentation không cần sửa code, với OTLP exporter chuẩn (OpenTelemetry cho Python).
Đã kiểm ngày 2026-10-25 với python 3.12.15, opentelemetry-distro 0.66b1, opentelemetry-sdk 1.45.1, flask 3.1.3: traces đạt, logs đạt, log mang trace/span của request.
Giới hạn#
Phiên bản Python được hỗ trợ theo bản
sentry-sdkhiện hành.Không có profiling; trace và log được giữ để debug trong thời gian có hạn.
Câu hỏi thường gặp#
Tích hợp Django, Flask và FastAPI có chạy không?#
Chúng là một phần của sentry-sdk và gửi qua cùng DSN. Belvador không chứng nhận từng tích hợp; hook lọc chạy trên mọi event chúng tạo ra.
Thử trên project Hetzner của bạn
Miễn phí trong giai đoạn beta. Hetzner tính tiền máy; Belvador không bao giờ tính tiền theo event.