ElK 8 收集 MySQL 慢查詢日志并通過 ElastAlert2 告警至飛書

文章目錄

  • 1. 說明
  • 2. 啟個 mysql
  • 3. 設置慢查詢
  • 4. filebeat 設置
  • 5. 觸發慢查詢
  • 6. MySQL 告警至飛書

1. 說明

elk 版本:8.15.0

2. 啟個 mysql

docker-compose.yml 中 mysql:

  mysql:# restart: alwaysimage: mysql:8.0.27# ports:#   - "3306:3306"volumes:- ./mysql/data:/var/lib/mysql- ./mysql/log:/var/log/mysqlcommand: ['--character-set-server=utf8mb4','--collation-server=utf8mb4_unicode_ci','--default-time-zone=+8:00']environment:TZ: "Asia/Shanghai"MYSQL_ROOT_PASSWORD: "Mysqlr00Tp"

啟動,并查看:

docker-compose up -d
docker-compose ps

3. 設置慢查詢

進入 mysql 查詢慢查詢設置,因為我這里是臨時測試,所以直接用命令設置,生產還需要設置到配置文件中。

# 我這里是 elk-mysql-1 容器名
docker exec -it elk-mysql-1 /bin/bash# 進入 mysql
mysql -uroot -p$MYSQL_ROOT_PASSWORD

查詢結果:

mysql> SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'slow_query_log_file';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| slow_query_log | OFF   |
+----------------+-------+
1 row in set (0.01 sec)mysql> SHOW VARIABLES LIKE 'slow_query_log_file';
+---------------------+--------------------------------------+
| Variable_name       | Value                                |
+---------------------+--------------------------------------+
| slow_query_log_file | /var/lib/mysql/1f4c6d344dcc-slow.log |
+---------------------+--------------------------------------+
1 row in set (0.00 sec)mysql> SHOW VARIABLES LIKE 'long_query_time';
+-----------------+-----------+
| Variable_name   | Value     |
+-----------------+-----------+
| long_query_time | 10.000000 |
+-----------------+-----------+
1 row in set (0.00 sec)

把慢查詢開啟,并設置慢查詢時間為 2 秒:

mysql> SET GLOBAL slow_query_log = 'ON';
Query OK, 0 rows affected (0.02 sec)mysql> SET GLOBAL long_query_time = 2;
Query OK, 0 rows affected (0.00 sec)

慢查詢日志路徑不支持在線設置,需要設置到配置文件中,所以我們直接用上面默認的路徑測試。

mysql> SET GLOBAL slow_query_log_file = '/var/log/mysql/mysql-slow.log';
ERROR 1231 (42000): Variable 'slow_query_log_file' can't be set to the value of '/var/log/mysql/mysql-slow.log'

上面設置后,退出再重進下,生效到新 Session 中。

4. filebeat 設置

modules.d/mysql.yml 中設置:

- module: mysqlerror:enabled: falsevar.paths: ["/path/to/log/mysql/error.log*"]slowlog:enabled: truevar.paths: ["/data/docker/elk/mysql/data/*-slow.log*"]

因為這里是容器環境,默認錯誤日志是輸出的,我們只設置慢查詢日志就好。

mysql> SHOW VARIABLES LIKE 'log_error';
+---------------+--------+
| Variable_name | Value  |
+---------------+--------+
| log_error     | stderr |
+---------------+--------+
1 row in set (0.00 sec)

主配置 filebeat.yml

filebeat.config.modules:# Glob pattern for configuration loadingpath: ${path.config}/modules.d/*.ymloutput.elasticsearch:hosts: ["https://10.1.205.165:9200"]username: "filebeat_writer"password: "YOUR_PASSWORD"ssl:enabled: true# fingerprint=$(openssl x509 -fingerprint -sha256 -noout -in certs/ca/ca.crt | awk -F"=" '{print $2}' | sed 's/://g')ca_trusted_fingerprint: "33CB5A3B3ECCA59FDF7333D9XXXXXXXXFD34D5386FF9205AB8E1"# certs/ca 目錄從 es 中拷過來certificate_authorities: ["certs/ca/ca.crt"]# output.logstash:
#   hosts: ["10.1.205.165:5044", "10.1.205.166:5044"]setup.kibana:host: "10.1.205.165:5601"logging.level: warning

啟動 filebeat 即可。

5. 觸發慢查詢

用以下 SQL 觸發慢查詢:

CREATE DATABASE test;
USE test;CREATE TABLE test_table (id INT AUTO_INCREMENT PRIMARY KEY,data VARCHAR(255)
);INSERT INTO test_table (data) VALUES ('sample data 1'), ('sample data 2'), ('sample data 3');SELECT SLEEP(3), data FROM test_table;

在 MySQL 中,SLEEP 函數的參數是以秒為單位的。如果你執行 SELECT SLEEP(3), data FROM test_table;,每一行都會等待 3 秒。因此,如果表中有 3 行數據,總的查詢時間將是 3 秒乘以行數,即 9 秒。

