es统计mysql 报表_Elasticsearch通过binlog同步数据索引在Grafana报表展示
一般而言,在服务系统中将数据持久化至MySQL数据库。因此,在进行业务数据报表的实时监控时,需求较强。整体解决方案如下:

该解决方案对业务系统无侵入性,只需订阅mysql的binlog就可以实现.
数据索引使用开源的go-mysql-elasticsearch组件.
Mysql部分
数据库为demo, 表结构如下:
CREATE TABLE active_info (
id bigint(20) NOT NULL AUTO_INCREMENT,
code varchar(64) COLLATE utf8mb4_bin NOT NULL,
size int(11) NOT NULL,
score double(20,2) NOT NULL,
type int(11) NOT NULL,
status int(11) NOT NULL,
create_time datetime NOT NULL,
update_time datetime NOT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
mysql相关配置:
[mysqld]
log-bin=mysql-bin
binlog_format=row # 需要设置为row模式
server_id=1001 #需要设置server_id
binlog-row-image=full
elasticsearch
启动即可 索引类型由于无法识别日期类型,因此需显示指定索引.
PUT /demo
{
"mappings": {
"active_info": {
"properties": {
"code": {
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
},
"createTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"id": {
"type": "long"
},
"score": {
"type": "float"
},
"size": {
"type": "long"
},
"type": {
"type": "long"
},
"status": {
"type": "long"
},
"updateTime": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
go-mysql-elasticsearch部分
配置文件 ./etc/river.toml 需要修改的配置
#mysql配置
my_addr = "127.0.0.1:3306"
my_user = "root"
my_pass = "***"
my_charset = "utf8mb4"
Elasticsearch 配置
es_addr = "127.0.0.1:9200"
Elasticsearch user and password, maybe set by shield, nginx, or x-pack
es_user = ""
es_pass = ""
要与mysql配置的server_id相同
server_id = 1001
mysql or mariadb
flavor = "mysql"
MySQL data source 指定mysql数据库
[[source]]
schema = "demo"
#指定需索引的表
tables = ["active_info"]
#索引规则
[[rule]]
schema = "demo" #数据库名
table = "active_info" # 表名
index = "demo" #ES索引名
type = "active_info" #ES索引类型
索引属性映射
[rule.field]
id="id"
code="code"
size="size"
score="score"
status="status"
create_time="createTime"
update_time="updateTime"
启动
./bin/go-mysql-elasticsearch -config=./etc/river.toml
Grafana
启动后配置数据源

报表配置

最终报表

注意事项: 1.其中,在同步历史数据时可采用go-mysql进行处理;2.但同步过程中可能出现部分数据丢失的情况;原因尚不明确,可能是配置设置存在问题;3.grafana显示时间轴可能会出现时区相关的问题;建议在设置中将Timezone字段更改为UTC。
