chore: add semantic conventions to phoenix (#121)
* fix: redix missing dep * chore: add sc dep * chore: use semantic conventions in phoenix
This commit is contained in:
parent
f04340aff4
commit
d1ec189362
|
@ -22,11 +22,13 @@ defmodule OpentelemetryPhoenix do
|
||||||
end
|
end
|
||||||
|
|
||||||
"""
|
"""
|
||||||
|
alias OpenTelemetry.SemanticConventions
|
||||||
require OpenTelemetry.Tracer
|
|
||||||
alias OpenTelemetry.Span
|
alias OpenTelemetry.Span
|
||||||
alias OpentelemetryPhoenix.Reason
|
alias OpentelemetryPhoenix.Reason
|
||||||
|
|
||||||
|
require SemanticConventions.Trace
|
||||||
|
require OpenTelemetry.Tracer
|
||||||
|
|
||||||
@tracer_id __MODULE__
|
@tracer_id __MODULE__
|
||||||
|
|
||||||
@typedoc "Setup options"
|
@typedoc "Setup options"
|
||||||
|
@ -107,18 +109,18 @@ defmodule OpentelemetryPhoenix do
|
||||||
peer_ip = Map.get(peer_data, :address)
|
peer_ip = Map.get(peer_data, :address)
|
||||||
|
|
||||||
attributes = %{
|
attributes = %{
|
||||||
"http.client_ip": client_ip(conn),
|
SemanticConventions.Trace.http_client_ip() => client_ip(conn),
|
||||||
"http.flavor": http_flavor(adapter),
|
SemanticConventions.Trace.http_flavor() => http_flavor(adapter),
|
||||||
"http.host": conn.host,
|
SemanticConventions.Trace.http_method() => conn.method,
|
||||||
"http.method": conn.method,
|
SemanticConventions.Trace.http_scheme() => "#{conn.scheme}",
|
||||||
"http.scheme": "#{conn.scheme}",
|
SemanticConventions.Trace.http_target() => conn.request_path,
|
||||||
"http.target": conn.request_path,
|
SemanticConventions.Trace.http_user_agent() => user_agent,
|
||||||
"http.user_agent": user_agent,
|
SemanticConventions.Trace.net_host_name() => conn.host,
|
||||||
"net.host.ip": to_string(:inet_parse.ntoa(conn.remote_ip)),
|
SemanticConventions.Trace.net_sock_host_addr() => to_string(:inet_parse.ntoa(conn.remote_ip)),
|
||||||
"net.host.port": conn.port,
|
SemanticConventions.Trace.net_host_port() => conn.port,
|
||||||
"net.peer.ip": to_string(:inet_parse.ntoa(peer_ip)),
|
SemanticConventions.Trace.net_sock_peer_addr() => to_string(:inet_parse.ntoa(peer_ip)),
|
||||||
"net.peer.port": peer_data.port,
|
SemanticConventions.Trace.net_peer_port() => peer_data.port,
|
||||||
"net.transport": :"IP.TCP"
|
SemanticConventions.Trace.net_transport() => :"IP.TCP"
|
||||||
}
|
}
|
||||||
|
|
||||||
# start the span with a default name. Route name isn't known until router dispatch
|
# start the span with a default name. Route name isn't known until router dispatch
|
||||||
|
@ -133,7 +135,7 @@ defmodule OpentelemetryPhoenix do
|
||||||
# ensure the correct span is current and update the status
|
# ensure the correct span is current and update the status
|
||||||
ctx = OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, meta)
|
ctx = OpentelemetryTelemetry.set_current_telemetry_span(@tracer_id, meta)
|
||||||
|
|
||||||
Span.set_attribute(ctx, :"http.status_code", conn.status)
|
Span.set_attribute(ctx, SemanticConventions.Trace.http_status_code(), conn.status)
|
||||||
|
|
||||||
if conn.status >= 500 do
|
if conn.status >= 500 do
|
||||||
Span.set_status(ctx, OpenTelemetry.status(:error, ""))
|
Span.set_status(ctx, OpenTelemetry.status(:error, ""))
|
||||||
|
@ -146,9 +148,9 @@ defmodule OpentelemetryPhoenix do
|
||||||
@doc false
|
@doc false
|
||||||
def handle_router_dispatch_start(_event, _measurements, meta, _config) do
|
def handle_router_dispatch_start(_event, _measurements, meta, _config) do
|
||||||
attributes = %{
|
attributes = %{
|
||||||
"phoenix.plug": meta.plug,
|
:"phoenix.plug" => meta.plug,
|
||||||
"phoenix.action": meta.plug_opts,
|
:"phoenix.action" => meta.plug_opts,
|
||||||
"http.route": meta.route
|
SemanticConventions.Trace.http_route() => meta.route
|
||||||
}
|
}
|
||||||
|
|
||||||
# Add more info that we now know about but don't close the span
|
# Add more info that we now know about but don't close the span
|
||||||
|
|
|
@ -60,6 +60,7 @@ defmodule OpentelemetryPhoenix.MixProject do
|
||||||
[
|
[
|
||||||
{:opentelemetry_api, "~> 1.0"},
|
{:opentelemetry_api, "~> 1.0"},
|
||||||
{:opentelemetry_telemetry, "~> 1.0"},
|
{:opentelemetry_telemetry, "~> 1.0"},
|
||||||
|
{:opentelemetry_semantic_conventions, "~> 0.1.0"},
|
||||||
{:telemetry, "~> 0.4 or ~> 1.0"},
|
{:telemetry, "~> 0.4 or ~> 1.0"},
|
||||||
{:plug, ">= 1.11.0"},
|
{:plug, ">= 1.11.0"},
|
||||||
{:cowboy_telemetry, "~> 0.4", only: [:dev, :test]},
|
{:cowboy_telemetry, "~> 0.4", only: [:dev, :test]},
|
||||||
|
|
|
@ -21,6 +21,7 @@
|
||||||
"opentelemetry": {:hex, :opentelemetry, "1.1.2", "77ba2fd2fee67bebde590851a4afeda45b3f298310aa410a2a3804b364cb598a", [:rebar3], [{:opentelemetry_api, "~> 1.1", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "5c60be189d6aed64a9fd17055f72c93eab144be441e625276c3c95533e6bb4c7"},
|
"opentelemetry": {:hex, :opentelemetry, "1.1.2", "77ba2fd2fee67bebde590851a4afeda45b3f298310aa410a2a3804b364cb598a", [:rebar3], [{:opentelemetry_api, "~> 1.1", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}], "hexpm", "5c60be189d6aed64a9fd17055f72c93eab144be441e625276c3c95533e6bb4c7"},
|
||||||
"opentelemetry_api": {:hex, :opentelemetry_api, "1.1.1", "3b43877c456c8a7f5448a95d9bf4fb4bb8cc2abbbea2c62d5f8e8c538b4af14f", [:mix, :rebar3], [], "hexpm", "a9554b3208b60a70043318d051ea78fbbc7a1b8f4c418ebc16ccb40015995675"},
|
"opentelemetry_api": {:hex, :opentelemetry_api, "1.1.1", "3b43877c456c8a7f5448a95d9bf4fb4bb8cc2abbbea2c62d5f8e8c538b4af14f", [:mix, :rebar3], [], "hexpm", "a9554b3208b60a70043318d051ea78fbbc7a1b8f4c418ebc16ccb40015995675"},
|
||||||
"opentelemetry_exporter": {:hex, :opentelemetry_exporter, "1.2.2", "3966c56656627ef7db6c34c4ce28d44ac8629dcd065a310d7c33712fc2a1cfe3", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.1", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.1", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.11", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "5c11adeda19e0d203a04efe92cdd7a183da4b09ae8acaba7608e9303fa258e74"},
|
"opentelemetry_exporter": {:hex, :opentelemetry_exporter, "1.2.2", "3966c56656627ef7db6c34c4ce28d44ac8629dcd065a310d7c33712fc2a1cfe3", [:rebar3], [{:grpcbox, ">= 0.0.0", [hex: :grpcbox, repo: "hexpm", optional: false]}, {:opentelemetry, "~> 1.1", [hex: :opentelemetry, repo: "hexpm", optional: false]}, {:opentelemetry_api, "~> 1.1", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:tls_certificate_check, "~> 1.11", [hex: :tls_certificate_check, repo: "hexpm", optional: false]}], "hexpm", "5c11adeda19e0d203a04efe92cdd7a183da4b09ae8acaba7608e9303fa258e74"},
|
||||||
|
"opentelemetry_semantic_conventions": {:hex, :opentelemetry_semantic_conventions, "0.1.0", "0a7463c0ec4541d9c8e09ee99bd7b5480fa6f90f40313a6d071fd7521b5a712f", [:mix, :rebar3], [], "hexpm", "eccf41bc7afec299484075aff570bf504a2f7e5c38fbcdaceb33a6d6b901448d"},
|
||||||
"opentelemetry_telemetry": {:hex, :opentelemetry_telemetry, "1.0.0", "d5982a319e725fcd2305b306b65c18a86afdcf7d96821473cf0649ff88877615", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.0", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "3401d13a1d4b7aa941a77e6b3ec074f0ae77f83b5b2206766ce630123a9291a9"},
|
"opentelemetry_telemetry": {:hex, :opentelemetry_telemetry, "1.0.0", "d5982a319e725fcd2305b306b65c18a86afdcf7d96821473cf0649ff88877615", [:mix, :rebar3], [{:opentelemetry_api, "~> 1.0", [hex: :opentelemetry_api, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:telemetry_registry, "~> 0.3.0", [hex: :telemetry_registry, repo: "hexpm", optional: false]}], "hexpm", "3401d13a1d4b7aa941a77e6b3ec074f0ae77f83b5b2206766ce630123a9291a9"},
|
||||||
"plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"},
|
"plug": {:hex, :plug, "1.14.0", "ba4f558468f69cbd9f6b356d25443d0b796fbdc887e03fa89001384a9cac638f", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bf020432c7d4feb7b3af16a0c2701455cbbbb95e5b6866132cb09eb0c29adc14"},
|
||||||
"plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"},
|
"plug_cowboy": {:hex, :plug_cowboy, "2.6.0", "d1cf12ff96a1ca4f52207c5271a6c351a4733f413803488d75b70ccf44aebec2", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:cowboy_telemetry, "~> 0.3", [hex: :cowboy_telemetry, repo: "hexpm", optional: false]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "073cf20b753ce6682ed72905cd62a2d4bd9bad1bf9f7feb02a1b8e525bd94fa6"},
|
||||||
|
|
|
@ -53,16 +53,16 @@ defmodule OpentelemetryPhoenixTest do
|
||||||
assert %{
|
assert %{
|
||||||
"http.client_ip": "10.211.55.2",
|
"http.client_ip": "10.211.55.2",
|
||||||
"http.flavor": :"1.1",
|
"http.flavor": :"1.1",
|
||||||
"http.host": "localhost",
|
"net.host.name": "localhost",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
"http.route": "/users/:user_id",
|
"http.route": "/users/:user_id",
|
||||||
"http.scheme": "http",
|
"http.scheme": "http",
|
||||||
"http.status_code": 200,
|
"http.status_code": 200,
|
||||||
"http.target": "/users/123",
|
"http.target": "/users/123",
|
||||||
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
||||||
"net.host.ip": "10.211.55.2",
|
"net.sock.host.addr": "10.211.55.2",
|
||||||
"net.host.port": 4000,
|
"net.host.port": 4000,
|
||||||
"net.peer.ip": "10.211.55.2",
|
"net.sock.peer.addr": "10.211.55.2",
|
||||||
"net.peer.port": 64291,
|
"net.peer.port": 64291,
|
||||||
"net.transport": :"IP.TCP",
|
"net.transport": :"IP.TCP",
|
||||||
"phoenix.action": :user,
|
"phoenix.action": :user,
|
||||||
|
@ -132,16 +132,16 @@ defmodule OpentelemetryPhoenixTest do
|
||||||
assert %{
|
assert %{
|
||||||
"http.client_ip": "10.211.55.2",
|
"http.client_ip": "10.211.55.2",
|
||||||
"http.flavor": :"1.1",
|
"http.flavor": :"1.1",
|
||||||
"http.host": "localhost",
|
"net.host.name": "localhost",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
"http.route": "/users/:user_id/exception",
|
"http.route": "/users/:user_id/exception",
|
||||||
"http.scheme": "http",
|
"http.scheme": "http",
|
||||||
"http.status_code": 500,
|
"http.status_code": 500,
|
||||||
"http.target": "/users/123/exception",
|
"http.target": "/users/123/exception",
|
||||||
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
||||||
"net.host.ip": "10.211.55.2",
|
"net.sock.host.addr": "10.211.55.2",
|
||||||
"net.host.port": 4000,
|
"net.host.port": 4000,
|
||||||
"net.peer.ip": "10.211.55.2",
|
"net.sock.peer.addr": "10.211.55.2",
|
||||||
"net.peer.port": 64291,
|
"net.peer.port": 64291,
|
||||||
"net.transport": :"IP.TCP",
|
"net.transport": :"IP.TCP",
|
||||||
"phoenix.action": :code_exception,
|
"phoenix.action": :code_exception,
|
||||||
|
@ -239,16 +239,16 @@ defmodule OpentelemetryPhoenixTest do
|
||||||
assert %{
|
assert %{
|
||||||
"http.client_ip": "10.211.55.2",
|
"http.client_ip": "10.211.55.2",
|
||||||
"http.flavor": :"1.1",
|
"http.flavor": :"1.1",
|
||||||
"http.host": "localhost",
|
"net.host.name": "localhost",
|
||||||
"http.method": "GET",
|
"http.method": "GET",
|
||||||
"http.route": "/users/:user_id/exception",
|
"http.route": "/users/:user_id/exception",
|
||||||
"http.scheme": "http",
|
"http.scheme": "http",
|
||||||
"http.status_code": 500,
|
"http.status_code": 500,
|
||||||
"http.target": "/users/123/exception",
|
"http.target": "/users/123/exception",
|
||||||
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
"http.user_agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:81.0) Gecko/20100101 Firefox/81.0",
|
||||||
"net.host.ip": "10.211.55.2",
|
"net.sock.host.addr": "10.211.55.2",
|
||||||
"net.host.port": 4000,
|
"net.host.port": 4000,
|
||||||
"net.peer.ip": "10.211.55.2",
|
"net.sock.peer.addr": "10.211.55.2",
|
||||||
"net.peer.port": 64291,
|
"net.peer.port": 64291,
|
||||||
"net.transport": :"IP.TCP",
|
"net.transport": :"IP.TCP",
|
||||||
"phoenix.action": :code_exception,
|
"phoenix.action": :code_exception,
|
||||||
|
|
Loading…
Reference in New Issue