可以看到 kibana 中的 dashboard 已經有數據了:
在這里插入圖片描述

6. MySQL 告警至飛書

docker-compose.yml

services:elastalert:image: ygqygq2/elastalert2:2.21.0volumes:- ./elastalert/config.yaml:/opt/elastalert/config.yaml- ./elastalert/rules:/opt/elastalert/rules- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime:rorestart: always

關鍵的是 rules:

#rule name 必須是獨一的,不然會報錯
name: "mysql-slowlog"
type: "frequency"
#這個index 是指再kibana 里邊的index  支持正則 log-*
index: "filebeat-*"
#時間觸發的次數
num_events: 1
#和num_events參數關聯,1分鐘內出現1次會報警
timeframe:# hours: 1minutes: 1# seconds: 30
##同一規則的兩次警報之間的最短時間。在此時間內發生的任何警報都將被丟棄。默認值為一分鐘
realert:minutes: 1
# terms_size: 50
# timestamp_field: "@timestamp"
# timestamp_type: "iso"
use_strftime_index: truefilter:- query:bool:must:- query_string:query: "event.dataset: mysql.slowlog"- script:script:source: >def ip_list = params.ip_list;def host_ip = doc['host.ip'][0];def duration_in_seconds = doc['event.duration'].value / 1e9;return ip_list.contains(host_ip) && duration_in_seconds > params.threshold;lang: painlessparams:ip_list: ["10.x.x.x"]threshold: 10  # 10 secondsalert:- feishu# 告警群
feishu_robot_webhook_url: "https://open.feishu.cn/open-apis/bot/v2/hook/xxxxx"# 這個時間段內的匹配將不告警,適用于某些時間段請求低谷避免誤報警
# feishu_skip:
#   start: "01:00:00"
#   end: "09:00:00"alert_subject: "MySQL 慢查詢"
alert_text_type: alert_text_only
alert_text: |💔 ELK 日志告警🔵【告警名稱】{}🧭【告警時間】{}🔢【命中次數】{}🆔【日志_id】{}🖥??【故障主機】{}🌐【查詢來源】{}👤【查詢用戶】{}??【查詢耗時】{} 秒📝【日志信息】{}# 設置告警使用的變量名
alert_text_args:- "alert_subject"- "alert_time"- "num_hits"- "_id"- "host.ip[0]"- "related.ip"- "related.user"- "event.duration"- "mysql.slowlog.query"

參考資料:
[1] https://www.elastic.co/guide/en/beats/filebeat/8.15/filebeat-module-mysql.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62339.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62339.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62339.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyTorch基本使用-張量的索引操作

