https://www.jianshu.com/p/df4b7a7cfc0d

一、背景

有些时候,我们想看每天系统的登录人数、或者系统中订单的数据,比如:成功的订单、异常的订单等等。这些数据都在我们的数据库中,通过sql_exporter我们可以将这些数据接入到prometheus中,进行监控告警。

二、sql-exporter的使用

1、下载

1、访问下载地址:https://github.com/free/sql_exporter/releases

# 下载
wget https://github.com/free/sql_exporter/releases/download/0.5/sql_exporter-0.5.darwin-amd64.tar.gz
# 解压
tar -zxvf sql_exporter-0.5.darwin-amd64.tar.gz
# 重命名
mv

2、配置文件

1、sql_exporter.yml

# 全局配置
global:
# 可以理解为执行sql语句的超时时间,这个值需要比prometheus的 `scrape_timeout` 值要小。如果配置了下方的 scrape_timeout_offset 值,那么最终的超时时间为, min(scrape_timeout, X-Prometheus-Scrape-Timeout-Seconds - scrape_timeout_offset)
# X-Prometheus-Scrape-Timeout-Seconds 为 prometheus 的超时时间,从请求头中获取的
scrape_timeout: 10s
# 从 prometheus 的超时时间中减去一个偏移量,防止 prometheus 先超时。
scrape_timeout_offset: 500ms
# 各个sql收集器之间运行间隔的秒数
min_interval: 0s
# 允许获取到的数据库最大的连接数, <=0 表示不限制。
max_connections: 3
# 允许空闲连接数的个数,<=0 不做限制
max_idle_connections: 3 # 配置监控的数据库和抓取信息
target:
# 配置数据库链接信息
# mysql://root(用户名):root(密码)@tcp(localhost:3306)/temp_work(库名)
data_source_name: 'mysql://root:root@tcp(localhost:3306)/temp_work'
# 收集器的名字, 对应者下方 collector_files 中具体的文件的 collector_name 的值
collectors: [collector_user,collector_payment_orders]
collector_files:
- "collectors/*.collector.yml"

2、collectors 目录中的配置文件

1、collector_user的配置

cat  collectors/collector_user.collector.yml

统计的是 某个字段 的值,该行只有一个单个的值,比如注册数等等,对应sql 类似 select count(*) from table

# 收集器的名字
collector_name: collector_user metrics:
- metric_name: every_day_register_users # 指标的名字
type: counter # 类型
help: '统计每天的注册人数.' # 描述
values: [register_users] # 值
query: |
select count(*) register_users from t_users where create_date between concat(curdate(),' 00:00:00') and concat(curdate(),' 23:59:59')

2、collector_payment_orders的配置

cat collectors/collector_payment_orders.collector.yml

1、统计的是 一行只有一个值。 比如 统计每个用户(需要有一个指标名称) 的订单数量(值) 对应sql 类似 select count(1), user_name from table group by user_name 。
2、统计的是一行可以有多个值。比如 统计每个用户(需要有指标名称) 的订单数量(指标名称和值)或订单金额(指标名称和值) 对应sql 类似 select user_name,count(1),sum(1) from table group by user_name。


# 收集器的名字
collector_name: collector_payment_orders metrics:
- metric_name: every_day_order_cnt
type: gauge
help: '每个人每天的订单数量和订单数量.'
key_labels:
- user_name # 会存在 {"user_name"="列user_name的值"}的标签
values:
- order_cnt # 指标的值是 order_cnt 的值
query: |
select user_name as user_name,
count(*) as order_cnt,
sum(amount) as order_amount from payment_order
where create_date between concat(curdate(),' 00:00:00') and concat(curdate(),' 23:59:59')
group by user_name - metric_name: user_order_cnt_or_amount
type: counter
help: '统计每个人(user_name)在每种订单状态(order_status)下的下单数量(order_cnt)或下单金额(order_amount)'
key_labels: ["user_name","order_status"] # 每一行数据上会增加 {"user_name"="列user_name的值","order_status"="列order_status的值"} 标签
value_label: 'operation' # 随便取一个名字,比如operation ,那么根据下方的 values 会存在 {"operation"="order_cnt"}或者{"operation"="order_amount"} 标签
values: ["order_cnt","order_amount"]
query: |
select user_name as user_name,
status as order_status,
count(*) as order_cnt,
sum(amount) as order_amount from payment_order
group by user_name,status

