• ELK搭建以及使用教程(多pipiline)


    1、环境准备

    服务器:Centos7

    Jdk版本:1.8

    Es版本:7.12.1

    kibana版本:7.12.1

    logstash版本:7.12.1

    IP地址安装软件
    192.168.50.211Es,Kibana,logstash

    2、安装docker

    安装步骤参考:https://blog.csdn.net/weixin_38405770/article/details/87979242

    3、安装es

    # 创建容器网络 elk-net
    docker network create elk-net
    # docker 安装 es 
    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
    
    # 开通端口
    sudo iptables -A INPUT -p tcp --dport 9200 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 9300 -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    命令解释:

    -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:端口映射配置
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

    在这里插入图片描述

    4、安装kibana

    # docker 安装 kibana
    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
    # 开通端口
    sudo iptables -A INPUT -p tcp --dport 5601 -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    --network elk-net :加入一个名为es-net的网络中,与elasticsearch在同一个网络中
    -e ELASTICSEARCH_HOSTS=http://es:9200":设置elasticsearch的地址,因为kibana已经与elasticsearch在一个网络,因此可以用容器名直接访问elasticsearch
    -p 5601:5601:端口映射配置
    
    • 1
    • 2
    • 3

    在浏览器中输入:http://192.168.50.211:5601 (按照自己的ip访问)即可看到安装成功的结果:

    在这里插入图片描述

    5、安装Logstash

    5.1 安装Logstash
    # docker 安装 Logstash
    docker run -d \
    -p 5044:5044 -p 5045:5045 -p 9600:9600 \
    --name logstash --network=elk-net logstash:7.12.1
    # 开通端口
    sudo iptables -A INPUT -p tcp --dport 5044 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 5045 -j ACCEPT
    sudo iptables -A INPUT -p tcp --dport 9600 -j ACCEPT
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    -p 5044:5044 -p 5045:5045 # 为演示多管道开通的两个端口
    
    • 1
    5.2 设置ES的地址

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

    #进入容器
    docker exec -it logstash /bin/bash
    
    • 1
    • 2

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

    在这里插入图片描述

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

    http.host: "0.0.0.0"
    xpack.monitoring.elasticsearch.hosts: [ "http://192.168.50.211:9200" ] #设置跟es的服务地址
    
    • 1
    • 2
    5.3 设置logstash收集日志的输入和输出
    #进入容器
    docker exec -it logstash /bin/bash
    
    • 1
    • 2

    在pipline目录中创建两个文件 logstash-demo.conf,logstash-test.conf

    在这里插入图片描述

    logstash-demo.conf 内容如下:

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"  # 允许任意主机发送日志
        port => 5044
        codec => json_lines    # 数据格式
      }
    }
    
    output {
      elasticsearch {
          hosts  => ["http://192.168.50.211:9200"]   # ElasticSearch 的地址和端口
          index  => "demo"         # 指定索引名,可以根据自己的需求指定命名
          codec  => "json"
      }
      stdout {
        codec => rubydebug
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    logstash-test.conf 内容如下:

    input {
      tcp {
        mode => "server"
        host => "0.0.0.0"  # 允许任意主机发送日志
        port => 5045
        codec => json_lines    # 数据格式
      }
    }
    
    output {
      elasticsearch {
          hosts  => ["http://192.168.50.211:9200"]   # ElasticSearch 的地址和端口
          index  => "test"         # 指定索引名,可以根据自己的需求指定命名
          codec  => "json"
      }
      stdout {
        codec => rubydebug
      }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    5.4 配置管道 pipline
    #进入容器
    docker exec -it logstash /bin/bash
    
    • 1
    • 2

    进入config目录下找到 pipline.yml 配置文件

    在这里插入图片描述

    修改为如下配置:

    - pipeline.id: demo
      path.config: "/usr/share/logstash/pipeline/logstash-demo.conf"
    - pipeline.id: test
      path.config: "/usr/share/logstash/pipeline/logstash-test.conf"
    
    • 1
    • 2
    • 3
    • 4

    配置两个pipline只想不通的配置文件,我们记住 demo 端口为 5044; test 端口为 5045

    6、应用系统对接logstash

    创建两个springboot应用

    加入如下依赖:

    <dependency>
        <groupId>net.logstash.logbackgroupId>
        <artifactId>logstash-logback-encoderartifactId>
        <version>6.6version>
    dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5

    配置 logback-spring.xml 该配置应于 application.yml 同级

    在这里插入图片描述

    注意:这里需要注意下一下 logstash的服务地址和端口!!!

    demo 应配置为:192.168.200.211:5044

    test 应配置为:192.168.200.211:5045

    <?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.211: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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55

    在application.yml文件中设置logback配置的目录

    logging:
      config: classpath:logback-spring.xml
    
    • 1
    • 2

    分别编写一个定时任务,产生日志数据

    package com.example.demo.task;
    
    import lombok.extern.slf4j.Slf4j;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    /**
     * 测试定时任务
     */
    @Slf4j
    @Component
    public class TestTask {
        // 这个变量 如果在 demo 中 值为 demo ;如果在 test 中 值为 test 用来标记日志来源!
        private static final String APP = "demo";
    
        @Scheduled(cron = "0/5 * * * * ?")
        public void runTask() {
            log.info("{} 中定时任务 runTask 方法 执行了", APP);
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    在启动类中开启Scheduled

    package com.example.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @SpringBootApplication
    @EnableScheduling
    public class DemoApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(DemoApplication.class, args);
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    分别启动两个应用,记住启动端口要改一下,不然端口占用起不来!!!

    7、ELK基本使用

    7.1 查看索引文件

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

    然后打开kibana 地址为:http://192.168.50.211:5601/ 根据实际情况修改地址,找到索引管理

    在这里插入图片描述

    可以查看已创建的日志索引
    在这里插入图片描述

    在这里插入图片描述

    7.2 添加索引模式

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

    在这里插入图片描述

    输入索引名称然后点击下一步

    在这里插入图片描述

    选择时间字段后点击创建索引模式即可

    在这里插入图片描述

    test 应用创建索引模式同上,动手练一下吧。

    7.3 检索日志

    打开Discover

    在这里插入图片描述

    在筛选这里选择demo应用

    在这里插入图片描述

    可以看到有日志输出

    切换到test应用查看
    在这里插入图片描述

    可以看到日志都正常输出了。

    至此,elk简单的多pipiline就搭建并应用完成了。

  • 相关阅读:
    子监督学习的知识点总结
    夯实C++基础学习笔记
    kotlin基础教程:<4>内置函数的使用
    引用类型复制之后,修改复制的变量不影响原始变量的三种方法
    Lua中pair和ipair的区别
    kaggle新赛:AI Village夺旗赛挑战
    手写消息队列(基于RabbitMQ)
    使用 Transformers 为多语种语音识别任务微调 Whisper 模型
    GBase XDM API 错误处理调用(上)
    P2002 消息扩散
  • 原文地址:https://blog.csdn.net/weixin_38405770/article/details/134229548