使用 docker-composer 快速搭建 elk

306 阅读2分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

使用 docker-composer 快速搭建 elk

准备工作

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

elk 简介

ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。

Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。主要负责将日志索引并存储起来,方便业务方检索查询。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。是一个日志收集、过滤、转发的中间件,主要负责将各条业务线的各类日志统一收集、过滤后,转发给 Elasticsearch 进行下一步处理。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。

配置elk

  1. .env 下设置 password
    • ELASTIC_PASSWORD='yourPassword'
    • LOGSTASH_INTERNAL_PASSWORD='yourPassword'
    • KIBANA_SYSTEM_PASSWORD='yourPassword'
  2. 配置 logstash 插件
    • vim logstash\Dockerfile

      ARG ELASTIC_VERSION     
      # https://www.docker.elastic.co/
      FROM docker.elastic.co/logstash/logstash:       {ELASTIC_VERSION}   
      # Add your logstash plugins setup here
      # Example: RUN logstash-plugin install      logstash-filter-json
      RUN logstash-plugin install logstash-filter-json
      RUN logstash-plugin install     logstash-filter-multiline
      

      按自己的需求配置插件,配置插件后需要 docker-compose build 才能生效。

  3. 配置 logstash
    • vim logstash\pipeline\logstash.conf

      input {
      	beats {
      		port => 5044
      	}
      
      	tcp {
          	mode => "server"
      		port => 5000
          	codec => json_lines
      	}
      }
      
      ## Add your filters / logstash plugins configuration here
      filter {
             multiline {
                  pattern => "^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}     :\d{1,2}:\d{1,2}"
                  negate => true
                  what => "previous"
              }
      }
      
      output {
      	elasticsearch {
      		hosts => "elasticsearch:9200"
      		user => "logstash_internal"
      		password => "${LOGSTASH_INTERNAL_PASSWORD}"
      	}
      }
      

      这里配置了一个多行输出的插件,有需要的话自己添加自己需要的插件并在这里配置。

  4. 项目根目录执行 docker-compose up

程序上传日志数据至 logstash

程序配置:(java-spring 为例) logback-spring.xml

    ···

    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--可以访问的logstash日志收集端口-->
        <destination>localhost:5000</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    </appender>

    ···

    <root level="info">
        <appender-ref ref="console"/>
        <appender-ref ref="FILE" />
        <appender-ref ref="LOGSTASH"/>
    </root>

    ···

kibana 查看 log 数据

  1. 登录 http://localhost:5601/
  2. user elastic password yourPassword
  3. 进入 discover 页面进行使用 KQL 搜索