This patch reintroduces haproxy_backend_agg_server_check_status metric as in 42d7c402d but with the right data source. --- addons/promex/service-prometheus.c | 26 ++++++++++++++++++++++++++ include/haproxy/stats-t.h | 1 + src/stats.c | 4 ++++ 3 files changed, 31 insertions(+)
diff --git a/addons/promex/service-prometheus.c b/addons/promex/service-prometheus.c index c24f0895c..265ba97c4 100644 --- a/addons/promex/service-prometheus.c +++ b/addons/promex/service-prometheus.c @@ -302,6 +302,7 @@ const struct promex_metric promex_st_metrics[ST_F_TOTAL_FIELDS] = { [ST_F_NEED_CONN_EST] = { .n = IST("need_connections_current"), .type = PROMEX_MT_GAUGE, .flags = ( PROMEX_FL_SRV_METRIC) }, [ST_F_UWEIGHT] = { .n = IST("uweight"), .type = PROMEX_MT_GAUGE, .flags = ( PROMEX_FL_BACK_METRIC | PROMEX_FL_SRV_METRIC) }, [ST_F_AGG_SRV_STATUS ] = { .n = IST("agg_server_status"), .type = PROMEX_MT_GAUGE, .flags = ( PROMEX_FL_BACK_METRIC ) }, + [ST_F_AGG_SRV_CHECK_STATUS] = { .n = IST("agg_server_check_status"), .type = PROMEX_MT_GAUGE, .flags = ( PROMEX_FL_BACK_METRIC ) }, }; /* Description of overridden stats fields */ @@ -811,6 +812,7 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx) double secs; enum promex_back_state bkd_state; enum promex_srv_state srv_state; + enum healthcheck_status srv_check_status; for (;ctx->field_num < ST_F_TOTAL_FIELDS; ctx->field_num++) { if (!(promex_st_metrics[ctx->field_num].flags & ctx->flags)) @@ -819,6 +821,8 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx) while (ctx->px) { struct promex_label labels[PROMEX_MAX_LABELS-1] = {}; unsigned int srv_state_count[PROMEX_SRV_STATE_COUNT] = { 0 }; + unsigned int srv_check_count[HCHK_STATUS_SIZE] = { 0 }; + const char *check_state; px = ctx->px; @@ -852,6 +856,28 @@ static int promex_dump_back_metrics(struct appctx *appctx, struct htx *htx) } ctx->obj_state = 0; goto next_px; + case ST_F_AGG_SRV_CHECK_STATUS: + if (!px->srv) + goto next_px; + sv = px->srv; + while (sv) { + srv_check_status = sv->check.status; + srv_check_count[srv_check_status] += 1; + sv = sv->next; + } + for (; ctx->obj_state < HCHK_STATUS_SIZE; ctx->obj_state++) { + if (get_check_status_result(ctx->obj_state) < CHK_RES_FAILED) + continue; + val = mkf_u32(FO_STATUS, srv_check_count[ctx->obj_state]); + check_state = get_check_status_info(ctx->obj_state); + labels[1].name = ist("state"); + labels[1].value = ist(check_state); + if (!promex_dump_metric(appctx, htx, prefix, &promex_st_metrics[ctx->field_num], + &val, labels, &out, max)) + goto full; + } + ctx->obj_state = 0; + goto next_px; case ST_F_STATUS: bkd_state = ((px->lbprm.tot_weight > 0 || !px->srv) ? 1 : 0); for (; ctx->obj_state < PROMEX_BACK_STATE_COUNT; ctx->obj_state++) { diff --git a/include/haproxy/stats-t.h b/include/haproxy/stats-t.h index babea31e1..66bacd065 100644 --- a/include/haproxy/stats-t.h +++ b/include/haproxy/stats-t.h @@ -456,6 +456,7 @@ enum stat_field { ST_F_NEED_CONN_EST, ST_F_UWEIGHT, ST_F_AGG_SRV_STATUS , + ST_F_AGG_SRV_CHECK_STATUS, /* must always be the last one */ ST_F_TOTAL_FIELDS diff --git a/src/stats.c b/src/stats.c index dd3044b58..89c7f701b 100644 --- a/src/stats.c +++ b/src/stats.c @@ -260,6 +260,7 @@ const struct name_desc stat_fields[ST_F_TOTAL_FIELDS] = { [ST_F_NEED_CONN_EST] = { .name = "need_conn_est", .desc = "Estimated needed number of connections"}, [ST_F_UWEIGHT] = { .name = "uweight", .desc = "Server's user weight, or sum of active servers' user weights for a backend" }, [ST_F_AGG_SRV_STATUS ] = { .name = "agg_server_status", .desc = "Backend's aggregated gauge of servers' status" }, + [ST_F_AGG_SRV_CHECK_STATUS] = { .name = "agg_server_check_status", .desc = "Backend's aggregated gauge of servers' state check status" }, }; /* one line of info */ @@ -2676,6 +2677,9 @@ int stats_fill_be_stats(struct proxy *px, int flags, struct field *stats, int le case ST_F_AGG_SRV_STATUS : metric = mkf_u32(FN_GAUGE, 0); break; + case ST_F_AGG_SRV_CHECK_STATUS: + metric = mkf_u32(FN_GAUGE, 0); + break; case ST_F_WEIGHT: metric = mkf_u32(FN_AVG, (px->lbprm.tot_weight * px->lbprm.wmult + px->lbprm.wdiv - 1) / px->lbprm.wdiv); break; -- 2.25.1