• Buffer Pool Size of Total RAM No data


    1.问题描述

    1)问题现象

    通过prometheus监控mysql实例和服务器,使用grafana做可视化展示,grafana 中添加 7362 号dashboard 作为mysql看板,添加 11074 号dashboard 作为主机看板。但是添加后查看 MySQL Overview 看板发现 Buffer Pool Size of Total RAM 这个panel 显示 No data,截图如下:

     2) prometheus 中关于mysql实例和主机监控配置方式如下:

    prometheus 配置文件中指定了mysql监控任务及mysql服务器监控任务

     下面我们来看一下具体的mysql实例及对应的mysql服务器监控怎么配置的

    1. 先看服务器监控配置文件
    2. vi prd_host.yml
    3. - targets: ['172.25.xx.xxx:9100']
    4. labels:
    5. instance: '172.25.xx.xxx'
    6. env: 'xxx mysql 服务器'
    7. group: 'xxx'
    8. 再看mysql实例监控配置文件
    9. vi prd_mysql.json
    10. [{
    11. "targets": [ "172.25.xx.xxx:9104" ],
    12. "labels": {
    13. "instance": "172.25.xx.xxx:3306",
    14. "env": "xxx mysql",
    15. "job": "mysqld"
    16. }
    17. }
    18. ]

    像上面这样一通配置下来,最终导致MySQL Overview 看板的 Buffer Pool Size of Total RAM 这个panel 显示 No data。

    2.问题分析

    我们先看一下Buffer Pool Size of Total RAM 这个panel的计算公式:

    (mysql_global_variables_innodb_buffer_pool_size{instance="$host"} * 100) / on (instance) node_memory_MemTotal_bytes{instance="$host"}
    

    #这个公式中用到了 mysql_global_variables_innodb_buffer_pool_size 和 node_memory_MemTotal_bytes 两个收集值

    分别获取mysql监控和node监控所有的收集值
    curl http://127.0.0.1:9104/metrics >mysql_metrics.txt
    curl 127.0.0.1:9100/metrics >node_metrics.txt

       检查发现mysql_global_variables_innodb_buffer_pool_size 这个值是mysql监控收集的,但是node_memory_MemTotal_bytes 这个值是node监控收集的。

      所以上面的查询是在一个计算公式中即使用了node_export收集的值又使用mysqld_exprot使用的值。以上面的公式为例,我们怎么让他能够同时获取两个不同监控客户的的信息呢?我们看到上面的公式中根据 instance 来识别和获取监控值,如果我们在配置文件中不显示指定instance 标签的话,默认使用target指定值作为instance值,比如上面的主机监控如果没有指定 instance 值,那么默认的instance值即为172.25.xx.xxx:9100。如果在target 下显示指定了 instance 标签那么instance值即为标签指定值172.25.xx.xxx。

      所以如果我们给172.25.xx.xxx 它的服务器监控和mysql实例监控都指定同样的instance标签,就可以同时获取到不同监控客户端的值了。

    NOTE:有个疑问,如果两个监控客户端都收集了同样的信息比如node_memory_MemTotal_bytes,我们指定同样的instance 标签会出现什么问题呢?

    3.问题处理

      给mysql监控配置和主机监控配置指定同样的instance标签,这再观察Buffer Pool Size of Total RAM 这个panel,就会正常显示数据了。

    例如:

    1. 先看服务器监控配置文件
    2. vi prd_host.yml
    3. - targets: ['172.25.xx.xxx:9100']
    4. labels:
    5. instance: '172.25.xx.xxx_3306'
    6. env: 'xxx mysql 服务器'
    7. group: 'xxx'
    8. 再看mysql实例监控配置文件
    9. vi prd_mysql.json
    10. [{
    11. "targets": [ "172.25.xx.xxx:9104" ],
    12. "labels": {
    13. "instance": "172.25.xx.xxx_3306",
    14. "env": "xxx mysql",
    15. "job": "mysqld"
    16. }
    17. }
    18. ]

  • 相关阅读:
    Scratch3之AI集成 - flappy bird AI版本
    2023 年 Arm A-Profile 架构发展
    vue xterm4.x自定义请求报文
    如何计算 GPT 的 Tokens 数量?
    2023年6月电子学会Python等级考试试卷(五级)答案解析
    Java“牵手”lazada商品列表页数据采集+lazada商品价格数据排序,lazadaAPI接口申请指南
    Odoo免费开源零售门店管理系统:如何设置收银终端的支付方式
    【附源码】计算机毕业设计JAVA大数据文章发布系统
    gradle android 配置 build 变体
    51单片机应用从零开始(六)·逻辑运算
  • 原文地址:https://blog.csdn.net/shaochenshuo/article/details/127754842