由于公司上的服务器很多都是老版本的JDK-1.6.0,更新jdk,又怕服务器之前部署的东西冲突,所以只能用老版本的日志收集系统。
本文章中有很多引用前人配置的链接,读者阅读要是遇到不懂的地方可以参考阅读。一定要注意自己部署的版本以及相匹配的版本,可以少走很多弯路。
搭建环境和所需组件如下:
l Redhat 5.7 64bit 或 CentOS 5.x
l JDK 1.6.0_45
l logstash 1.3.2(内带kibana)
l elasticsearch 0.90.10
l redis 2.8.4
日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。
ELK Stack 是 Elasticsearch、Logstash、Kibana 三个开源软件的组合。在实时数据检索和分析场合,三者通常是配合共用。实现日志管理的功能。
l Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。本例中用的是logstash-1.3.2版本为一个java tar包,无需安装执行只需,用java –tar指令即可执行,下面会介绍具体用法。
l Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
l Kibana 也是一个开源和免费的工具,它Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
l Redis是一个开源、支持网络、基于内存、键值对存储数据库,使用ANSI C编写,这边主要作为输入缓冲队列。
上面用图片来直观的介绍一下:
Shipper 为logstash(agent) Broker 为 redis;
Indexer为 logstash(indexer) Storage & search 为Elasticsearch
shipper是我们部署在我们需要采集日志的机器上,broker汇聚这些日志,然后统一传到indexer上,ElasitcSearch是一个搜索引擎,负责存储这些日志,并搜索。Webinterface是一个前端展示页面。
备注: shipper和Indexer都是logstash,只不过他们的配置文件不一样。broker一般采用redis,所有的shipper上的日志统一传到redis中。indexer负责从broker中取数据,并将它存储到elasticsearch中。Webinterface(即web界面)一般使用 kibana,现在logstash中集成了kibana,可以自己安装或者直接用logatash中的。
9200====> elasticsearch接受http请求的端口为9200
9200====> elasticsearch传输端口为9300
6379====> 默认的redis的端口,也可自己定义端口。后面安装的时候有说明。
9292====> logstash内置kibana的接受http请求访问的端口。也就是主要的搜索操作的web界面的端口号,要设置外部可访问,才能访问该界面。进行相应的搜索操作。地址如下,黄字为本机的地址。
http://192.168.191.129:9292/index.html#/dashboard/file/logstash.json
由于服务器的防火墙设定,所以外部无法访问到内部的端口,故要设置打开端口才能,访问到内部的地址。编辑/etc/sysconfig/iptables 加入信任端口。
注意加入的语句应在如图两条语句上,信任端口才能生效:
然后 输入指令 service iptables restart 重启防火墙配置,之后就能正常访问了。
首先检查一下虚拟机的JDK版本若为1.6.0以上则无需安装
安装:
在oracle官网上直接下载jdk-1.6.0.rpm文件,在red hat命令行下直接执行如下指令:
rpm –ivh jdk-1.6.0.rpm
若无指定目录,默认安装到/usr/Java 的目录下,接着就是配置环境变量,同样命令行下输入如下指令:
sudogedit /etc/profile 或 vi /etc/profile
在文档末尾加上如下配置:
export JAVA_HOME=/usr/java/jdk1.6.0_23 //你的安装的目录
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$JAVA_HOME/bin:$PATH
输入java -version检查一下,Java是否配置成功。
如果还有问题,详细的配置资料见,如下网站:
http://blog.csdn.net/xinxin19881112/article/details/6114390
Elasticsearch的安装就比较简单了,自己新建一个目录,复制elasticsearch到当前目录,解压:
tar –xzvf elasticsearch-0.90.10.tar.gz
默认解压在当前目录,解压后,进入bin目录。执行如下命令,让elasticsearch以前台方式启动:./elasticsearch–f 查看显示的信息即可看到,开的端口是哪个端口:
外部浏览器直接访问地址http://192.168.191.129:9201/即可,看到如下信息:
显示样式可能有点不一样,因为我个人的浏览器上装了显示Json格式的插件,但是基本信息都是一样的。正确显示就说明elasticsearch的安装完成了。
简单介绍一下=========>>
ElasticSearch-Head 是一个与Elastic集群(Cluster)相交互的Web前台。
ES-Head的主要作用:
它展现ES集群的拓扑结构,并且可以通过它来进行索引(Index)和节点(Node)级别的操作
它提供一组针对集群的查询API,并将结果以json和表格形式返回
它提供一些快捷菜单,用以展现集群的各种状态
执行如下指令下载安装:(黄字为自己安装的目录)
/usr/local/elasticsearch/bin/plugin install mobz/elasticsearch-head
成功安装之后,就可以打开相应网址,访问相应的界面
http://192.168.191.129:9200/_plugin/head/
*如果在搜索界面看到重复的日志,就可能你建立了重复的索引的问题。可以在head插件中删除相应索引即可解决问题
附上head界面说明网站:http://www.sojson.com/blog/85.html 上面很详尽的讲述了elasticsearch的使用。
logstash和kibana都不存储数据,存储数据的是elasticsearch,所以只需要移动elasticsearch的目录即可。或者通过elasticsearch自动清理 脚本,定期运行清理过期数据即可,日志数据属于时序数据,这种数据一般没有永久性保存的必要。还有就是,还可以筛选日志,过滤掉不必要的日志,减少存储容量(如drop掉debug级别日志。
安装说明:这是一个外国友人开发的工具,具体我自己也没有尝试安装过。
http://www.ragingcomputer.com/2014/02/removing-old-records-for-logstash-elasticse arch-kibana
插件下载地址:https://github.com/elastic/curator
logstash默认按天创建ES索引,这样的好处是删除历史数据时直接删掉整个索引就可以了,方便快速。
elasticsearch也可以设置每个文档的ttl(time to live),相当于设置文档的过期时间,但相比删除整个索引要耗费更多的IO操作。所以简单的来说就是可以进行一下两种操作来手动清理索引。
可见这样一个操作就多少有点繁琐了。下面讲一个比较便捷的方法。
# curl -XDELETE 'http://172.16.1.16:9200/logstash-2013.03.*'
清理掉了所有 3月份的索引文件,curl 删除比rm删除要快出很多,官方文档也是这么推荐的。以下附上官网说明的网站:
https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-delete.html
关于elasticsearch的自启动的问题,有一个servicewrapper的插件安装,执行install的命令即可开机自启动。但是我个人并没有使用成功。所以这一部分内容待补充。附上网友一则安装教程:http://ju.outofmemory.cn/entry/117196
1.Redis在相关目录下,同样进行tar指令:
tar –xzvf redis-2.8.4.tar.gz进行解压。
2.进入到redis的目录下进行安装操作
cd /usr/elk/redis/
make PREFIX=/usr/elk/redis install
3.进入Redis安装目录的bin子目录。
cd /usr/elk/redis/bin
./redis-server --port 9999 //设置启动端口为9999启动
或者直接 ./redis-server //默认端口为6379
看到如上控制台输出显示可以确定安装完成了。
正常使用的时候,直接在进入到redis的bin目录下,./redis-server即可启动执行,可以查看相关端口是否启动:netstat -ntlp
上面也提过了,logstash是个Java tar包,用Java指令执行。下面是两个例子来直观说明使用的方法。例一为两个虚拟机连接的使用。例二为本机的测试使用。
这边用本机的两台虚拟机来简单说明一下,indexer与shipper的使用:
安装部署规划:
192.168.191.129 logstash-1.3.2(indexer) + redis +elasticsearch
192.168.191.130 logstash-1.3.2(shipper)
自己建立一个目录logstash用于存放conf配置文件及logstash的jar。
首先在130主机上配置一个agent,即shipper.conf文件:vi shipper.conf
简单的介绍:
input的file指定从文件中读取日志,文件路径为"var/log/massage",output指定输出日志到 redis,host指定了redis所在机器的ip。其中key和data_type是必须要配置的,唯一的要求就是,客户端和服务端的相应值是一致 的。所以,该配置文件的意思就是,去拿massages的日志,然后将其传到redis服务器上。
然后在192.168.191.129主机上配置indexer文档:vi indexer.conf
这边就是从redis服务器上拿日志信息,传到elasticsearch的上保存日志。
接下来讲一下启动的步骤;
首先在192.168.191.129主机上
1.启动elasticsearch : bin目录下./elasticsearch
2.启动redis : bin目录下./ redis-server
在192.168.191.130主机上启动上传massages到redis
cd /usr/elk/lostash
java -jarlogstash-1.3.2-flatjar.jar agent -fshipper.conf
回129主机取redis的信息:
cd /usr/elk/lostash
java -jarlogstash-1.3.2-flatjar.jar agent -findexer.conf
上面这段黄字需要等差不多三四秒钟才能显示,设计者设计的。如果成功导入就会巴拉巴拉的导入信息如图:
后面在129的主机上可以启动logstash中的内置kibana界面进行录入的信息的查看,即web界面。
在logstash的目录下:
java -jar logstash-1.3.2-flatjar.jarweb
之后登陆(加黄字为本机的端口):
http://192.168.191.129:9292/index.html#/dashboard/file/logstash.json
附上:一个简单的两台机子的部署实例:
http://blog.csdn.net/sdlyjzh/article/details/38186289
本机测试使用。读取本机的文档,并模拟添加日志,查看是否实时更新。
首先配置文档:
这边我是简单的就找本机的messages的文件,并把他储存到elasticsearch中,并无指定哪个端口。网友的配置文件如下:
Input{
file {
type =>"syslog"
path => ["/var/log/messages", "/var/log/syslog" ]
}
syslog {
type =>"syslog"
port =>"5544"
}
}
output {
stdout { codec=> rubydebug }
elasticsearch {host => "localhost" }
}
接着在logstash的文件夹执行这个配置文件
java -jar logstash-1.3.2-flatjar.jaragent -f testLog.conf
数据自动导入。
接下来测试是否实时更新日志,自己模拟日志的输入:
echo "`date` Jack" >>/var/log/messages
可以看到数据已经同步过去了,如图:
当然当你使用java -jar logstash-1.3.2-flatjar.jaragent -f testLog.conf 执行了这个配置之后,即使关闭控制台,它也会实时更新的。
开启web界面查看是否导入该文件:java -jar logstash-1.3.2-flatjar.jarweb
查询即可看到相应的数据导入。
好了基本的使用跟部署的介绍就到这边,相应的版本需要下载的可以自己去网上直接搜相应的版本号,虽然有点难找还是可以找得到的。有问题的欢迎互相交流~