Skip to content

Commit 22b7a74

Browse files
authored
Merge pull request #16383 from pieterlexis/dnsdist-OT-per-rule
feat(dnsdist): Add OT trace for each rule
2 parents 88092fa + 47237d5 commit 22b7a74

File tree

2 files changed

+28
-6
lines changed

2 files changed

+28
-6
lines changed

pdns/dnsdistdist/dnsdist.cc

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -466,7 +466,16 @@ bool applyRulesToResponse(const std::vector<dnsdist::rules::ResponseRuleAction>&
466466

467467
DNSResponseAction::Action action = DNSResponseAction::Action::None;
468468
std::string ruleresult;
469+
SpanID parentSpanID;
470+
if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
471+
parentSpanID = tracer->getLastSpanID();
472+
}
473+
469474
for (const auto& rrule : respRuleActions) {
475+
pdns::trace::dnsdist::Tracer::Closer ruleCloser;
476+
if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
477+
ruleCloser = tracer->openSpan("Rule: " + rrule.d_name, parentSpanID);
478+
}
470479
if (rrule.d_rule->matches(&dnsResponse)) {
471480
++rrule.d_rule->d_matches;
472481
action = (*rrule.d_action)(&dnsResponse, &ruleresult);
@@ -522,7 +531,7 @@ bool processResponseAfterRules(PacketBuffer& response, DNSResponse& dnsResponse,
522531
{
523532
pdns::trace::dnsdist::Tracer::Closer closer;
524533
if (auto tracer = dnsResponse.ids.getTracer(); tracer != nullptr && dnsResponse.ids.tracingEnabled) {
525-
closer = tracer->openSpan("processResponseAfterRules", tracer->getLastSpanID());
534+
closer = tracer->openSpan("processResponseAfterRules", tracer->getLastSpanIDForName("processResponse"));
526535
}
527536
bool zeroScope = false;
528537
if (!fixUpResponse(response, dnsResponse.ids.qname, dnsResponse.ids.origFlags, dnsResponse.ids.ednsAdded, dnsResponse.ids.ecsAdded, dnsResponse.ids.useZeroScope ? &zeroScope : nullptr)) {
@@ -1031,11 +1040,21 @@ static bool applyRulesChainToQuery(const std::vector<dnsdist::rules::RuleAction>
10311040
string ruleresult;
10321041
bool drop = false;
10331042

1043+
SpanID parentSpanID;
1044+
if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
1045+
parentSpanID = tracer->getLastSpanID();
1046+
}
1047+
10341048
for (const auto& rule : rules) {
10351049
if (!rule.d_rule->matches(&dnsQuestion)) {
10361050
continue;
10371051
}
10381052

1053+
pdns::trace::dnsdist::Tracer::Closer ruleCloser;
1054+
if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr) {
1055+
ruleCloser = tracer->openSpan("Rule: " + rule.d_name, parentSpanID);
1056+
}
1057+
10391058
rule.d_rule->d_matches++;
10401059
action = (*rule.d_action)(&dnsQuestion, &ruleresult);
10411060
if (processRulesResult(action, dnsQuestion, ruleresult, drop)) {
@@ -1461,7 +1480,8 @@ static ServerPolicy::SelectedBackend selectBackendForOutgoingQuery(DNSQuestion&
14611480
{
14621481
pdns::trace::dnsdist::Tracer::Closer closer;
14631482
if (auto tracer = dnsQuestion.ids.getTracer(); tracer != nullptr && dnsQuestion.ids.tracingEnabled) {
1464-
closer = tracer->openSpan("selectBackendForOutgoingQuery", tracer->getLastSpanID());
1483+
// Not exactly processQuery, but it works for now
1484+
closer = tracer->openSpan("selectBackendForOutgoingQuery", tracer->getLastSpanIDForName("processQuery"));
14651485
}
14661486

14671487
const auto& policy = serverPool.policy != nullptr ? *serverPool.policy : *dnsdist::configuration::getCurrentRuntimeConfiguration().d_lbPolicy;

regression-tests.dnsdist/test_OpenTelemetryTracing.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -117,9 +117,11 @@ def doTest(self, wasDelayed=False, useTCP=False):
117117
funcs = {
118118
"processQuery",
119119
"applyRulesToQuery",
120+
"Rule: Enable tracing",
120121
"selectBackendForOutgoingQuery",
121122
"processResponse",
122123
"applyRulesToResponse",
124+
"Rule: Do PB logging",
123125
}
124126

125127
if useTCP:
@@ -195,8 +197,8 @@ class TestOpenTelemetryTracingBaseLua(DNSDistOpenTelemetryProtobufBaseTest):
195197
rl = newRemoteLogger('127.0.0.1:%d')
196198
setOpenTelemetryTracing(true)
197199
198-
addAction(AllRule(), SetTraceAction(true))
199-
addResponseAction(AllRule(), RemoteLogResponseAction(rl))
200+
addAction(AllRule(), SetTraceAction(true), {name="Enable tracing"})
201+
addResponseAction(AllRule(), RemoteLogResponseAction(rl), {name="Do PB logging"})
200202
"""
201203

202204
def testBasic(self):
@@ -260,8 +262,8 @@ class TestOpenTelemetryTracingBaseDelayLua(DNSDistOpenTelemetryProtobufBaseTest)
260262
rl = newRemoteLogger('127.0.0.1:%d')
261263
setOpenTelemetryTracing(true)
262264
263-
addAction(AllRule(), SetTraceAction(true))
264-
addResponseAction(AllRule(), RemoteLogResponseAction(rl, nil, false, {}, {}, true))
265+
addAction(AllRule(), SetTraceAction(true), {name="Enable tracing"})
266+
addResponseAction(AllRule(), RemoteLogResponseAction(rl, nil, false, {}, {}, true), {name="Do PB logging"})
265267
"""
266268

267269
def testBasic(self):

0 commit comments

Comments
 (0)