态势异常感知及展示mysql慢查询详情

96
傻了的诗吟
2019.03.29 16:05* 字数 906


概述

我们需要知道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版本

Grafana展示MYSQL慢查询

基于EKL慢SQl平台