sentry-sdk 使用
一、代码
import os
import random
import logging
import sentry_sdk
from sentry_sdk.tracing import Transaction
from sentry_sdk.integrations.logging import LoggingIntegration
from sentry_sdk.integrations.threading import ThreadingIntegration
from sentry_sdk.integrations.argv import ArgvIntegration
from sentry_sdk.integrations.excepthook import ExcepthookIntegration
from sentry_sdk.integrations.dedupe import DedupeIntegration
from sentry_sdk.integrations.atexit import AtexitIntegration
sentry_logging = LoggingIntegration(
level=logging.INFO, # Capture info and above as breadcrumbs
event_level=logging.ERROR, # Send errors as events
)
# 初始化操作===================================================================================
sentry_sdk_url = "http://758ff93e86034309877973d6fea02272@localhost:9000/2"
sentry_sdk.init(
dsn=sentry_sdk_url,
environment='dev',
integrations=[
AtexitIntegration(),
DedupeIntegration(),
ExcepthookIntegration(),
# ModulesIntegration(),
# StdlibIntegration(),
ThreadingIntegration(),
ArgvIntegration(),
sentry_logging,
],
# default_integrations=False,
# auto_enabling_integrations=False,
traces_sample_rate=1.0,
# #
# # 个人身份信息
# send_default_pii=True,
# release='1.1.0',
)
def get_trace_headers(name: str = None) -> dict:
t = sentry_sdk.Hub.current.scope.transaction
if not t:
t = sentry_sdk.start_transaction()
t.name = "workers-pipeline" if not name else name
t.sampled = True
# log.debug(f"Start new sentry trace transaction.")
print("Start new sentry trace transaction.")
headers = dict(sentry_sdk.Hub.current.iter_trace_propagation_headers(t))
# log.debug(f"Sentry-trace: {headers}")
print(f"Sentry-trace: {headers}")
return headers
def set_trace_scope_tags(**kwargs):
"""设置追踪标签"""
if kwargs:
# noinspection PyBroadException
try:
nsrsbh = kwargs.get("nsrsbh", "")
nsrmc = kwargs.get("nsrmc", "")
if not nsrmc:
nsrmc = nsrsbh
with sentry_sdk.configure_scope() as scope:
scope.set_user({"id": nsrsbh, "username": nsrmc})
for k, v in kwargs.items():
scope.set_tag(k, v)
sentry_sdk.set_tag(k, v)
except Exception: # pylint: disable=broad-except
return
# 1、生成跟踪对象=================================================================================================
trace = get_trace_headers()
transaction = Transaction.continue_from_headers(trace)
trace_id = transaction.trace_id
task_id = random.randint(10000, 99999)
print(task_id)
print(trace_id)
# 2、设置全局参数===========================================================================================
d = {
"version": "1.0.0",
"name": "start pipe",
"host_ip": "localhost",
"port": "8000",
"pid": os.getpid(),
"task_id": task_id,
"trace_id": trace_id,
}
set_trace_scope_tags(**d)
# 3、开始收集
with sentry_sdk.start_transaction(transaction) as t:
t.name = "start task"
t.op = "start workers"
t.description = "start"
t.sampled = True
t.set_tag("task_id", task_id)
t.set_tag("trace_id", trace_id)
try:
# 任务
print(1)
except:
t.set_status("failure")
t.set_status("ok")
# 子记录 child============================================================================
trace_headers = dict(sentry_sdk.Hub.current.iter_trace_propagation_headers(transaction))
transaction = Transaction.continue_from_headers(trace_headers)
with sentry_sdk.start_transaction(transaction) as t:
t.name = "run task"
t.op = "run workers"
t.description = "run"
t.sampled = True
t.set_tag("task_id", task_id)
t.set_tag("trace_id", trace_id)
t.set_status("failure")
t.set_status("ok")
# 第二个记录 和 第一个记录平行关系,只需要绑定 trace_id====================================================================
with sentry_sdk.start_transaction(name="task parallel", op="parallel workers", trace_id=trace_id, sampled=True) as t:
t.name = "task parallel"
t.op = "workers"
t.set_tag("task_id", task_id)
try:
print(1) # 任务
except:
t.set_status("failure")
t.set_status("ok")
# 子记录2=================================================
trace_headers = dict(sentry_sdk.Hub.current.iter_trace_propagation_headers(t))
transaction = Transaction.continue_from_headers(trace_headers)
with sentry_sdk.start_transaction(transaction) as child_t:
child_t.name = "task child parallel"
child_t.op = "child workers"
child_t.set_tag("task_id", task_id)
try:
print(1)
with child_t.start_child(op="child", description="child1") as c:
c.set_tag("task_id", task_id)
with c.start_child(op="child-child", description="child2") as cc:
cc.set_tag("task_id", task_id)
except:
child_t.set_status("failure")
child_t.set_status("ok")
二、结果


