MINOR: contrib/prometheus-exporter: export build_info
commit c55a626217
("MINOR: contrib/prometheus-exporter: Add
missing global and per-server metrics") is renaming two metrics between
v2.2 and v2.3:
server_idle_connections_current
server_idle_connections_limit
It is breaking some tools which are making use of those metrics while
supporting several haproxy versions. This build_info will permit tools
which make use of metrics to be able to match the haproxy version and
change the list of expected metrics. This was possible using the haproxy
stats socket but not with prometheus export.
This patch follows prometheus best pratices to export specific software
informations. It is adding a new field `build_info` so we can extend it
to other parameters if needed in the future.
example output:
# HELP haproxy_process_build_info HAProxy build info.
# TYPE haproxy_process_build_info gauge
haproxy_process_build_info{version="2.4-dev5-2e1a3f-5"} 1
Even though it is not a bugfix, this patch will make more sense when
backported up to >= 2.0
Signed-off-by: William Dauchy <wdauchy@gmail.com>
This commit is contained in:
parent
22586524e3
commit
5a982a7165
|
@ -38,6 +38,7 @@
|
||||||
#include <haproxy/stream.h>
|
#include <haproxy/stream.h>
|
||||||
#include <haproxy/stream_interface.h>
|
#include <haproxy/stream_interface.h>
|
||||||
#include <haproxy/task.h>
|
#include <haproxy/task.h>
|
||||||
|
#include <haproxy/version.h>
|
||||||
|
|
||||||
/* Prometheus exporter applet states (appctx->st0) */
|
/* Prometheus exporter applet states (appctx->st0) */
|
||||||
enum {
|
enum {
|
||||||
|
@ -82,12 +83,17 @@ enum {
|
||||||
*/
|
*/
|
||||||
#define PROMEX_MAX_METRIC_LENGTH 512
|
#define PROMEX_MAX_METRIC_LENGTH 512
|
||||||
|
|
||||||
|
/* Some labels for build_info */
|
||||||
|
#define PROMEX_VERSION_LABEL "version=\"" HAPROXY_VERSION "\""
|
||||||
|
#define PROMEX_BUILDINFO_LABEL PROMEX_VERSION_LABEL
|
||||||
|
|
||||||
/* Matrix used to dump global metrics. Each metric points to the next one to be
|
/* Matrix used to dump global metrics. Each metric points to the next one to be
|
||||||
* processed or 0 to stop the dump. */
|
* processed or 0 to stop the dump. */
|
||||||
const int promex_global_metrics[INF_TOTAL_FIELDS] = {
|
const int promex_global_metrics[INF_TOTAL_FIELDS] = {
|
||||||
[INF_NAME] = INF_NBTHREAD,
|
[INF_NAME] = INF_BUILD_INFO,
|
||||||
[INF_VERSION] = 0,
|
[INF_VERSION] = 0,
|
||||||
[INF_RELEASE_DATE] = 0,
|
[INF_RELEASE_DATE] = 0,
|
||||||
|
[INF_BUILD_INFO] = INF_NBTHREAD,
|
||||||
[INF_NBTHREAD] = INF_NBPROC,
|
[INF_NBTHREAD] = INF_NBPROC,
|
||||||
[INF_NBPROC] = INF_PROCESS_NUM,
|
[INF_NBPROC] = INF_PROCESS_NUM,
|
||||||
[INF_PROCESS_NUM] = INF_UPTIME_SEC,
|
[INF_PROCESS_NUM] = INF_UPTIME_SEC,
|
||||||
|
@ -469,6 +475,7 @@ const struct ist promex_inf_metric_names[INF_TOTAL_FIELDS] = {
|
||||||
[INF_NAME] = IST("name"),
|
[INF_NAME] = IST("name"),
|
||||||
[INF_VERSION] = IST("version"),
|
[INF_VERSION] = IST("version"),
|
||||||
[INF_RELEASE_DATE] = IST("release_date"),
|
[INF_RELEASE_DATE] = IST("release_date"),
|
||||||
|
[INF_BUILD_INFO] = IST("build_info"),
|
||||||
[INF_NBTHREAD] = IST("nbthread"),
|
[INF_NBTHREAD] = IST("nbthread"),
|
||||||
[INF_NBPROC] = IST("nbproc"),
|
[INF_NBPROC] = IST("nbproc"),
|
||||||
[INF_PROCESS_NUM] = IST("relative_process_id"),
|
[INF_PROCESS_NUM] = IST("relative_process_id"),
|
||||||
|
@ -641,6 +648,7 @@ const struct ist promex_inf_metric_desc[INF_TOTAL_FIELDS] = {
|
||||||
[INF_NAME] = IST("Product name."),
|
[INF_NAME] = IST("Product name."),
|
||||||
[INF_VERSION] = IST("HAProxy version."),
|
[INF_VERSION] = IST("HAProxy version."),
|
||||||
[INF_RELEASE_DATE] = IST("HAProxy release date."),
|
[INF_RELEASE_DATE] = IST("HAProxy release date."),
|
||||||
|
[INF_BUILD_INFO] = IST("HAProxy build info."),
|
||||||
[INF_NBTHREAD] = IST("Configured number of threads."),
|
[INF_NBTHREAD] = IST("Configured number of threads."),
|
||||||
[INF_NBPROC] = IST("Configured number of processes."),
|
[INF_NBPROC] = IST("Configured number of processes."),
|
||||||
[INF_PROCESS_NUM] = IST("Relative process id, starting at 1."),
|
[INF_PROCESS_NUM] = IST("Relative process id, starting at 1."),
|
||||||
|
@ -813,6 +821,7 @@ const struct ist promex_inf_metric_labels[INF_TOTAL_FIELDS] = {
|
||||||
[INF_NAME] = IST(""),
|
[INF_NAME] = IST(""),
|
||||||
[INF_VERSION] = IST(""),
|
[INF_VERSION] = IST(""),
|
||||||
[INF_RELEASE_DATE] = IST(""),
|
[INF_RELEASE_DATE] = IST(""),
|
||||||
|
[INF_BUILD_INFO] = IST(PROMEX_BUILDINFO_LABEL),
|
||||||
[INF_NBTHREAD] = IST(""),
|
[INF_NBTHREAD] = IST(""),
|
||||||
[INF_NBPROC] = IST(""),
|
[INF_NBPROC] = IST(""),
|
||||||
[INF_PROCESS_NUM] = IST(""),
|
[INF_PROCESS_NUM] = IST(""),
|
||||||
|
@ -978,6 +987,7 @@ const struct ist promex_inf_metric_types[INF_TOTAL_FIELDS] = {
|
||||||
[INF_NAME] = IST("untyped"),
|
[INF_NAME] = IST("untyped"),
|
||||||
[INF_VERSION] = IST("untyped"),
|
[INF_VERSION] = IST("untyped"),
|
||||||
[INF_RELEASE_DATE] = IST("untyped"),
|
[INF_RELEASE_DATE] = IST("untyped"),
|
||||||
|
[INF_BUILD_INFO] = IST("gauge"),
|
||||||
[INF_NBTHREAD] = IST("gauge"),
|
[INF_NBTHREAD] = IST("gauge"),
|
||||||
[INF_NBPROC] = IST("gauge"),
|
[INF_NBPROC] = IST("gauge"),
|
||||||
[INF_PROCESS_NUM] = IST("gauge"),
|
[INF_PROCESS_NUM] = IST("gauge"),
|
||||||
|
@ -1327,6 +1337,9 @@ static int promex_dump_global_metrics(struct appctx *appctx, struct htx *htx)
|
||||||
#endif
|
#endif
|
||||||
while (appctx->st2 && appctx->st2 < INF_TOTAL_FIELDS) {
|
while (appctx->st2 && appctx->st2 < INF_TOTAL_FIELDS) {
|
||||||
switch (appctx->st2) {
|
switch (appctx->st2) {
|
||||||
|
case INF_BUILD_INFO:
|
||||||
|
metric = mkf_u32(FN_GAUGE, 1);
|
||||||
|
break;
|
||||||
case INF_NBTHREAD:
|
case INF_NBTHREAD:
|
||||||
metric = mkf_u32(FO_CONFIG|FS_SERVICE, global.nbthread);
|
metric = mkf_u32(FO_CONFIG|FS_SERVICE, global.nbthread);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -323,6 +323,7 @@ enum info_field {
|
||||||
INF_BYTES_OUT_RATE,
|
INF_BYTES_OUT_RATE,
|
||||||
INF_DEBUG_COMMANDS_ISSUED,
|
INF_DEBUG_COMMANDS_ISSUED,
|
||||||
INF_CUM_LOG_MSGS,
|
INF_CUM_LOG_MSGS,
|
||||||
|
INF_BUILD_INFO,
|
||||||
|
|
||||||
/* must always be the last one */
|
/* must always be the last one */
|
||||||
INF_TOTAL_FIELDS
|
INF_TOTAL_FIELDS
|
||||||
|
|
Loading…
Reference in New Issue