grafana mysql overviewer面板值缺失的处理

mysql

https://grafana.com/grafana/dashboards/?search=mysql+overview

mysql 是 5.7

7362

ID: 7362

By: nasskach

Last update: 2018-08-07T09:26:18

Downloads: 1,439,710

reviews: 11

导入如图面板

image-20240226153333522

导入后以下几个指标是拿不到数据的

  • BufferPool Size of Total RAM
  • Process States
  • Top Process States Hourly
  • System Charts

image-20240221151701424

image-20240221151735309

BufferPool Size of Total RAM

具体原因参考这篇文章:https://blog.csdn.net/m0_63163813/article/details/128141727

14934

ID: 14934

By: guaiguaile

Last update: 2021-08-27T07:32:25

Downloads: 219

reviews: 0

image-20240226153452906

这两个mysql的面板,有的有值,有的没有值,总结起来2个原因

hostname 和 instance 标签不一样

  • 7362 使用的host

    image-20240227142630929

  • 14934 使用的host

    image-20240227142756272

提问通义千问:

问:node_exporter 和mysqldexporter的内置标签都有哪些

答:

node_exportermysqld_exporter 分别提供了丰富的内置指标,它们都具有多种标签以便区分不同的监控对象和上下文。以下是它们各自一些典型的内置标签:

node_exporter 内置标签:

node_exporter 会暴露许多关于操作系统和硬件资源的指标,下面是一些常见的标签:

  • instance: 指标实例的唯一标识符,通常是Exporter监听的IP地址和端口,例如 localhost:9100
  • job: 在Prometheus配置中定义的作业名称,用于标识一组相同类型的Exporter。
  • cpu: 表示CPU核心编号,用于区分不同CPU核心的指标。
  • device: 对于磁盘、网络接口等指标,表示具体的设备名称。
  • interface: 对于网络流量相关的指标,表示网络接口名称。
  • mode: 在某些情况下,如CPU模式(guest、idle、iowait等)。
  • filesystem: 文件系统的名称,用于标识不同磁盘分区或挂载点。
  • fstype: 文件系统的类型,如ext4、xfs等。

mysqld_exporter 内置标签:

mysqld_exporter 主要关注MySQL数据库服务器的性能指标,以下是一些可能的标签:

  • instance: 类似于node_exporter,标识MySQL服务器的地址和端口。
  • job: 作业名称,同样标识一组MySQL服务器。
  • schema: 数据库Schema名称。
  • user: 连接到数据库的用户。
  • host: 连接MySQL服务器的客户端主机名或IP。
  • query_type: 查询类型的标签,用于区分不同类型的MySQL查询(如select、update、insert等)。

每个Exporter的具体指标及其对应的标签因版本而异,建议查看各自项目的文档以获取最新和详尽的指标列表以及标签信息:

请注意,上述标签列表并不全面,实际使用时请结合具体情况进行分析。

解决

​ 使用hostname变量的dashboard。需要在node_exportermysqld_exporter中增加标签hostname即可,或者直接重命名label。我这里使用的是重命名

  - job_name: 'node'
    basic_auth:
      username: admin
      password: 123456
    relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):(\d+)'  # 匹配IP:port格式
        replacement: '${1}'
        target_label: hostname  # 把instance标签的内容复制到hostname标签
        action: replace
    file_sd_configs:
    - files:
      - 'node.yml'
  - job_name: mysql # To get metrics about the mysql exporter’s targets
    basic_auth:
      username: admin
      password: Mon2024##
    relabel_configs:
      - source_labels: [__address__]
        regex: '(.*):(\d+)'  # 匹配IP:port格式 
        replacement: '${1}'
        target_label: hostname  # 把instance标签的内容复制到hostname标签
        action: replace
    file_sd_configs:
    - files:
      - 'mysql.yml'

除数为0

image-20240227143709347

读延迟

sum((rate(node_disk_read_time_seconds_total{device!~"dm-.+", hostname="$host"}[$interval]) / rate(node_disk_reads_completed_total{device!~"dm-.+", hostname="$host"}[$interval])) or (irate(node_disk_read_time_seconds_total{device!~"dm-.+", hostname="$host"}[5m]) / irate(node_disk_reads_completed_total{device!~"dm-.+", hostname="$host"}[5m])) or avg_over_time(aws_rds_read_latency_average{hostname="$host"}[$interval]) or avg_over_time(aws_rds_read_latency_average{hostname="$host"}[5m]))

写延迟

sum((rate(node_disk_write_time_seconds_total{device!~"dm-.+", hostname="$host"}[$interval]) / rate(node_disk_writes_completed_total{device!~"dm-.+", hostname="$host"}[$interval])) or (irate(node_disk_write_time_seconds_total{device!~"dm-.+", hostname="$host"}[5m]) / irate(node_disk_writes_completed_total{device!~"dm-.+", hostname="$host"}[5m])) or avg_over_time(aws_rds_write_latency_average{hostname="$host"}[$interval]) or avg_over_time(aws_rds_write_latency_average{hostname="$host"}[5m]))

