From 80e6b268ecfcb041e8c9abeba13793a0d9511dcc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=A1=D0=B5=D1=80=D0=B3=D0=B5=D0=B9=20=D0=9F=D1=80=D0=BE?= =?UTF-8?q?=D1=85=D0=BE=D1=80=D0=BE=D0=B2?= Date: Mon, 28 Jan 2019 01:36:58 +0100 Subject: [PATCH] Add more detailed traffic metrics (tx and rx, per-listener and per-dc) --- src/mtp_down_conn.erl | 9 ++++++--- src/mtp_handler.erl | 12 ++++++++---- src/mtp_metric.erl | 16 +++++++++++++--- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/src/mtp_down_conn.erl b/src/mtp_down_conn.erl index 6cdf320..fc5a908 100644 --- a/src/mtp_down_conn.erl +++ b/src/mtp_down_conn.erl @@ -104,8 +104,8 @@ handle_cast(shutdown, State) -> {stop, shutdown, State}. -handle_info({tcp, Sock, Data}, #state{sock = Sock} = S) -> - mtp_metric:count_inc([?APP, received, bytes], byte_size(Data), #{labels => [downstream]}), +handle_info({tcp, Sock, Data}, #state{sock = Sock, dc_id = DcId} = S) -> + 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]}), {ok, S1} = handle_downstream_data(Data, S), activate_if_no_overflow(S1), @@ -239,7 +239,10 @@ down_send(Packet, #state{sock = Sock, codec = Codec, dc_id = DcId} = St) -> mtp_metric:rt( [?APP, downstream_send_duration, seconds], 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]}), {ok, St#state{codec = Codec1}}. diff --git a/src/mtp_handler.erl b/src/mtp_handler.erl index 55cab08..b3153a4 100644 --- a/src/mtp_handler.erl +++ b/src/mtp_handler.erl @@ -137,11 +137,11 @@ handle_cast(Other, State) -> lager:warning("Unexpected msg ~p", [Other]), {noreply, State}. -handle_info({tcp, Sock, Data}, #state{sock = Sock, - transport = Transport} = S) -> +handle_info({tcp, Sock, Data}, #state{sock = Sock, transport = Transport, + listener = Listener} = S) -> %% client -> proxy 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]}), case handle_upstream_data(Data, S) of {ok, S1} -> @@ -274,7 +274,11 @@ up_send(Packet, #state{stage = tunnel, mtp_metric:rt([?APP, upstream_send_duration, seconds], fun() -> 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} -> is_atom(Reason) andalso mtp_metric:count_inc( diff --git a/src/mtp_metric.erl b/src/mtp_metric.erl index 0ca96f7..1a6cf63 100644 --- a/src/mtp_metric.erl +++ b/src/mtp_metric.erl @@ -115,9 +115,19 @@ active_metrics() -> "Upstream self-healthcheck triggered some action", #{labels => [action]}}, - {count, [?APP, received, bytes], - "Bytes transmitted from upstream/downstream socket", - #{labels => [direction]}}, + {count, [?APP, received, downstream, bytes], + "Bytes transmitted from downstream socket", + #{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], "Received packet size", #{labels => [direction],