搭建ELK日志分析平台

我是创始人李岩:很抱歉!给自己产品做个广告,点击进来看看。  

搭建ELK日志分析平台

简介

ELK stack是实时日志处理领域开源的一套解决方案,最近这两年越来越火,大有一统江湖之势。ELK是一套解决方案而不是一款软件,三个字母分别是三个软件产品的缩写。
E代表Elasticsearch ,负责日志的存储和检索;
L代表Logstash , 负责日志的收集,过滤和格式化;
K代表Kibana ,负责日志的展示统计和数据可视化
先来看下elk主要的应用场景:

  • 查询程序日志 : 线上程序难免会出现各种问题,为了排查出现的问题,开发需要登录到应用程序所在的机器,使用cat、awk、grep、sort 等工具查询具体的log信息。这样查询日志极其不方便,在机器数量多、日志文件大,开发没有权限登录服务器的情况下更麻烦。
  • 统计信息: 我们经常需要统计下某个接口调用次数、平均响应时间、成功/失败比率等信息。

使用logstash能够解析不同服务器上的不同类型的日志,将这些信息格式化然后通过接口传递给elasticsearch集群,elasticsearch集群负责存储这些日志信息,并为这些日志信息建立索引提供查询接口给kibana。我们通过kibana页面就可以很方便的实时查询线上日志信息,还可以做各种统计,生成实时报表。

搭建ELK日志分析平台

环境搭建

  • 安装java(java 8及以上版本)
    brew cash install java
  • 安装elasticsearch
    https://www.elastic.co/downloads/elasticsearch
  • 安装logstash
    https://www.elastic.co/downloads/logstash
  • 安装kibana
    https://www.elastic.co/downloads/kibana
  • supervisor
    推荐使用supervisor管理ELK。
    http://supervisord.org/installing.html

实战

本章节将演示如何用ELK来对Nginx访问日志进行解析,存储以及可视化。

默认的nginx日志输出格式为

				
					log_format  main
					'$remote_addr - $remote_user [$time_local] "$request" '
				
				
					'$status $body_bytes_sent "$http_referer" '
				
				
					'"$http_user_agent" "$http_x_forwarded_for"'
					;
				
				
					//一条具体的日志信息
				
				
					127.0
					.
					0.1
					-
					-
					[
					21
					/
					May
					/
					2017
					:
					17
					:
					10
					:
					03
					+
					0800
					]
					"GET / HTTP/1.1"
					200
					612
					"-"
					"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36"
					"-"
				
			

用Logstash 推送数据到 Elasticsearch

  • 我们首先需要在nginx所在的机器上部署logstash
  • 然后执行 logstash -f nginx_access_logstash.conf

nginx_access_logstash.conf文件的内容如下

				
					input
					{
				
				
					file
					{
				
				
					path
					=>
					[
					"/usr/local/logs/nginx/*.log"
					]
				
				
					type
					=>
					"system"
				
				
					start_position
					=>
					"beginning"
				
				
					}
				
				
					}
				
				
					filter
					{
				
				
					grok
					{
				
				
					match
					=>
					{
				
				
					"message"
					=>
					'%{IPORHOST:remote_ip} - %{DATA:user_name} \[%{HTTPDATE:time}\] "%{WORD:request_action} %{DATA:request} HTTP/%{NUMBER:http_version}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:agent}"'
				
				
					}
				
				
					}
				
				
					date
					{
				
				
					match
					=>
					[
					"time"
					,
					"dd/MMM/YYYY:HH:mm:ss Z"
					]
				
				
					locale
					=>
					en
				
				
					}
				
				
					geoip
					{
				
				
					source
					=>
					"remote_ip"
				
				
					target
					=>
					"geoip"
				
				
					}
				
				
					useragent
					{
				
				
					source
					=>
					"agent"
				
				
					target
					=>
					"user_agent"
				
				
					}
				
				
					}
				
				
					output
					{
				
				
					elasticsearch
					{
				
				
					hosts
					=>
					[
					"127.0.0.1:9200"
					]
				
				
					index
					=>
					"logstash-nginx-access-log"
				
				
					document_type
					=>
					"logs"
				
				
					flush_size
					=>
					20000
				
				
					idle_flush_time
					=>
					10
				
				
					sniffing
					=>
					true
				
				
					template_overwrite
					=>
					true
				
				
					}
				
				
					}
				
			

检查数据是否被Elasticsearch索引成功

在浏览器中运行 http://127.0.0.1:9200/logstash-nginx-access-log/logs/_search?q=*

在Kibana中查询相关日志

  • 打开 http://localhost:5601/
  • Management 面板中配置我们在elasticsearch中创建的索引 logstash-nginx-access-log
  • 然后在 discover 面板中就可以查询到我们之前导入的日志了
  • 然后在 visualize 面板中可以做数据可视化报表

End.

转载请注明来自36大数据(36dsj.com): 36大数据 » 搭建ELK日志分析平台

随意打赏

提交建议
微信扫一扫,分享给好友吧。