Skip to content

Commit e89d4c5

Browse files
committed
out_opentelemetry: make add_label have an effect on logs
Signed-off-by: carsonzhu <[email protected]>
1 parent eb70ee7 commit e89d4c5

File tree

1 file changed

+44
-0
lines changed

1 file changed

+44
-0
lines changed

plugins/out_opentelemetry/opentelemetry.c

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -707,6 +707,13 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
707707
Opentelemetry__Proto__Logs__V1__ResourceLogs resource_log;
708708
Opentelemetry__Proto__Logs__V1__ResourceLogs *resource_logs[1];
709709
Opentelemetry__Proto__Logs__V1__ScopeLogs *scope_logs[1];
710+
Opentelemetry__Proto__Common__V1__KeyValue **attributes_list;
711+
Opentelemetry__Proto__Common__V1__KeyValue *attributes;
712+
size_t kv_size;
713+
size_t kv_index;
714+
struct mk_list *kv_head;
715+
struct flb_kv *kv;
716+
710717
void *body;
711718
unsigned len;
712719
int res;
@@ -723,6 +730,37 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
723730
resource_log.n_scope_logs = 1;
724731
resource_logs[0] = &resource_log;
725732

733+
kv_size = mk_list_size(&(ctx->kv_labels));
734+
attributes_list = flb_calloc(kv_size, sizeof(Opentelemetry__Proto__Common__V1__KeyValue *));
735+
if (attributes_list == NULL) {
736+
flb_errno();
737+
return -1;
738+
}
739+
attributes = flb_calloc(kv_size, sizeof(Opentelemetry__Proto__Common__V1__KeyValue));
740+
if (attributes == NULL) {
741+
flb_errno();
742+
return -1;
743+
}
744+
for(int index = 0; index < kv_size; index++) {
745+
attributes_list[index] = &attributes[index];
746+
}
747+
748+
749+
kv_index = 0;
750+
mk_list_foreach(kv_head, &ctx->kv_labels) {
751+
kv = mk_list_entry(kv_head, struct flb_kv, _head);
752+
opentelemetry__proto__common__v1__key_value__init(&attributes[kv_index]);
753+
attributes[kv_index].key = kv->key;
754+
attributes[kv_index].value = otlp_any_value_initialize(MSGPACK_OBJECT_STR, 0);
755+
attributes[kv_index].value->string_value = kv->val;
756+
kv_index++;
757+
}
758+
759+
resource_log.resource = flb_calloc(1, sizeof(Opentelemetry__Proto__Resource__V1__Resource));
760+
opentelemetry__proto__resource__v1__resource__init(resource_log.resource);
761+
resource_log.resource->n_attributes = kv_size;
762+
resource_log.resource->attributes = attributes_list;
763+
726764
export_logs.resource_logs = resource_logs;
727765
export_logs.n_resource_logs = 1;
728766

@@ -742,6 +780,12 @@ static int flush_to_otel(struct opentelemetry_context *ctx,
742780
ctx->logs_uri);
743781

744782
flb_free(body);
783+
flb_free(resource_log.resource);
784+
for (int index = 0; index < kv_size; index++) {
785+
flb_free(attributes[index].value);
786+
}
787+
flb_free(attributes);
788+
flb_free(attributes_list);
745789

746790
return res;
747791
}

0 commit comments

Comments
 (0)