利用ELK搭建Docker容器化应用日志中心

作者: CodeSheep | 来源:发表于2018-04-03 07:08 被阅读3377次
    封面图片

    概述

    应用一旦容器化以后,需要考虑的就是如何采集位于Docker容器中的应用程序的打印日志供运维分析。典型的比如 SpringBoot应用的日志 收集。本文即将阐述如何利用ELK日志中心来收集容器化应用程序所产生的日志,并且可以用可视化的方式对日志进行查询与分析,其架构如下图所示:

    架构图

    镜像准备

    镜像准备
    • ElasticSearch镜像
    • Logstash镜像
    • Kibana镜像
    • Nginx镜像(作为容器化应用来生产日志)

    开启Linux系统Rsyslog服务

    修改Rsyslog服务配置文件:

    vim /etc/rsyslog.conf
    

    开启下面三个参数:

    $ModLoad imtcp
    $InputTCPServerRun 514
    
    *.* @@localhost:4560
    
    开启3个参数

    意图很简单:让Rsyslog加载imtcp模块并监听514端口,然后将Rsyslog中收集的数据转发到本地4560端口!

    然后重启Rsyslog服务:

    systemctl restart rsyslog
    

    查看rsyslog启动状态:

    netstat -tnl
    
    netstat -tnl

    部署ElasticSearch服务

    docker run -d  -p 9200:9200 \
     -v ~/elasticsearch/data:/usr/share/elasticsearch/data \
     --name elasticsearch elasticsearch
    
    ES启动成功效果

    部署Logstash服务

    添加 ~/logstash/logstash.conf 配置文件如下:

    input {
      syslog {
        type => "rsyslog"
        port => 4560
      }
    }
    
    output {
      elasticsearch {
        hosts => [ "elasticsearch:9200" ]
      }
    }
    

    配置中我们让Logstash从本地的Rsyslog服务中取出应用日志数据,然后转发到ElasticSearch数据库中!

    配置完成以后,可以通过如下命令来启动Logstash容器:

    docker run -d -p 4560:4560 \
    -v ~/logstash/logstash.conf:/etc/logstash.conf \
    --link elasticsearch:elasticsearch \
    --name logstash logstash \
    logstash -f /etc/logstash.conf
    
    image.png

    部署Kibana服务

    docker run -d -p 5601:5601 \
    --link elasticsearch:elasticsearch \
    -e ELASTICSEARCH_URL=http://elasticsearch:9200 \
    --name kibana kibana
    
    image.png

    启动nginx容器来生产日志

    docker run -d -p 90:80 --log-driver syslog --log-opt \
    syslog-address=tcp://localhost:514 \
    --log-opt tag="nginx" --name nginx nginx
    

    很明显Docker容器中的Nginx应用日志转发到本地syslog服务中,然后由syslog服务将数据转给Logstash进行收集。

    至此,日志中心搭建完毕,目前一共四个容器在工作:

    image.png

    实验验证

    • 浏览器打开localhost:90来打开Nginx界面,并刷新几次,让后台产生GET请求的日志

    • 打开Kibana可视化界面:localhost:5601

    localhost:5601
    • 收集Nginx应用日志
    收集Nginx应用日志
    • 查询应用日志

    在查询框中输入program=nginx可查询出特定日志

    查询应用日志

    后记


    CodeSheep

    相关文章

      网友评论

      • 加菲猫爱我:还是无法收到nginx的log, 感觉应该是 :514 vs. :4560出现了问题,我telnet localhost 4560,并执行一下输入后,可以看到对应的logs
      • 加菲猫爱我:```js
        input {
        syslog {
        type => "rsyslog"
        port => 4560
        }
        }
        ```
        应该更改为
        ```js
        input {
        syslog {
        type => "syslog"
        port => 4560
        }
        }
        ```

        rsyslog应该写为 syslog

        同时,logstash的docker应该这样启动
        docker run -d -p 4560:4560 -v ~/logstash/logstash.conf:/etc/logstash.conf --link elasticsearch:elasticsearch --name logstash logstash -f /etc/logstash.conf
      • 加菲猫爱我:如果写一个docker-compose.yml,然后一个up就可以看出结果就好了。
      • 加菲猫爱我:我按照这个文章一步一步进行操作,也没有nginx的日志
      • e6e18f152aaa:你好,按你这个日志查不到啊,我的elb在同一台服务器上,所有客户端容器主机日志采集的数据直接扔给logstash,但是没日志显示,请大神赐教
        $ModLoad imtcp
        $InputTCPServerRun 514
        *.* @@10.1.1.46:4560
      • tanyanwen123:谢谢分享!
        CodeSheep:@tanyanwen123 :smile:
      • CodeSheep:缺配置文件呢,配置文件自己创建好放某个地方,然后会映射到docker里面执行呀
      • 8dd091c49d01:就是需要这种务实的好文
        CodeSheep:@dscxxx 感谢:smile:
      • 开发者头条_程序员必装的App:感谢分享!已推荐到《开发者头条》:https://toutiao.io/posts/l2kdst 欢迎点赞支持!
        使用开发者头条 App 搜索 264797 即可订阅《hansonwang99的技术分享》
        CodeSheep:@开发者头条_程序员必装的App :smile:

      本文标题:利用ELK搭建Docker容器化应用日志中心

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