前言:随着硬件成本的不断低廉,我们可以存储更多数据内容,也会对各数据加以利用,其中一项很重要的数据内容便是日志文件,无论是访问日志还是系统日志或是应用日志,都显得十分重要,而怎么加以利用一直是一个难题,本文就着重于ELK三套件的搭建,是比较流行或者说可靠的日志分析组件,值得注意的说,本文暂时只考虑单机Elasticsearch,并且为了作为演示,就linux的系统日志收集作为演示。
版本说明:
ElasticSearch 1.7.1
Kibana 4..1
Logstash 1.5.2
JAVA jdk-7u76
注: 最新的上面不一定是最新的版本,不同的版本之间可能有兼容问题,而上面的组合是本人已经验证过的了。
首先放一张图镇镇楼
强调:不要用IE浏览Kibana!!!
ELK下载地址:https://www.elastic.co/downloads
JAVA环境的安装就不演示了!!!(推荐使用jdk-7u76-linux-x64.gz)
tar zxvf elasticsearch-1.7.1.tar.gz tar zxvf kibana-4.1.1-linux-x64.tar.gz tar zxvf logstash-1.5.2.tar.gz
值得注意的是,你可以通过elastic提供的rpm包直接安装,但是那对于一个运维人员太没挑战性了~~再者,对ELK的认识实在不够深刻。
下载elasticsearch-servicewrapper(是一个elasticsearch的启动脚本)
#wget https://github.com/elastic/elasticsearch-servicewrapper/archive/master.zip
###通过这个脚本可以更简单执行Elasticsearch服务启动关闭等命令
其中包括
Console 在前台启动
Start 在后台启动
Stop 关闭
Install 装到启动项里面
Remove 移除卸载
开始安装
mv elasticsearch-1.7.1 /data/elasticsearch unzip master.zip mv elasticsearch-servicewrapper-master/*/data/elasticsearch/bin/ mv logstash-1.5.2 /data/logstash mv kibana-4.1.1 /data/kibana
ELK三套件都是依赖JAVA环境并不需要编译安装,所以安装其实非常简单,只是有版本兼容问题所以部分人总是装不上,再者ELK需要相关优化,不然就会总是抛出异常。
ELK中的E,elasticsearch一个全文搜索引擎,存储着收集过来的所有数据并支持集群模式,你只用真正的会用的时候你才会体会到它的异常强大,虽然笔者也是刚刚深入,但是又一次通过Python调用API查询自安装使用至今,查询结果大于五万条数据,嗖的一下就返回,没有任何延迟,并且是结果聚合的数据,由此可见一斑,而且是单机版的。
配置elasticsearch
vi/data/elasticsearch/config/elasticsearch.yml
增加下面两行
http.cors.enabled:true http.cors.allow-origin:http://ip(本机IP)
启动Elasticsearch
/data/elasticsearch/bin/service/elasticsearch start
本地测试Elasticsearch
curl -X GET http://localhost:9200/ { "status" : 200, "name" : "Jack Flag", "cluster_name" :"elasticsearch", "version" : { "number" : "1.7.1", "build_hash" :"927caff6f05403e936c20bf4529f144f0c89fd8c", "build_timestamp" : "2015-07-16T14:11:12Z", "build_snapshot" : false, "lucene_version" :"4.10.2" }, "tagline" : "You Know, forSearch" }
ELK中的L指Logstash,是一个日志收集应用,本文主要用来收集系统日志,你当然也可以用来解析各种日志,如Tomcat,Nginx,MongoDB等相关应用日志,此文档作为安装文档就不做演示了。
配置logstash
mkdir /data/logstash/conf/ vi /data/logstash/conf/sys.conf
input {
syslog{
port => "514"
type => "syslog"
}
}
output {
elasticsearch {
host => "127.0.0.1"
}
}
上面的信息是说,以syslog作为输入,监听514端口,Type为syslog,将接收的信息输出到本机的elasticsearch。
如果你执行/data/logstash/bin/logstash -f /data/logstash/conf/sys.conf
你会发现本机监听514端口,但是没有用,因为没有配置任何机器的rsyslog,其他机器怎么会发信息过来~
所以我们配置一下,需要收集系统日志的主机的rsyslog
yum -y install rsyslog vi /etc/rsyslog.conf ##加入下面一行,ip填日志服务器的IP *.* @@ip:514
当你重启被收集日志主机的rsyslog,该主机就会往日志服务器的514端口以syslog的格式发送系统日志了。
因为是源码安装的,所以可能需要用& 或者nohup 或者自己写的启动脚本将logstash服务放到后台,这里推荐supverisor,后面的kibana也通过supervisor放到后台。
#修改kibana配置文件
# vi/data/kibana/config/kibana.yml port: 80 ##改为80(默认监听5601端口)
然后启动kibana
/data/kibana/bin/kibana>/dev/null 2>&1 &
但是通过&或者nohup实在太不优雅了,我们使用supervisor
yum -y install supervisor [program:kibana] command=/data/kibana/bin/kibana autorestart = true redirect = true stderr_logfile = /var/log/kibana/kibana.log startsecs = 3 [program:logstash] command=/data/logstash/bin/logstash -f /data/logstash/conf/logstash.conf -l /data/logstash/logstash_debug.log autorestart = true redirect = true stderr_logfile = /var/log/logstash/logstash.log startsecs = 3
至于supervisord的详细配置,请参考:http://youerning.blog.51cto.com/10513771/1714627
最后启动supervisord即可。
现在你就可以访问日志服务器了。
第一次登陆,应该是下面的页面
因为我们没有创建索引,所以他会提示我们创建索引,点击create即可,如果你没有配置发送系统日志的rsyslog你会发现,输入框是红色,不能create,这是因为elasticsearch没有任何内容。
当然可以手工的创建一条信息。
创建一个配置文件
vi hello.conf
input { stdin { type => "human" } } output { stdout { codec => rubydebug } elasticsearch { host => "127.0.0.1" } }
/data/logstash/bin/logstash -f hello.conf
在提示Completed之后,随便输入一条信息即可。
上面安装完成后,你会发现kibana总是会出现红色提示框"shards faild",所以需要相关优化
关于elasticsearch的优化
配置文件/data/elasticsearch/config/elasticsearch.yml增加一面内容
# Search pool
threadpool.search.type: fixed
threadpool.search.size: 20
threadpool.search.queue_size: 10000
系统优化
vi /etc/security/limits.conf
elasticsearch soft nofile 32000 elasticsearch hard nofile 32000 root hard nofile 32000 root soft nofile 32000
后记:好吧,安装文档就到这里吧,关于Elasticsearch的API调用(主要通过Python)以及Kibana的使用在以后的内容文章会说到