一、代码

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 使用的更多相关文章

  1. Sentry 开发者贡献指南 - SDK 开发(性能监控:Sentry SDK API 演进)

    内容整理自官方开发文档 本文档的目标是将 Sentry SDK 中性能监控功能的演变置于上下文中. 我们首先总结了如何将性能监控添加到 Sentry 和 SDK, 然后我们讨论 identified ...

  2. Sentry(v20.12.1) K8S 云原生架构探索,SENTRY FOR JAVASCRIPT SDK 配置详解

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  3. Sentry 开发者贡献指南 - SDK 开发(性能监控)

    内容整理于官方开发文档 系列 Docker Compose 部署与故障排除详解 K8S + Helm 一键微服务部署 Sentry 开发者贡献指南 - 前端(ReactJS生态) Sentry 开发者 ...

  4. Sentry 开发者贡献指南 - SDK 开发(事件负载)

    内容整理自官方开发文档 系列 Docker Compose 部署与故障排除详解 1 分钟快速使用 Docker 上手最新版 Sentry-CLI - 创建版本 快速使用 Docker 上手 Sentr ...

  5. 【转】Sentry介绍

    Sentry 是一个开源的实时错误报告工具,支持 web 前后端.移动应用以及游戏,支持 Python.OC.Java.Go.Node.Django.RoR 等主流编程语言和框架 ,还提供了 GitH ...

  6. Sentry有什么作用

    Sentry是一个异常日志集中收集系统,它可以捕捉到 stack trace, stack locals, preceding events和引发该异常的commit号.而当bug fix后,sent ...

  7. 基于sentry的前端错误监控日志系统(部署sentry服务器/前端项目部署)-让前端最快的定位到生产问题

    背景 在这越来越发达的网络时代,web应用也是越来越复杂,尤其是前端的开发,也是越来越受重视. 所以在我们前端开发完成后,会有一些列的web应用的上线验证,如自测.QA测试.code review 等 ...

  8. Sentry错误日志监控你会用了吗?

    无论作为新手还是老手程序员在程序的开发过程中,代码运行时难免会抛出异常,而且项目在部署到测试.生产环境后,我们便不可能像在开发时那样容易的及时发现处理错误了.一般我们都是在错误发生一段时间后,错误信息 ...

  9. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript 性能监控之管理 Transactions

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

  10. Sentry(v20.12.1) K8S 云原生架构探索,JavaScript Enriching Events(丰富事件信息)

    系列 Sentry-Go SDK 中文实践指南 一起来刷 Sentry For Go 官方文档之 Enriching Events Snuba:Sentry 新的搜索基础设施(基于 ClickHous ...

随机推荐

  1. 同步异步、mutiprocessing创建进程process模块及进程对象的多种方法、消息队列Queue

    目录 同步异步 阻塞与非阻塞 综合使用 创建进程的多种方式之multiprocess.process模块 进程间数据隔离 进程的join方法 IPC机制 生产者 消费者模型 进程对象的多种方法 守护进 ...

  2. PowerDotNet平台化软件架构设计与实现系列(14):平台建设指南

    软件开发中常见的几种不同服务模型包括SaaS(软件即服务).LaaS(许可即服务).PaaS(平台即服务).CaaS(容器即服务).IaaS(基础设施即服务)和FaaS(功能即服务). 很多人认为Ia ...

  3. 使用JsonConverter处理上传文件的路径

    场景 我们上传一个文件,把文件保存到服务器上,会有一个明确的物理路径,由于需要从前端访问这个文件,还需要web服务器中的一个虚拟路径.这个虚拟路径的存储会有一个问题,我们应该在数据库里存什么?是带域名 ...

  4. CVE-2022-26923 Windows域提权漏洞

    前言 Active Directory 域服务,是一种目录服务,提供了存储目录数据信息以及用户相关的一些密码,电话号码等等一些数据信息,且可让用户和管理员使用这些数据,有利于域管理员对用户的数据信息进 ...

  5. [OpenCV实战]3 透明斗篷

    目录 1寻找和存储背景帧 2红色区域检测 3提取红色区域 4背景帧红布区域替换当前帧红布区域. 5工程代码 参考 弄出哈利波特电影里一样效果的透明斗篷.也就是一个视频里,将红布弄成透明.类似下面的效果 ...

  6. css预处理器scss/sass语法以及使用

    scss scss在css基础语法上面增加了变量 (variables).嵌套 (nested rules).混合 (mixins).导入 (inline imports) 等高级功能,使用scss可 ...

  7. AcWing第85场周赛

    这场周赛是手速局hh 死或生 某国正在以投票的方式决定 2 名死刑犯(编号 1∼2)的生死. 共有 n 组人员(编号 1∼n)参与投票,每组 10 人. 每组成员只参与一名死刑犯的投票,其中第 i 组 ...

  8. IDEA 2022.1.3 配置 Tomcat 模板

    本地运行 Tomcat 首先,下载得到 Tomcat 压缩包 选择合适的位置解压,路径不要有中文和空格 结构如下所示 目录结构说明: bin 可执行文件目录 conf 配置文件目录 lib 存放lib ...

  9. python3.10调用邮件SMTP报错: ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake failure (_ssl.c:997)解决

    一: python3.10调用邮件SMTP报错: ssl.SSLError: [SSL: SSLV3_ALERT_HANDSHAKE_FAILURE] sslv3 alert handshake fa ...

  10. angular引入http服务创建服务注入