美文网首页
一步一步搭建Docker集群(3)--日志聚合ELK

一步一步搭建Docker集群(3)--日志聚合ELK

作者: 2b3ae5426811 | 来源:发表于2017-06-13 15:41 被阅读0次

    导读:
    日志,不管什么系统,都有需要查看日志的需求,小编一直听闻ELK的强大,所以,也开始尝试在业务系统中,使用ELK做日志的搜集、分析、查询。

    什么是ELK?
    ELK是Elasticsearch, Logstash 和 Kibana 的简称。其实,整套的日志系统,就分为这三个部分。我们下面大致介绍下ELK各自的作用。

    Elasticsearch:
    ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    Logstash:
    Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。

    Kibana:
    Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。

    我们要搭建的Docker的日志系统的架构,大致是这样的


    elk.png

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

    WX20170613-151904@2x.png

    上面的每一条日志,都清晰可见,我们可以做自己的过滤器,筛选自己需要查询的日志信息。

    接下来,让我们使用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中可以看到:


    WX20170613-153335@2x.png

    好了,接下来,大家可能关心,我容器里的日志,该如何搜集呢?
    先前我们说过了,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组件自动启动监听的。


    WX20170613-153641@2x.png

    温馨提示:
    如果你使用了gelf,那么就无法使用docker logs containerid 来查看日志了。

    我们已经搭建好了一套日志平台了,如果需要通过接口形式获取日志,改如何做?

    Elasticsearch 提供了大量的API接口,让我们来获取日志,Kibnan就是基于Elasticsearch提供的接口实现的。
    在Kibnan中,也提供了调试方法,如下图:

    WX20170613-154030@2x.png

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

    相关文章

      网友评论

          本文标题:一步一步搭建Docker集群(3)--日志聚合ELK

          本文链接:https://www.haomeiwen.com/subject/bmbdqxtx.html