您的位置:首页 > 编程语言 > Java开发

从0开始ELK日志收集系统介绍和搭建 JDK-1.6.0版

2016-09-26 14:36 417 查看
由于公司上的服务器很多都是老版本的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安装

首先检查一下虚拟机的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的安装就比较简单了,自己新建一个目录,复制elasticsearch到当前目录,解压:

tar –xzvf  elasticsearch-0.90.10.tar.gz



默认解压在当前目录,解压后,进入bin目录。执行如下命令,让elasticsearch以前台方式启动:./elasticsearch–f  查看显示的信息即可看到,开的端口是哪个端口:

外部浏览器直接访问地址http://192.168.191.129:9201/即可,看到如下信息:



显示样式可能有点不一样,因为我个人的浏览器上装了显示Json格式的插件,但是基本信息都是一样的。正确显示就说明elasticsearch的安装完成了。

Elasticsearch的插件head安装:

简单介绍一下=========>>

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操作。所以简单的来说就是可以进行一下两种操作来手动清理索引。

在插件head的web界面上进行删除操作,如图:



可见这样一个操作就多少有点繁琐了。下面讲一个比较便捷的方法。

用指令删除:
         # 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自启动

关于elasticsearch的自启动的问题,有一个servicewrapper的插件安装,执行install的命令即可开机自启动。但是我个人并没有使用成功。所以这一部分内容待补充。附上网友一则安装教程:http://ju.outofmemory.cn/entry/117196

 

Redis安装

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使用

上面也提过了,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



查询即可看到相应的数据导入。

好了基本的使用跟部署的介绍就到这边,相应的版本需要下载的可以自己去网上直接搜相应的版本号,虽然有点难找还是可以找得到的。有问题的欢迎互相交流~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息