Docker容器技术搭建ELK技术栈

文章目录

  • 一、ELK介绍
  • 二、ELK容器镜像版本选择
  • 三、ELK容器镜像拉取
  • 四、docker-compose编排
    • 1. 编排compose文件
    • 2.准备操作
    • 3.构建并运行ELK相关容器
    • 4.Logstash安装json_lines插件
  • 五、SpringBoot集成Logstash
  • 六、kibana可视化日志分析
    • 1.Kibana创建索引匹配模式
    • 2.日志分析
  • 七、参考资料

一、ELK介绍

ELK是Elasticsearch、Logstash、 Kibana的三款软件的整合,是一套开源的、完整的日志收集、存储以及展示监控系统。

  • Elasticsearch:开源分布式搜索引擎,提供搜集、分析、存储数据功能。
  • Logstash:日志搜集、分析、过滤,支持大量数据获取。其自带输入(input)、过滤语法(grok)、输出(output)三部分。其输入有两种方式:①由各beat采集器输入,经过滤后输出到ES ②本机数据输入,经过滤后输出到ES。
  • Kibana:数据可视化分析软件。数据存储到ES中后,可以在Kibana中进行检索以及监控。
    本文中使用:Springboot应用+Logstash+Elasticsearch+Kibana来实现ELK技术栈的使用
    Docker容器技术搭建ELK技术栈_第1张图片

二、ELK容器镜像版本选择

dockerhub ELK最新镜像是8.6.2

Elasticsearch 7.17.9
Kibana 7.17.9
Logstash 7.17.9

三、ELK容器镜像拉取

docker pull elasticsearch:7.17.9
docker pull logstash:7.17.9
docker pull kibana:7.17.9

四、docker-compose编排

1. 编排compose文件

vim docker-compose.yml

version: '3' #compose版本
services:
  elasticsearch: #服务名
    image: elasticsearch:7.17.9 #镜像版本
    container_name: es-elasticsearch-1 #容器名称
    networks: #网络
      - host
    environment: #环境变量(在dockerhub上面查看)
      cluster.name: 'elasticsearch' #设置集群名称为elasticsearch
      discovery.type: 'single-node' #以单一节点模式启动
      ES_JAVA_OPTS: '-Xms512m -Xmx512m' #设置使用jvm内存大小
      xpack.security.enabled: 'true'
      xpack.security.http.ssl.enabled: 'false'
      ELASTIC_PASSWORD: 'es123456'
    volumes:
      - /opt/module/docker-compose/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
      - /opt/module/docker-compose/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
    ports:
      - 9200:9200
  kibana:
    image: kibana:7.17.9
    container_name: es-kibana-1
    networks:
      - host
    links:
      - elasticsearch:es #容器名:给容器取的别名(kibana中可以使用es访问elasticsearch)
    depends_on:
      - elasticsearch #kibana在elasticsearch启动之后再启动
    environment:
      elasticsearch.hosts: 'http://es:9200' #设置访问elasticsearch的地址
    volumes:
      - /opt/module/docker-compose/elk/kibana/config:/usr/share/kibana/config #配置文件挂载
    ports:
      - 5601:5601
  logstash:
    image: logstash:7.17.9
    container_name: es-logstash-1
    networks:
      - host
    volumes:
      - /opt/module/docker-compose/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
      - /opt/module/docker-compose/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
    depends_on:
      - elasticsearch #logstash在elasticsearch启动之后再启动
    links:
      - elasticsearch:es #容器名:给容器取的别名(logstash中可以使用es访问elasticsearch)
    ports:
      - 4560:4560
networks:
  host:

2.准备操作

  • 创建挂载目录
  • 设置Elasticsearch数据目录权限
