InnoDB 缓冲池大小占总 RAM 的百分比 - (总 RAM 的缓冲池大小)返回无数据

Posted

技术标签:

【中文标题】InnoDB 缓冲池大小占总 RAM 的百分比 - (总 RAM 的缓冲池大小)返回无数据【英文标题】:InnoDB Buffer Pool Size % of Total RAM - (Buffer Pool Size of Total RAM) returning No Data 【发布时间】:2021-07-17 12:44:32 【问题描述】:

我已经安装了 prometheus node_exporter 运行在端口 9100mysqld_exporterrunning 在端口 9104 并配置 grafana 使用 prometheus 作为默认源。

在 grafana 浏览器中,我可以使用以下方式查询 node_memory_MemTotal_bytes

node_memory_MemTotal_bytesinstance="10.0.0.4:9100"

注意端口 9100 (node_exporter)

我还可以使用以下方法查询innodb_buffer_pool_size

 mysql_global_variables_innodb_buffer_pool_sizeinstance="10.0.0.4:9104"

注意端口 9104 (mysqld_exporter)

我想计算Buffer pool size of total RAM 使用:

(mysql_global_variables_innodb_buffer_pool_sizeinstance=~"$host" * 100) / on (instance) node_memory_MemTotal_bytesinstance=~"$host"

我遇到的问题是$host 是IP 和端口:10.0.0.4:9104,并且只能从mysqld_exporter 获得mysql_global_variables_innodb_buffer_pool_size 而不是node_memory_MemTotal_bytes,因为它在端口9100 中,因为这是我得到No Data

关于如何混合来自node_exportermysqld_exporter 的指标的数据有什么想法吗?

这是prometheus的配置:

- job_name: test_mysql
  scheme: http
  static_configs:
  - targets:
    - 10.0.0.4:9104

- job_name: test_node
  scheme: http
  static_configs:
  - targets:
    - 10.0.0.4:9100

【问题讨论】:

【参考方案1】:

按照步骤更新缓冲池大小-

    编辑 innodb_buffer_pool_size MySQL 概述/编辑面板,替换 Metrics (mysql_global_variables_innodb_buffer_pool_sizeinstance="$host" * 100) / on (instance) node_memory_MemTotal_bytesinstance="$host" 进入avg by (node_name) ((mysql_global_variables_innodb_buffer_pool_sizeservice_name=~"" * 100)) /on (node_name) (avg by (node_name) (node_memory_MemTotal_bytesnode_name=~""))

替换旧指标,如下所示 -

    保存设置

【讨论】:

评论图片 嗨@shelwinsu,您能否详细说明这是如何工作的node_name=~"" 自动获取$host:port【参考方案2】:

我花了一个下午的时间来解决它,所以我想我会分享它以防万一这可以帮助其他人。

我终于能够使用label_replace 函数使其工作。

我用以下查询替换了原始查询:

(label_replace(mysql_global_variables_innodb_buffer_pool_sizeinstance="$host", "nodename", "$1", "instance", "(.*):.*") * 100) / on(nodename) (label_replace(node_memory_MemTotal_bytes, "nodename", "$1", "instance", "(.*):.*"))

label_replace 允许(除其他外)添加新标签,该标签可以基于现有标签的值。在这种情况下,我们使用它来添加一个新的 nodename 标签,该标签获取实例标签 (hostname:port) 的值,我们从中删除了 :port 部分。

因此,这允许来自不同导出器实例的指标共享具有相同值的标签,从而在需要时一起使用它们(这里,我们想使用来自mysqld_exportermysql_global_variables_innodb_buffer_pool_size 指标和来自node_memory_MemTotal_bytes 的指标node_exporter 在同一查询中,对于给定的主机)。

HTH。

巴蒂斯特

【讨论】:

以上是关于InnoDB 缓冲池大小占总 RAM 的百分比 - (总 RAM 的缓冲池大小)返回无数据的主要内容,如果未能解决你的问题,请参考以下文章

InnoDB存储引擎介绍-InnoDB缓冲池配置详解

innodb_buffer_pool_size 配置原则和方式

MySQL中InnoDB存储引擎中的哈希算法

innoDB源码阅读笔记--缓冲池

InnoDB源码分析--缓冲池

《InnoDB引擎四》重做日志缓存