概述
我们需要知道mysql 慢查询的异常情况和根据过往的趋势找出慢查询异常的态势
我们解决两个问题
一个db慢查询次数在短时间内剧增
一个db慢查询平均时间在短时间内剧增
具体的如何将慢sql导入es,和分析slowlog请查考以下文章
https://www.jianshu.com/p/12935d1edf8c
https://www.jianshu.com/p/3cf0e2a8d23d
配置态势感知
打开kibana
配置筛选项去掉不必要的项
我们这里为
去掉管理机器的ip
去掉备份的sql
保存为ml slow
创建新的机械学习job
选择之前的ml slow
配置slowlog 数量检测 high count 为数量剧增监控
加上slowsql 平均执行时间 mean
这里fileds为检测项
其中high mean 为中值突增
low mean为中值突降
mean 为中值突增突降都报警
low Sum 为总和突降
high sum为总值突升
sum 为总值突增突降
count 为数量
high count 数量剧增
low count数量突降
min 为最小值突增突降
max为最大值突增突降
distinct count为不同值数量突增突降
为按照那个字段分别分析 这里我们用schema
influencers为影响值,当报警是显示的信息
为以多长时间为一个分析周期
这里用5分钟
填写job名称,创建job
更改job为实时分析,点击编辑按钮
创建报警(可忽略)
查看异常
红点为异常点
黄点为警告
横坐标为时间
纵坐标为db,也可以选择其他,在左边View by
单击其中红点,查看异常详情
这里可以看到SQL ,ip ,host, schema, 用户等信息(influence)
趋势报告
自定义url便于查看
由于我们发现了异常点,但是有时候信息不够,我们需要看原始数据,怎么办了?我们来定义url跳掉指定的原始数据
url规则请查看
https://www.elastic.co/guide/en/elastic-stack-overview/6.7/ml-configuring-url.html
我们编辑为:
kibana#/discover?_g=(refreshInterval:(display:Off,pause:!f,value:0),time:(from:'$earliest$',mode:absolute,to:'$latest$'))&_a=(index:'mysql-slow*',query:(language:lucene,query:'mysql.slowlog.schema:"$mysql.slowlog.schema$"'))
其中g()中为
refreshInterval:(display:Off,pause:!f,value:0) 为停止自动刷新
time:(from:'$earliest$',mode:absolute,to:'$latest$' 为指定时间范围
'$earliest$' '$latest$' 为拼配time字段
_a=()为指定索引
query()为指定晒选条件
language:lucene,query:'mysql.slowlog.schema:"$mysql.slowlog.schema$"')
$mysql.slowlog.schema$为图中mysql.slowlog.schema的值
保存后
跳到具体的详细信息
实时报警配置
https://github.com/serive/elastic-ml-alert-plugin
安装
根据kibana版本 下载
https://github.com/serive/elastic-ml-alert-plugin/releases
执行安装
bin/kibana-plugin install file://<path to plugin>/es_ml_alert-x.x.x_y.y.y.zip
我这里是
bin/kibana-plugin install file:///root/es_ml_alert_6.0.1-0.4.0.zip
安装完成后重启 ,进入libana
根据情况填写
需要注意的是
报警触发周期
两种crontab 和interval
crontab为定时任务
interval为间隔 3m代表3分钟触发一次
设置报警级别
设置时区
进入es 配置邮件报警
vi elasticsearch.yml
xpack.notification.email.account:
some_mail_account:
email_defaults:
from: notification@example.com
smtp:
auth: true
starttls.enable: true
host: smtp.example.com
port: 587
user: notification@example.com
password: passw0rd
重启es
报警信息如下:
最后完成SLOW态势感知1.0版本