@@ -148,9 +148,17 @@ static int collect_outputs(msgpack_sbuffer *mp_sbuf, msgpack_packer *mp_pck,
148148
149149static int collect_metrics (struct flb_me * me )
150150{
151+ int ret ;
151152 int keys ;
153+ char * buf_data ;
154+ size_t buf_size ;
152155 struct flb_config * ctx = me -> config ;
156+ struct cmt * cmt ;
153157
158+ /*
159+ * msgpack buffer for old-style /v1/metrics
160+ * ----------------------------------------
161+ */
154162 msgpack_sbuffer mp_sbuf ;
155163 msgpack_packer mp_pck ;
156164
@@ -166,15 +174,36 @@ static int collect_metrics(struct flb_me *me)
166174 collect_filters (& mp_sbuf , & mp_pck , me -> config );
167175 collect_outputs (& mp_sbuf , & mp_pck , me -> config );
168176
177+ /*
178+ * If the built-in HTTP server is enabled, push metrics and health checks
179+ * ---------------------------------------------------------------------
180+ */
181+
169182#ifdef FLB_HAVE_HTTP_SERVER
170183 if (ctx -> http_server == FLB_TRUE ) {
171- /* v1 metrics (old) */
184+ /* /v1/ metrics (old) */
172185 flb_hs_push_pipeline_metrics (ctx -> http_ctx , mp_sbuf .data , mp_sbuf .size );
186+
187+ /* /v1/health */
173188 if (ctx -> health_check == FLB_TRUE ) {
174189 flb_hs_push_health_metrics (ctx -> http_ctx , mp_sbuf .data , mp_sbuf .size );
175190 }
191+
192+ /* /v2/metrics: retrieve a CMetrics context with internal metrics */
193+ cmt = flb_me_get_cmetrics (ctx );
194+ if (cmt ) {
195+ /* encode context to msgpack */
196+ ret = cmt_encode_msgpack_create (cmt , & buf_data , & buf_size );
197+ if (ret == 0 ) {
198+ flb_hs_push_metrics (ctx -> http_ctx , buf_data , buf_size );
199+ cmt_encode_msgpack_destroy (buf_data );
200+ }
201+ cmt_destroy (cmt );
202+ }
176203 }
177204#endif
205+
206+ /* destroy msgpack buffer for old-style /v1/metrics */
178207 msgpack_sbuffer_destroy (& mp_sbuf );
179208
180209
0 commit comments