ELK 组成::
- 通过上图我们可以看到,ELK 是由三个Elastic 的产品组合而成,
- 分别是ElasticSearch、Logstash 和Kibana。
- 三者之间是的部署关系如下图所示:
-
- Logstash 就好比是挖矿工,将原料采集回来存放到ElasticSearch 这个仓库中,
- Kibana 再将存放在ElasticSearch 中的原料进行加工包装成产品,输出到web 界面。
-
- 基本工作原理如下图所示:
Logstash 原理分析及环境搭建
- 下载Logstash 6.5.1,解压即可
- 启动方式一:命令行输入:
-
./bin/logstash -e 'input { stdin {} } output { stdout {} }'
-
- 启动方式二:在config 目录下新建logstash.conf 文件,编辑以下内容:
-
input { stdin {} } output { stdout {} }
- 控制台输入以下命令:
-
./bin/logstash -f config/logstash.conf
-
-
访问日志生产平台的搭建
- 为让演示效果更加真实,
- 这里直接利用Nginx 产生的访问日志作为流量监控的元数据。
- 因此,自己要先搭建Nginx运行环境,
- 并部署一个可以访问的web 项目。
- 然后,在logstash 的安装目录新建一个patterns 目录,
- 在此目录下创建nginx 空白文件,
- 内容如下:
NGINXACCESS %{IPORHOST:clientip} %{HTTPDUSER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\]"(?:%{WORD:verb} %{URIPATH:uri}%{URIPARAM:param}(?:HTTP/%{NUMBER:httpversion})?|%{DATA:rawrequest})" %{NUMBER:response} (?:%{NUMBER:bytes}|-)
NGINXACCESSLOG %{NGINXACCESS} %{QS:referrer} %{QS:agent} %{QS:x_forwarded_for}
对logstash.conf 中的内容进行修改:
input{
file {
path => ["D:/nginx-1.14.0/logs/access.log"]
type =>"nginx_access"
start_position =>"beginning"
}
}
filter{
if [type] =="nginx_access" {
grok {
patterns_dir =>"D:/logstash-5.5.2/config/patterns/"
match =>{
"message" =>"%{NGINXACCESS}"
}
}
date {
match => ["timestamp", "dd/MMM/YYYY:HH:mm:ss Z"]
} if[param] {
ruby {
init =>"@kname = ['quote','url_args']"
code =>"
new_event =
LogStash::Event.new (Hash[ @kname.zip(event.get('param').split('?'))])
new_event.remove('@timestamp')
event.append(new_event)
"
} if[url_args] {
ruby {
init =>"@kanme = ['key','value']"
code =>"event.set('nested_args',event.get('url_args').split('&').clllect {|i|Hash[ @kanme.zip(i.split('='))]})"
remove_field => ["url_args", "param", "quote"]
}
}
mutate {
convert => ["response", "integer"]
remove_field =>"timestamp"
}
}
}
}
output{
stdout{
codec=>rubydebug
}
}
- 启动logstash 便可以将Nginx 日志同步到logstash 中来。
- gork 内置表达式查询地址:
- https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns
- gork 内置表达式查询地址:
Logstash 与ElasticSearch 集成
- 在logstash.config 追加以下内容,即可与ElasticSearch 实现无缝集成:
elasticsearch {
hosts => ["http://localhost:9200"]
index => "logstash-%{type}-%{+YYYY.MM.dd}"
document_type => "%{type}"
sniffing => true
#user => "tom"
#password => "123456"
}
利用Kibana 实现网站流量可视化
- 此时,只要web 程序产生访问日志,
- 就会被Logstash 同步到ElasticSearch 中来,
- 同时,会被Kibana 拉取到同时以可视化的界面展现出来
- Kinaba 能直接根据类型编辑获得聚合函数结果的图表
- 实时监控