一文讲清---ELK搭建

ELK 是由三个核心开源组件组成的日志管理套件,分别代表 Elasticsearch、Logstash 和 Kibana,。它被广泛用于采集、存储和检索系统日志数据

前言

1.需要准备一台linux服务器(最好是CentOS7),内存至少4g以上(三个组件都比较占用内存)

2.需要有docker使用经验

目录

    • 前言
    • [1 docker安装ElasticSearch](#1 docker安装ElasticSearch)
    • [2 docker安装kibana](#2 docker安装kibana)
    • [3 docker安装logstash](#3 docker安装logstash)
      • [3.1 创建容器](#3.1 创建容器)
      • [3.2 修改配置](#3.2 修改配置)
        • [3.2.1 设置ES的地址](#3.2.1 设置ES的地址)
    • [2 docker安装kibana](#2 docker安装kibana)
    • [3 docker安装logstash](#3 docker安装logstash)
      • [3.1 创建容器](#3.1 创建容器)
      • [3.2 修改配置](#3.2 修改配置)
        • [3.2.1 设置ES的地址](#3.2.1 设置ES的地址)
      • [3.2.2 设置logstash收集日志的输入和输出](#3.2.2 设置logstash收集日志的输入和输出)
    • [4 应用系统对接logstash](#4 应用系统对接logstash)
    • [5 ELK基本使用](#5 ELK基本使用)
      • [5.1 查看索引文件](#5.1 查看索引文件)
      • [5.2 添加索引模式](#5.2 添加索引模式)
      • [5.3 检索日志](#5.3 检索日志)
  • 思维导图

1 docker安装ElasticSearch

这里先创建一个网络:因为我们还需要部署kibana容器、logstash容器,需要让这些容器互联。

shell 复制代码
docker network create elk-net

这里ElasticSearch采用的是7.12.1版本

在docker中搜索和下载对应的镜像

shell 复制代码
#搜索镜像
docker search elasticsearch
#下载镜像
docker pull elasticsearch:7.12.1

有了镜像以后,可以直接创建对应的容器,命令如下:

shell 复制代码
docker run -d \
	--name es \
    -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" \
    -e "discovery.type=single-node" \
    -v es-data:/usr/share/elasticsearch/data \
    -v es-plugins:/usr/share/elasticsearch/plugins \
    --privileged \
    --network elk-net \
    -p 9200:9200 \
    -p 9300:9300 \
elasticsearch:7.12.1

命令解释:

  • -e "cluster.name=es-docker-cluster":设置集群名称
  • -e "http.host=0.0.0.0":监听的地址,可以外网访问
  • -e "ES_JAVA_OPTS=-Xms512m -Xmx512m":内存大小
  • -e "discovery.type=single-node":非集群模式
  • -v es-data:/usr/share/elasticsearch/data:挂载逻辑卷,绑定es的数据目录
  • -v es-logs:/usr/share/elasticsearch/logs:挂载逻辑卷,绑定es的日志目录
  • -v es-plugins:/usr/share/elasticsearch/plugins:挂载逻辑卷,绑定es的插件目录
  • --privileged:授予逻辑卷访问权
  • --network elk-net :加入一个名为es-net的网络中
  • -p 9200:9200:端口映射配置

在浏览器中输入:http://192.168.200.130:9200 (按照自己的ip访问)即可看到elasticsearch的响应结果:

2 docker安装kibana

创建容器(如果不提前下载好,在创建容器时,会先下载,然后创建容器)

shell 复制代码
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e "I18N_LOCALE=zh-CN" \
--network=elk-net \
-p 5601:5601  \
kibana:7.12.1
  • --network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

此时,在浏览器输入地址访问:http://192.168.200.130:5601,即可看到结果

3 docker安装logstash

3.1 创建容器

shell 复制代码
docker run -d -p 5044:5044 -p 9600:9600 --name logstash --network=elk-net logstash:7.12.1

3.2 修改配置

3.2.1 设置ES的地址

创建完容器之后,需要在容器修改一些配置

shell 复制代码
#进入容器
docker exec -it logstash /bin/bash

找到config目录中的logstatsh.yml文件

2 docker安装kibana

创建容器(如果不提前下载好,在创建容器时,会先下载,然后创建容器)

shell 复制代码
docker run -d \
--name kibana \
-e ELASTICSEARCH_HOSTS=http://es:9200 \
-e "I18N_LOCALE=zh-CN" \
--network=elk-net \
-p 5601:5601  \
kibana:7.12.1
  • --network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
  • -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
  • -p 5601:5601:端口映射配置

此时,在浏览器输入地址访问:http://192.168.200.130:5601,即可看到结果

3 docker安装logstash

3.1 创建容器

shell 复制代码
docker run -d -p 5044:5044 -p 9600:9600 --name logstash --network=elk-net logstash:7.12.1

3.2 修改配置

3.2.1 设置ES的地址

创建完容器之后,需要在容器修改一些配置

shell 复制代码
#进入容器
docker exec -it logstash /bin/bash

找到config目录中的logstatsh.yml文件

修改里面的内容,设置es服务的地址,如下

yaml 复制代码
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.200.130:9200" ] #设置跟es的服务地址

3.2.2 设置logstash收集日志的输入和输出

进入容器

shell 复制代码
#进入容器
docker exec -it logstash /bin/bash

找到pipeline目录中的logstatsh.conf文件

修改如下,可以设置数据输入的方式,也可以设置把数据存放到哪里

shell 复制代码
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"  # 允许任意主机发送日志
    port => 5044
    codec => json_lines    # 数据格式
  }
}

output {
  elasticsearch {
      hosts  => ["http://192.168.200.130:9200"]   # ElasticSearch 的地址和端口
      index  => "log-%{+YYYY.MM.dd}"         # 指定索引名,可以根据自己的需求指定命名
      codec  => "json"
  }
  stdout {
    codec => rubydebug
  }
}

修改完所有的配置后,需要重启logstash容器

shell 复制代码
docker restart logstash

4 应用系统对接logstash

在项目的pom文件中添加新的依赖

xml 复制代码
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>

目前,我们采用的logback来采集日志进行上报给logstash

需要在resources目录中新增一个文件logback-spring.xml(注意命名,不要修改)

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/base.xml" />
    <springProperty scope="context" name="springAppName" source="spring.application.name"/>
    <springProperty scope="context" name="serverPort" source="server.port"/>
    <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <!--logstash的服务地址和端口,可以实际情况设置-->
        <destination>192.168.200.130:5044</destination>
        <!-- 日志输出编码 -->
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder">
            <providers>
                <timestamp>
                    <timeZone>UTC</timeZone>
                </timestamp>
                <pattern>
                    <pattern>
                        {
                        <!--应用名称 -->
                        "app": "${springAppName}_${serverPort}",
                        <!--打印时间 -->
                        "timestamp": "%d{yyyy-MM-dd HH:mm:ss.SSS}",
                        <!--线程名称 -->
                        "thread": "%thread",
                        <!--日志级别 -->
                        "level": "%level",
                        <!--日志名称 -->
                        "logger_name": "%logger",
                        <!--日志信息 -->
                        "message": "%msg",
                        <!--日志堆栈 -->
                        "stack_trace": "%exception"
                        }
                    </pattern>
                </pattern>
            </providers>
        </encoder>
    </appender>
    <!--定义日志文件的存储地址,使用绝对路径-->
    <property name="LOG_HOME" value="/home/logs"/>
    <!-- 按照每天生成日志文件 -->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!--日志文件输出的文件名-->
            <fileNamePattern>${LOG_HOME}/${springAppName}-${serverPort}-%d{yyyy-MM-dd}.log</fileNamePattern>
        </rollingPolicy>
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>
    <root level="INFO">
        <appender-ref ref="LOGSTASH" />
        <appender-ref ref="FILE" />
        <appender-ref ref="CONSOLE" />
    </root>


</configuration>

也可以在专门在application.yml文件中设置logback配置的目录

yaml 复制代码
logging:
  config: classpath:logback-spring.xml

5 ELK基本使用

5.1 查看索引文件

对接项目之后,可以启动项目,产生一些日志数据

然后打开kibana,找到索引管理

可以直接查看已创建的日志索引

5.2 添加索引模式

如果想用kibana方便的查看日志的数据,可以添加索引模式,如下图

点击下一步,添加筛选的字段,一般都是时间戳字段,最后点击创建索引模式

5.3 检索日志

打开Discover

检索日志,选择不同的索引,可以按照不同的字段检索,或者在输入框直接输入内容,也是可以的

思维导图


来源

黑马程序员

相关推荐
jgyzl4 分钟前
2026.3.20 用EasyExcel实现excel报表的导入与导出
java·python·excel
Javatutouhouduan6 分钟前
SpringBoot如何快速精通?
java·spring boot·mybatis·java面试·后端开发·java编程·java程序员
iPadiPhone9 分钟前
破茧成蝶:从底层内核到 Java NIO/AIO 异步架构全解析
java·架构·nio
骥龙14 分钟前
第五篇:运行时安全——Docker沙箱与命令审批机制
安全·docker·容器
菜鸟小九14 分钟前
hot100(81-90)
java·数据结构·算法
皙然15 分钟前
线上问题定位与排查实战:从日志到优化的完整思路
java·jvm
无巧不成书021819 分钟前
Java核心技术全景解析:从白皮书到实战踩坑
java·开发语言
Roy_Sashulin21 分钟前
基于AI的Java编程平台
java·开发语言·人工智能·sashulin·deepseek
大傻^29 分钟前
Spring AI Alibaba 企业级实战:从0到1构建智能客服系统
java·人工智能·后端·spring·springaialibaba
贼爱学习的小黄34 分钟前
NC BIP增加按钮
java