#include "dns_random.hh"
#include "ednsoptions.hh"
+#include "misc.hh"
// See https://github.com/open-telemetry/opentelemetry-proto/tree/main/opentelemetry/proto
return data;
}
- static TracesData boilerPlate(std::string&& service, std::string&& req, std::vector<Span>&& spans, const std::vector<KeyValue>& attributes)
+ static TracesData boilerPlate(std::string&& service, std::vector<Span>&& spans, const std::vector<KeyValue>& attributes, std::string& serverID)
{
auto& spanAttrs = spans.at(0).attributes;
- spanAttrs.push_back({"arg", {std::move(req)}});
spanAttrs.insert(spanAttrs.end(), attributes.begin(), attributes.end());
+ auto host = getHostname();
+ std::string hostname = host.value_or("unset");
+ InstrumentationScope scope{
+ .name = "rec", .version = VERSION, .attributes = {{"hostname", {hostname}}, {"server.id", {serverID}}}};
return TracesData{
- .resource_spans = {pdns::trace::ResourceSpans{.resource = {.attributes = {{"service.name", {{std::move(service)}}}}}, .scope_spans = {{.spans = std::move(spans)}}}}};
+ .resource_spans = {pdns::trace::ResourceSpans{.resource = {.attributes = {{"service.name", {{std::move(service)}}}}}, .scope_spans = {{.scope = scope, .spans = std::move(spans)}}}}};
}
};
pbMessage.addEvents(resolver.d_eventTrace);
}
if (resolver.d_eventTrace.enabled() && SyncRes::eventTraceEnabled(SyncRes::event_trace_to_ot)) {
- auto otTrace = pdns::trace::TracesData::boilerPlate("rec", comboWriter->d_mdp.d_qname.toLogString(), resolver.d_eventTrace.convertToOT(resolver.d_otTrace), {{"qtype", {QType(comboWriter->d_mdp.d_qtype).toString()}}});
+ auto otTrace = pdns::trace::TracesData::boilerPlate("rec", resolver.d_eventTrace.convertToOT(resolver.d_otTrace), {
+ {"query.qname", {comboWriter->d_mdp.d_qname.toLogString()}},
+ {"query.qtype", {QType(comboWriter->d_mdp.d_qtype).toString()}},
+ },
+ SyncRes::s_serverID);
string otData = otTrace.encode();
pbMessage.setOpenTelemetryData(otData);
}
pbMessage.addEvents(eventTrace);
}
if (eventTrace.enabled() && (SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_ot) != 0) {
- auto trace = pdns::trace::TracesData::boilerPlate("rec", qname.toLogString(), eventTrace.convertToOT(otTrace), {{"qtype", {qtype.toString()}}});
+ auto trace = pdns::trace::TracesData::boilerPlate("rec", eventTrace.convertToOT(otTrace),
+ {{"query.qname", {qname.toLogString()}},
+ {"query.qtype", {qtype.toString()}}},
+ SyncRes::s_serverID);
pbMessage.setOpenTelemetryData(trace.encode());
}
pbMessage.addPolicyTags(policyTags);
s_ecsqueries++;
}
auto match = d_eventTrace.add(RecEventTrace::AuthRequest, qname.toLogString(), true, 0);
- d_eventTrace.addExtraValues(match, {{"qtype", qtype.toString()}, {"ip", remoteIP.toStringWithPortExcept(53)}});
+ d_eventTrace.addExtraValues(match, {{"query.qtype", qtype.toString()}, {"auth.address", remoteIP.toStringWithPortExcept(53)}});
updateQueryCounts(prefix, qname, remoteIP, doTCP, doDoT);
resolveret = asyncresolveWrapper(LogObject(prefix), remoteIP, d_doDNSSEC, qname, auth, qtype.getCode(),
doTCP, sendRDQuery, &d_now, ednsmask, &lwr, &chained, nsName); // <- we go out on the wire!