简介

基于 docker-compose自动编排ElasticSearch + Logstash + Kibana 实现日志分析平台的快速搭建。除此之外也可网上下载对应资源,通过配置完成离线环境搭建。

本次使用了一台2c4g的云服务作为搭建基础

  • ElasticSearch

    主要用来日志存储

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

  • Kibana

    主要用于日志的展示

    kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持,它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

  • Logstash

    主要用来日志的搜集

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

搭建

docker-compose 文件

基于docker-compose编排ELK所需三个基本应用,编排文件内容如下:

version: '3.7'
services:
  elasticsearch:
    image: elasticsearch:7.6.2
    container_name: elasticsearch
    privileged: true
    user: root
    environment:
      #设置集群名称为elasticsearch
      - cluster.name=elasticsearch
      #以单一节点模式启动
      - discovery.type=single-node
      #设置使用jvm内存大小
      - ES_JAVA_OPTS=-Xms1024m -Xmx1024m
    volumes:
      - /opt/docker_elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
      - /opt/docker_elk/elasticsearch/data:/usr/share/elasticsearch/data
    ports:
      - 9200:9200
      - 9300:9300

  logstash:
    image: logstash:7.6.2
    container_name: logstash
    ports:
       - 4560:4560
    privileged: true
    environment:
      - TZ=Asia/Shanghai
    volumes:
      #挂载logstash的配置文件
      - /opt/docker_elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
    depends_on:
      - elasticsearch
    links:
      #可以用es这个域名访问elasticsearch服务
      - elasticsearch:es


  kibana:
    image: kibana:7.6.2
    container_name: kibana
    ports:
        - 5601:5601
    privileged: true
    links:
      #可以用es这个域名访问elasticsearch服务
      - elasticsearch:es
    depends_on:
      - elasticsearch
    environment:
      #设置访问elasticsearch的地址
      - elasticsearch.hosts=http://es:9200

logstash 配置文件

logstash配置文件在外部,通过docker挂载配置文件的方式实现

input {
  tcp {
    port => 4560
    codec => json_lines
  }
}
output {
  elasticsearch {
    hosts => "http://172.20.0.2:9200"
    index => "logstash-%{+YYYY.MM.dd}"
  }
}

启动

当两个配置文件准备好,同时服务器具有docker-compose环境,可通过命令直接启动:

我们可通过docker-compose命令直接启动:

docker-compose start -d

如图:

20240523_15174556.jpg

验证

  • docker ps 验证

    20240523_15185636.jpg

  • 通过访问对应端口验证(使用云服务器搭建,需开通对应端口安全策略,也可只开通80端口,配置相应规则,通过nginx转发):

    elk实践

    20240523_15194612.jpg

应用

当我们日志分析平台搭建完成,且正常之后,就到具体应用的时候了,Java SpringBoot项目默认日志框架下默认集成了 logstash,我们可直接通过日志配置,将日志共享到ELK中:

20240523_15202025.jpg

ELK创建索引:

20240523_15233997.jpg

20240523_15255426.jpg

20240523_15262454.jpg

日志查看:

20240523_15265294.jpg

20240523_15272460.jpg

主要根据时间戳筛选,同时,可以根据左侧配置规则进行具体筛选,而我们在排查错误时最常用的也就是 level_value也就是日志级别进行筛选,然后在进行进一步的分析。