MEDIUM: stats: report per-backend and per-server time stats in HTML and CSV outputs

The time statistics computed by previous patches are now reported in the
HTML stats in the tips related to the total sessions for backend and servers,
and as separate columns for the CSV stats.
This commit is contained in:
Willy Tarreau 2014-06-17 12:20:59 +02:00
parent 4bfc580dd3
commit f5b1cc38b8
2 changed files with 37 additions and 5 deletions

View File

@ -13011,6 +13011,10 @@ use hard-coded column positions.
55. lastsess: number of seconds since last session assigned to server/backend 55. lastsess: number of seconds since last session assigned to server/backend
56. last_chk: last health check contents or textual error 56. last_chk: last health check contents or textual error
57. last_agt: last agent check contents or textual error 57. last_agt: last agent check contents or textual error
58. qtime: the average queue time in ms over the 1024 last requests
59. ctime: the average connect time in ms over the 1024 last requests
60. rtime: the average response time in ms over the 1024 last requests (0 for TCP)
61. ttime: the average total session time in ms over the 1024 last requests
9.2. Unix Socket commands 9.2. Unix Socket commands

View File

@ -489,7 +489,7 @@ static void stats_dump_csv_header()
"hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail," "hrsp_1xx,hrsp_2xx,hrsp_3xx,hrsp_4xx,hrsp_5xx,hrsp_other,hanafail,"
"req_rate,req_rate_max,req_tot," "req_rate,req_rate_max,req_tot,"
"cli_abrt,srv_abrt," "cli_abrt,srv_abrt,"
"comp_in,comp_out,comp_byp,comp_rsp,lastsess,last_chk,last_agt," "comp_in,comp_out,comp_byp,comp_rsp,lastsess,last_chk,last_agt,qtime,ctime,rtime,ttime,"
"\n"); "\n");
} }
@ -2743,8 +2743,8 @@ static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
chunk_appendf(&trash, "%lld,", chunk_appendf(&trash, "%lld,",
px->fe_counters.p.http.comp_rsp); px->fe_counters.p.http.comp_rsp);
/* lastsess, last_chk, last_agt, */ /* lastsess, last_chk, last_agt, qtime, ctime, rtime, ttime, */
chunk_appendf(&trash, ",,,"); chunk_appendf(&trash, ",,,,,,,");
/* finish with EOL */ /* finish with EOL */
chunk_appendf(&trash, "\n"); chunk_appendf(&trash, "\n");
@ -2867,8 +2867,8 @@ static int stats_dump_li_stats(struct stream_interface *si, struct proxy *px, st
",," ",,"
/* compression: in, out, bypassed, comp_rsp */ /* compression: in, out, bypassed, comp_rsp */
",,,," ",,,,"
/* lastsess, last_chk, last_agt, */ /* lastsess, last_chk, last_agt, qtime, ctime, rtime, ttime, */
",,," ",,,,,,,"
"\n", "\n",
px->id, l->name, px->id, l->name,
l->nbconn, l->counters->conn_max, l->nbconn, l->counters->conn_max,
@ -3020,6 +3020,13 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in
U2H(sv->counters.p.http.rsp[0]), tot ? (int)(100*sv->counters.p.http.rsp[0] / tot) : 0); U2H(sv->counters.p.http.rsp[0]), tot ? (int)(100*sv->counters.p.http.rsp[0] / tot) : 0);
} }
chunk_appendf(&trash, "<tr><th colspan=3>Avg over last 1024 success. conn.</th></tr>");
chunk_appendf(&trash, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(sv->counters.q_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(sv->counters.c_time, TIME_STATS_SAMPLES)));
if (px->mode == PR_MODE_HTTP)
chunk_appendf(&trash, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(sv->counters.d_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(sv->counters.t_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, chunk_appendf(&trash,
"</table></div></u></td>" "</table></div></u></td>"
/* sessions: lbtot, last */ /* sessions: lbtot, last */
@ -3297,6 +3304,13 @@ static int stats_dump_sv_stats(struct stream_interface *si, struct proxy *px, in
chunk_appendf(&trash, "%s,", ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) ? cstr(sv->check.desc) : ""); chunk_appendf(&trash, "%s,", ((sv->check.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) ? cstr(sv->check.desc) : "");
chunk_appendf(&trash, "%s,", ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) ? cstr(sv->agent.desc) : ""); chunk_appendf(&trash, "%s,", ((sv->agent.state & (CHK_ST_ENABLED|CHK_ST_PAUSED)) == CHK_ST_ENABLED) ? cstr(sv->agent.desc) : "");
/* qtime, ctime, rtime, ttime, */
chunk_appendf(&trash, "%u,%u,%u,%u,",
swrate_avg(sv->counters.q_time, TIME_STATS_SAMPLES),
swrate_avg(sv->counters.c_time, TIME_STATS_SAMPLES),
swrate_avg(sv->counters.d_time, TIME_STATS_SAMPLES),
swrate_avg(sv->counters.t_time, TIME_STATS_SAMPLES));
/* finish with EOL */ /* finish with EOL */
chunk_appendf(&trash, "\n"); chunk_appendf(&trash, "\n");
} }
@ -3382,6 +3396,7 @@ static int stats_dump_be_stats(struct stream_interface *si, struct proxy *px, in
"<tr><th>- HTTP 5xx responses:</th><td>%s</td></tr>" "<tr><th>- HTTP 5xx responses:</th><td>%s</td></tr>"
"<tr><th>- other responses:</th><td>%s</td></tr>" "<tr><th>- other responses:</th><td>%s</td></tr>"
"<tr><th>Intercepted requests:</th><td>%s</td></tr>" "<tr><th>Intercepted requests:</th><td>%s</td></tr>"
"<tr><th colspan=3>Avg over last 1024 success. conn.</th></tr>"
"", "",
U2H(px->be_counters.p.http.cum_req), U2H(px->be_counters.p.http.cum_req),
U2H(px->be_counters.p.http.rsp[1]), U2H(px->be_counters.p.http.rsp[1]),
@ -3396,6 +3411,12 @@ static int stats_dump_be_stats(struct stream_interface *si, struct proxy *px, in
U2H(px->be_counters.intercepted_req)); U2H(px->be_counters.intercepted_req));
} }
chunk_appendf(&trash, "<tr><th>- Queue time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(px->be_counters.q_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, "<tr><th>- Connect time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(px->be_counters.c_time, TIME_STATS_SAMPLES)));
if (px->mode == PR_MODE_HTTP)
chunk_appendf(&trash, "<tr><th>- Response time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(px->be_counters.d_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, "<tr><th>- Total time:</th><td>%s</td><td>ms</td></tr>", U2H(swrate_avg(px->be_counters.t_time, TIME_STATS_SAMPLES)));
chunk_appendf(&trash, chunk_appendf(&trash,
"</table></div></u></td>" "</table></div></u></td>"
/* sessions: lbtot, last */ /* sessions: lbtot, last */
@ -3530,6 +3551,13 @@ static int stats_dump_be_stats(struct stream_interface *si, struct proxy *px, in
/* lastsess, last_chk, last_agt, */ /* lastsess, last_chk, last_agt, */
chunk_appendf(&trash, "%d,,,", be_lastsession(px)); chunk_appendf(&trash, "%d,,,", be_lastsession(px));
/* qtime, ctime, rtime, ttime, */
chunk_appendf(&trash, "%u,%u,%u,%u,",
swrate_avg(px->be_counters.q_time, TIME_STATS_SAMPLES),
swrate_avg(px->be_counters.c_time, TIME_STATS_SAMPLES),
swrate_avg(px->be_counters.d_time, TIME_STATS_SAMPLES),
swrate_avg(px->be_counters.t_time, TIME_STATS_SAMPLES));
/* finish with EOL */ /* finish with EOL */
chunk_appendf(&trash, "\n"); chunk_appendf(&trash, "\n");
} }