Prometheus结合K8s(二)使用
上一篇介绍了如何搭建 Prometheus结合K8s(一)搭建-CSDN博客,这章介绍使用
页面访问
kubectl get svc -n prom 看promeheus和granfana的端口访问页面
Prometheus
点击status—target,可以看到metrics的数据来源,即各exporter,点击相应exporter上的链接可查看这个exporter提供的metrics明细。
查看指标能否正常输出
访问grafana,添加prometheus数据源: 默认管理账号密码为admin admin
添加数据源,由于都在集群内,所以Prometheusip写cluster ip和端口即可,因为grafana和Prometheus都在集群内,也可以写servicename(五段式)然后import模板,也可以从网上找现成的模板
可以导入监控模板
编辑具体的监控项
这些语句查的是Prometheus里面的监控项,在上方的Prometheus面板graph里面都能查到指标数据
监控项
直接从grafana的官网下载json文件,导入即可
315 用于监控 Kubernetes 集群和 Pods。
057用于监控 MySQL 的查询、连接、缓存等指标。
kubernetes
sum (container_memory_working_set_bytes{id="/",kubernetes_io_hostname=~"^$Node$"}) / sum (machine_memory_bytes{kubernetes_io_hostname=~"^$Node$"}) * 100
这个 PromQL 查询表达式计算了指定 Kubernetes 节点的容器内存使用率百分比,其分解如下:
-
sum(container_memory_working_set_bytes{id="/",kubernetes_io_hostname=~"^$Node$"}):
-
这个部分用于计算指定节点上所有容器的实际使用内存总量,container_memory_working_set_bytes 表示各个容器当前的工作集内存,即容器实际消耗的内存,不包含缓存的内存。通过 {id="/"} 过滤出根目录的内存使用量。
-
标签 kubernetes_io_hostname=~"^$Node$" 用于匹配特定节点的主机名,其中 $Node$ 是目标节点的占位符。
-
-
sum(machine_memory_bytes{kubernetes_io_hostname=~"^$Node$"}):
-
此部分用于获取目标节点的总内存量,通过 machine_memory_bytes 指标得出节点的物理内存总量。
-
同样使用 kubernetes_io_hostname=~"^$Node$" 来锁定节点。
-
-
最终表达式:(工作集内存 / 总内存) * 100
-
将两个部分相除并乘以 100,得到该节点的容器内存使用率百分比。此表达式可以帮助管理员了解容器内存的利用率,识别内存过载风险。
-
sum (rate (container_cpu_usage_seconds_total{id="/",kubernetes_io_hostname=~"^$Node$"}[$interval])) / sum (machine_cpu_cores{kubernetes_io_hostname=~"^$Node$"}) * 100
这个 PromQL 查询用于计算指定 Kubernetes 节点的 CPU 使用率百分比,其结构分解如下:
-
sum(rate(container_cpu_usage_seconds_total{id="/",kubernetes_io_hostname=~"^$Node$"}[$interval])):
-
这个部分计算在指定时间窗口内($interval)每个容器的 CPU 使用率。container_cpu_usage_seconds_total 指标表示容器使用 CPU 的总时间(以秒为单位)。rate() 函数计算该指标在时间范围内的变化率,从而得到每秒的 CPU 使用量。
-
标签 id="/" 通常用于选择容器根路径的指标,而 kubernetes_io_hostname=~"^$Node$" 则用于指定要监控的节点。
-
-
sum(machine_cpu_cores{kubernetes_io_hostname=~"^$Node$"}):
-
此部分获取目标节点的总 CPU 核心数。machine_cpu_cores 指标表示物理机的 CPU 核心数量,通过相同的标签过滤来确保只选择特定节点的数据。
-
-
最终表达式:(CPU 使用总量 / 总核心数) * 100
-
将容器的 CPU 使用率与总 CPU 核心数相除,并乘以 100,得到该节点的 CPU 使用率百分比。
-
sum (container_fs_usage_bytes{device=~"$device",id="/",kubernetes_io_hostname=~"^$Node$"}) / sum (container_fs_limit_bytes{device=~"$device",id="/",kubernetes_io_hostname=~"^$Node$"}) * 100
sum(container_fs_usage_bytes{device=~"$device",id="/",kubernetes_io_hostname=~"^$Node$"}):
-
这一部分计算指定节点上所有容器在指定文件系统设备($device)上的实际使用字节数。container_fs_usage_bytes 指标表示容器文件系统的实际使用空间。
-
标签 id="/" 通常指根文件系统,而 kubernetes_io_hostname=~"^$Node$" 用于匹配特定的节点。
sum(container_fs_limit_bytes{device=~"$device",id="/",kubernetes_io_hostname=~"^$Node$"}):
-
此部分获取指定文件系统设备的总限制字节数,container_fs_limit_bytes 指标表示容器文件系统的大小限制。
-
同样使用 device=~"$device" 和 kubernetes_io_hostname=~"^$Node$" 标签进行过滤。
最终表达式:(文件系统使用字节数 / 文件系统限制字节数) * 100
-
将容器的文件系统使用字节数与总限制字节数相除,结果乘以 100,得到该节点文件系统的使用率百分比。
sum (rate (container_cpu_usage_seconds_total{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$"}[$interval])) by (pod_name)
这个 PromQL 查询用于计算 Kubernetes 中每个 Pod 的 CPU 使用率,其结构分析如下:
-
sum(rate(container_cpu_usage_seconds_total{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$"}[$interval])):
-
container_cpu_usage_seconds_total:此指标表示容器使用 CPU 的总时间(以秒为单位)。
-
rate() 函数用于计算指定时间窗口内($interval)的 CPU 使用速率,即每秒的 CPU 使用量。
-
{image!=""}:此过滤条件确保只计算有图像标签的容器。
-
name=~"^k8s_.*":此过滤条件匹配名称以 k8s_ 开头的容器,通常表示这些容器是由 Kubernetes 管理的。
-
kubernetes_io_hostname=~"^$Node$":此过滤条件用于匹配特定节点,$Node$ 是目标节点的占位符。
-
-
by (pod_name):
-
这部分指示 Prometheus 按 Pod 名称对结果进行分组,以便每个 Pod 的 CPU 使用率可以单独计算和显示。
-
sum (container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$"}) by (pod_name)
这个 PromQL 查询计算每个 Pod 的内存实际使用量(工作集内存),具体结构如下:
-
sum(container_memory_working_set_bytes{image!="",name=~"^k8s_.*",kubernetes_io_hostname=~"^$Node$"}):
-
container_memory_working_set_bytes 指标表示容器正在使用的实际内存量,不包括缓存内存(即工作集内存)。
-
image!="":过滤掉没有关联镜像的容器,确保仅包含实际正在运行的应用。
-
name=~"^k8s_.*":匹配名称以 k8s_ 开头的容器,通常表示由 Kubernetes 管理的容器。
-
kubernetes_io_hostname=~"^$Node$":匹配特定节点,$Node$ 是目标节点的占位符。
-
-
by (pod_name):
-
该部分按 Pod 名称分组,确保每个 Pod 的工作集内存独立显示。
-
Mysql
mysql_global_status_uptime
用于监控 MySQL 实例的运行时长。具体说明如下:
-
mysql_global_status_uptime:这是 MySQL 的 Uptime 指标,表示 MySQL 实例自上次启动以来的总运行时间(单位为秒)。此指标可以帮助判断 MySQL 实例的稳定性和重启频率。如果 uptime 较短且频繁重启,可能表明存在系统故障或资源问题。
rate(mysql_global_status_queries[$__interval])
用于计算 MySQL 实例在特定时间间隔内的查询速率,具体分析如下:
-
mysql_global_status_queries:此指标代表 MySQL 实例自启动以来处理的查询总数,包括 SELECT、INSERT、UPDATE、DELETE 等操作。该计数指标会随着时间累积增加。
-
rate() 函数:rate() 用于计算特定时间窗口($__interval)内的查询速率,即每秒查询次数。这个速率可以揭示 MySQL 数据库的负载情况,特别是在不同时间段的查询量变化。例如,可以帮助识别高峰时段的查询负载,以便优化资源分配。
mysql_global_variables_innodb_buffer_pool_size
提供了 MySQL 实例的 innodb_buffer_pool_size 配置值,具体解释如下:
-
mysql_global_variables_innodb_buffer_pool_size:该指标表示 InnoDB 缓冲池的大小(以字节为单位),这是 MySQL 用于缓存数据和索引的内存区域。InnoDB 缓冲池的大小对数据库的性能有直接影响,尤其是当数据库的大部分数据都能缓存到缓冲池时,会显著减少磁盘 I/O,提升查询性能。
connections
sum(max_over_time(mysql_global_status_threads_connected{[$__interval]))
用于监控在给定时间窗口内 MySQL 实例的最大连接数具体分解如下:
-
mysql_global_status_threads_connected:该指标表示当前连接到 MySQL 实例的线程数。这个数值会随着时间动态变化,反映当前有多少客户端连接处于活跃状态。
-
max_over_time():该函数用于计算指定时间窗口($interval)内的最大连接数。例如,如果 $interval 为 5 分钟,max_over_time 会返回在过去 5 分钟内连接数的峰值。通过观察此数值,可以了解 MySQL 在特定时间段内的最大连接负载。
-
sum():最外层的 sum() 作用是将多个实例的最大连接数相加,计算整个 MySQL 集群的连接负载总量。
sum(mysql_global_status_max_used_connections)
用于监控 MySQL 实例在历史上达到的最大连接数,具体说明如下:
-
mysql_global_status_max_used_connections:该指标表示 MySQL 自启动以来所记录的最大并发连接数,即历史上出现的最高连接数峰值。此指标可以帮助了解 MySQL 实例连接的最高负载情况,确保最大连接数限制合理。如果此数值接近或超过 max_connections 设置,则可能出现连接拒绝或性能下降的问题。
-
sum():外层的 sum() 用于将符合过滤条件的各实例的最大连接数相加。这样可以在多实例环境中汇总各 MySQL 实例的最大连接数,得出整个 MySQL 集群的最大历史连接负载。
sum(mysql_global_variables_max_connections)
用于获取 MySQL 配置中允许的最大连接数总和。该查询提供了所有符合过滤条件的 MySQL 实例中配置的 max_connections 值的总和。
-
mysql_global_variables_max_connections:此指标表示 MySQL 实例配置的 max_connections 参数值,它定义了允许的最大并发连接数。设置适当的 max_connections 值对于避免连接过载至关重要。
-
sum():最外层的 sum() 会将符合条件的所有实例的最大连接数汇总,以提供一个整体视图,了解 MySQL 集群中所有实例所允许的总连接容量。
sum(max_over_time(mysql_global_status_threads_connected[$__interval]))
用于在给定时间窗口内计算 MySQL 实例的最大连接数。其作用和结构解析如下:
-
mysql_global_status_threads_connected:此指标表示当前连接到 MySQL 的线程数量,反映了实时的连接数负载。这个值随时间变化,表示有多少客户端线程正在连接 MySQL 实例。
-
max_over_time() 函数:此函数用于在指定时间窗口($interval)内计算连接数的最大值。例如,如果 $interval 设置为 5 分钟,则 max_over_time() 会返回过去 5 分钟中连接数的峰值。此峰值帮助了解 MySQL 实例在高负载期的最大连接数。
-
sum() 函数:sum() 汇总所有符合查询条件的 MySQL 实例的最大连接数。在多实例环境中,这个函数可以计算整个 MySQL 集群的峰值连接负载,从而提供一个整体视图。
table locks
Questions
rate(mysql_global_status_questions[$__interval])
用于计算 MySQL 实例在特定时间窗口内执行的 SQL 查询速率。此查询可以帮助数据库管理员评估 MySQL 的查询负载情况,尤其适用于监控 MySQL 在不同时段的查询波动情况。以下是详细说明:
-
mysql_global_status_questions:该指标表示 MySQL 实例自启动以来执行的总查询数量,包含所有 SQL 请求(如 SELECT、INSERT、UPDATE、DELETE 等)。它是一个累积计数指标,随着时间不断增加。
-
rate() 函数:rate() 函数计算指定时间窗口($interval)内的平均速率。对于 mysql_global_status_questions 指标,rate() 会返回在给定的时间间隔内每秒执行的查询数量,能够准确捕捉到 MySQL 的查询速率波动。例如,如果 $interval 为 5 分钟,则 rate() 会返回过去 5 分钟的每秒查询平均数量。
thread cache
sum(mysql_global_variables_thread_cache_size)
用于监控 MySQL 实例的线程缓存大小。以下是对该查询的详细解析:
-
mysql_global_variables_thread_cache_size:此指标表示 MySQL 配置的线程缓存大小(以线程数为单位)。线程缓存用于存储线程的复用,能够减少创建和销毁线程的开销。当有新的客户端连接时,如果缓存中有可用线程,则可以快速响应,从而提升性能。
-
sum() 函数:此函数用于将多个 MySQL 实例的线程缓存大小进行汇总,提供整个 MySQL 集群中线程缓存的总配置。这对于评估集群整体的线程管理能力非常重要。
sum(mysql_global_status_threads_cached)
用于监控 MySQL 实例的缓存线程数量。以下是对该查询的详细分析:
-
mysql_global_status_threads_cached:此指标表示当前从线程缓存中获取的线程数量。线程缓存用于存储已创建的线程,以便在新连接请求到来时快速复用,从而提高性能。此值表示在连接期间实际使用了多少线程缓存。
-
sum() 函数:这个函数会将所有符合条件的 MySQL 实例中的线程缓存数量进行求和,提供整个 MySQL 集群的线程缓存使用情况。这对于了解集群的线程利用效率和性能调优非常重要。
监控 threads_cached 的数量可以帮助数据库管理员评估线程缓存的有效性。如果线程缓存的使用量较高,这可能意味着数据库在连接管理方面表现良好;反之,如果缓存利用率低,则可能需要调整 thread_cache_size 参数,以提升性能。此查询对于容量规划和资源优化尤其有用。
tenproary Object
tenporary
sum(rate(mysql_global_status_created_tmp_tables [$__interval]))
用于监控 MySQL 实例在特定时间窗口内创建的临时表的速率。以下是对该查询的详细分析:
-
mysql_global_status_created_tmp_tables:该指标表示 MySQL 自启动以来创建的临时表的总数。临时表通常在执行某些 SQL 查询(如 GROUP BY 和 ORDER BY)时使用,能够有效地处理中间结果。
-
rate() 函数:rate() 函数计算在指定时间窗口($interval)内的平均速率。它会返回在该时间段内每秒创建的临时表数量。例如,如果 $interval 为 5 分钟,rate() 会计算过去 5 分钟内每秒创建的临时表的平均数量。这个速率可以帮助监控系统在处理复杂查询时的性能表现。
-
sum() 函数:sum() 用于将符合条件的所有 MySQL 实例的临时表创建速率进行汇总,适用于多实例环境,能够提供整体视图。
sum(rate(mysql_global_status_created_tmp_disk_tables [$__interval]))
用于监控 MySQL 实例在特定时间窗口内创建的临时磁盘表的速率。以下是对该查询的详细分析:
-
mysql_global_status_created_tmp_disk_tables:该指标表示 MySQL 自启动以来创建的临时磁盘表的总数。临时磁盘表通常在处理复杂查询时生成,尤其是当内存中的临时表无法满足要求时,MySQL 会将其写入磁盘以存储中间结果。
-
rate() 函数:rate() 计算在指定时间窗口($interval)内的平均速率。它返回在该时间段内每秒创建的临时磁盘表数量。例如,如果 $interval 为 5 分钟,则 rate() 会计算过去 5 分钟内每秒创建的临时磁盘表的平均数量。这对于了解系统的查询性能和资源利用情况非常重要。
-
sum() 函数:sum() 用于汇总所有符合条件的 MySQL 实例中的临时磁盘表创建速率,适合多实例环境,为管理员提供整体视图。
监控临时磁盘表的创建速率可以帮助数据库管理员识别潜在的性能问题。频繁创建临时磁盘表可能表明 SQL 查询的设计不当、缺乏适当的索引或内存配置不足。这可能导致性能下降,因为磁盘 I/O 通常比内存访问慢。
Select types
sum(rate(mysql_global_status_select_full_join[$__interval]))
用于监控 MySQL 实例在特定时间窗口内执行的全连接查询的速率。以下是对该查询的详细分析:
-
mysql_global_status_select_full_join:此指标表示自 MySQL 启动以来执行的全连接查询的总数。全连接(Full Join)是指在两个表中返回所有行的连接,不论它们是否匹配。此查询通常在没有合适索引的情况下执行,可能导致性能问题。
-
rate() 函数:rate() 函数用于计算在指定时间窗口($interval)内的平均速率,返回在该时间段内每秒执行的全连接查询数量。例如,如果 $interval 为 5 分钟,则 rate() 会计算过去 5 分钟内每秒执行的全连接查询的平均数量。
-
sum() 函数:此函数用于将符合条件的所有 MySQL 实例的全连接查询速率进行汇总,以提供整体视图,特别适合于多实例环境。
监控全连接查询的执行速率对于数据库管理员来说非常重要,因为全连接通常会导致性能下降。频繁的全连接查询可能表明查询设计不佳或缺乏适当的索引。通过监控此指标,管理员可以识别潜在的性能问题并进行优化,例如优化 SQL 查询、增加索引或调整数据库设计。
sum(rate(mysql_global_status_select_range [$__interval]))
用于监控 MySQL 实例在特定时间窗口内执行的范围查询(Range Queries)的速率。以下是对该查询的详细分析:
-
mysql_global_status_select_range:此指标表示自 MySQL 启动以来执行的范围查询的总数。范围查询通常是指通过使用条件限制返回结果集的一部分,例如 WHERE 子句中的条件。在查询中使用索引可以提高范围查询的性能。
-
rate() 函数:rate() 函数计算在指定时间窗口($interval)内的平均速率,返回在该时间段内每秒执行的范围查询数量。例如,如果 $interval 为 5 分钟,则 rate() 会计算过去 5 分钟内每秒执行的范围查询的平均数量。
-
sum() 函数:此函数用于汇总所有符合条件的 MySQL 实例的范围查询速率,适合多实例环境,能够提供整体视图。
sum(rate(mysql_global_status_select_scan[$__interval]))
用于监控 MySQL 实例在特定时间窗口内执行的扫描查询(Scan Queries)的速率。以下是对该查询的详细分析:
-
mysql_global_status_select_scan:该指标表示自 MySQL 启动以来执行的扫描查询的总数。扫描查询通常是指没有使用索引,而是通过全表扫描来返回结果。全表扫描可能会导致性能下降,特别是在数据量较大的表中。
-
rate() 函数:rate() 函数计算在指定时间窗口($interval)内的平均速率,返回在该时间段内每秒执行的扫描查询数量。例如,如果 $interval 为 5 分钟,则 rate() 会计算过去 5 分钟内每秒执行的扫描查询的平均数量。
-
sum() 函数:该函数用于汇总所有符合条件的 MySQL 实例中的扫描查询速率,适合多实例环境,提供整体视图。
sorts
mysql sorts
sum(rate(mysql_global_status_sort_rows [$__interval]))
用于监控 MySQL 实例在特定时间窗口内排序的行数的速率。以下是对该查询的详细分析:
-
mysql_global_status_sort_rows:该指标表示自 MySQL 启动以来用于排序操作的行数总计。排序操作通常在执行查询时需要处理 ORDER BY 子句,或者在某些情况下使用 GROUP BY,涉及对大量数据的排序。
-
rate() 函数:rate() 函数计算在指定时间窗口($interval)内的平均排序行数的速率,返回在该时间段内每秒进行排序的行数。例如,如果 $interval 为 5 分钟,则 rate() 会计算过去 5 分钟内每秒进行排序的行数的平均数量。
-
sum() 函数:此函数用于汇总所有符合条件的 MySQL 实例中的排序行数的速率,适合多实例环境,提供整体视图。
-
mysql_global_status_sort_rows:
-
含义:表示自 MySQL 启动以来处理的排序行数总数。这反映了执行的排序操作的复杂性。
-
-
mysql_global_status_sort_scan:
-
含义:表示自 MySQL 启动以来执行的扫描排序的总次数。扫描排序发生在没有使用索引的情况下,通常会导致性能下降。
-
-
mysql_global_status_sort_range:
-
含义:表示自 MySQL 启动以来执行的范围排序的总次数。范围排序通常是指使用了范围条件的排序操作。
-
-
mysql_global_status_sort_merge_passes:
-
含义:表示自 MySQL 启动以来进行的合并排序操作的总次数。合并排序用于将多个结果集合并成一个最终结果,通常在处理大量数据时会发生。
-
-
排序性能:高的 sort_rows 和 sort_scan 数量可能表明查询没有有效利用索引,从而导致性能下降。
-
内存使用:高的 sort_merge_passes 表示 MySQL 在合并结果时可能需要更多的内存和计算资源。
-
查询优化:结合这些指标,数据库管理员可以识别需要优化的查询,确保使用适当的索引来减少不必要的扫描和排序操作。
slow queries
sum(rate(mysql_global_status_slow_queries[$__interval]))
用于监控特定时间窗口内慢查询的速率。以下是对该查询的详细分析:
-
mysql_global_status_slow_queries:此指标表示自 MySQL 启动以来执行的慢查询的总数。慢查询是指执行时间超过设定阈值的查询,这通常是在 MySQL 配置中指定的 long_query_time。
-
rate() 函数:该函数用于计算在指定时间窗口($interval)内每秒的慢查询速率。例如,如果 $interval 是 5 分钟,那么 rate() 会计算过去 5 分钟内每秒的慢查询平均数量。
aborted
connection
sum(rate(mysql_global_status_aborted_connects [$__interval]))
sum(rate(mysql_global_status_aborted_clients [$__interval]))
-
mysql_global_status_aborted_connects:
-
含义:表示自 MySQL 启动以来中止的连接总数。这通常是由于身份验证失败、用户未提供所需的参数或连接超时等原因引起的。
-
监控目的:高数量的中止连接可能表明存在安全问题(例如密码错误)或应用程序设计不当,可能需要优化连接池或身份验证机制。
-
-
mysql_global_status_aborted_clients:
-
含义:表示自 MySQL 启动以来中止的客户端总数。这通常是由于客户端在没有发送完整请求的情况下关闭连接引起的。
-
监控目的:高数量的中止客户端可能指示应用程序异常或用户操作不当,可能导致资源浪费。
-
table locks
sum(rate(mysql_global_status_table_locks_immediate [$__interval]))
sum(rate(mysql_global_status_table_locks_waited [$__interval]))
用于衡量表级锁的使用情况。以下是对这两个指标的详细分析及其在 Prometheus 中的查询。
-
mysql_global_status_table_locks_waited:
-
含义:表示自 MySQL 启动以来等待表锁的总次数。表锁用于防止多个事务对同一表的数据进行冲突性操作。
-
监控目的:高数量的等待表锁可能表明存在锁竞争,导致性能下降。这通常发生在高并发情况下,多个事务同时尝试访问同一表。
-
-
mysql_global_status_table_locks_immediate:
-
含义:表示自 MySQL 启动以来立即获取表锁的总次数。此指标表明在没有等待的情况下成功获取锁的情况。
-
监控目的:这个值与 table_locks_waited 结合使用,可以帮助评估锁的效率和事务的并发性。
-
network
mysql_global_status_bytes_received:
-
含义:表示自 MySQL 启动以来接收到的字节总数。此指标包括客户端发送给 MySQL 的所有查询和数据。
-
监控目的:可以帮助管理员评估流入 MySQL 数据库的数据量,了解应用程序与数据库之间的交互频率和数据传输量。
mysql_global_status_bytes_sent:
-
含义:表示自 MySQL 启动以来发送给客户端的字节总数。此指标包括 MySQL 返回给客户端的结果集和状态信息。
-
监控目的:可以帮助管理员了解 MySQL 向客户端传输数据的量,反映查询的复杂度和结果集的大小。
memory
通过计算总的 InnoDB 数据页大小,数据库管理员可以:
-
评估缓冲池的使用效率:了解当前使用的内存量与设定的缓冲池大小的比例。
-
监测性能瓶颈:如果数据页数量过多而缓冲池大小不够,可能导致性能下降,这时可能需要调整缓冲池大小或优化查询。
command,handlers
command
topk(5,rate(mysql_global_status_commands_total[$__interval])>0)
用于获取执行 MySQL 命令的速率,并返回速率最高的前五个命令
rate(...):计算 mysql_global_status_commands_total 指标在给定时间间隔($__interval)内的速率。此指标表示自 MySQL 启动以来已执行的命令总数。
{job=~"$job", instance=~"$instance"}:使用正则表达式匹配特定的作业和实例,以便从监控数据中筛选出相应的指标。
> 0:过滤条件,只返回执行次数大于零的命令。
topk(5, ...):从计算出的速率中返回前五个最大值。即找出最活跃的五个 MySQL 命令。
handlers
rate(mysql_global_status_handlers_total{handler!~"commit|rollback|savepoint.|prepare"}[$__interval]) or irate(mysql_global_status_handlers_total{handler!~"commit|rollback|savepoint.|prepare"}[5m])
该 Prometheus 查询用于监控 MySQL 的处理器指标,重点关注与事务无关的处理器(如提交、回滚、保存点和准备的处理器)
rate(...):计算在给定时间窗口($__interval)内的速率,表示每秒的处理器调用次数。这是一个用于计算时间序列数据变化率的函数,适合监控指标。
mysql_global_status_handlers_total:这是一个表示自 MySQL 启动以来各种处理器调用总数的指标。处理器通常指不同类型的查询或操作的统计。
{instance=~"$host", handler!~"commit|rollback|savepoint.*|prepare"}:
-
instance=~"$host":通过正则表达式匹配特定的 MySQL 实例。
-
handler!~"commit|rollback|savepoint.*|prepare":过滤掉与事务相关的处理器。这意味着只关注非事务性操作的处理器。
or:表示如果第一个 rate 查询没有返回结果,将使用 irate 查询的结果。
irate(...):计算在过去 5 分钟内的即时速率,适用于更短时间内的快速变化监测。适合捕捉突发事件。