简介
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/kibanasupervisor
推荐使用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″200612”-“”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 =>20000idle_flush_time =>10sniffing =>truetemplate_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面板中可以做数据可视化报表
本文采用「CC BY-SA 4.0 CN」协议转载自互联网、仅供学习交流,内容版权归原作者所有,如涉作品、版权和其他问题请给「我们」留言处理。