本文是目前最流行的elk的研究第一篇
一、安装
1. 首先安装jdk8
2. 下载elasticsearch 和 logstash 注意版本,下载最新的
3. 配置elasticsearch,进入conf目录
修改node,网络等信息
安装插件:
bin/plugin -install lmenezes/elasticsearch-kopf
4. 使用logstash测试
bin/logstash -e 'input { stdin { } } output { elasticsearch_http { host => “10.10.1.12” } }’
此时访问:
curl 'http://localhost:9200/_search?pretty'
此时可以看到输入的数据
访问elas的插件
http://localhost:9200/_plugin/kopf/
可以看到图形化数据
5. 配置kibana
elasticsearch_url: " http://10.10.1.11:9200" url一定要写正确
然后就启动kibana,简单配置即可试用
二、 logstash
1. grok
filter中grok是最常用的工具了
参考:https://github.com/chenryn/logstash-best-practice-cn/blob/master/filter/grok.md
1.1 匹配单行
filter {
grok { match =>
{“message”=>"(?<level>(\w+)?) (?<request_time>\d+(?:\.\d+)?) (?<test>(\w+)?)”}
具体正则为:
(?<level>(\w+)?) (?<request_time>\d+(?:\.\d+)?) (?<test>(\w+)?)
logstash的正则和perl是一样的
\w 是匹配一个字符,+代表匹配前面一次或多次 ?代表匹配前面一次或0次
前面的?<level>是自定义的,可以任意写,后面的就不多解释了
运行效果如下:
{
"level": [
[
"abc"
]
],
"request_time": [
[
"1.1"
]
],
"test": [
[
"ed"
]
]
}
以上效果是使用grok 在线网站测试的:http://grokdebug.herokuapp.com/
1.2 匹配多行
filter {
grok { match =>
["message" , "(?<level>(\w+)?) (?<request_time>\d+(?:\.\d+)?) (?<test>(\w+)?)",
"message" , "(?<level>(\w+)?) (?<request_time>(\w+)?) (?<test>(\w+)?)"]
}
}
匹配多行的格式如上;
当第一个message语句匹配不上的时候,会自动使用第二个message进行匹配