Add more detailed traffic metrics (tx and rx, per-listener and per-dc)

parent da597f0f
...@@ -104,8 +104,8 @@ handle_cast(shutdown, State) -> ...@@ -104,8 +104,8 @@ handle_cast(shutdown, State) ->
{stop, shutdown, State}. {stop, shutdown, State}.
handle_info({tcp, Sock, Data}, #state{sock = Sock} = S) -> handle_info({tcp, Sock, Data}, #state{sock = Sock, dc_id = DcId} = S) ->
mtp_metric:count_inc([?APP, received, bytes], byte_size(Data), #{labels => [downstream]}), mtp_metric:count_inc([?APP, received, downstream, bytes], byte_size(Data), #{labels => [DcId]}),
mtp_metric:histogram_observe([?APP, tracker_packet_size, bytes], byte_size(Data), #{labels => [downstream]}), mtp_metric:histogram_observe([?APP, tracker_packet_size, bytes], byte_size(Data), #{labels => [downstream]}),
{ok, S1} = handle_downstream_data(Data, S), {ok, S1} = handle_downstream_data(Data, S),
activate_if_no_overflow(S1), activate_if_no_overflow(S1),
...@@ -239,7 +239,10 @@ down_send(Packet, #state{sock = Sock, codec = Codec, dc_id = DcId} = St) -> ...@@ -239,7 +239,10 @@ down_send(Packet, #state{sock = Sock, codec = Codec, dc_id = DcId} = St) ->
mtp_metric:rt( mtp_metric:rt(
[?APP, downstream_send_duration, seconds], [?APP, downstream_send_duration, seconds],
fun() -> fun() ->
ok = gen_tcp:send(Sock, Encoded) ok = gen_tcp:send(Sock, Encoded),
mtp_metric:count_inc(
[?APP, sent, downstream, bytes],
iolist_size(Encoded), #{labels => [DcId]})
end, #{labels => [DcId]}), end, #{labels => [DcId]}),
{ok, St#state{codec = Codec1}}. {ok, St#state{codec = Codec1}}.
......
...@@ -137,11 +137,11 @@ handle_cast(Other, State) -> ...@@ -137,11 +137,11 @@ handle_cast(Other, State) ->
lager:warning("Unexpected msg ~p", [Other]), lager:warning("Unexpected msg ~p", [Other]),
{noreply, State}. {noreply, State}.
handle_info({tcp, Sock, Data}, #state{sock = Sock, handle_info({tcp, Sock, Data}, #state{sock = Sock, transport = Transport,
transport = Transport} = S) -> listener = Listener} = S) ->
%% client -> proxy %% client -> proxy
Size = byte_size(Data), Size = byte_size(Data),
mtp_metric:count_inc([?APP, received, bytes], Size, #{labels => [upstream]}), mtp_metric:count_inc([?APP, received, upstream, bytes], Size, #{labels => [Listener]}),
mtp_metric:histogram_observe([?APP, tracker_packet_size, bytes], Size, #{labels => [upstream]}), mtp_metric:histogram_observe([?APP, tracker_packet_size, bytes], Size, #{labels => [upstream]}),
case handle_upstream_data(Data, S) of case handle_upstream_data(Data, S) of
{ok, S1} -> {ok, S1} ->
...@@ -274,7 +274,11 @@ up_send(Packet, #state{stage = tunnel, ...@@ -274,7 +274,11 @@ up_send(Packet, #state{stage = tunnel,
mtp_metric:rt([?APP, upstream_send_duration, seconds], mtp_metric:rt([?APP, upstream_send_duration, seconds],
fun() -> fun() ->
case Transport:send(Sock, Encoded) of case Transport:send(Sock, Encoded) of
ok -> ok; ok ->
mtp_metric:count_inc(
[?APP, sent, upstream, bytes],
iolist_size(Encoded), #{labels => [Listener]}),
ok;
{error, Reason} -> {error, Reason} ->
is_atom(Reason) andalso is_atom(Reason) andalso
mtp_metric:count_inc( mtp_metric:count_inc(
......
...@@ -115,9 +115,19 @@ active_metrics() -> ...@@ -115,9 +115,19 @@ active_metrics() ->
"Upstream self-healthcheck triggered some action", "Upstream self-healthcheck triggered some action",
#{labels => [action]}}, #{labels => [action]}},
{count, [?APP, received, bytes], {count, [?APP, received, downstream, bytes],
"Bytes transmitted from upstream/downstream socket", "Bytes transmitted from downstream socket",
#{labels => [direction]}}, #{labels => [dc_id]}},
{count, [?APP, received, upstream, bytes],
"Bytes transmitted from upstream socket",
#{labels => [listener]}},
{count, [?APP, sent, downstream, bytes],
"Bytes sent to downstream socket",
#{labels => [dc_id]}},
{count, [?APP, sent, upstream, bytes],
"Bytes sent to upstream socket",
#{labels => [listener]}},
{histogram, [?APP, tracker_packet_size, bytes], {histogram, [?APP, tracker_packet_size, bytes],
"Received packet size", "Received packet size",
#{labels => [direction], #{labels => [direction],
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment