我试图使用Datadog在Rails应用程序中配置Faraday跟踪。
我已经建立了Faraday -> Datadog连接:
require 'faraday'
require 'ddtrace'
Datadog.configure do |c|
c.use :faraday
end
Faraday.post("http://httpstat.us/200", {foo: 1, bar: 2}.to_json)
Faraday.get("http://httpstat.us/201?foo=1&bar=2")它运行良好,请求被记录到Datadog。
但是这些日志不包含任何请求参数,但是GET或POST。


对于如何获得记录到Datadog的请求参数/正文,有什么建议吗?
发布于 2021-12-15 18:59:33
因此,在默认情况下,从Faraday发送到Datadog的HTTP请求作为span的一部分的唯一内容是:
span.set_tag(Datadog::Ext::HTTP::URL, env[:url].path)
span.set_tag(Datadog::Ext::HTTP::METHOD, env[:method].to_s.upcase)
span.set_tag(Datadog::Ext::NET::TARGET_HOST, env[:url].host)
span.set_tag(Datadog::Ext::NET::TARGET_PORT, env[:url].port)默认情况下,请求的主体不在span的http部分中设置,只有URL、HTTP方法、主机和端口是。
但是,使用手动仪表,您可以向span添加任何您想要的内容,这样您就可以为Faraday中间件编写一个扩展或猴子补丁,将主体和参数添加到span中:
span.set_tag("http.body", env[:body])
span.set_tag("http.params", env[:params])猴子贴片示例:
require 'faraday'
require 'ddtrace'
require 'ddtrace/contrib/faraday/middleware'
module FaradayExtension
private
def annotate!(span, env, options)
# monkey patch to add body to span
span.set_tag("http.body", env[:body]) unless env[:body].to_s.strip.empty?
span.set_tag("http.query", env[:url].query) if env[:url].query
super
end
end
Datadog::Contrib::Faraday::Middleware.prepend(FaradayExtension)
Datadog.configure do |c|
c.use :faraday
end
Faraday.post("http://httpstat.us/200", {foo: 1, bar: 2}.to_json)
Faraday.get("http://httpstat.us/201?foo=1&bar=2")这在我的测试中起了作用:


注:我是Datadog的员工,但不是在工程团队,只是想要透明!
https://stackoverflow.com/questions/70363446
复制相似问题