Docker安装ELK环境
ELK实际上就是ElasticSearch,Logstash,Kibana的缩写,是日志收集分析的一种解决方案。
- Elasticsearch一个开源的搜索引擎框架(支持群集架构方式)
- Logstash集成各种收集日志插件,还是一个比较优秀的正则切割日志工具
- Kibana一个免费的web应用,支持在web端查看ES的搜索结果
elk是目前比较新也发展比较快的一套数据分析套件,其中Elasticsearch是用来作为存储和查询引擎的,kibana则是位于其之上的一个UI(更偏向于聚合汇总分析),而logstash则是属于ETL工具(数据的提取转换插入)。
在具体的使用过程中,目前觉得logstash算是比较鸡肋的,因为适用的场景有限,而且要扩展必须自己实现。个人建议,如果对es比较熟悉的,完全可以不需要用这个。自己用es加个river插件,那个效果也不错。
ELK简单架构
日志收集系统架构整体架构
简单来讲他具体的工作流程就是Logstash agent监控并过滤日志,将过滤后的日志内容发给redis(这里的redis只处理队列不做存储),Logstash index将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索,通过Kibana来结合 自定义搜索进行页面展示
此外 logstash 的收集方式分为 standalone 和 centralized。
standalone 是所有功能都在一个服务器上面,自发自收,centralized 就是集中收集,一台服务器接收所有shipper(个人理解就是logstash agent)的日志。
其实 logstash本身不分 什么 shipper 和 collector ,只不过就是配置文件不同而已,我们这次按照集中的方式来测试
这里的Logstash分为index和agent两种角色,也可以说是收集方式分为standalone和centralized两种。standalone是所有功能都在一个服务器上面,自发自收,centralized就是集中收集,一台服务器接收所有shipper(个人理解就是logstash agent)的日志。(其实logstash本身不分什么shipper和collector ,只不过就是配置文件不同而已)。Logstash的agent和indexer分开部署,多台agent负责监控、过滤日志,index负责收集日志并将日志交给ElasticSearch做搜索,通过Kibana来结合自定义搜索进行页面展示。Redis实际上是起到了缓冲消峰的作用,否则并发访问量大的时候ES会被拖垮的
192.168.0.1 logstash index,ElasticSearch,kibana,JDK
192.168.0.2 logstash agent,JDK
192.168.0.3 redis
因为上一篇文章已经写过Docker如何安装ES环境了,这里我们直接继承上一次安装好的Docker镜像,所以重点只介绍Logstash和Kibana的安装,本文只是简单的单机ELK环境,后续会逐步完善ELK+Redis的环境,甚至会把ELK单独拆开三个Docker镜像使用
安装Logstash(本文使用的是logstash的1.5.4版本)
# 下载Logstash
$ curl -O https://download.elastic.co/logstash/logstash/logstash-1.5.4.tar.gz
# 解压ES压缩包
$ tar -zxvf logstash-1.5.4.tar.gz
# 在{LOGSTASH_HOME}下新建一个conf目录,在里面新建一个配置文件logstash.conf
$ cd logstash-1.5.4
$ mkdir conf
$ cd conf
# 编辑logstash.conf如下面的配置
$ vi logstash.conf
# 启动logstash
$ cd {
LOGSTASH_HOME}/bin/
$ ./logstash -f ../conf/logstash.conf
注意
因为java的默认heap size,回收机制等原因,logstash从1.4.0开始不再使用jar运行方式.
- 以前方式:
java -jar logstash-1.3.3-flatjar.jar agent -f logstash.conf - 现在方式:
bin/logstash -f logstash.conf
logstash.conf配置文件
input {
# 来自控制台
stdin {
type => "web" # ES索引的type
codec => "json" # 输入格式是json
}
# 来自文件
file {
# 文件所在的绝对路径
path => "/software/logstash-1.5.4/test.log"
# ES索引的type
type =>