sentry-sdk 使用的更多相关文章
- Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)
内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...
- Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
- Sentry 开发者贡献指南 - SDK 开发(性能监控)
内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...
- Sentry 开发者贡献指南 - SDK 开发(事件负载)
内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...
- 【转】Sentry介绍
Sentry 是一个开源的实时错误报告工具,支持 web 前后端.移动应用以及游戏,支持 Python.OC.Java.Go.Node.Django.RoR 等主流编程语言和框架 ,还提供了 GitH ...
- Sentry有什么作用
Sentry是一个异常日志集中收集系统,它可以捕捉到 stack trace, stack locals, preceding events和引发该异常的commit号.而当bug fix后,sent ...
- 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题
背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...
- Sentry错误日志监控你会用了吗?
无论作为新手还是老手程序员在程序的开发过程中,代码运行时难免会抛出异常,而且项目在部署到测试.生产环境后,我们便不可能像在开发时那样容易的及时发现处理错误了.一般我们都是在错误发生一段时间后,错误信息 ...
- Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之管理 Transactions
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
- Sentry(v20.12.1) K8S 云原生架构探索,JavaScript Enriching Events(丰富事件信息)
系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...
随机推荐
- PhaApi NOTORM 实现分表分库
通过自增ID取模要分表的数量,便可得到表名.例如log表分成100张表:log_1,log2...,log100. 每次数据库CURD都先通过获取ID分配到相对应的表,例如:id=66,取模后的结果是 ...
- vivo 云原生容器探索和落地实践
作者:vivo 互联网容器团队- Pan Liangbiao 本文根据潘良彪老师在"2022 vivo开发者大会"现场演讲内容整理而成.公众号回复[2022 VDC]获取互联网技术 ...
- Kagol:2022年最值得推荐的前端开源文章
大家好,我是 Kagol,Vue DevUI 作者,从2020年开始一直专注于前端开源组件库的建设,在前端开源组件库.开源社区运营方面积累了一些经验,2020年主要的创作也是围绕前端组件库和开源两个主 ...
- asp+vb.net解决调接口返回中文乱码问题
1.问题描述 涉及语言:vb,vbscript,vb.net,asp 最近在工作中碰到了这样一个问题:需要调用一个接口解析简历文件中的关键信息.直接用postman测试该接口,接口返回值没问题,但一旦 ...
- JUC并发编程详解(通俗易懂)
一.JUC简介 在Java5.0提供了java.util.concurrent包,简称JUC,即Java并发编程工具包.JUC更好的支持高并发任务. 具体的有以下三个包: java.util.conc ...
- ubunut安装qtcreater
安装gcc 1 kxb@kxb:~$ gcc -v 2 3 Command 'gcc' not found, but can be installed with: 4 5 sudo apt insta ...
- python进阶之路12之有参装饰器、多层语法糖、递归函数简介
多层语法糖 def outter1(func1): print('加载了outter1') def wrapper1(*args, **kwargs): print('执行了wrapper1') re ...
- 【力扣】nSum问题模板
nSum问题模板 两数之和.三数之和.四数之和. private List<List<Integer>> nSum(int[] nums, long target, int s ...
- Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明
Java集合 Map 集合 与 操作集合的工具类: Collections 的详细说明 每博一文案 别把人生,输给心情 师父说:心情不是人生的全部,却能左右人生的全部. 你有没有体会到,当你心情好的时 ...
- Backbone前端框架解读
作者: 京东零售 陈震 一. 什么是Backbone 在前端的发展道路中,前端框架元老之一jQuery对繁琐的DOM操作进行了封装,提供了链式调用.各类选择器,屏蔽了不同浏览器写法的差异性,但是前端开 ...