倒叙的模式哈,上面的截图可以看出,虽然慢查询日志已经进入了elasticsearch,但是search field里面并没有展现。
说说配置吧。
logstash 配置 For mysql 5.7
#input {
# stdin {
# type => "mysql-slow"
# codec => multiline {
# pattern => "^# User@Host:"
# negate => true
# what => previous
# }
# }
#}
input {
#stdin {
file {
type => "mysql-slow"
path => "/opt/mysql/log/slow_query_log.log"
start_position => "beginning"
codec => multiline {
pattern => "^# User@Host:"
negate => true
what => previous
}
}
}
filter {
# drop sleep events
grok {
match => { "message" => "SELECT SLEEP" }
add_tag => [ "sleep_drop" ]
tag_on_failure => [] # prevent default _grokparsefailure tag on real records
}
if "sleep_drop" in [tags] {
drop {}
}
grok {
match => { "message" => "(?m)^#\s+User@Host:\s+%{USER:user}\[[^\]]+\]\s+@\s+(?:(?<clienthost>\S*) )?\[(?:%{IPV4:clientip})?\]\s+Id:\s+%{NUMBER:row_id:int}\n#\s+Query_time:\s+%{NUMBER:query_time:float}\s+Lock_time:\s+%{NUMBER:lock_time:float}\s+Rows_sent:\s+%{NUMBER:rows_sent:int}\s+Rows_examined:\s+%{NUMBER:rows_examined:int}\n\s*(?:use %{DATA:database};\s*\n)?SET\s+timestamp=%{NUMBER:timestamp};\n\s*(?<sql>(?<action>\w+)\b.*;)\s*(?:\n#\s+Time)?.*$" }
}
date {
match => [ "timestamp", "UNIX" ]
remove_field => [ "timestamp" ]
}
}
output {
elasticsearch {
hosts => ["192.168.3.228:9200"]
index=>"mysql-slow-log-%{+YYYY.MM.dd}"
}
stdout { codec => rubydebug }
}
….
elasticsearch
eh。 其他好像也不用啥配置了,
* elasticsearch,直接运行就好,不过参数有的时候是需要调整下,我直接写到elasticsearch的头部了
export PATH=/usr/local/jdk1.8.0_111/bin/:$PATH
export JAVA_HOME=/usr/local/jdk1.8.0_111/
ulimit -n 65536
ulimit -u 10240
效果展现
可以看到, test-mysql-slow-log已经有了一些了。
对了,忘了说,日志打到elasticsearch之后,要在e里面设置下pattern的。
就像上图里面的红色框框,我们设置 “test-mysql-slow-log-*”就好了, 如果日志进来,那么下面我们会看到绿色的可以点的状态,如果日志没有进来,或者我们的“”索引“”写错了,都不会显示绿色的。
点击创建后,在Discover页面,会有我们刚刚新建的索引。
目前有个问题,遗留了下来,就是如何把query time这些field显示在界面上。