Add server span kind to otel cowboy (#116)
* Add server span kind to otel cowboy * Upgrade deps
This commit is contained in:
parent
4358c75b99
commit
a72305f574
|
@ -2,7 +2,7 @@
|
||||||
[{<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.9.0">>},1},
|
[{<<"cowboy">>,{pkg,<<"cowboy">>,<<"2.9.0">>},1},
|
||||||
{<<"cowboy_telemetry">>,{pkg,<<"cowboy_telemetry">>,<<"0.4.0">>},0},
|
{<<"cowboy_telemetry">>,{pkg,<<"cowboy_telemetry">>,<<"0.4.0">>},0},
|
||||||
{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.11.0">>},2},
|
{<<"cowlib">>,{pkg,<<"cowlib">>,<<"2.11.0">>},2},
|
||||||
{<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.0.2">>},0},
|
{<<"opentelemetry_api">>,{pkg,<<"opentelemetry_api">>,<<"1.1.1">>},0},
|
||||||
{<<"opentelemetry_telemetry">>,
|
{<<"opentelemetry_telemetry">>,
|
||||||
{pkg,<<"opentelemetry_telemetry">>,<<"1.0.0">>},
|
{pkg,<<"opentelemetry_telemetry">>,<<"1.0.0">>},
|
||||||
0},
|
0},
|
||||||
|
@ -14,7 +14,7 @@
|
||||||
{<<"cowboy">>, <<"865DD8B6607E14CF03282E10E934023A1BD8BE6F6BACF921A7E2A96D800CD452">>},
|
{<<"cowboy">>, <<"865DD8B6607E14CF03282E10E934023A1BD8BE6F6BACF921A7E2A96D800CD452">>},
|
||||||
{<<"cowboy_telemetry">>, <<"F239F68B588EFA7707ABCE16A84D0D2ACF3A0F50571F8BB7F56A15865AAE820C">>},
|
{<<"cowboy_telemetry">>, <<"F239F68B588EFA7707ABCE16A84D0D2ACF3A0F50571F8BB7F56A15865AAE820C">>},
|
||||||
{<<"cowlib">>, <<"0B9FF9C346629256C42EBE1EEB769A83C6CB771A6EE5960BD110AB0B9B872063">>},
|
{<<"cowlib">>, <<"0B9FF9C346629256C42EBE1EEB769A83C6CB771A6EE5960BD110AB0B9B872063">>},
|
||||||
{<<"opentelemetry_api">>, <<"91353EE40583B1D4F07D7B13ED62642ABFEC6AAA0D8A2114F07EDAFB2DF781C5">>},
|
{<<"opentelemetry_api">>, <<"3B43877C456C8A7F5448A95D9BF4FB4BB8CC2ABBBEA2C62D5F8E8C538B4AF14F">>},
|
||||||
{<<"opentelemetry_telemetry">>, <<"D5982A319E725FCD2305B306B65C18A86AFDCF7D96821473CF0649FF88877615">>},
|
{<<"opentelemetry_telemetry">>, <<"D5982A319E725FCD2305B306B65C18A86AFDCF7D96821473CF0649FF88877615">>},
|
||||||
{<<"ranch">>, <<"8C7A100A139FD57F17327B6413E4167AC559FBC04CA7448E9BE9057311597A1D">>},
|
{<<"ranch">>, <<"8C7A100A139FD57F17327B6413E4167AC559FBC04CA7448E9BE9057311597A1D">>},
|
||||||
{<<"telemetry">>, <<"A589817034A27EAB11144AD24D5C0F9FAB1F58173274B1E9BAE7074AF9CBEE51">>},
|
{<<"telemetry">>, <<"A589817034A27EAB11144AD24D5C0F9FAB1F58173274B1E9BAE7074AF9CBEE51">>},
|
||||||
|
@ -23,7 +23,7 @@
|
||||||
{<<"cowboy">>, <<"2C729F934B4E1AA149AFF882F57C6372C15399A20D54F65C8D67BEF583021BDE">>},
|
{<<"cowboy">>, <<"2C729F934B4E1AA149AFF882F57C6372C15399A20D54F65C8D67BEF583021BDE">>},
|
||||||
{<<"cowboy_telemetry">>, <<"7D98BAC1EE4565D31B62D59F8823DFD8356A169E7FCBB83831B8A5397404C9DE">>},
|
{<<"cowboy_telemetry">>, <<"7D98BAC1EE4565D31B62D59F8823DFD8356A169E7FCBB83831B8A5397404C9DE">>},
|
||||||
{<<"cowlib">>, <<"2B3E9DA0B21C4565751A6D4901C20D1B4CC25CBB7FD50D91D2AB6DD287BC86A9">>},
|
{<<"cowlib">>, <<"2B3E9DA0B21C4565751A6D4901C20D1B4CC25CBB7FD50D91D2AB6DD287BC86A9">>},
|
||||||
{<<"opentelemetry_api">>, <<"2A8247F85C44216B883900067478D59955D11E58E5CFCA7C884CD4F203ACE3AC">>},
|
{<<"opentelemetry_api">>, <<"A9554B3208B60A70043318D051EA78FBBC7A1B8F4C418EBC16CCB40015995675">>},
|
||||||
{<<"opentelemetry_telemetry">>, <<"3401D13A1D4B7AA941A77E6B3EC074F0AE77F83B5B2206766CE630123A9291A9">>},
|
{<<"opentelemetry_telemetry">>, <<"3401D13A1D4B7AA941A77E6B3EC074F0AE77F83B5B2206766CE630123A9291A9">>},
|
||||||
{<<"ranch">>, <<"49FBCFD3682FAB1F5D109351B61257676DA1A2FDBE295904176D5E521A2DDFE5">>},
|
{<<"ranch">>, <<"49FBCFD3682FAB1F5D109351B61257676DA1A2FDBE295904176D5E521A2DDFE5">>},
|
||||||
{<<"telemetry">>, <<"B727B2A1F75614774CFF2D7565B64D0DFA5BD52BA517F16543E6FC7EFCC0DF48">>},
|
{<<"telemetry">>, <<"B727B2A1F75614774CFF2D7565B64D0DFA5BD52BA517F16543E6FC7EFCC0DF48">>},
|
||||||
|
|
|
@ -46,7 +46,8 @@ handle_event([cowboy, request, start], _Measurements, #{req := Req} = Meta, _Con
|
||||||
'net.transport' => 'IP.TCP'
|
'net.transport' => 'IP.TCP'
|
||||||
},
|
},
|
||||||
SpanName = iolist_to_binary([<<"HTTP ">>, Method]),
|
SpanName = iolist_to_binary([<<"HTTP ">>, Method]),
|
||||||
otel_telemetry:start_telemetry_span(?TRACER_ID, SpanName, Meta, #{attributes => Attributes});
|
Opts = #{attributes => Attributes, kind => ?SPAN_KIND_SERVER},
|
||||||
|
otel_telemetry:start_telemetry_span(?TRACER_ID, SpanName, Meta, Opts);
|
||||||
|
|
||||||
handle_event([cowboy, request, stop], Measurements, Meta, _Config) ->
|
handle_event([cowboy, request, stop], Measurements, Meta, _Config) ->
|
||||||
Ctx = otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
Ctx = otel_telemetry:set_current_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
@ -107,7 +108,8 @@ handle_event([cowboy, request, early_error], Measurements, Meta, _Config) ->
|
||||||
'http.status_code' => StatusCode,
|
'http.status_code' => StatusCode,
|
||||||
'http.response_content_length' => maps:get(resp_body_length, Measurements)
|
'http.response_content_length' => maps:get(resp_body_length, Measurements)
|
||||||
},
|
},
|
||||||
Ctx = otel_telemetry:start_telemetry_span(?TRACER_ID, <<"HTTP Error">>, Meta, #{attributes => Attributes}),
|
Opts = #{attributes => Attributes, kind => ?SPAN_KIND_SERVER},
|
||||||
|
Ctx = otel_telemetry:start_telemetry_span(?TRACER_ID, <<"HTTP Error">>, Meta, Opts),
|
||||||
otel_span:add_events(Ctx, [opentelemetry:event(ErrorType, #{error => Error, reason => Reason})]),
|
otel_span:add_events(Ctx, [opentelemetry:event(ErrorType, #{error => Error, reason => Reason})]),
|
||||||
otel_span:set_status(Ctx, opentelemetry:status(?OTEL_STATUS_ERROR, Reason)),
|
otel_span:set_status(Ctx, opentelemetry:status(?OTEL_STATUS_ERROR, Reason)),
|
||||||
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta),
|
otel_telemetry:end_telemetry_span(?TRACER_ID, Meta),
|
||||||
|
|
|
@ -71,9 +71,10 @@ successful_request(_Config) ->
|
||||||
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
||||||
httpc:request(get, {"http://localhost:8080/success", Headers}, [], []),
|
httpc:request(get, {"http://localhost:8080/success", Headers}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,attributes=Attributes,parent_span_id=ParentSpanId}} ->
|
{span, #span{name=Name,attributes=Attributes,parent_span_id=ParentSpanId,kind=Kind}} ->
|
||||||
?assertEqual(<<"HTTP GET">>, Name),
|
?assertEqual(<<"HTTP GET">>, Name),
|
||||||
?assertEqual(13235353014750950193, ParentSpanId),
|
?assertEqual(13235353014750950193, ParentSpanId),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"203.0.133.195">>,
|
'http.client_ip' => <<"203.0.133.195">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -97,8 +98,9 @@ chunked_request(_Config) ->
|
||||||
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
||||||
httpc:request(get, {"http://localhost:8080/chunked", []}, [], []),
|
httpc:request(get, {"http://localhost:8080/chunked", []}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
?assertEqual(<<"HTTP GET">>, Name),
|
?assertEqual(<<"HTTP GET">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"127.0.0.1">>,
|
'http.client_ip' => <<"127.0.0.1">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -122,10 +124,11 @@ failed_request(_Config) ->
|
||||||
{ok, {{_Version, 500, _ReasonPhrase}, _Headers, _Body}} =
|
{ok, {{_Version, 500, _ReasonPhrase}, _Headers, _Body}} =
|
||||||
httpc:request(get, {"http://localhost:8080/failure", []}, [], []),
|
httpc:request(get, {"http://localhost:8080/failure", []}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
[Event] = otel_events:list(Events),
|
[Event] = otel_events:list(Events),
|
||||||
#event{name= <<"exception">>} = Event,
|
#event{name= <<"exception">>} = Event,
|
||||||
?assertEqual(<<"HTTP GET">>, Name),
|
?assertEqual(<<"HTTP GET">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"127.0.0.1">>,
|
'http.client_ip' => <<"127.0.0.1">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -149,7 +152,7 @@ client_timeout_request(_Config) ->
|
||||||
{error, timeout} =
|
{error, timeout} =
|
||||||
httpc:request(get, {"http://localhost:8080/slow", []}, [{timeout, 50}], []),
|
httpc:request(get, {"http://localhost:8080/slow", []}, [{timeout, 50}], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
[Event] = otel_events:list(Events),
|
[Event] = otel_events:list(Events),
|
||||||
#event{name='socket_error',attributes = EventAttributes} = Event,
|
#event{name='socket_error',attributes = EventAttributes} = Event,
|
||||||
ExpectedEventAttrs = #{
|
ExpectedEventAttrs = #{
|
||||||
|
@ -158,6 +161,7 @@ client_timeout_request(_Config) ->
|
||||||
},
|
},
|
||||||
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
||||||
?assertEqual(<<"HTTP GET">>, Name),
|
?assertEqual(<<"HTTP GET">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"127.0.0.1">>,
|
'http.client_ip' => <<"127.0.0.1">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -180,7 +184,7 @@ idle_timeout_request(_Config) ->
|
||||||
{error, socket_closed_remotely} =
|
{error, socket_closed_remotely} =
|
||||||
httpc:request(head, {"http://localhost:8080/slow", []}, [], []),
|
httpc:request(head, {"http://localhost:8080/slow", []}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
[Event] = otel_events:list(Events),
|
[Event] = otel_events:list(Events),
|
||||||
#event{name= 'connection_error',attributes = EventAttributes} = Event,
|
#event{name= 'connection_error',attributes = EventAttributes} = Event,
|
||||||
ExpectedEventAttrs = #{
|
ExpectedEventAttrs = #{
|
||||||
|
@ -189,6 +193,7 @@ idle_timeout_request(_Config) ->
|
||||||
},
|
},
|
||||||
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
||||||
?assertEqual(<<"HTTP HEAD">>, Name),
|
?assertEqual(<<"HTTP HEAD">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"127.0.0.1">>,
|
'http.client_ip' => <<"127.0.0.1">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -210,8 +215,9 @@ idle_timeout_request(_Config) ->
|
||||||
chunk_timeout_request(_Config) ->
|
chunk_timeout_request(_Config) ->
|
||||||
httpc:request(head, {"http://localhost:8080/chunked_slow", []}, [], []),
|
httpc:request(head, {"http://localhost:8080/chunked_slow", []}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
?assertEqual(<<"HTTP HEAD">>, Name),
|
?assertEqual(<<"HTTP HEAD">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"127.0.0.1">>,
|
'http.client_ip' => <<"127.0.0.1">>,
|
||||||
'http.flavor' => '1.1',
|
'http.flavor' => '1.1',
|
||||||
|
@ -239,7 +245,7 @@ bad_request(_Config) ->
|
||||||
{ok, {{_Version, 501, _ReasonPhrase}, _Headers, _Body}} =
|
{ok, {{_Version, 501, _ReasonPhrase}, _Headers, _Body}} =
|
||||||
httpc:request(trace, {"http://localhost:8080/", Headers}, [], []),
|
httpc:request(trace, {"http://localhost:8080/", Headers}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined}} ->
|
{span, #span{name=Name,events=Events,attributes=Attributes,parent_span_id=undefined,kind=Kind}} ->
|
||||||
[Event] = otel_events:list(Events),
|
[Event] = otel_events:list(Events),
|
||||||
#event{name='connection_error',attributes = EventAttributes} = Event,
|
#event{name='connection_error',attributes = EventAttributes} = Event,
|
||||||
ExpectedEventAttrs = #{
|
ExpectedEventAttrs = #{
|
||||||
|
@ -248,6 +254,7 @@ bad_request(_Config) ->
|
||||||
},
|
},
|
||||||
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
?assertMatch(ExpectedEventAttrs, otel_attributes:map(EventAttributes)),
|
||||||
?assertEqual(<<"HTTP Error">>, Name),
|
?assertEqual(<<"HTTP Error">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.status_code' => 501,
|
'http.status_code' => 501,
|
||||||
'http.response_content_length' => 0},
|
'http.response_content_length' => 0},
|
||||||
|
@ -265,8 +272,9 @@ binary_status_code_request(_Config) ->
|
||||||
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
{ok, {{_Version, 200, _ReasonPhrase}, _Headers, _Body}} =
|
||||||
httpc:request(get, {"http://localhost:8080/binary_status_code", Headers}, [], []),
|
httpc:request(get, {"http://localhost:8080/binary_status_code", Headers}, [], []),
|
||||||
receive
|
receive
|
||||||
{span, #span{name=Name,attributes=Attributes,parent_span_id=ParentSpanId}} ->
|
{span, #span{name=Name,attributes=Attributes,parent_span_id=ParentSpanId,kind=Kind}} ->
|
||||||
?assertEqual(<<"HTTP GET">>, Name),
|
?assertEqual(<<"HTTP GET">>, Name),
|
||||||
|
?assertEqual(?SPAN_KIND_SERVER, Kind),
|
||||||
?assertEqual(13235353014750950193, ParentSpanId),
|
?assertEqual(13235353014750950193, ParentSpanId),
|
||||||
ExpectedAttrs = #{
|
ExpectedAttrs = #{
|
||||||
'http.client_ip' => <<"203.0.133.195">>,
|
'http.client_ip' => <<"203.0.133.195">>,
|
||||||
|
|
Loading…
Reference in New Issue