3、集成到prometheus中

scrape_configs:
- job_name: 'sql-exporter'
static_configs:
- targets: ['localhost:9089']
labels:
nodename: 'sql-exporter'

4、启动

#!/usr/bin

nohup /Users/huan/soft/prometheus/sql_exporter/sql_exporter \
--config.file="/Users/huan/soft/prometheus/sql_exporter/sql_exporter.yml" \
--web.listen-address="0.0.0.0:9089" \
> logs/sql_exporter.out 2>&1 &

5、访问看是否有指标数据抓取

 
指标抓取结果

我的一个简单的理解:
1、every_day_register_users 5 就是查询出来一个值

 
但行数据,单个值

2、every_day_order_cnt {user_name="lisi"} 2 多了一个自定义的label,它的值是values指定的值。

 
一行数据,多加一个label

3、user_order_cnt_or_amount{operation="order_amount",order_status="2",user_name="lisi"} 3
user_order_cnt_or_amount{operation="order_amount",order_status="2",user_name="wangwu"} 4
user_order_cnt_or_amount{operation="order_cnt",order_status="1",user_name="lisi"} 1 可以看到每个多了 user_name和order_status和operation 这3个label,该时间序列的是 operation标签对应的列的值。

 
一行数据对应多个值

三、建表语句

CREATE TABLE `t_users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_date` datetime DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `payment_order` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`status` tinyint(4) DEFAULT NULL,
`create_date` datetime DEFAULT NULL,
`user_name` varchar(30) DEFAULT NULL,
`amount` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO temp_work.t_users (id, create_date) VALUES (1, '2021-03-13 10:11:35');
INSERT INTO temp_work.t_users (id, create_date) VALUES (2, '2021-03-13 10:11:39');
INSERT INTO temp_work.t_users (id, create_date) VALUES (3, '2021-03-13 10:11:41');
INSERT INTO temp_work.t_users (id, create_date) VALUES (4, '2021-03-13 10:11:44');
INSERT INTO temp_work.t_users (id, create_date) VALUES (5, '2021-03-13 10:11:45');
INSERT INTO temp_work.payment_order (id, status, create_date, user_name, amount) VALUES (1, 1, '2021-03-13 10:12:49', 'zhangsan', 1);
INSERT INTO temp_work.payment_order (id, status, create_date, user_name, amount) VALUES (2, 1, '2021-03-13 10:12:51', 'zhangsan', 2);
INSERT INTO temp_work.payment_order (id, status, create_date, user_name, amount) VALUES (3, 2, '2021-03-13 10:12:53', 'lisi', 3);
INSERT INTO temp_work.payment_order (id, status, create_date, user_name, amount) VALUES (4, 2, '2021-03-13 10:12:54', 'wangwu', 4);
INSERT INTO temp_work.payment_order (id, status, create_date, user_name, amount) VALUES (5, 1, '2021-03-13 10:12:55', 'lisi', 5);

四、参考链接

1、sql-exporter下载链接
2、sql_exporter默认的配置文件

