【运维笔记】docker + elasticsearch + kibana + logstash + filebeat + springboot 实现多模块日志收集系统(详细步骤版)

21 篇文章 3 订阅

Centos7.5 docker-24.0.6 + elasticsearch-7.4.0 + kibana-7.4.0 + logstash-7.4.0 + filebeat-7.4.0 + springboot 实现多模块日志收集系统

一、环境 & 版本:

  • linux内核:3.10.0-862.el7.x86_64
  • 运行系统:CentOS 7.5
  • docker版本:24.0.6
  • elasticsearch版本:7.4.0
  • kibana版本:7.4.0
  • docker 镜像 & 版本,如下所示:
    [root@localhost ~]# docker images
    REPOSITORY                TAG       IMAGE ID       CREATED       SIZE
    logstash                  7.4.0     c2c1ac6b995b   4 years ago   889MB
    kibana                    7.4.0     0328df36f79f   4 years ago   1.1GB
    elasticsearch             7.4.0     dd156dd42341   4 years ago   859MB
    mobz/elasticsearch-head   5         b19a5c98e43b   6 years ago   824MB
    

二、部署 Docker、elasticsearch、Kibana 教程:

三、Docker部署Logstash:

  • 拉取 Logstash-7.4.0 远程仓库镜像,命令(如下所示即为成功):

    [root@localhost /]# docker pull logstash:7.4.0
    
  • 启动 logstash容器,拷贝文件,并查看日志,命令:

    [root@localhost /]# docker run -d --name=logstash -p 5044:5044 logstash:7.4.0
    
  • 创建需要挂载的文件目录与配置文件信息,创建 & 编辑 logstash 启动配置文件 logstash.yml 文件:

    [root@localhost /]# docker cp logstash:/usr/share/logstash /opt/logstash/
    Successfully copied 316MB to /opt/logstash/
    [root@localhost /]# mkdir -p /opt/logstash/config/conf.d
    [root@localhost /]# mv /opt/logstash/config/logstash.yml /opt/logstash/config/logstash.yml_blk
    [root@localhost /]# rm -rf /opt/logstash/config/logstash.yml
    [root@localhost /]# touch /opt/logstash/config/logstash.yml
    [root@localhost /]# touch /opt/logstash/config/conf.d/syslog.conf
    [root@localhost /]# vi /opt/logstash/config/logstash.yml
    
     文件内容如下:
    
    #[logstash.yml]
    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://192.168.11.40:9200" ]
    #这里的path.config是指 Logstash 容器内部的路径,需要在docker启动命令中,将宿主机上的配置文件路径通过挂载的方式映射到容器内部
    path.config: /usr/share/logstash/config/conf.d/*.conf
    #这里的path.logs是指 Logstash 容器内部的路径,需要在docker启动命令中,将宿主机上的配置文件路径通过挂载的方式映射到容器内部
    path.logs: /usr/share/logstash/logs
    

    注意:filebeat.yml文件权限为 755 ,不能是777,否则会报如下错

    config file ("filebeat.yml") can only be writable by the owner but the permissions are "-rwxrwxrwx"
    
  • 创建需要挂载的文件目录与配置文件信息,创建 & 编辑 logstash 启动配置文件 logstash.conf 文件:

    [root@localhost /]# vi /opt/logstash/config/conf.d/syslog.conf
    

    文件内容如下:

    #[syslog.conf]
    input {
      beats {
        #开放所有ip可以访问
        host => '0.0.0.0'
        #访问端口
        port => 5044
        #超时时间
        client_inactivity_timeout => 36000
      }
    }
    #单模块收集模式
    #output {
    #  elasticsearch {
    #    #设置ES链接地址,这里的ip是你虚拟机的ip地址
    #    hosts => ["192.168.11.40:9200"]
    #    index => "logstash_%{+YYYY-MM-dd}"
    #  }
    #}
    #多模块收集模式,filebeat.inputs.type.tag属性区分
    output {
      #可以自定义,与[filebeat.yml]配置文件filebeat.inputs.type.tag属性保持一致即可,不一致将无法准确推送到对应的es索引上去
      if "demo-elk-server-user" in [tags]{
        elasticsearch {
          #设置ES链接地址,这里的ip是你虚拟机的ip地址
          hosts => ["192.168.11.40:9200"]
          index => "demo-elk-server-user_%{+YYYY-MM-dd}"
        }
      }
      #可以自定义,与[filebeat.yml]配置文件filebeat.inputs.type.tag属性保持一致即可,不一致将无法准确推送到对应的es索引上去
      if "demo-elk-server-payment" in [tags]{
        elasticsearch {
          #设置ES链接地址,这里的ip是你虚拟机的ip地址
          hosts => ["192.168.11.40:9200"]
          index => "demo-elk-server-payment_%{+YYYY-MM-dd}"
        }
      }
    }
    
  • 目录 & 文件授权,命令:

    [root@localhost /]# chmod 777 -R /opt/logstash
    [root@localhost /]# chmod -R 755 /opt/logstash/config/logstash.yml
    [root@localhost /]# chmod -R 755 /opt/logstash/config/conf.d/syslog.conf
    
  • 创建 & 启动 Logstash-7.4.0 容器,命令:

    [root@localhost /]# docker stop logstash
    [root@localhost /]# docker rm logstash
    [root@localhost /]# docker run -d --restart=always --name logstash -p 5044:5044 -p 9600:9600 -v /opt/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml -v /opt/logstash/config/conf.d:/usr/share/logstash/config/conf.d -v /opt/logstash/logs:/usr/share/logstash/logs logstash:7.4.0
    

    注意:50449600 端口均要映射,否则 filebeat 连接 logstash 时会报错,提示连接的ip和端口被重置

  • 进入 logstash 容器,安装 logstash-codec-json_lines 插件,命令:

    [root@localhost /]# docker exec -it logstash /bin/bash
    bash-4.2$ /usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines
    OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a
    WARNING: An illegal reflective access operation has occurred
    WARNING: Illegal reflective access by com.headius.backport9.modules.Modules to method java.lang.Object.finalize()
    WARNING: Please consider reporting this to the maintainers of com.headius.backport9.modules.Modules
    WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
    WARNING: All illegal access operations will be denied in a future release
    Validating logstash-codec-json_lines
    Installing logstash-codec-json_lines
    Installation successful
    
  • 重启 logstash,命令:

    [root@localhost /]# docker restart logstash
    
  • 查看 logstash 动态日志,命令:

    [root@localhost /]# docker logs -f logstash
    
  • 启动成功,如下所示:

    [2023-10-10T03:09:37,763][INFO ][org.logstash.beats.Server] Starting server on port: 5044
    [2023-10-10T03:09:39,586][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
    

    注意:如果日志量不大,可以直接使用 logstash 读取springboot日志文件即可,量大的时候 logstash 占用内存量偏大,容易宕机
    至此,logstash安装完成,等待filebeat输入对应格式的数据

四、离线部署Filebeat:

  • 拉取 filebeat:7.4.0 远程仓库安装包,命令(如下所示即为成功):
    [root@localhost /]# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.0-linux-x86_64.tar.gz
    [root@localhost /]# tar -zxvf filebeat-7.4.0-linux-x86_64.tar.gz
    [root@localhost /]# mv filebeat-7.4.0-linux-x86_64 filebeat
    [root@localhost /]# cp /opt/filebeat/filebeat.yml /opt/filebeat/filebeat.yml_blk
    [root@localhost /]# rm -rf /opt/filebeat/filebeat.yml
    [root@localhost /]# touch /opt/filebeat/filebeat.yml
    [root@localhost /]# chmod -R 777 /opt/filebeat
    [root@localhost /]# chmod -R 755 /opt/filebeat/filebeat.yml
    
  • 编辑 filebeat.yml 配置文件,命令:
    [root@localhost filebeat]# vi /opt/filebeat/filebeat.yml
    
    内容如下:
    #[filebeat.yml]
    #[filebeat.yml]
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        #物理机采集日志目录:这里收集的是springboot项目[user]服务日志
        - /opt/logs/demo-elk-server-user/*.log
      #此处tag在[logstash.conf]中配置使用
      tags: ["demo-elk-server-user"]
      multiline:
        pattern: ^[0-9]{4}
        negate: true
        match: after
        timeout: 3s
    
    - type: log
      enabled: true
      paths:
        #物理机采集日志目录:这里收集的是springboot项目[payment]服务日志
        - /opt/logs/demo-elk-server-payment/*.log
      #此处tag在[logstash.conf]中配置使用
      tags: ["demo-elk-server-payment"]
      multiline:
        pattern: ^[0-9]{4}
        negate: true
        match: after
        timeout: 3s
    
    # ----------- Filebeat modules -----------
    filebeat.config.modules:
      path: /opt/filebeat//modules.d/*.yml
      reload.enabled: true
    
    # ----------- logstash -----------
    output.logstash:
      #192.168.11.40为logstash安装的物理服务器ip
      hosts: ["192.168.11.40:5044"]
      enabled: true
    
    # ----------- Kibana -----------
    setup.kibana:
      #192.168.11.40为logstash安装的物理服务器ip
      host: "192.168.11.40:5601"
    
    # ----------- elasticsearch -----------
    #output.elasticsearch:
    #  hosts: ["192.168.11.40:9200"]
    #  enabled: true
    
  • 新建启动脚本文件 start-filebeat.sh ,命令:
    [root@localhost /]# touch /opt/filebeat/start-filebeat.sh
    [root@localhost /]# vi /opt/filebeat/start-filebeat.sh
    
    文件内容如下:
    #[start-filebeat.sh]
    ./opt/filebeat//filebeat -c /opt/filebeat/filebeat.yml &
    
  • 启动 filebeat 并查看动态日志,命令:
    [root@localhost /]# sh /opt/filebeat/start-filebeat.sh
    [root@localhost /]# tailf /opt/filebeat/logs/filebeat
    
    启动成功提示,如下所示:
    2023-10-10T16:16:33.661+0800    INFO    crawler/crawler.go:106  Loading and starting Inputs completed. Enabled inputs: 2
    2023-10-10T16:16:33.661+0800    INFO    cfgfile/reload.go:171   Config reloader started
    

五、springboot项目目录结构:

  • 使用 linux tree 命令查看项目目录结构,结果如下(此命令不用执行):
    [root@localhost java-project]# tree
    .
    └── demo-elk-parent
        ├── demo-elk-server
        │   ├── demo-elk-server-payment
        │   │   ├── pom.xml
        │   │   └── src
        │   │       └── main
        │   │           ├── java
        │   │           │   └── com
        │   │           │       └── demo
        │   │           │           └── elk
        │   │           │               └── payment
        │   │           │                   ├── controller
        │   │           │                   │   └── DemoElkPaymentController.java
        │   │           │                   └── DemoElkServerPaymentApplication.java
        │   │           └── resources
        │   │               └── application.yml
        │   ├── demo-elk-server-user
        │   │   ├── pom.xml
        │   │   └── src
        │   │       └── main
        │   │           ├── java
        │   │           │   └── com
        │   │           │       └── demo
        │   │           │           └── elk
        │   │           │               └── user
        │   │           │                   ├── controller
        │   │           │                   │   └── DemoElkUserController.java
        │   │           │                   └── DemoElkServerUserApplication.java
        │   │           └── resources
        │   │               └── application.yml
        │   └── pom.xml
        └── pom.xml
    

五、demo-elk-parent项目,文件内容:

  • pom.xml 文件,代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.demo.elk</groupId>
        <artifactId>demo-elk-parent</artifactId>
        <packaging>pom</packaging>
        <version>1.0.0</version>
        <properties>
            <!--java、maven-->
            <java.version>1.8</java.version>
            <maven.compiler.source>${java.version}</maven.compiler.source>
            <maven.compiler.target>${java.version}</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <maven.compiler.compilerVersion>${java.version}</maven.compiler.compilerVersion>
            <!--springboot-->
            <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
            <projectlombok.version>1.18.16</projectlombok.version>
            <!-- plugins -->
            <maven-resources-plugin.version>3.1.0</maven-resources-plugin.version>
            <maven-deploy-plugin.version>2.8.2</maven-deploy-plugin.version>
            <!--other-->
            <projectlombok.version>1.18.16</projectlombok.version>
            <jackson-databind.version>2.10.1</jackson-databind.version>
            <logstash-logback-encoder.version>5.3</logstash-logback-encoder.version>
        </properties>
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-thymeleaf</artifactId>
                    <version>${spring-boot.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter</artifactId>
                    <version>${spring-boot.version}</version>
                </dependency>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                    <version>${spring-boot.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${projectlombok.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>com.fasterxml.jackson.core</groupId>
                    <artifactId>jackson-databind</artifactId>
                    <version>${jackson-databind.version}</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>net.logstash.logback</groupId>
                    <artifactId>logstash-logback-encoder</artifactId>
                    <version>${logstash-logback-encoder.version}</version>
                </dependency>
            </dependencies>
        </dependencyManagement>
        <build>
            <pluginManagement>
                <plugins>
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>${maven-resources-plugin.version}</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>${maven-deploy-plugin.version}</version>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.18.1</version>
                        <configuration>
                            <skipTests>true</skipTests>
                        </configuration>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>
        <modules>
            <module>demo-elk-server</module>
        </modules>
    </project>
    

六、demo-elk-server项目,文件内容:

  • pom.xml 文件,代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
    		 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    		 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.demo.elk</groupId>
    		<artifactId>demo-elk-parent</artifactId>
    		<version>1.0.0</version>
    	</parent>
    	<artifactId>demo-elk-server</artifactId>
    	<packaging>pom</packaging>
    	<modules>
    		<module>demo-elk-server-user</module>
    		<module>demo-elk-server-payment</module>
    	</modules>
    </project>
    

七、demo-elk-server-user项目,文件内容:

  • pom.xml 文件,代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.demo.elk</groupId>
            <artifactId>demo-elk-server</artifactId>
            <version>1.0.0</version>
        </parent>
        <artifactId>demo-elk-server-user</artifactId>
        <description>用户会话服务</description>
        <packaging>jar</packaging>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <scope>compile</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <scope>compile</scope>
            </dependency>
            <!--logstash日志收集-->
            <dependency>
                <groupId>net.logstash.logback</groupId>
                <artifactId>logstash-logback-encoder</artifactId>
            </dependency>
            <!--低版本不兼容springboot启动报错:java.lang.ClassNotFoundException:-->
            <!--com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase-->
            <!--解决文档链接:https://blog.csdn.net/qq_41486137/article/details/108050370-->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <scope>compile</scope>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-info</goal>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <executable>true</executable>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
  • application.yml 文件,代码如下:
    server:
      port: 9001
    spring:
      application:
        name: demo-elk-server-user
      resources:
        static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/
    logging:
      level:
        ROOT: INFO
      file:
        #保存日志的具体文件夹位置,如果是dicker容器启动jar,需要做目录映射
        name: /opt/logs/${spring.application.name}/${spring.application.name}.log
        max-history: 30
        max-size: 100MB
      #日志格式
      pattern:
        file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name}] [%thread] %logger{20}[%method,%line] - %msg %exception %n"
        console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name}] [%thread] %logger{20}[%method,%line] - %msg %exception %n"
    
  • com.demo.elk.user.controller.DemoElkUserController.java 文件,代码如下:
    package com.demo.elk.user.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    @RestController
    @RequestMapping("/user")
    public class DemoElkUserController {
    
        @GetMapping(value = "/input-text-out-text")
        public String inputTextOutText(@RequestParam(name = "text", required = false) String text) {
            log.info("【demo-elk-server-user】 elk日志收集测试 [info] ======>> text={}", text);
            log.debug("【demo-elk-server-user】 elk日志收集测试 [debug] ======>> text={}", text);
            log.warn("【demo-elk-server-user】 elk日志收集测试 [warn] ======>> text={}", text);
            try {
                throw new RuntimeException("【demo-elk-server-user】 elk日志收集测试 手动异常抛出");
            } catch (Exception e) {
                log.error("【demo-elk-server-user】 elk异常堆栈信息收集 [error] ======>> text={}", text, e);
            }
            return text;
        }
        
    }
    

八、demo-elk-server-payment项目,文件内容:

  • pom.xml 文件,代码如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>com.demo.elk</groupId>
    		<artifactId>demo-elk-server</artifactId>
    		<version>1.0.0</version>
    	</parent>
    	<artifactId>demo-elk-server-payment</artifactId>
    	<description>支付服务</description>
    	<packaging>jar</packaging>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-thymeleaf</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<scope>compile</scope>
    		</dependency>
    		<dependency>
    			<groupId>org.projectlombok</groupId>
    			<artifactId>lombok</artifactId>
    			<scope>compile</scope>
    		</dependency>
    		<!--logstash日志收集-->
    		<dependency>
    			<groupId>net.logstash.logback</groupId>
    			<artifactId>logstash-logback-encoder</artifactId>
    		</dependency>
    		<!--低版本不兼容springboot启动报错:java.lang.ClassNotFoundException:-->
    		<!--com.fasterxml.jackson.databind.ser.std.ToStringSerializerBase-->
    		<!--解决文档链接:https://blog.csdn.net/qq_41486137/article/details/108050370-->
    		<dependency>
    			<groupId>com.fasterxml.jackson.core</groupId>
    			<artifactId>jackson-databind</artifactId>
    			<scope>compile</scope>
    		</dependency>
    	</dependencies>
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <version>${spring-boot.version}</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>build-info</goal>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <executable>true</executable>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
  • application.yml 文件,代码如下:
    server:
      port: 9002
    spring:
      application:
        name: demo-elk-server-payment
      resources:
        static-locations: classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/templates/
    logging:
      level:
        ROOT: INFO
      file:
        #保存日志的具体文件夹位置,如果是dicker容器启动jar,需要做目录映射
        name: /opt/logs/${spring.application.name}/${spring.application.name}.log
        max-history: 30
        max-size: 100MB
      #日志格式
      pattern:
        file: "%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name}] [%thread] %logger{20}[%method,%line] - %msg %exception %n"
        console: "%d{yyyy-MM-dd HH:mm:ss.SSS} [${spring.application.name}] [%thread] %logger{20}[%method,%line] - %msg %exception %n"
    
  • com.demo.elk.payment.controller.DemoElkPaymentController.java 文件,代码如下:
    package com.demo.elk.payment.controller;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestParam;
    import org.springframework.web.bind.annotation.RestController;
    
    @Slf4j
    @RestController
    @RequestMapping("/payment")
    public class DemoElkPaymentController {
    
        @GetMapping(value = "/input-text-out-text")
        public String inputTextOutText(@RequestParam(name = "text", required = false) String text) {
            log.info("【demo-elk-server-payment】 elk日志收集测试 [info] ======>> text={}", text);
            log.debug("【demo-elk-server-payment】 elk日志收集测试 [debug] ======>> text={}", text);
            log.warn("【demo-elk-server-payment】 elk日志收集测试 [warn] ======>> text={}", text);
            try {
                throw new RuntimeException("【demo-elk-server-payment】 elk日志收集测试 手动异常抛出");
            } catch (Exception e) {
                log.error("【demo-elk-server-payment】 elk异常堆栈信息收集 [error] ======>> text={}", text, e);
            }
            return text;
        }
    
    }
    

九、打包springboot项目部署:

  • 创建运行java服务目录,并使用Windows打出包jar文件,上传jar文件到服务器指定目录,命令:
    [root@localhost /]# mkdir -p /opt/java-project/demo-elk-parent/demo-elk-server-user
    [root@localhost /]# mkdir -p /opt/java-project/demo-elk-parent/demo-elk-server-payment
    [root@localhost /]# cd /opt/java-project/demo-elk-parent/demo-elk-server-user
    [root@localhost demo-elk-server-user]# rz
    [root@localhost /]# cd /opt/java-project/demo-elk-parent/demo-elk-server-payment
    [root@localhost demo-elk-server-user]# rz
    
  • 创建启动脚本,执行启动脚本:
    [root@localhost /]# cd /opt/java-project/demo-elk-parent/demo-elk-server-user
    [root@localhost demo-elk-server-user]# touch /opt/java-project/demo-elk-parent/demo-elk-server-user/start-java.sh
    [root@localhost demo-elk-server-user]# vi /opt/java-project/demo-elk-parent/demo-elk-server-user/start-java.sh
    #[start-java.sh]
    nohup java -jar demo-elk-server-user-1.0.0.jar &
    [root@localhost demo-elk-server-user]# sh /opt/java-project/demo-elk-parent/demo-elk-server-user/start-java.sh
    
    [root@localhost /]# cd /opt/java-project/demo-elk-parent/demo-elk-server-payment
    [root@localhost demo-elk-server-payment]# touch /opt/java-project/demo-elk-parent/demo-elk-server-payment/start-java.sh
    [root@localhost demo-elk-server-payment]# vi /opt/java-project/demo-elk-parent/demo-elk-server-payment/start-java.sh
    #[start-java.sh]
    nohup java -jar demo-elk-server-payment-1.0.0.jar &
    [root@localhost demo-elk-server-payment]# sh /opt/java-project/demo-elk-parent/demo-elk-server-payment/start-java.sh
    

九、访问springboot项目 & 添加 Kibana 索引模板:

  • curl 访问springboot项目,插入日志:
[root@localhost /]# curl --location --request GET 'http://192.168.11.40:9001/user/input-text-out-text?text=11111111111111111111111'
[root@localhost /]# curl --location --request GET 'http://192.168.11.40:9002/payment/input-text-out-text?text=22222222222222222222'
  • 使用 es-client 查看 elasticsearch 索引,下载地址:
    在这里插入图片描述

  • 访问 kibana 添加索引模板,如下所示: 在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker ELK是指使用Docker容器化技术搭建的ELK(ElasticsearchLogstashKibana日志分析平台。其中,Filebeat是ELK中的一个组件,用于收集和传输日志数据。 在使用Docker ELK搭建平台时,你可以通过执行命令"Docker run"来启动Filebeat容器。启动命令示例如下: ``` docker run -d -u root --name filebeat --net somenetwork -v /var/log/logapp:/var/log/logapp:rw -v /mydata/docker/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro elastic/filebeat:7.16.1 ``` 这个命令会在Docker中启动一个名为"filebeat"的容器,并将日志文件夹和配置文件夹挂载到容器中。 如果需要启动多个Filebeat容器,只需要指定不同的外挂地址即可,这样可以保持架构图的一致性。示例命令如下: ``` docker run -d --network elk-net --ip 172.22.1.5 --name=filebeat -v /mydata/filebeat/log/:/usr/share/filebeat/logs -v /mydata/filebeat/config/filebeat.yml:/usr/share/filebeat/filebeat.yml docker.elastic.co/beats/filebeat:7.4.2 ``` 这个命令会在Docker中启动一个名为"filebeat"的容器,并将日志文件夹和配置文件夹挂载到容器中。 要导入日志进行测试,你可以创建一个Filebeat配置文件filebeat.yml。可以使用以下命令创建配置文件: ``` touch /mydata/filebeat/config/filebeat.yml ``` 这个命令会在指定路径下创建一个名为filebeat.yml的配置文件。然后,你可以根据需要进行相应的配置,包括指定日志路径、过滤条件等。 综上所述,Docker ELK中的Filebeat是用于收集和传输日志数据的组件,在搭建平台时需要执行相应的启动命令,并可以通过创建配置文件来进行必要的配置。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [docker安装elk + filebeat本:7.16.1)](https://blog.csdn.net/paidaxinga_/article/details/122210062)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [docker搭建elk+filebeat](https://blog.csdn.net/qq_31745863/article/details/129986232)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值