chmod 777 /opt/module/docker-compose/elk/elasticsearch/data```
  • 设置内核参数
# 改变设置 
sysctl -w vm.max_map_count=262144 
# 使之立即生效 
sysctl -p

注:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
Elasticsearch关于vm.max_map_count的解释

  • 创建logstash.conf
    /opt/module/docker-compose/elk目录下面执行 vim logstash.conf
input{
    tcp {
        mode => "server"
        host => "0.0.0.0"
        port => 4560
        codec => json_lines
    }
}
output{
    stdout{
       codec => rubydebug
    }
    elasticsearch {
       hosts => ["elasticsearch:9200"]
    }
}
  • 创建logstash.yml
    /opt/module/docker/logstash目录下面执行 vim logstash.yml
xpack.monitoring.enabled: "true"
xpack.monitoring.elasticsearch.hosts: "http://es:9200" 
xpack.monitoring.elasticsearch.username: "elastic" 
xpack.monitoring.elasticsearch.password: "es123456"

3.构建并运行ELK相关容器

docker-compose -f  docker-compose-dev.yml up -d

4.Logstash安装json_lines插件

# 进入logstash容器 
docker exec -it es-logstash-1 /bin/bash 
# 进入bin目录 
cd /bin/ 
# 安装插件 
logstash-plugin install logstash-codec-json_lines 
# 退出容器 
exit 
# 重启logstash服务 
docker restart eslogstash-1

五、SpringBoot集成Logstash

pom文件引入Logstash依赖

<dependency>
	<groupId>org.springframework.bootgroupId>
	<artifactId>spring-boot-starter-loggingartifactId>
	<version>2.7.5version>
dependency>
<dependency>
	<groupId>net.logstash.logbackgroupId>
	<artifactId>logstash-logback-encoderartifactId>
	<version>7.2version>
dependency>

在application.yml中引用logback-spring配置
如果配置文件名称为:logback-spring.xml 或者 logback.xml则无需引用

logging:
  config: classpath:logback.xml

logback-spring.xml的配置如下


<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml"/>
    <logger name="org.springframework.web" level="INFO"/>
    <logger name="org.springboot.sample" level="TRACE"/>
    
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>192.168.10.110:4560destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
    appender>

    
    <springProfile name="dev,test">
        <logger name="org.springframework.web" level="INFO"/>
        <logger name="org.springboot.sample" level="INFO"/>
        <logger name="com.jiayuan" level="DEBUG"/>
    springProfile>

    
    <springProfile name="prod">
        <logger name="org.springframework.web" level="ERROR"/>
        <logger name="org.springboot.sample" level="ERROR"/>
        <logger name="com.jiayuan" level="ERROR"/>
    springProfile>

    <root level="DEBUG">
        <appender-ref ref="LOGSTASH"/>
    root>
configuration>

六、kibana可视化日志分析

1.Kibana创建索引匹配模式

  • 打开Kibana的Stack Management功能
    Docker容器技术搭建ELK技术栈_第2张图片

  • 2.创建索引匹配模式
    Docker容器技术搭建ELK技术栈_第3张图片
    Docker容器技术搭建ELK技术栈_第4张图片
    然后我们就可以看见刚刚创建的索引规则了
    Docker容器技术搭建ELK技术栈_第5张图片

  • 接下来打开Discover功能,我们就可以看到Springboot应用中产生的日志信息了。
    Docker容器技术搭建ELK技术栈_第6张图片
    Docker容器技术搭建ELK技术栈_第7张图片

2.日志分析

  • 添加过滤器来检索日志,例如我们检索:level是ERROR的日志
    Docker容器技术搭建ELK技术栈_第8张图片
    Docker容器技术搭建ELK技术栈_第9张图片
  • 使用KQL(Kibana Query Language)进行检索日志,例如:我们检索level是info的日志
    Docker容器技术搭建ELK技术栈_第10张图片

七、参考资料

还在用命令行看日志?快用Kibana吧,可视化日志分析YYDS!
使用Docker快速搭建ELK日志分析平台

你可能感兴趣的:(Docker,Elasticsearch,SpringBoot,docker,elk,容器)