[转帖]sql_exporter的使用的更多相关文章

  1. nginx负载均衡基于ip_hash的session粘帖

    nginx负载均衡基于ip_hash的session粘帖 nginx可以根据客户端IP进行负载均衡,在upstream里设置ip_hash,就可以针对同一个C类地址段中的客户端选择同一个后端服务器,除 ...

  2. [转帖]网络协议封封封之Panabit配置文档

    原帖地址:http://myhat.blog.51cto.com/391263/322378

  3. [转帖]零投入用panabit享受万元流控设备——搭建篇

    原帖地址:http://net.it168.com/a2009/0505/274/000000274918.shtml 你想合理高效的管理内网流量吗?你想针对各个非法网络应用与服务进行合理限制吗?你是 ...

  4. 3d数学总结帖

    3d数学总结帖,以下是对3d学习过程中数学知识的简单总结 角度值和弧度制的互转 Deg2Rad 角度A1转弧度A2 => A2=A1*PI/180 Rad2Deg 弧度A2转换角度A1 => ...

  5. [转帖]The Lambda Calculus for Absolute Dummies (like myself)

    Monday, May 7, 2012 The Lambda Calculus for Absolute Dummies (like myself)   If there is one highly ...

  6. [转帖]FPGA开发工具汇总

    原帖:http://blog.chinaaet.com/yocan/p/5100017074 ----------------------------------------------------- ...

  7. [Android分享] 【转帖】Android ListView的A-Z字母排序和过滤搜索功能

      感谢eoe社区的分享   最近看关于Android实现ListView的功能问题,一直都是小伙伴们关心探讨的Android开发问题之一,今天看到有关ListView实现A-Z字母排序和过滤搜索功能 ...

  8. AxureRP7.0各类交互效果汇总帖(转)

    了便于大家参考,我把这段时间发布分享的所有关于AxureRP7.0的原型做了整理. 以下资源均有对应的RP源文件可以下载. 当然 ,其中有部分是需要通过完成解密游戏[攻略]才能得到下载地址或者下载密码 ...

  9. 未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u010259408]

    未能加载文件或程序集“Newtonsoft.Json, Version=4.0.0.0, Culture=neutral, PublicKeyToken=30a [问题点数:40分,结帖人u01025 ...

  10. 转帖-[教程] Win7精简教程(简易中度)2016年8月-0day

    [教程] Win7精简教程(简易中度)2016年8月 0day 发表于 2016-8-19 16:08:41  https://www.itsk.com/thread-370260-1-1.html ...

随机推荐

  1. 新版的Django中的path不能使用正则表达式

    新版的path 虽然 取代了 之前的url,但是在写路由的时候不能在路由中直接写正则表达式,不然会找不到页面. 解决方法使用 re_path from django.urls import re_pa ...

  2. 基于FPGA的数字钟设计---第三版---郝旭帅电子设计团队

    本篇为各位朋友介绍基于FPGA的数字钟设计---第三版. 功能说明: 在数码管上面显示时分秒(共计六个数码管,前两个显示小时:中间两个显示分钟:最后两个显示秒). 利用按键可以切换24/12小时制(默 ...

  3. Flutter Getx 状态管理 --- (依赖管理) GetxController

    Flutter Getx 简单的状态管理(依赖管理) GetxController Getx 依赖管理简介 Get有一个简单而强大的依赖管理器,它允许你只用1行代码就能检索到与你的Bloc或Contr ...

  4. GDAL数据集写入空间坐标参考

    目录 1. 概述 2. 栅格数据 3. 矢量数据 1. 概述 可以通过GDAL给地理数据写入空间参考信息,不过要注意的是GDAL给矢量数据和栅格数据写入空间坐标参考的接口不太一样. 2. 栅格数据 实 ...

  5. 什么是HuggingFace

    一.HuggingFace简介 1.HuggingFace是什么 可以理解为对于AI开发者的GitHub,提供了模型.数据集(文本|图像|音频|视频).类库(比如transformers|peft|a ...

  6. 第一部分_Shell介绍

    SHELL介绍 前言: 计算机只能认识(识别)机器语言(0和1),如(11000000 这种).但是,我们的程序猿们不能直接去写01这样的代码,所以,要想将程序猿所开发的代码在计算机上运行,就必须找& ...

  7. 干货分享丨玩转物联网IoTDA服务系列六-恒温空调

    摘要:本文主要讲述空调接入到物联网平台后,通过恒温空调控制系统,不论空调是否开机,都可以调整空调默认温度,待空调上电开机后,自动按默认温度调节. 场景简介 通过恒温控制系统,不论空调是否开机,都可以调 ...

  8. 一种DWS迁移Oracle的CONNECT BY语法的方案

    摘要:本文提供一种GaussDB DWS迁移CONNECT BY语法方案. 本文分享自华为云社区<GaussDB(DWS)迁移 - oracle兼容 -- CONNECT BY迁移>,作者 ...

  9. CVE-2022-22965 漏洞分析,安全问题早发现

    摘要:Spring在进行参数绑定时调用的 BeanWrapperImpl在进行JavaBean操作时触发了此漏洞. 本文分享自华为云社区<CVE-2022-22965 漏洞分析>,作者:X ...

  10. mit6.s081 lab2: system calls

    1.system call tracing(moderate) 要求:创建一个系统调用来实现跟踪特性,它采用一个参数来指定跟踪哪一个系统调用,例如:跟踪fork系统调用,程序调用trace(1< ...