美文网首页运维微服务与Spring Clouddocker
基于docker部署的微服务架构(七): 部署ELK日志统计分析

基于docker部署的微服务架构(七): 部署ELK日志统计分析

作者: 月冷心寒 | 来源:发表于2016-11-26 21:21 被阅读932次

    前言

    上一篇 基于docker部署的微服务架构(六): 日志统一输出到kafka中间件 中,已经把分散在各个项目中的日志集中输出到了 kafka 中间件,可以在 kafka 中查看所有项目的日志。这种在控制台查看日志的方式很不方便,也不直观,搜索功能也很弱,不能满足日志统计分析的需求。下边来搭建 ELK 日志统计分析系统,通过 kibana 提供的web页面来查看日志。
    简单介绍下 ELKELKelasticsearchlogstashkibana 的简称,这三种工具各司其职,一起协作完成日志统计分析的功能。

    • logstash 日志收集管道,把日志导入到 elasticsearch
    • elasticsearch 存储日志,并提供基于 Lucene 的全文检索功能
    • kibana 提供日志数据展示界面和各种统计图表

    之前已经把日志都输出到 kafkabasic-log topic 下,只需要使用 logstashkafka 中的数据导入到 elasticsearch 即可。

    搭建ELK

    启动 elasticsearchdocker 容器:

    elasticsearch 容器比较简单,只需要挂载一个数据卷用来存储数据即可。

    运行 docker pull elasticsearch:5.0.1 下载 elasticsearch 目前最新的镜像文件。
    在宿主机上创建挂载目录 mkdir -p /elasticsearch/data,用于存储数据。
    运行

        docker run -d --name elasticsearch \
        --volume /etc/localtime:/etc/localtime \
        --volume /elasticsearch/data:/usr/share/elasticsearch/data \
        --publish 9200:9200 \
        --publish 9300:9300 \
        elasticsearch:5.0.1
    

    启动 elasticsearch 容器。
    启动时如果报 max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144],修改配置文件 vim /etc/sysctl.conf,增加 vm.max_map_count=655360。保存之后运行 sysctl -p。重新启动 elasticsearch 容器。

    启动 logstashdocker 容器:

    logstash 容器需要使用自定义的镜像,用 CMD 指定加载配置文件,才能在启动容器的时候使用 -d 参数运行在后台。直接在 docker run -d 的时候指定配置文件,在容器启动之后会自动退出,不知道是不是 bug,但是使用自定义镜像可以解决这个问题。
    运行 docker pull logstash:5.0.1-1 下载 logstash 目前最新的镜像文件。
    在宿主机上创建挂载目录 mkdir -p /logstash/config-dir,用于存放 logstash 的配置文件。
    在目录中创建 logstash.conf 配置文件,文件内容:

        input {
          kafka {
            bootstrap_servers => "kafka:9092"
            group_id => "logstash"
            topics => ["basic-log"]
          }
        }
    
        output {
          stdout {}
          elasticsearch {
              hosts => ["elasticsearch:9200"]
          }
        }
    

    配置文件配置了一个 input 数据输入源,从 kafkabasic-log topic 读取数据。
    配置了两个 output 输出源:

    • stdout 控制台输出,把从 input 读取的数据输出到 logstash 控制台
    • elasticsearch 把从 input 读取的数据输出到 elasticsearch

    这里的 kafkaelasticsearch 通过 docker--link 连接。
    创建 Dockerfile 文件,指定加载 logstash.conf 配置文件,Dockerfile 文件内容:

    FROM logstash:5.0.1-1
    CMD ["-f", "/config-dir/logstash.conf"]
    

    Dockerfile 所在的目录运行 docker build -t my-logstash:5.0.1-1 .,创建自定义的 logstash 镜像 my-logstash,使用 my-logstash 镜像就可以通过 -d 参数让容器运行在后台了。

    elasticsearch 容器已经启动的情况下,运行

        docker run -d --name logstash \
        --volume /etc/localtime:/etc/localtime \
        --volume /logstash/config-dir:/config-dir \
        --link kafka \
        --link elasticsearch \
        my-logstash:5.0.1-1  
    

    因为配置了 stdout 输出,容器启动之后,可以通过 docker logs -f logstash容器ID 查看从 kafka 中读取的日志数据。
    最后只需要再启动 kibana 就可以在web页面中查看日志数据了。

    启动 kibanadocker 容器:

    kibana 容器只需要连接 elasticsearch 即可。
    运行 docker pull kibana:5.0.1 下载 kibana 目前最新的镜像文件。
    elasticsearch 容器已经启动的情况下,运行

    docker run -d --name kibana \
    --volume /etc/localtime:/etc/localtime \
    --link elasticsearch \
    --publish 5601:5601
    

    kibana 容器启动成功之后,就可以访问 http://宿主机IP:5601 打开 kibana 的页面了。
    可以在 kibana 中看到所有的日志数据。

    相关文章

      网友评论

        本文标题:基于docker部署的微服务架构(七): 部署ELK日志统计分析

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