一、前言
本文主要介绍了使用工具Elasticsearch、Kibana和Logstash(配合Logstash Forwarder)对服务器的各种日志文件,如nginx的log、系统的各种log、mysql的slow log等进行汇聚并存储,并进行图形化检索展示。通过这套工具,可以实现日志的集中管理,并通过对日志的分析,迟早发现存在的问题加以改进和完善。
三个工具的作用分别是:elasticsearch用于存储和检索、Kibana用来图形化展示和检索、Logstash用来汇聚日志。
二、安装
运行环境 Centos 6.5 x86_64
1、安装Elasticsearch
wget https://download.elasticsearch.org/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.0.0/elasticsearch-2.0.0.rpm rpm -ivh elasticsearch-2.0.0.rpm #修改以下配置,包括存储路径,选择一个较大的分区保存数据 vi /etc/elasticsearch/elasticsearch.yml path.data: /mnt/elasticsearch/data path.work: /mnt/elasticsearch/tmp path.logs: /mnt/elasticsearch/logs path.plugins: /mnt/elasticsearch/plugins #然后启动,默认端口是 9200 service elasticsearch start
2、安装Kibana
wget https://download.elastic.co/kibana/kibana/kibana-4.2.0-linux-x64.tar.gz tar xzvf kibana-4.2.0-linux-x64.tar.gz cd kibana-4.2.0-linux #核对下参数,里面有配置elasticsearch的端口信息,一般不用修改使用默认即可 vi config/kibana.yml elasticsearch_url: "http://localhost:9200" #启动kibana,监听端口是5601 ./bin/kibana #添加到自启动里 echo `pwd`/bin/kibana >> /etc/rc.local
此时用浏览器访问http://ip:5601/ 可以看到kibana界面,不过此时没有任何日志信息,是没法使用的,接下来是重点,配置日志汇聚。
3、安装Logstash
Logstash是汇聚日志的和转发日志给elasticsearch的作用,一般叫之为indexer。而安装到各服务器收集日志的机器,叫shipper,需要使用工具Logstash Forwarder(旧名称叫Lumberjack),最新的shipper工具又准备要换成beats了,有兴趣的可以自行研究配置,参考地址。
一般Logstash可以与elasticsearch,kibana安装在一台服务器上,Logstash Forwarder可以安装到任意其它要收集日志的机器上。
先安装Logstash:
wget #此包依赖jrm没有的请自行安装,推荐java 8 rpm ivh logstash-2.0.0-1.noarch.rpm #查看安装路径 rpm -ql logstash|more
配置Logstash,要先生成ssl相关的证书用于shipper和indexer加密通讯。
openssl req -x509 -nodes -newkey rsa:2048 -keyout logstash-forwarder.key -out logstash-forwarder.crt #按提示输入各信息,特别注意hostsname的输入,要与你的indexer机器一样,否则shipper机器可能无法通讯。
#配置参数 vi /etc/logstash/conf.d/logstash.conf input{ lumberjack { port => 5043 # type => "apache" ssl_certificate => "/etc/logstash/conf.d/logstash-forwarder.crt" ssl_key => "/etc/logstash/conf.d/logstash-forwarder.key" } file { path => [ "/var/log/*.log", "/var/log/messages", "/var/log/syslog" ] type => "syslog" } } filter { if [type] == "apache" { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } } output { if !("_grokparsefailure" in [tags]) { #stdout { codec => rubydebug } elasticsearch { bind_host => "127.0.0.1" } } }
然后启动Logstash
#检查下配置文件是否正确,正确的话就启动 /opt/logstash/bin/logstash -t -f /etc/logstash/conf.d/logstash.con service logstash start #查看日志,注意是否有错,有错 tail -f /var/log/logstash/logstash.err #最后行是 started 表示启动正常
一切正常的话,开始在采集机安装Logstash Forwarder。
安装步骤
wget https://download.elastic.co/logstash-forwarder/binaries/logstash-forwarder-0.4.0-1.x86_64.rpm rpm -ivh logstash-forwarder-0.4.0-1.x86_64.rpm rpm -ql logstash-forwarder vi /etc/logstash-forwarder.conf #修改以下几项 { "network": { "servers": [ "YOUR_INDEXER_HOSTNAME:5043" ], "ssl key": "/etc/logstash/conf.d/logstash-forwarder.key", "ssl ca": "/etc/logstash/conf.d/logstash-forwarder.crt", "timeout": 15 }, "files": [ { "paths": [ "/var/log/nginx/*.log","/var/log/httpd/*.log" ], "fields": { "type": "apache" } } ] }
上面的key和crt文件从安装Logstash服务器里复制过来,在采集机不用再重复生成。
启动logstash-forwarder
service logstash-forwarder start
观察Log是否有错误
tail -f /var/log/logstash-forwarder/logstash-forwarder.err
如果输出 Registrar: processing 1 events 表示正常。
如果一切正常,表示日志已经采集过去了,再次通过 http://localhost:5601/ 访问kibaba,可能看到有报表和数据了。
如下图
Kibana功能非常强大,结合Visualize可以生成各种维度的报告,具体使用请参数官方网站。
三、总结
EKL三者互相配合可能实现日志分析的自动化,从多角度对你的日志数据进行分析,同时Logstash还提供了大量的plugin(插件主要分3类,INPUT,FILTER和OUTPUT),包括与Kabbix或Nagios配合实现自动告警服务等(请参考我的另外一遍文章《Zabbix对服务器资源进行监控及百度告警的整合》)。
logstash plugin的安装如果发现ruby的很慢,应该是域名被墙了,可以换成国内淘宝的镜像,相关参考在 https://ruby.taobao.org/,可以搜索plugin目录下的相关域名,直接替换成淘宝的域名,参数命令
$ sed -i -E 's!https?://cache.ruby-lang.org/pub/ruby!https://ruby.taobao.org/mirrors/ruby!' $rvm_path/config/db
<作者 朱淦 [email protected] 2015.11.5>