diff --git a/plugins/out_es/es.c b/plugins/out_es/es.c index f7e7a5de10e..17079b02c6c 100644 --- a/plugins/out_es/es.c +++ b/plugins/out_es/es.c @@ -825,6 +825,10 @@ static void cb_es_flush(struct flb_event_chunk *event_chunk, struct flb_http_client *c; flb_sds_t signature = NULL; int compressed = FLB_FALSE; + struct mk_list *head; + struct flb_config_map_val *mv; + struct flb_slist_entry *key = NULL; + struct flb_slist_entry *val = NULL; flb_sds_t header_line = NULL; /* Get upstream connection */ @@ -883,6 +887,16 @@ static void cb_es_flush(struct flb_event_chunk *event_chunk, flb_http_add_header(c, "Content-Type", 12, "application/x-ndjson", 20); + /* Arbitrary additional headers */ + flb_config_map_foreach(head, mv, ctx->headers) { + key = mk_list_entry_first(mv->val.list, struct flb_slist_entry, _head); + val = mk_list_entry_last(mv->val.list, struct flb_slist_entry, _head); + + flb_http_add_header(c, + key->str, flb_sds_len(key->str), + val->str, flb_sds_len(val->str)); + } + if (ctx->http_user && ctx->http_passwd) { flb_http_basic_auth(c, ctx->http_user, ctx->http_passwd); } @@ -1126,6 +1140,14 @@ static struct flb_config_map config_map[] = { "Base-64 encoded API key credential for Elasticsearch" }, + /* Arbitrary HTTP headers */ + { + FLB_CONFIG_MAP_SLIST_1, "header", NULL, + FLB_CONFIG_MAP_MULT, FLB_TRUE, offsetof(struct flb_elasticsearch, headers), + "Add a HTTP header key/value pair. Multiple headers can be set" + }, + + /* HTTP Compression */ { FLB_CONFIG_MAP_STR, "compress", NULL, diff --git a/plugins/out_es/es.h b/plugins/out_es/es.h index 04e603c8e59..44fe3517764 100644 --- a/plugins/out_es/es.h +++ b/plugins/out_es/es.h @@ -51,6 +51,9 @@ struct flb_elasticsearch { char *type; int suppress_type_name; + /* Arbitrary HTTP headers */ + struct mk_list *headers; + /* HTTP Auth */ char *http_user; char *http_passwd;