mirror of
https://github.com/asterisk/asterisk.git
synced 2025-09-02 19:16:15 +00:00
res_statsd: handle non-standard meter type safely
Meter types are not well supported, lacking support in telegraf, datadog and the official statsd servers. We deprecate meters and provide a compliant fallback for any existing usages. A flag has been introduced to allow meters to fallback to counters. ASTERISK-29513 Change-Id: I5fcb385983a1b88f03696ff30a26b55c546a1dd7
This commit is contained in:
committed by
George Joseph
parent
0460e77e51
commit
b40e97b1d7
@@ -6,3 +6,6 @@
|
|||||||
;add_newline = no ; Append a newline to every event. This is
|
;add_newline = no ; Append a newline to every event. This is
|
||||||
; useful if you want to run a fake statsd
|
; useful if you want to run a fake statsd
|
||||||
; server using netcat (nc -lu 8125)
|
; server using netcat (nc -lu 8125)
|
||||||
|
;meter_support = yes ; Enable/disable the non-standard StatsD Meter type
|
||||||
|
; if disabled falls back to counter
|
||||||
|
; and will append a "_meter" suffix to the metric name
|
5
doc/CHANGES-staging/res_statsd.txt
Normal file
5
doc/CHANGES-staging/res_statsd.txt
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
Subject: Handle non-standard Meter metric type safely
|
||||||
|
|
||||||
|
A meter_support flag has been introduced that defaults to true to maintain current behaviour.
|
||||||
|
If disabled, a counter metric type will be used instead wherever a meter metric type was used,
|
||||||
|
the counter will have a "_meter" suffix appended to the metric name.
|
@@ -41,9 +41,13 @@
|
|||||||
#define AST_STATSD_TIMER "ms"
|
#define AST_STATSD_TIMER "ms"
|
||||||
/*! Distribution of values over time. */
|
/*! Distribution of values over time. */
|
||||||
#define AST_STATSD_HISTOGRAM "h"
|
#define AST_STATSD_HISTOGRAM "h"
|
||||||
/*! Events over time. Sorta like increment-only counters. */
|
/*!
|
||||||
|
* Meters are non-standard and poorly supported by StatsD servers
|
||||||
|
* \deprecated You should switch to counter or stateful counters for a similar effect.
|
||||||
|
*/
|
||||||
#define AST_STATSD_METER "m"
|
#define AST_STATSD_METER "m"
|
||||||
|
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* \brief Send a stat to the configured statsd server.
|
* \brief Send a stat to the configured statsd server.
|
||||||
*
|
*
|
||||||
|
@@ -58,6 +58,10 @@
|
|||||||
you want to fake out a server using netcat
|
you want to fake out a server using netcat
|
||||||
(nc -lu 8125)</synopsis>
|
(nc -lu 8125)</synopsis>
|
||||||
</configOption>
|
</configOption>
|
||||||
|
<configOption name="meter_support">
|
||||||
|
<synopsis>Enable/disable the non-standard StatsD Meter type,
|
||||||
|
if disabled falls back to counter and will append a "_meter" suffix to the metric name</synopsis>
|
||||||
|
</configOption>
|
||||||
</configObject>
|
</configObject>
|
||||||
</configFile>
|
</configFile>
|
||||||
</configInfo>
|
</configInfo>
|
||||||
@@ -89,6 +93,8 @@ struct conf_global_options {
|
|||||||
struct ast_sockaddr statsd_server;
|
struct ast_sockaddr statsd_server;
|
||||||
/*! Prefix to put on every stat. */
|
/*! Prefix to put on every stat. */
|
||||||
char prefix[MAX_PREFIX + 1];
|
char prefix[MAX_PREFIX + 1];
|
||||||
|
/*! Enabled support for non-standard Meter type by default, falls back to counter if disabled */
|
||||||
|
int meter_support;
|
||||||
};
|
};
|
||||||
|
|
||||||
/*! \brief All configuration options for statsd client. */
|
/*! \brief All configuration options for statsd client. */
|
||||||
@@ -142,7 +148,11 @@ void AST_OPTIONAL_API_NAME(ast_statsd_log_string)(const char *metric_name,
|
|||||||
ast_str_append(&msg, 0, "%s.", cfg->global->prefix);
|
ast_str_append(&msg, 0, "%s.", cfg->global->prefix);
|
||||||
}
|
}
|
||||||
|
|
||||||
ast_str_append(&msg, 0, "%s:%s|%s", metric_name, value, metric_type);
|
if (!cfg->global->meter_support && strcmp(metric_type, AST_STATSD_METER)) {
|
||||||
|
ast_str_append(&msg, 0, "%s_meter:%s|%s", metric_name, value, AST_STATSD_COUNTER);
|
||||||
|
} else {
|
||||||
|
ast_str_append(&msg, 0, "%s:%s|%s", metric_name, value, metric_type);
|
||||||
|
}
|
||||||
|
|
||||||
if (sample_rate < 1.0) {
|
if (sample_rate < 1.0) {
|
||||||
ast_str_append(&msg, 0, "|@%.2f", sample_rate);
|
ast_str_append(&msg, 0, "|@%.2f", sample_rate);
|
||||||
@@ -360,6 +370,10 @@ static int load_module(void)
|
|||||||
"", OPT_CHAR_ARRAY_T, 0,
|
"", OPT_CHAR_ARRAY_T, 0,
|
||||||
CHARFLDSET(struct conf_global_options, prefix));
|
CHARFLDSET(struct conf_global_options, prefix));
|
||||||
|
|
||||||
|
aco_option_register(&cfg_info, "meter_support", ACO_EXACT, global_options,
|
||||||
|
"yes", OPT_BOOL_T, 1,
|
||||||
|
FLDSET(struct conf_global_options, meter_support));
|
||||||
|
|
||||||
if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) {
|
if (aco_process_config(&cfg_info, 0) == ACO_PROCESS_ERROR) {
|
||||||
struct conf *cfg;
|
struct conf *cfg;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user