diff --git a/plugins/out_es/es.c b/plugins/out_es/es.c index b0773a40991..7d93a4272ae 100644 --- a/plugins/out_es/es.c +++ b/plugins/out_es/es.c @@ -817,6 +817,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; /* Get upstream connection */ u_conn = flb_upstream_conn_get(ctx->u); @@ -874,6 +878,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); } @@ -1023,6 +1037,14 @@ static struct flb_config_map config_map[] = { "Password for user defined in HTTP_User" }, + /* 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 b6512ebc2a0..f8c2b7ab6eb 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;