@cryptotaxi247 / netdata-1 / commits / dc11fb894

better journal logging (#16101)

Costa Tsaousis committed Oct 3, 2023 at 12:42 UTC dc11fb8944679e1659225b2cbfcc6bb43f0e2848
1 file changed +35 -16
collectors/systemd-journal.plugin/systemd-journal.c
+35 -16
@@ -248,6 +248,22 @@ struct journal_file {
248 usec_t max_journal_vs_realtime_delta_ut;
249 };
250
251 +static void log_fqs(FUNCTION_QUERY_STATUS *fqs, const char *msg) {
252 + netdata_log_error("ERROR: %s, on query "
253 + "timeframe [%"PRIu64" - %"PRIu64"], "
254 + "anchor [%"PRIu64" - %"PRIu64"], "
255 + "if_modified_since %"PRIu64", "
256 + "data_only:%s, delta:%s, tail:%s, direction:%s"
257 + , msg
258 + , fqs->after_ut, fqs->before_ut
259 + , fqs->anchor.start_ut, fqs->anchor.stop_ut
260 + , fqs->if_modified_since
261 + , fqs->data_only ? "true" : "false"
262 + , fqs->delta ? "true" : "false"
263 + , fqs->tail ? "tail" : "false"
264 + , fqs->direction == FACETS_ANCHOR_DIRECTION_FORWARD ? "forward" : "backward");
265 +}
266 +
267 static inline bool netdata_systemd_journal_seek_to(sd_journal *j, usec_t timestamp) {
268 if(sd_journal_seek_realtime_usec(j, timestamp) < 0) {
269 netdata_log_error("SYSTEMD-JOURNAL: Failed to seek to %" PRIu64, timestamp);
@@ -353,7 +369,7 @@ ND_SD_JOURNAL_STATUS netdata_systemd_journal_query_backward(
369
370 usec_t anchor_delta = __atomic_load_n(&jf->max_journal_vs_realtime_delta_ut, __ATOMIC_RELAXED);
371
356 - usec_t start_ut = ((fqs->data_only && fqs->anchor.start_ut) ? fqs->anchor.start_ut : fqs->before_ut + USEC_PER_SEC - 1) + anchor_delta;
372 + usec_t start_ut = ((fqs->data_only && fqs->anchor.start_ut) ? fqs->anchor.start_ut : fqs->before_ut) + anchor_delta;
373 usec_t stop_ut = (fqs->data_only && fqs->anchor.stop_ut) ? fqs->anchor.stop_ut : fqs->after_ut;
374
375 if(!netdata_systemd_journal_seek_to(j, start_ut))
@@ -427,7 +443,7 @@ ND_SD_JOURNAL_STATUS netdata_systemd_journal_query_forward(
443 usec_t anchor_delta = __atomic_load_n(&jf->max_journal_vs_realtime_delta_ut, __ATOMIC_RELAXED);
444
445 usec_t start_ut = (fqs->data_only && fqs->anchor.start_ut) ? fqs->anchor.start_ut : fqs->after_ut;
430 - usec_t stop_ut = ((fqs->data_only && fqs->anchor.stop_ut) ? fqs->anchor.stop_ut : fqs->before_ut + USEC_PER_SEC - 1) + anchor_delta;
446 + usec_t stop_ut = ((fqs->data_only && fqs->anchor.stop_ut) ? fqs->anchor.stop_ut : fqs->before_ut) + anchor_delta;
447
448 if(!netdata_systemd_journal_seek_to(j, start_ut))
449 return ND_SD_JOURNAL_FAILED_TO_SEEK;
@@ -570,7 +586,7 @@ static bool netdata_systemd_filtering_by_journal(sd_journal *j, FACETS *facets,
586 }
587
588 if(failures) {
573 - netdata_log_error("failed to setup journal filter, will run the full query.");
589 + log_fqs(fqs, "failed to setup journal filter, will run the full query.");
590 sd_journal_flush_matches(j);
591 return true;
592 }
@@ -2346,7 +2362,7 @@ static void function_systemd_journal(const char *transaction, char *function, in
2362 // set query time-frame, anchors and direction
2363
2364 fqs->after_ut = after_s * USEC_PER_SEC;
2349 - fqs->before_ut = before_s * USEC_PER_SEC;
2365 + fqs->before_ut = (before_s * USEC_PER_SEC) + USEC_PER_SEC - 1;
2366 fqs->if_modified_since = if_modified_since;
2367 fqs->data_only = data_only;
2368 fqs->delta = (fqs->data_only) ? delta : false;
@@ -2358,18 +2374,6 @@ static void function_systemd_journal(const char *transaction, char *function, in
2374 fqs->filters = filters;
2375 fqs->query = (query && *query) ? query : NULL;
2376 fqs->histogram = (chart && *chart) ? chart : NULL;
2361 -
2362 - if(anchor && anchor < fqs->after_ut) {
2363 - netdata_log_error("Received anchor %"PRIu64" is too small for query time-frame [%"PRIu64" - %"PRIu64"]",
2364 - anchor, fqs->after_ut, fqs->before_ut);
2365 - anchor = 0;
2366 - }
2367 - else if(anchor > fqs->before_ut) {
2368 - netdata_log_error("Received anchor %"PRIu64" is too big for query time-frame [%"PRIu64" - %"PRIu64"]",
2369 - anchor, fqs->after_ut, fqs->before_ut);
2370 - anchor = 0;
2371 - }
2372 -
2377 fqs->direction = direction;
2378 fqs->anchor.start_ut = anchor;
2379 fqs->anchor.stop_ut = 0;
@@ -2384,6 +2388,21 @@ static void function_systemd_journal(const char *transaction, char *function, in
2388 fqs->anchor.stop_ut = anchor;
2389 }
2390
2391 + if(anchor && anchor < fqs->after_ut) {
2392 + log_fqs(fqs, "received anchor is too small for query timeframe, ignoring anchor");
2393 + anchor = 0;
2394 + fqs->anchor.start_ut = 0;
2395 + fqs->anchor.stop_ut = 0;
2396 + fqs->direction = direction = FACETS_ANCHOR_DIRECTION_BACKWARD;
2397 + }
2398 + else if(anchor > fqs->before_ut) {
2399 + log_fqs(fqs, "received anchor is too big for query timeframe, ignoring anchor");
2400 + anchor = 0;
2401 + fqs->anchor.start_ut = 0;
2402 + fqs->anchor.stop_ut = 0;
2403 + fqs->direction = direction = FACETS_ANCHOR_DIRECTION_BACKWARD;
2404 + }
2405 +
2406 facets_set_anchor(facets, fqs->anchor.start_ut, fqs->anchor.stop_ut, fqs->direction);
2407
2408 facets_set_additional_options(facets,