mirror of
https://dev.iopsys.eu/feed/iopsys.git
synced 2025-12-10 07:44:50 +01:00
Merge branch 'hmehdi_fluentbit_devel' into 'devel'
fluent-bit: avoid re-reading kmsg lines on every reload See merge request feed/iopsys!1982
This commit is contained in:
commit
00309039ad
1 changed files with 103 additions and 0 deletions
103
fluent-bit/patches/0030-kmsg_avoid_reread.patch
Normal file
103
fluent-bit/patches/0030-kmsg_avoid_reread.patch
Normal file
|
|
@ -0,0 +1,103 @@
|
||||||
|
diff --git a/plugins/in_kmsg/in_kmsg.c b/plugins/in_kmsg/in_kmsg.c
|
||||||
|
index 15f10545..481d162b 100644
|
||||||
|
--- a/plugins/in_kmsg/in_kmsg.c
|
||||||
|
+++ b/plugins/in_kmsg/in_kmsg.c
|
||||||
|
@@ -104,6 +104,32 @@ static int boot_time(struct timeval *boot_time)
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void load_last_sequence(struct flb_in_kmsg_config *ctx)
|
||||||
|
+{
|
||||||
|
+ FILE *f = fopen(FLB_KMSG_SEQ_MARKER, "r");
|
||||||
|
+ if (!f) {
|
||||||
|
+ ctx->last_sequence = 0;
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (fscanf(f, "%llu", &ctx->last_sequence) != 1) {
|
||||||
|
+ ctx->last_sequence = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fclose(f);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void save_last_sequence(struct flb_in_kmsg_config *ctx)
|
||||||
|
+{
|
||||||
|
+ FILE *f = fopen(FLB_KMSG_SEQ_MARKER, "w");
|
||||||
|
+ if (!f) {
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fprintf(f, "%llu\n", (unsigned long long)ctx->last_sequence);
|
||||||
|
+ fclose(f);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static inline int process_line(const char *line,
|
||||||
|
struct flb_input_instance *i_ins,
|
||||||
|
struct flb_in_kmsg_config *ctx)
|
||||||
|
@@ -161,6 +187,11 @@ static inline int process_line(const char *line,
|
||||||
|
}
|
||||||
|
|
||||||
|
sequence = val;
|
||||||
|
+ /* skip lines we have already seen */
|
||||||
|
+ if (sequence <= ctx->last_sequence) {
|
||||||
|
+ return 0; /* skip old message */
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
p = ++end;
|
||||||
|
|
||||||
|
/* Timestamp */
|
||||||
|
@@ -225,6 +256,7 @@ static inline int process_line(const char *line,
|
||||||
|
ctx->log_encoder.output_buffer,
|
||||||
|
ctx->log_encoder.output_length);
|
||||||
|
|
||||||
|
+ ctx->last_sequence = sequence;
|
||||||
|
ret = 0;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
@@ -363,6 +395,10 @@ static int in_kmsg_init(struct flb_input_instance *ins,
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ load_last_sequence(ctx);
|
||||||
|
+ flb_plg_debug(ctx->ins, "restored last_sequence=%llu",
|
||||||
|
+ (unsigned long long)ctx->last_sequence);
|
||||||
|
+
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -373,6 +409,12 @@ static int in_kmsg_exit(void *data, struct flb_config *config)
|
||||||
|
|
||||||
|
flb_log_event_encoder_destroy(&ctx->log_encoder);
|
||||||
|
|
||||||
|
+ /*
|
||||||
|
+ * save the last read sequence number in a file,
|
||||||
|
+ * so that we know where to start next time
|
||||||
|
+ */
|
||||||
|
+ save_last_sequence(ctx);
|
||||||
|
+
|
||||||
|
if (ctx->fd >= 0) {
|
||||||
|
close(ctx->fd);
|
||||||
|
}
|
||||||
|
diff --git a/plugins/in_kmsg/in_kmsg.h b/plugins/in_kmsg/in_kmsg.h
|
||||||
|
index 0ea2e97a..4b9d98fd 100644
|
||||||
|
--- a/plugins/in_kmsg/in_kmsg.h
|
||||||
|
+++ b/plugins/in_kmsg/in_kmsg.h
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
#define FLB_KMSG_DEV "/dev/kmsg"
|
||||||
|
+#define FLB_KMSG_SEQ_MARKER "/tmp/fluent_bit_kmsg_last_seq"
|
||||||
|
#define FLB_KMSG_BUF_SIZE 4096
|
||||||
|
|
||||||
|
/* Alert levels, taken from util-linux sources */
|
||||||
|
@@ -60,6 +61,9 @@ struct flb_in_kmsg_config {
|
||||||
|
size_t buf_size;
|
||||||
|
struct flb_log_event_encoder log_encoder;
|
||||||
|
struct flb_input_instance *ins;
|
||||||
|
+
|
||||||
|
+ uint64_t last_sequence; /* last saved sequence */
|
||||||
|
+ const char *seq_file; /* path to seq file */
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
Loading…
Add table
Reference in a new issue