在操作張量時,經常要去獲取某些元素進行處理或者修改操作,在這里需要了解torch中的索引操作。 準備數據: data torch.randint(0,10,[4,5]) print(data--->,data)輸出結果: data---> tensor([[3, 9, 4, 0, 5],[7, 5, 9, …

【服務器監控】grafana+Prometheus+node exporter詳細部署文檔

我們在進行測試時,不可能一直手動看著服務器的性能消耗,這時候就需要有個工具替我們監控服務器的性能消耗。這里記錄下grafanaPrometheusnodeExporter的組合用于監控服務器。 簡單介紹: grafana:看板工具,所有采集的…

第十七章 使用 MariaDB 數據庫管理系統

1. 數據庫管理系統 數據庫是指按照某些特定結構來存儲數據資料的數據倉庫。在當今這個大數據技術迅速崛起的年代,互聯網上每天都會生成海量的數據信息,數據庫技術也從最初只能存儲簡單的表格數據的單一集中存儲模式,發展到了現如今存儲海量…

Jenkins授權策略的配置

簡介:在Jenkins中,通過系統管理下的“Manage and Assign Roles”以及“Manage Roles”來配置角色,是實現權限管理的關鍵步驟。以下是關于這兩個功能配置角色時的意義及注意事項的詳細解釋: 一、配置角色的意義 實現權限控制: 通過創建和分配角色,可以精確地控制不同用戶…

centos 7.9 安裝jdk1.8 mysql redis等

環境: centos 7.9 1、安裝OpenJDK 1.8 步驟 1: 更新系統 首先,確保你的系統是最新的,執行以下命令來更新所有軟件包: sudo yum update -y步驟 2: 安裝 OpenJDK 1.8 CentOS 7 默認的包管理器是 yum,你可以通過以下命…

計算機鍵盤的演變 | 鍵盤鍵名稱及其功能 | 鍵盤指法

注:本篇為 “鍵盤的演變及其功能” 相關幾篇文章合輯。 英文部分機翻未校。 The Evolution of Keyboards: From Typewriters to Tech Marvels 鍵盤的演變:從打字機到技術奇跡 Introduction 介紹 The keyboard has journeyed from a humble mechanical…

Methods and Initializers

1 Method Declarations 這回不從comipler開始,從runtime開始。 GC也需要follow 接下來難點在于如何填充這些表 2 Compiling method declarations 難點: 一個類可以聲明任意數量的方法。運行時需要查找并綁定所有這些方法。如果將這些方法都打包到一條…

飛飛5.4游戲源碼(客戶端+服務端+工具完整源代碼+5.3fix+5.4patch+數據庫可編譯進游戲)

飛飛5.4游戲源碼(客戶端服務端工具完整源代碼5.3fix5.4patch數據庫可編譯進游戲) 下載地址: 通過網盤分享的文件:【源碼】飛飛5.4游戲源碼(客戶端服務端工具完整源代碼5.3fix5.4patch數據庫可編譯進游戲) 鏈…

開源C代碼之路:一、Gitee

開源c代碼之路:一,Gitee 前言1、開源項目2、從哪里找?3、舉個例子4、總結: 本系列回顧清單開源代碼示例 前言 從開源開發的角度,由淺入深,一步步初探C語言編程的入門之路。 本篇講解:Gitee 1…

基于協同過濾算法的寵物用品商城的設計與實現(計算機畢業設計)Java Spring 衍生為任何商城系統 畢業論文

系統合集跳轉 源碼獲取鏈接 一、系統環境 運行環境: 最好是java jdk 1.8,我們在這個平臺上運行的。其他版本理論上也可以。 IDE環境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat環境: Tomcat 7.x,8.x,9.x版本均可 操作系統…

算法-字符串-165.比較版本號

一、題目 二、思路解析 1.思路: 比較的是兩個版本號它們以“.”作為分割的部分的有效值(即數值)是否一致 2.常用方法: 1.s.split("\\規則"),將字符串按參數規則進行分割并存儲在字符串數組中 String[] str …

MySQL(四)--索引

MySQL的服務器,本質是在內存中的,那么所有對數據的CURD操作,全都是在對內存進行操作。 而,提高數據的CURD操作的效率,有兩種方式:1、組織數據的格式(數據結構);2、算法。 而,數據結構,就是索引,即組織數據的格式。 1、沒有索引的問題 索引:提高數據庫的性能,索…

C# (WinForms) 使用 iTextSharp 庫將圖片轉換為 PDF

iTextSharp簡介 iTextSharp 是一個開源的 .NET 庫,主要用于創建和操作 PDF 文檔。它是 iText 的 .NET 版本,iText 是一個廣泛使用的 Java 庫。iTextSharp 繼承了 iText 的核心功能并進行了適應 .NET 平臺的調整。 iTextSharp 的主要功能包括&#xff1a…

ubuntu防火墻設置(四)——iptables語法與防火墻基礎配置

前面介紹的ufw和firewall-config均為iptables的前端, 分別適合個人用戶和服務器網絡管理 下面介紹底層——ipables iptables是一個強大的工具,用于配置Linux系統的防火墻。以下是一些基本的使用方法和示例,幫助您入門: 基本語法 …

【中間件開發】Redis基礎命令詳解及概念介紹

文章目錄 前言一、Redis相關命令詳解及原理1.1 string、set、zset、list、hash1.1.1 string1.1.2 list1.1.3 hash1.1.4 set1.1.5 zset 1.2 分布式鎖的實現1.3 lua腳本解決ACID原子性1.4 Redis事務的ACID性質分析 二、Redis協議與異步方式2.1 Redis協議解析2.1.1 redis pipeline…

力扣每日一題 - 999. 可以被一步捕獲的棋子數

題目 還需要你前往力扣官網查看詳細的題目要求 地址 1.給定一個 8 x 8 的棋盤,只有一個 白色的車,用字符 R 表示。棋盤上還可能存在白色的象 B 以及黑色的卒 p。空方塊用字符 . 表示。2.車可以按水平或豎直方向(上,下,…

[UVM]在UVM環境中加入C++內存模塊

摘要:要在UVM環境中實現一個內存模塊并存入數據,您可以遵循以下步驟。這里會涉及C的內存建模和UVM的SystemVerilog部分的接口。在高層次上,我們將描述如何在C中實現內存模型并通過UVM的DPI接口訪問它。 一、C內存模型 首先,在C中…

學習記錄,正則表達式, 隱式轉換

正則表達式 \\:表示正則表達式 W: 表示一個非字(不是一個字,例如:空格,逗號,句號) W: 多個非字 基本組成部分 1.字符字面量: 普通字符:在正則表達式中,大…

Selenium是廣泛使用的模擬瀏覽器運行的庫

簡介 Selenium是廣泛使用的模擬瀏覽器運行的庫,它是一個用于Web應用程序測試的工具。 Selenium測試直接運行在瀏覽器中,就像真正的用戶在操作一樣,并且支持大多數現代 Web 瀏覽器。 環境 安裝 pip install selenium下載Chrome驅動 系統環境…

網絡練級寶典-> UDP傳輸層協議

目錄 傳輸層 端口號 端口號和進程的關系 UDP協議 UDP協議格式 UDP數據封裝: UDP數據分用: 面向數據報 UDP的緩沖區 UDP的缺點 基于UDP的應用層協議 傳輸層 端口號 我們知道端口號對應的其實就是一個進程的pid,在操作系統中二者的…