首页 > 数据库 >基于prometheus实现SQL监控方案

基于prometheus实现SQL监控方案

时间:2024-06-07 11:45:53浏览次数:14  
标签:customer ai quality work prometheus 监控 SQL type id

需求描述

业务上经常会出现这样的问题:客户反馈某个业务今天查不到数据。怎么通过监控提前发现呢?
我们的业务场景是这样:
在mysql中,每小时、每天,会通过定时任务汇总统计车辆在道路上的作业情况(作业时间、里程、平均速度等)。
经常出现,某一个客户某一类型数据没算(表中没有新增数据)。

技术方案

1、利用https://github.com/justwatchcom/sql_exporter 生成监控指标

- name: "ai_work_quality_loss_data"
    help: 'ai_work_quality表缺数据'
    labels:
      - customer_id
      - customer_name
      - work_type
    values:
      - count
    query: |
         select u.name as customer_name, u.id as customer_id,IFNULL(ai.count,0) as count, customer_work_type.work_type from user_group as u inner join (select customer_id,work_type from ai_work_quality where  `ts_start` > DATE_SUB(current_timestamp(), INTERVAL 10 day) group by customer_id,work_type) as customer_work_type on customer_work_type.customer_id = u.id left join (select  customer_id, work_type, count(*) as count from ai_work_quality as ai  where  `ts_start` > DATE_SUB(current_timestamp(), INTERVAL 2 hour) group by customer_id,work_type) as ai on ai.customer_id=u.id and ai.work_type=customer_work_type.work_type order by customer_name,ai.count desc

SQL的输出结果如下:
image
我们得到了每个客户、每种作业类型最近2小时新增数据行数。

2、利用prometheus创建报警规则

- alert: sql_ai_work_quality_row_count
    expr: sql_ai_work_quality_loss_data == 0 and (sql_ai_work_quality_loss_data offset 1w) != 0
    for: 3h
    annotations:
      summary: "ai_work_quality表可能缺数据"
      description: "{{$labels.customer_name}} 最近1小时xxx业务没新数据,上周同时段有数据"

和上周做比较, 某一个客户某一个作业类型上周有数据,今天同时段没数据了,会报警。

点评

为sql_exporter这个项目点赞,很奇妙的设计。
1、SQL输出每类数据(对应prometheus的label,对数据进行分组)的value(这里是行数)
2、在sql_exporter中配置哪些列是维度列、哪些是value列

这个模型很通用。

另外,要强调一点,由于这里的metric指标使用的是prometheus Gauge类型,即数据更新的逻辑。
https://yunlzheng.gitbook.io/prometheus-book/parti-prometheus-ji-chu/promql/prometheus-metrics-types#gauge-ke-zeng-ke-jian-de-yi-biao-pan

我们在写SQL时,一定要保证每个类型在每个时间点都有值,即使行数为0,也要在结果中反馈出来。否则sql_exporter上报指标时,会认为这个指标的值没有变化。

标签:customer,ai,quality,work,prometheus,监控,SQL,type,id
From: https://www.cnblogs.com/xushengbin/p/18236956

相关文章

  • MySQL GROUP BY 用法介绍
    MySQL中GROUPBY用法简介GROUPBY语句用于结合合计函数,根据一个或多个列对结果集进行分组。可以把分组理解成Excel中的分组。把合计函数理解成Excel中的求和、求平均值等。语法SELECTcolumn1,column2,aggregate_function(column3)FROMtable_nameWHEREcon......
  • mysql 5.7以后需要设置安全导向
    //mysql_secure_installation安全配置向导[root@youxi1~]#mysql_secure_installationSecuringtheMySQLserverdeployment.Enterpasswordforuserroot://输入root密码The'validate_password'pluginisinstalledontheserver.Thesubsequentstepsw......
  • 新服务器从0到1安装mysql8.0(保姆级教程)
    前提:可以输入命令检测是否安装了mysqlrpm-qa|grepmysql没有安装是什么都没有输出的1.如果系统上已安装有maraidb数据库,需要卸载mariadb yumremovemariadb*-yrm-rf/etc/my.cnfrm-rf/var/lib/mysql/2.如果系统已安装有其他版本的mysql,需提前卸载清空环境r......
  • mysql安装
    mysql安裝下载ZIP包,地址:https://downloads.mysql.com/archives/community/,确保选择与你的Windows系统位数(32位或64位)相匹配的版本。解压ZIP包:将下载的ZIP文件解压到你选择的安装目录。你可以使用Windows内置的解压工具或第三方工具如WinRAR、7-Zip等。创建数据目录:在解压后的My......
  • 一口气搞懂Flink Metrics监控指标和性能优化,全靠这33张图和7千字
    https://www.51cto.com/article/684249.html flink中值得监控的几个指标背景为了维持flink的正常运行,对flink的日常监控就变得很重要,本文我们就来看一下flink中要监控的几个重要的指标重要的监控指标1.算子的处理速度的指标:numRecordsInPerSecond/numRecordsOutPerSecond,......
  • 【MySQL】LEFT JOIN 踩坑
     一、问题发现:主查询功能发现两条一样的记录,但是审批状态不一样,一个已通过,一个待审核 主表付款表:CREATETABLE`pur_or_payment`(`id`int(11)NOTNULLAUTO_INCREMENTCOMMENT'系统编码初始值为“1”',`pa_code`varchar(32)NOTNULLCOMMENT'付款编号',......
  • 基于java ssm vue mysql志愿者招募网站(源码+lw+部署文档+讲解等)
    前言......
  • 基于java ssm vue mysql协同过滤算法的电影推荐系统(源码+lw+部署文档+讲解等)
    前言......
  • 视频汇聚EasyCVR安防监控系统GA/T 1400协议视图库对接:技术实现与应用
    随着信息技术的不断发展,各类协议标准在各个领域得到了广泛应用。GA/T1400协议作为公安视频监控系统中的一种重要标准,对于提升公安工作的信息化水平、加强社会治安防控具有重要意义。本文将重点探讨GA/T1400协议视图库对接的技术实现及应用价值。一、GA/T1400协议概述GA/T1400协......
  • Springboot计算机毕业设计疫苗注射小程序【附源码】开题+论文+mysql+程序+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在全球疫苗接种工作日益重要的背景下,为了更有效地推进疫苗接种进程,提高接种效率和用户体验,疫苗注射小程序的开发显得尤为关键。随着移动互联网的普及......