搭建ELK日志分析平台
简介
ELK stack是实时日志处理领域开源的一套解决方案,最近这两年越来越火,大有一统江湖之势。ELK是一套解决方案而不是一款软件,三个字母分别是三个软件产品的缩写。
E代表Elasticsearch
,负责日志的存储和检索;
L代表Logstash
, 负责日志的收集,过滤和格式化;
K代表Kibana
,负责日志的展示统计和数据可视化
先来看下elk主要的应用场景:
- 查询程序日志 : 线上程序难免会出现各种问题,为了排查出现的问题,开发需要登录到应用程序所在的机器,使用cat、awk、grep、sort 等工具查询具体的log信息。这样查询日志极其不方便,在机器数量多、日志文件大,开发没有权限登录服务器的情况下更麻烦。
- 统计信息: 我们经常需要统计下某个接口调用次数、平均响应时间、成功/失败比率等信息。
使用logstash能够解析不同服务器上的不同类型的日志,将这些信息格式化然后通过接口传递给elasticsearch集群,elasticsearch集群负责存储这些日志信息,并为这些日志信息建立索引提供查询接口给kibana。我们通过kibana页面就可以很方便的实时查询线上日志信息,还可以做各种统计,生成实时报表。
环境搭建
-
安装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日志分析平台