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,