一、代码

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. (已转)Linux基础第六章 信号

    6.1 前言 本章简单描述信号.信号是Linux系统中,内核和进程通信的一种方式.如果内核希望打断进程的顺序执行,那么内核会在进程的PCB中记录信号.而当这个进程被分配到CPU,进入执行状态时,首先会 ...

  2. 【转载】SQL SERVER2008 修改数据库名相关的脚本

    -- 修改数据库名 -- 1.首先查找数据库是否占用,杀掉占用的id select spid from master.dbo.sysprocesses where dbid=db_id('ClothC ...

  3. [机器学习] Yellowbrick使用笔记6-分类可视化

    分类模型试图在一个离散的空间中预测一个目标,即为一个因变量实例分配一个或多个类别. 代码下载 分类分数可视化工具显示类之间的差异以及一些特定于分类器的可视化评估.我们目前已经实施了以下分类器评估: 分 ...

  4. [OpenCV实战]27 在OpenCV下使用forEach进行并行像素访问

    目录 1 Mat像素访问 1.1 使用at方法直接进行像素访问 1.2 使用指针进行像素访问 1.3 使用forEach方法进行像素访问 1.4 将forEach与C ++ 11 Lambda一起使用 ...

  5. 如何用 30s 给面试官讲清楚什么是 Session-Cookie 认证

    引言 由于 HTTP 协议是无状态的,完成操作关闭浏览器后,客户端和服务端的连接就断开了,所以我们必须要有一种机制来保证客户端和服务端之间会话的连续性,也称为认证,最常见的应用场景就是保持用户的登录态 ...

  6. S2-015 CVE-2013-2135, CVE-2013-2134

    漏洞名称 S2-015(CVE-2013-2135, CVE-2013-2134) 利用条件 Struts 2.0.0 - Struts 2.3.14.2 漏洞原理 原理一:一旦配置通配符*,访问 n ...

  7. [Leetcode] 寻找数组的中心索引

    题目 代码 class Solution { public: int pivotIndex(vector<int>& nums) { int right=0; for(auto i ...

  8. 《深度探索C++对象模型》第三章 Data语意学

    首先给出以下例子: class X{}; class Y:public virtual X{}; class Z:public virtual X{}; class A:public Y,public ...

  9. 使用Logstash工具导入sqlserver数据到elasticSearch及elk分布式日志中心

    首先记下这个笔记,Logstash工具导入sqlserver数据到elasticSearch. 因为logstash使用java写的,我本地开发是win11,所以javade jdk必须要安装.具体安 ...

  10. 集合框架-Collection集合

    集合框架 JAVASE提供了满足各种需求的APl,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用.集合按照其存储结构可以分为两大类,分 ...