pbMessage.setNewlyObservedDomain(false);
}
#endif
- if (eventTrace.enabled()) {
+ if (eventTrace.enabled() && SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_pb) {
pbMessage.addEvents(eventTrace);
}
protobufLogResponse(pbMessage);
}
}
#endif /* NOD_ENABLED */
- if (sr.d_eventTrace.enabled()) {
+ if (SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_pb) {
pbMessage.addEvents(sr.d_eventTrace);
}
if (dc->d_logResponse) {
}
}
- if (sr.d_eventTrace.enabled()) {
+ if (sr.d_eventTrace.enabled() && SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_log) {
g_log << Logger::Info << sr.d_eventTrace.toString() << endl;
}
bool logQuery = false;
bool qnameParsed = false;
- dc->d_eventTrace.setEnabled(true);
+ dc->d_eventTrace.setEnabled(SyncRes::s_event_trace_enabled);
dc->d_eventTrace.add(RecEventTrace::RecRecv);
auto luaconfsLocal = g_luaconfs.getLocal();
if (checkProtobufExport(luaconfsLocal)) {
protobufLogResponse(dh, luaconfsLocal, pbData, tv, true, dc->d_source, dc->d_destination, dc->d_ednssubnet, dc->d_uuid, dc->d_requestorId, dc->d_deviceId, dc->d_deviceName, dc->d_meta, dc->d_eventTrace);
}
- if (dc->d_eventTrace.enabled()) {
+ if (dc->d_eventTrace.enabled() && SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_log) {
g_log << Logger::Info << dc->d_eventTrace.toString() << endl;
}
} else {
protobufLogResponse(dh, luaconfsLocal, pbData, tv, false, source, destination, ednssubnet, uniqueId, requestorId, deviceId, deviceName, meta, eventTrace);
}
- if (eventTrace.enabled()) {
+ if (eventTrace.enabled() && SyncRes::s_event_trace_enabled & SyncRes::event_trace_to_log) {
g_log << Logger::Info << eventTrace.toString() << endl;
}
if (sendErr && g_logCommonErrors) {
if((len=recvmsg(fd, &msgh, 0)) >= 0) {
eventTrace.clear();
- eventTrace.setEnabled(true);
+ eventTrace.setEnabled(SyncRes::s_event_trace_enabled);
eventTrace.add(RecEventTrace::RecRecv);
firstQuery = false;
SyncRes::s_tcp_fast_open_connect = ::arg().mustDo("tcp-fast-open-connect");
SyncRes::s_dot_to_port_853 = ::arg().mustDo("dot-to-port-853");
+ SyncRes::s_event_trace_enabled = ::arg().asNum("event-trace-enabled");
if (SyncRes::s_tcp_fast_open_connect) {
checkFastOpenSysctl(true);
::arg().setSwitch("dot-to-port-853", "Force DoT connection to target port 853 if DoT compiled in")="yes";
::arg().set("dot-to-auth-names", "Use DoT to authoritative servers with these names or suffixes")="";
+ ::arg().set("event-trace-enabled", "If set, event traces are collected and send out via protobuf logging (1), logfile (2) or both(3)")="0";
::arg().set("tcp-out-max-idle-ms", "Time TCP/DoT connections are left idle in milliseconds or 0 if no limit") = "10000";
::arg().set("tcp-out-max-idle-per-auth", "Maximum number of idle TCP/DoT connections to a specific IP per thread, 0 means do not keep idle connections open") = "10";
return ret + "\n";
}
+template <typename T>
+static string setEventTracing(T begin, T end)
+{
+ if (begin == end) {
+ return "No event trace enabled value specified\n";
+ }
+ try {
+ SyncRes::s_event_trace_enabled = pdns_stou(*begin);
+ return "New event trace enabled value: " + std::to_string(SyncRes::s_event_trace_enabled) + "\n";
+ }
+ catch (const std::exception& e) {
+ return "Error parsing the new event trace enabled value: " + std::string(e.what()) + "\n";
+ }
+}
RecursorControlChannel::Answer RecursorControlParser::getAnswer(int s, const string& question, RecursorControlParser::func_t** command)
{
"set-minimum-ttl value set minimum-ttl-override\n"
"set-carbon-server set a carbon server for telemetry\n"
"set-dnssec-log-bogus SETTING enable (SETTING=yes) or disable (SETTING=no) logging of DNSSEC validation failures\n"
+"set-event-trace-enabled SETTING set logging of event trace messages, 0 = disabled, 1 = prottobuf, 2 = log file, 3 = both\n"
"trace-regex [regex] emit resolution trace for matching queries (empty regex to clear trace)\n"
"top-largeanswer-remotes show top remotes receiving large answers\n"
"top-queries show top queries\n"
if (cmd == "clear-dont-throttle-netmasks") {
return {0, clearDontThrottleNetmasks(begin, end)};
}
+ if (cmd == "set-event-trace-enabled") {
+ return {0, setEventTracing(begin, end)};
+ }
return {1, "Unknown command '"+cmd+"', try 'help'\n"};
}