ELK Stack基础教程(6)使用ES对MySQL慢日志进行展示分析

TangLu 未命名 2022-10-26 754 0

1、MySQL数据库版本为5.7,慢日志格式如下

# Time: 2022-10-24T16:15:28.539506+08:00 
# User@Host: dba[dba] @ localhost [] Id: 618888 
# Query_time: 3.000829 Lock_time: 0.000000 Rows_sent: 1 Rows_examined: 0 
SET timestamp=1666599328; 
select sleep(3);


2、Filebeat配置部分

filebeat.inputs:
- type: log
  paths:
    - /data/mysql3306/log/slowlog/mysql.slow                    #修改为实际数据库慢日志的路径
  multiline.type: pattern
  multiline.pattern: '^# User@Host: '                           #从慢日志的User@Host行开始进行匹配,然后将该行后面的多行日志都合并为一条日志,而第一行Time会另作处理
  multiline.negate: true
  multiline.match: after
  tags: ["mysql_slowlog",3306]

- type: log
  paths:
    - /data/mysql3307/log/slowlog/mysql.slow
  multiline.type: pattern
  multiline.pattern: '^# User@Host: '
  multiline.negate: true
  multiline.match: after
  tags: ["mysql_slowlog",3307]

- type: log
  paths:
    - /data/redis/logs/redis.log
  tags: ["redis_log"]

processors:
  - drop_fields:
      fields: ["ecs","agent","input","log"]                #删除filebeat自身带的多余字段

output.logstash:
  hosts: ["172.20.1.221:5044"]                     #指向了Logstash地址


经过上面Filebeat处理后的日志内容如下

Snipaste_2022-10-26_17-11-28.png


2、Logstash部分

input {
  beats {
    port => 5044
  }
}


filter {
  #MySQL 5.7慢日志grok规则,一定要配合下面的删除语句一起使用,否则不匹配
  grok {
    match => [ "message", "(?m)^# User@Host: %{USER:query_user}\[[^\]]+\] @ (?:(?<query_host>\S*) )?\[(?:%{IP:query_ip})?\]\s+Id:\s+%{NUMBER:id:int}\s# Query_time: %{NUMBER:query_time:float}\s+Lock_time: %{NUMBER:lock_time:float}\s+Rows_sent: %{NUMBER:rows_sent:int}\s+Rows_examined: %{NUMBER:rows_examined:int}\s*(?:use %{DATA:database};\s*)?SET timestamp=%{NUMBER:timestamp};\s*(?<query>(?<action>\w+)\s+.*)" ]
  }
  
  #将慢日志中#Time开头的行加上drop标签,如:# Time: 181218  9:17:42
  grok {
    match => { "message" => "# Time: " }
    add_tag => [ "drop" ]
    tag_on_failure => []
  }
  
  #删除标签中含有drop的行,也就是日志里# Time开头的内容
  if "drop" in [tags] {
    drop {}
  }
}


output {
  elasticsearch {
    hosts => ["172.20.1.221:9200"]
    index => "filebeat-mysql-slowlog-%{+yyyy.MM.dd}"
  }
}


经过上面Logstash处理后的日志内容如下

grok_mysql.png


3、ES部分

cluster.name: mysql_slowlog_es
node.name: node_1_221
path.data: /data/es/data
path.logs: /data/es/logs
bootstrap.memory_lock: true
network.host: 172.20.1.221
http.port: 9200
discovery.seed_hosts: ["172.20.1.221"]
cluster.initial_master_nodes: ["172.20.1.221"]
action.destructive_requires_name: true


评论