• buffer pool size of total ram no data 亲测有效


    本文使用docker安装 下载文件安装也是同一种思路 

     1.必须要有的镜像 

    1. node-exporter:
    2. image: quay.io/prometheus/node-exporter
    3. container_name: node-exporter
    4. hostname: node-exporter
    5. restart: always
    6. ports:
    7. - "9100:9100"
    8. networks:
    9. - monitor
    10. exporter:
    11. container_name: mysql-exporter
    12. image: prom/mysqld-exporter
    13. restart: always
    14. ports:
    15. - "9104:9104"
    16. networks:
    17. - monitor
    18. extra_hosts:
    19. - "host.docker.internal:host-gateway"
    20. environment:
    21. - DATA_SOURCE_NAME=账号:密码@(host.docker.internal:3306)/
    22. prometheus:
    23. container_name: prometheus
    24. image: prom/prometheus
    25. networks:
    26. - monitor
    27. ports:
    28. - "9090:9090"
    29. volumes:
    30. - /opt/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
    31. grafana:
    32. container_name: grafana
    33. image: grafana/grafana
    34. networks:
    35. - monitor
    36. environment:
    37. - GF_SECURITY_ADMIN_PASSWORD=admin
    38. ports:
    39. - "13000:3000"
    40. volumes:
    41. - /opt/Grafana:/var/lib/grafana
    42. networks:
    43. monitor:

    node-exporter  获取监控机器系统数据

    mysql-exporter 获取mysql数据

    prometheus 普罗米修斯数据库

    grafana  数据展示

    上面四个镜像一个都不能少,特别是node-exporter,下面讲原因

    prometheus yml

    1. - job_name: 'prometheus'
    2. static_configs:
    3. - targets: ['prometheus:9090']
    4. labels:
    5. appname: 'Prometheus'
    6. - job_name: 'node_exporter'
    7. scrape_interval: 10s
    8. static_configs:
    9. - target: ['mysql-exporter:9100']
    10. labels:
    11. instance: 'mysql-export_3306'
    12. - job_name: 'mysql'
    13. scrape_interval: 10s
    14. static_configs:
    15. - targets: ['mysql-exporter:9104']
    16. labels:
    17. instance: 'mysql-export_3306'
    18. appname: 'mysql'

    我使用的自定义网络所以 ip直接写成服务名 

    上面三个节点一个都不能少 与上面的镜像对应 

    注意instance 两个实例名称一定要保持一致

    现在解析上面为什么要有4个镜像,下面为什么有三个节点,以及为什么instance名称要保持一致

    如果你的镜像没有 “node-exporter  获取监控机器系统数据” 这个镜像,buffer pool size of total将一直显示无数据,因为这个数据没有采集,而采集这个数据需要“node-exporter ”这个镜像,所以一定要需要这个镜像,整个mysql监控,只有buffer pool size of total这个属性需要node-exporter这个节点采集的信息,所以监控显示只有buffer pool size of total这个属性nodata,其它都是正常显示

    现在来看下buffer pool size of total这个属性的采集公式

    (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_global_variables_innodb_buffer_pool_size这个属性需要prom/mysqld-exporter这个镜像采集,而node_memory_MemTotal_bytes这个属性则需要node-exporter这个镜像采集,综上所述

    为什么需要四个镜像和三个节点的原因解释清楚了。

    如果这个时候你去启动应用你会发现 buffer pool size of total 仍然显示是nodata

    原因如下这个采集公式中

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

    instance实例默认使用的是'$host',也就是mysqlexporter节点

    你的应该是ip加端口号,或者是服务名加端口号

    注意 上面说过  buffer pool size of total 这个属性需要两部分数据

    mysql_global_variables_innodb_buffer_pool_size(由mysqlexporter提供)和node_memory_MemTotal_bytes(nodeexporter提供)

    而此时的实例名称是myqlexporter 所以只显示了mysql_global_variables_innodb_buffer_pool_size的值,而node_memory_MemTotal_bytes查找不到这个属性  任何数字除以一个未定义的字段显示的必然是 未定义也就是nodata

    此时你可能会想,我可以把instance这个实例换掉 

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

    上面的除数 用mysqlexporter节点,而下面的被除数用nodeexport节点,

    写成如下格式

    (mysql_global_variables_innodb_buffer_pool_size{instance="mysql-exporter:端口号} * 100) / on (instance) node_memory_MemTotal_bytes{instance="node-exporter:端口号"}

    想法是美好的,但是现实很残酷,不行,仍然是nodata,

    目前不支持这种双实例的写法 ,然后研究发现有一种动态实例的写法 

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

    换成如下写法即可

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

    换成这种写法有的人可以,有的人不可以,可以的人 用的ip+端口号去采集数据,不可以的人用的是:服务名+端口号,为什么前者可以而后者不可以,原因是上面的替换公式用的是正则匹配“(.*):.*")”,这个结果匹配下来是前面ip不变而端口号变了,所以达到动态instance的效果,而用服务名+端口号 也用这个正则去匹配的话,是匹配不成功的,因为前面的ip变成了服务名,而服务名是不可能相同的,也就永远不肯匹配成功。

    用ip+port这种形式的buffer pool size of total 这个属性 到这里已经成功返回值了,而用服务名的则不行,那用服务名+端口这种形式应该怎么办

    给mysql监控配置和主机监控配置指定同样的instance标签

    这样同一个实例下就会有两个节点,发现 node-exporter和mysql-exporter两个服务,也就可以获取

    mysql_global_variables_innodb_buffer_pool_size和 node_memory_MemTotal_bytes两个属性

    此时host会显示一个mysql1,如下

    如果出现了,则buffer pool size of total ram 一定正常显示了!

    至此大功告成!!! 

  • 相关阅读:
    (JavaEE) 多线程基础3——多线程的代码案例 (单例模式, 阻塞队列,定时器)详解!!!
    chrome/Edge搜索技巧
    无线传感器网络数据压缩与融合及安全机制的matlab仿真
    React中插槽处理机制
    JVM 别和我说你还不知道这几种垃圾回收器?Serial |Parallel|ParNew|CMS|G1|ZGC
    mingw 编译 curl ,Qt 工程使用
    关于对Java中volatile关键字的理解与简述
    Badboy录制jmeter性能测试脚本
    Fastbin attack&&Double free和Unsortbin leak的综合使用
    浙大版《数据结构学习与实验指导(第2版)》笛卡尔树
  • 原文地址:https://blog.csdn.net/m0_63163813/article/details/128141727