2019独角兽企业重金招聘Python工程师标准>>>
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 能直接根据类型编辑获得聚合函数结果的图表
- 实时监控