gpt4 book ai didi

python - Statsd - 跨堆栈跟踪时间

转载 作者:行者123 更新时间:2023-11-28 18:44:54 25 4
gpt4 key购买 nike

我正在使用 statsd(准确地说是 django-statsd 库)来跟踪我的应用程序的计时指标。当我需要跨堆栈的多个级别测试某些内容时,就会出现问题。一个典型的例子:创建一个对象,从该对象调用 post_save 方法,然后从那里触发 celery 任务,随后触发另一个 celery 任务调用 twilio 向用户发送文本消息,最终点击在我的服务器上建立一个端点,让我知道文本已成功发送。

我很想跟踪这一切的总时间,而不必诉诸手动拼凑每个函数的时间(无论如何,这会损失调用之间的延迟时间)。我还想避免将“开始时间”写入数据库以在调用堆栈行程结束时引用,因为开始时间的数据库查找时间也会扭曲我的指标。但是,对某种缓存的调用可能延迟很低,可以忽略不计。但这需要的基础设施比我希望在此原型(prototype)阶段需要的要多一些。

关于最佳方法有什么想法吗?

最佳答案

I'd also like to avoid writing "start times" to a database to refer to at the end of the call-stack trip, as the database lookup time for a start time would also distort my metrics. However, a call to some sort of cache might be low latency enough to be negligible.

Statsd 是正确的选择,因为它默认为 UDP,使其成为一种开销很小的即发即弃机制。此外,由于 UDP 是异步的,因此抛出数据包的函数不会等待 ACK 并立即继续。

Any ideas on the best approach for this?

而且您也可以分析延迟,尽管这需要一些额外的工作。如果您不希望将额外的变量从函数传递到函数到模块,那么您必须根据控制流的语义“处理”原始数据。

a(){
statsd(a.begin_time)
...
statsd(a.end_time)
}
.........................
.......LATENCY SEA.......
.........................

b(){
statsd(b.begin_time)
...
statsd(b.end_time)
}

.........................
.......LATENCY SEA.......
.........................

c(){
statsd(c.begin_time)
...
statsd(c.end_time)
}

因为在控制流程中“B 在 A 之后”-

latency(a,b) = b.begin_time - a.end_time 

关于python - Statsd - 跨堆栈跟踪时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21714881/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com