导读:
日志,不管什么系统,都有需要查看日志的需求,小编一直听闻ELK的强大,所以,也开始尝试在业务系统中,使用ELK做日志的搜集、分析、查询。
什么是ELK?
ELK是Elasticsearch, Logstash 和 Kibana 的简称。其实,整套的日志系统,就分为这三个部分。我们下面大致介绍下ELK各自的作用。
Elasticsearch:
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash:
Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
Kibana:
Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。
我们要搭建的Docker的日志系统的架构,大致是这样的

我们先看下在Kibana下,可视化的日志系统是怎么样的

上面的每一条日志,都清晰可见,我们可以做自己的过滤器,筛选自己需要查询的日志信息。
接下来,让我们使用Docker,快速的搭建这么一套日志系统吧。
Elasticsearch 搭建
docker run -d -p 9200:9200 -p 9300:9300 --name elasticsearch -v /share/disk0/elasticsearch_data:/usr/share/elasticsearch/data elasticsearch:alpine
Kibana 搭建
docker run --name kibana -e ELASTICSEARCH_URL=http://192.168.99.100:9200 -p 5601:5601 -d kibana
这里的IP 替换成 Elasticsearch 所在的IP,如果你的Docker是本机,就使用本机IP,如果你的Docker是本机上的虚拟机,则默认应该是192.168.99.100
Logstash 搭建
docker run -it -d -p 31311:8080 -p 9600:9600 -p 12201:12201/udp --name logstash logstash -e 'input { stdin {} gelf{} http { } } output { elasticsearch { hosts => ["192.168.99.100:9200"] } stdout { codec => rubydebug } }'
这里的IP也同样要替换,通Kibana。
这里的Logstash,里面传入了input和output,简单的介绍下。
stdin,是通过命令行终端传入日志
gelf 是一个基于udp的日志收集组件,因为docker也支持gelf,所以,我们在logstsh上启用这个组件。
http,是基于http的,我们可以通过http请求,发送日志。
output中的elasticsearch,是告诉logstash,将日志输出到elasticsearch,elasticsearch保存日志。
好了,就这么简单,一套日志系统就搭建完成了。我们用http的方式,看看日志系统是否正常启动。
在命令行中执行以下命令:
curl -XPUT 'http://192.168.99.100:31311/twitter/tweet/1' -d 'hello'
这里端口是31311,上面我用docker创建Logstash容器时,将本机的31311端口映射到了容器里的8080,容器里的8080端口,是由logstash的http组件启动监听的。
我们在Kibana中可以看到:

好了,接下来,大家可能关心,我容器里的日志,该如何搜集呢?
先前我们说过了,Docker支持gelf,那么我们怎么让Docker使用gelf发送日志呢?
很简单,在Docker run的时候,传入两个参数:
--log-driver
--log-opt gelf-address=
这两个参数
我们用微容器试一下:
docker run --log-driver gelf --log-opt gelf-address=udp://192.168.99.100:12201 --rm alpine echo hello world 33
这里的12201 是由logstash的gelf组件自动启动监听的。

温馨提示:
如果你使用了gelf,那么就无法使用docker logs containerid 来查看日志了。
我们已经搭建好了一套日志平台了,如果需要通过接口形式获取日志,改如何做?
Elasticsearch 提供了大量的API接口,让我们来获取日志,Kibnan就是基于Elasticsearch提供的接口实现的。
在Kibnan中,也提供了调试方法,如下图:

今天,我们队日志系统先讲到这里,如果需要更多的内容,请关注微信公众号,让我们一起学习Docker。
网友评论