sql_exporter的使用
sql_exporter的使用
一、背景
有些时候,我们想看每天系统的登录人数、或者系统中订单的数据,比如:成功的订单、异常的订单等等。这些数据都在我们的数据库中,通过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
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指定的值。
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的使用的更多相关文章
- Prometheus+Grafana+Altermanager搭建监控系统
基本概念 Prometheus 时间序列化数据库,我的理解就是将数据打上标签,以时间维度存储.后面有机会在深入研究. Prometheus架构如下: Grafana Prometheus中存储的数据, ...
- mysqld_exporter的源码分析和定制化(单个mysqld_exporter监控多个数据库实例)
mysqld_exporter是prometheus官方提供的用于监控mysql运行状态的exporter.其相关信息可以参考:https://github.com/prometheus/mysqld ...
随机推荐
- charles 抓包修改app页面数据
1,首先给手机安装Charles证书,安装官方的来,在无线网配置项目,输入手动代理地址,后开启飞行模式刷新网络, 2,在浏览器输入chls.pro/ssl 下载并安装证书,此时电脑端charles 会 ...
- 放码来战!HMS Core线上Codelabs挑战赛正式开始
亲爱的开发者,在1024程序员节即将到来之际,HMS Core准备了一场线上Codelabs挑战赛,现向你发出诚挚邀请,希望你能将新奇的想法和对产品的思考融入代码,用技术与世界对话. HMS Core ...
- String与基本类型,字符数组,字节数组的转换
String与基本数据类型 * 基本数据 --->字符串(String) * 1.基本数据类型值 +"" --->最简单 * 2.使用包装类中的toString(参数类 ...
- golang 注释 exported function xxx should have comment or be unexported
0x00 问题 exported function xxx should have comment or be unexported. 0x01 解决 https://golang.org/s/sty ...
- DebugView端游日志查看工具
端游日志工具 端游开发的同学可以通过DebugView - Windows Sysinternals | Microsoft Docs来查看游戏打印的log,它允许你监控本地系统上的debug pri ...
- PC端利用Xshell连接Android上的Termux
需要准备的工具 Android端:Termux.RE管理器 PC端:Xshell 开始操作 1. 启动Termux,安装openssh pkg install openssh 2. 安装好后,启动ss ...
- 手把手教你实现栈以及C#中Stack源码分析
定义 栈又名堆栈,是一种操作受限的线性表,仅能在表尾进行插入和删除操作. 它的特点是先进后出,就好比我们往桶里面放盘子,放的时候都是从下往上一个一个放(入栈),取的时候只能从上往下一个一个取(出栈), ...
- js 模板方法模式
* 分离出共同点 function Beverage() {} Beverage.prototype.boilWater = function() { console.log("把水煮沸&q ...
- [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统
[源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 目录 [源码解析] PyTorch 流水线并行实现 (3)--切分数据和运行时系统 0x00 摘要 0x01 分割小批次 ...
- RabbitMQ3.9.7在CentOS7中的安装搭建
1.概述 RabbitMQ 是目前很流行的消息中间件之一,可靠性非常好,能简单的实现高可用.负载均衡. 今天我们先来聊一下 RabbitMQ 3.9.7 版本在 CentOS7 中的安装. 2.安装R ...