基于Docker部署ELK (Elasticsearch, Lo

作者: ImWiki | 来源:发表于2018-05-27 01:08 被阅读287次

    当我们还是单体部署我们的Spring Boot项目的时候,日志通常都是放在我们的Linux服务器目录,使用简单的Spring Boot已经包含的Logback框架即可实现。当我们基于Docker部署我们的分布式或者集群项目之后,这种方式已经是走不通了,我们有必要搭建一套日志系统,方便各个节点输出日志到统一的日志系统,统一处理日志。

    ELK (Elasticsearch, Logstash, Kibana)是一个比较成熟的方案。基于Docker部署ELK变得更加简单。

    安装Docker

    这里就不介绍如何安装Docker,请自行Google。

    创建elk实例

    我们基于github的docker-elk 项目来实现elk,拉取代码:

    $ git clone https://github.com/deviantony/docker-elk.git
    

    启动docker容器

    $ cd docker-elk
    $ docker-compose up -d
    

    上面的命令会等待比较久,因为需要下载镜像,会创建三个实例。

    说明

    docker-elk是基于官Docker官方的镜像构建:

    Kibana的web入口:
    http://localhost:5601

    该elk栈的默认端口为:

    • 5000: Logstash TCP input.
    • 9200: Elasticsearch HTTP
    • 9300: Elasticsearch TCP transport
    • 5601: Kibana

    配置SpringBoot应用

    1. 在我们的Spring Boot项目build.gradle中增加依赖:
    compile 'net.logstash.logback:logstash-logback-encoder:5.1'
    
    1. 添加配置文件为resources/logback-spring.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <include resource="org/springframework/boot/logging/logback/base.xml"/>
    
        <property name="LOGSTASH_HOST" value="${LOGSTASH_HOST:-${DOCKER_HOST:-localhost}}"/>
        <property name="LOGSTASH_PORT" value="${LOGSTASH_PORT:-5000}"/>
    
        <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>${LOGSTASH_HOST}:${LOGSTASH_PORT}</destination>
            <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
        </appender>
        <root level="INFO">
            <appender-ref ref="LOGSTASH" />
            <appender-ref ref="CONSOLE" />
        </root>
    </configuration>
    

    配置文件中通过LOGSTASH_HOST和LOGSTASH_PORT两个环境变量来指定logstash的地址和端口。如果环境变量中没有这两项配置,会默认使用localhost5000

    1. 修改resources/application.properties
    logging.config=classpath:logback-spring.xml
    
    测试
    @RunWith(SpringRunner::class)
    @SpringBootTest
    class LoggerTest {
        var logger = LoggerFactory.getLogger(LoggerTest::class.java)
        @Test
        fun test() {
            logger.info("ImWiki")
            logger.warn("ImWiki")
            logger.error("ImWiki")
            logger.debug("ImWiki")
        }
    }
    

    运行单元测试代码,应用就会产生日志,并通过Logstash输出到Elastic search。

    Kibana查看日志

    在浏览器中打开http://localhost:5601可以看到Kibana dashboard的页面,通过Kibana查看Elastic search的日志。

    创建索引

    当我们通过上面的测试产生了日志之后,我们必须先创建索引才能查看日志

    image.png
    在输入框输入logstash-*,然后下一步
    image.png
    检索内容
    image.png

    总结

    通过Docker,只用非常简单的几步即可完成ELK集中日志处理平台,非常方便管理部署在Docker或者其它地方的Spring Boot应用的日志。

    相关文章

      网友评论

      本文标题:基于Docker部署ELK (Elasticsearch, Lo

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