看AI的解释

这段PromQL表达式用于监控特定主机(hostname="$host")的磁盘写入性能,同时也兼容AWS RDS数据库的写入延迟指标。这里假设$host$interval是预先定义好的变量,$host代表待监控的主机名,$interval是一个可变的时间间隔。

表达式分为四部分:

  1. 第一部分

Promql

sum(
  (rate(node_disk_write_time_seconds_total{device!~"dm-.+", hostname="$host"}[$interval]) /
   rate(node_disk_writes_completed_total{device!~"dm-.+", hostname="$host"}[$interval]))
)

这段代码计算的是过去$interval时间内非逻辑卷设备(device!~"dm-.+")的磁盘写入平均响应时间。它通过对node_disk_write_time_seconds_totalnode_disk_writes_completed_total的速率进行计算并相除得出平均每秒的写入时间。

  1. 第二部分

Promql

or (
  irate(node_disk_write_time_seconds_total{device!~"dm-.+", hostname="$host"}[5m]) /
  irate(node_disk_writes_completed_total{device!~"dm-.+", hostname="$host"}[5m])
)

如果在$interval间隔内没有足够的样本点进行计算,这部分提供了一个备选方案,即计算过去5分钟内磁盘写入的平均响应时间。

  1. 第三部分

Promql

or avg_over_time(aws_rds_write_latency_average{hostname="$host"}[$interval])

如果目标主机同时也是AWS RDS实例,这部分会计算过去$interval时间内RDS实例的平均写入延迟(aws_rds_write_latency_average)。

  1. 第四部分

Promql

or avg_over_time(aws_rds_write_latency_average{hostname="$host"}[5m])

如果在$interval间隔内RDS写入延迟指标的数据不足,这部分提供了一个备选方案,即计算过去5分钟内的平均写入延迟。

整个表达式通过 sum() 函数汇总以上四个计算结果,但实际上,sum() 在这里可能并不适用,因为这里涉及的是多个不同类型且无直接累加关系的指标。通常,你会独立监控每个条件,而不是将它们求和。如果目标是为了获取最新的磁盘写入平均响应时间,应分别查看各部分的结果。

  • 监控值

    node_disk_write_time_seconds_total{device="sda",hostname="192.168.1.175"}[5m]
    node_disk_writes_completed_total{device="sda",hostname="192.168.1.175"}[5m]
    
  • 监控都是有值的

    image-20240227162141410

    image-20240227162206019

  • 通过inspect拿到PromQL表达式

    sum((rate(node_disk_read_time_seconds_total{device=~"sd.+", hostname="192.168.1.175"}[5s]) / rate(node_disk_reads_completed_total{device=~"sd.+", hostname="192.168.1.175"}[5s])) or (irate(node_disk_read_time_seconds_total{device!~"dm-.+", hostname="192.168.1.175"}[5m]) / irate(node_disk_reads_completed_total{device!~"dm-.+", hostname="192.168.1.175"}[5m]))
    or avg_over_time(aws_rds_read_latency_average{hostname="192.168.1.175"}[5s]) or avg_over_time(aws_rds_read_latency_average{hostname="192.168.1.175"}[5m]))
    

    image-20240227163135512

  • 在标签data中已经可以发现拿到的值是NaN

image-20240227163212882

  • 执行得到同样的结果

image-20240227163249443

  • 第一部分的值为空(device=可以换其他的盘,2分钟采集一次,5s内大概率没获取到值)
rate(node_disk_read_time_seconds_total{device=~"sd.+", hostname="192.168.1.175"}[5s]) / rate(node_disk_reads_completed_total{device=~"sd.+", hostname="192.168.1.175"}[5s])

image-20240227163339043

  • 第二部分就是NaN了
irate(node_disk_read_time_seconds_total{device=~"sd.+", hostname="192.168.1.175"}[5m]) / irate(node_disk_reads_completed_total{device!="sda.+", hostname="192.168.1.175"}[5m])

image-20240227163444100

  • 再拆发现除数为0
irate(node_disk_reads_completed_total{device!="sda.+", hostname="192.168.1.175"}[5m])

image-20240227163753073

解决

本地测试只保留了sd磁盘

rate(node_disk_read_time_seconds_total{device=~"sd.+", hostname="$host"}[$interval]) / rate(node_disk_reads_completed_total{device=~"sd.+", hostname="$host"}[$interval])

rate(node_disk_write_time_seconds_total{device=~"sd.+", hostname="$host"}[$interval]) / rate(node_disk_writes_completed_total{device=~"sd.+", hostname="$host"}[$interval])

image-20240227164729961

可以看到还是有NaN的值,说明除数还有可能是0


​ 其他没有数据的面板按照这两种方法应该都能解决,不过数据库类的监控,还是使用现成的PMM监控较好,开箱即用

  • 44
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jenvid.yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值