diff --git a/plugins/out_influxdb/influxdb.c b/plugins/out_influxdb/influxdb.c index 671dd5c16a6..2205ee06096 100644 --- a/plugins/out_influxdb/influxdb.c +++ b/plugins/out_influxdb/influxdb.c @@ -74,6 +74,8 @@ static int influxdb_format(struct flb_config *config, char *str = NULL; size_t str_size; char tmp[128]; + int prefix_match = 0; + int prefix_offset = 0; msgpack_object map; struct flb_time tm; struct influxdb_bulk *bulk = NULL; @@ -124,8 +126,16 @@ static int influxdb_format(struct flb_config *config, ctx->seq++; } + prefix_match = strncmp(tag, ctx->prefix, ctx->prefix_len); + if (prefix_match == 0) { + if (tag_len > ctx->prefix_len) { + prefix_offset = ctx->prefix_len; + } + } + ret = influxdb_bulk_append_header(bulk_head, - tag, tag_len, + tag + prefix_offset, + tag_len - prefix_offset, seq, ctx->seq_name, ctx->seq_len); if (ret == -1) { @@ -368,6 +378,15 @@ static int cb_influxdb_init(struct flb_output_instance *ins, struct flb_config * } ctx->seq_len = strlen(ctx->seq_name); + /* prefix */ + tmp = flb_output_get_property("strip_prefix", ins); + if (!tmp) { + ctx->prefix = flb_strdup(""); + } else { + ctx->prefix = flb_strdup(tmp); + } + ctx->prefix_len = strlen(ctx->prefix); + if (ctx->custom_uri) { /* custom URI endpoint (e.g: Grafana */ if (ctx->custom_uri[0] != '/') { @@ -594,6 +613,10 @@ static int cb_influxdb_exit(void *data, struct flb_config *config) flb_free(ctx->seq_name); } + if (ctx->prefix) { + flb_free(ctx->prefix); + } + flb_upstream_destroy(ctx->u); flb_free(ctx); @@ -696,6 +719,12 @@ static struct flb_config_map config_map[] = { "Use influxdb line protocol's integer type suffix." }, + { + FLB_CONFIG_MAP_STR, "strip_prefix", NULL, + 0, FLB_FALSE, 0, + "Prefix to be removed from the record tag when writing influx measurements." + }, + /* EOF */ {0} }; diff --git a/plugins/out_influxdb/influxdb.h b/plugins/out_influxdb/influxdb.h index c21145611c8..c6cc54e57d3 100644 --- a/plugins/out_influxdb/influxdb.h +++ b/plugins/out_influxdb/influxdb.h @@ -56,6 +56,10 @@ struct flb_influxdb { char *seq_name; int seq_len; + /* prefix */ + char *prefix; + int prefix_len; + /* auto_tags: on/off */ int auto_tags;