处理计算中缺少的指标



我使用一个公式来计算MySQL实例的大约最大内存消耗(简化并用PromQL编写(如下:

(
mysql_global_variables_key_buffer_size +
mysql_global_variables_query_cache_size +
mysql_global_variables_tmp_table_size +
mysql_global_variables_innodb_buffer_pool_size +
mysql_global_variables_innodb_additional_mem_pool_size +
mysql_global_variables_innodb_log_buffer_size +
(
mysql_global_variables_max_connections *
(
mysql_global_variables_sort_buffer_size +
mysql_global_variables_read_buffer_size +
mysql_global_variables_read_rnd_buffer_size +
mysql_global_variables_join_buffer_size +
mysql_global_variables_thread_stack +
mysql_global_variables_binlog_cache_size
)
)
)

不幸的是,如果计算中包含mysql_global_variables_innodb_additional_mem_pool_size指标,则并不总是为每个实例提供指标,从而导致"无数据"。

有一个absent(v instant-vector)函数可以用来解决这个问题,但我不确定如何解决这个问题。

我希望将不存在的度量替换为常量(在这种情况下0(。可能吗?

您能否为我提供一些有关如何处理PromQL计算中缺少指标的提示?

mysql_global_variables_innodb_additional_mem_pool_size or up * 0

https://www.robustperception.io/existential-issues-with-metrics/更详细地研究了这个问题。

接受的解决方案将无法很好地工作,以防我们尝试对两个指标求和,这两个指标都可能丢失。 在我的特定情况下,它是mysql_info_schema_innodb_metrics_transaction_trx_rseg_history_len(来自mariadb(和mysql_global_status_innodb_history_list_length(来自mysql(。 提供的解决方案为我提供了单个主机的 3 个图表。

我使用了以下解决方法:

(metric1{hostname="h"} or on() vector(0))+(metric2{hostname="h"} or on() vector(0))

取自这里: https://github.com/grafana/grafana/issues/2393#issuecomment-192522042

最新更新