基于Docker构建ELK以及集成SpringBoot+Kafka发送日志完整流程

本文所用系统环境:CentOS7
docker安装不在阐述
elk所有版本全部基于6.5.1
安装到集成一共三个大步骤:

一.安装ELK
二.安装kafka
三.SpringBoot集成kafka传输日志

一.安装ELK
1.kibana
直接执行以下代码,会自动执行安装以及启动全部过程

docker run -d -p 5601:5601 --name kibana --restart=always  kibana:6.5.1

将kibana容器内的 /usr/share/kibana 中的config文件拷贝到宿主机

docker cp kibana:/usr/share/kibana/config /home/kibana/config

删除容器后进入config文件下的
kibana.yml
删掉所有内容,添加:

server.host: "0.0.0.0"
elasticsearch.url: http://你的内网ip:9200

挂载启动,将宿主机文件替换到容器文件
挂载的方式为 宿主机路径:容器路径

docker run -d -p 5601:5601 --name kibana -v  /home/kibana/config:/usr/share/kibana/config --restart=always  kibana:6.5.1

原因是因为docker的隔离性质

2.下载elasticsearch

docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --restart=always elasticsearch:6.5.1

将es容器内的 /usr/share/elasticsearch/ 中的 config文件和data文件夹拷贝出到本地宿主机

docker cp es:/usr/share/elasticsearch/config /home/es/config   
docker cp es:/usr/share/elasticsearch/data /home/es/data

修改文件
config文件下的elasticsearch.yml

cluster.name: "elk"
network.host: 0.0.0.0

cluster.namez自己要记住,在集成到SpringBoot的时候需要用到
network.host是为了让所有的端口都可以访问他,有需要的自行更改

删除容器后挂载重启

docker run -d --name es -p 9200:9200 -p 9300:9300 -v /home/es/config:/usr/share/elasticsearch/config -v /home/es/data:/usr/share/elasticsearch/data -e "discovery.type=single-node" --restart=always elasticsearch:6.5.1

3.下载logstash

docker run -d --name=log -restart=always logstash:6.5.1

以下内容比较关键.请详细阅读:

1.容器启动的时候,使用的是加载文件目录pipeline的形式
2.logstash如果需要隔离的话,需要使用过滤插件,具体操作参考下面代码:

把文件夹pipeline和config文件夹全部拷贝出来

docker cp log:/usr/share/logstash/pipeline /home/logstash/pipeline  
docker cp log:/usr/share/logstash/config /home/logstash/config

修改pipelinne文件夹中的配置文件内容为

input{
     kafka {
        topics => "my-log-topic"
        type => "kafka"
        bootstrap_servers => "kafkaIp:9092"
        codec => json
  }
}
filter {
  json {
    source => "message"
  }
}

output {
  elasticsearch {
    hosts => ["http://esIP9200"]
    index => "logkafka-%{+YYYY.MM.dd}"
    index => "%{index}-%{+YYYY.MM.dd}"
    codec => json
 }
}

下面的内容是讲述过滤插件作用以及配置文件中的各项作用,请详细阅读.

其中,input为输入,output为输出.
kafka中的topics为你在kafka中指定的消费队列,在下面集成SpringBoot的时候会用到
bootstrap_servers为你的kafka队列内网ip和端口
codec 为json形式消费
filter 是过滤数据,所有的数据在logstash向es中写入的时候,是默认写在message字段中,我们在集成es查询的时候需要对数据进行字段检索 所以需要以k,v的形式,过滤器起到的作用就是把json拆分成k,v的形式写入es
elasticsearch中
hosts为你es的地址
第一个    index为你定义的索引,文中所述的为前缀logkafka-+日期
第二个是取json中的字段作为索引,留下一个就可以
codec 以json存储

修改config中pipelines.yml配置文件

- pipeline.id: main
  path.config: "/usr/share/logstash/pipeline/logstash.conf"
- pipeline.id: log
  path.config: "/usr/share/logstash/pipeline/log.conf"

删除镜像重启logstash

docker run -d --name=log -v /home/logstash/pipeline:/usr/share/logstash/pipeline -v /home/logstash/config:/usr/share/logstash/config --restart=always logstash:6.5.1

pipeline.id 可以有多个,每一个代表不同的管道,走不通的配置文件
格式不要错
以上结束之后,elk安装已经安装以及配置完成.下面内容哦个开始为kafka安装以及和SpringBoot的集成

二.安装kafka
下载镜像

docker pull wurstmeister/zookeeper  
docker pull wurstmeister/kafka

启动zookeeper

docker run -d --name zookeeper -p 2181:2181 -t wurstmeister/zookeeper

启动kafka

docker run  -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=172.16.240.144:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://172.16.240.144:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka

进入kafka

docker exec -it kafka bash

修改文件/opt/kafka/config下server.properties配置文件,把最下面的

advertised.host.name修改为你的内网ip
zookeeper.connect修改为你的内网ip:2181

其余的不变
将kafka的config配置文件拿出来

docker cp kafka:/opt/kafka/config /home/kafka/config

删除容器,重启镜像

docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=ip:2181/kafka -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://ip:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -v /home/kafka/config:/opt/kafka/config wurstmeister/kafka

至此kafka安装完成

三.集成SpringBoot

复制maven地址:

 
            ch.qos.logback
            logback-core
        
        
            ch.qos.logback
            logback-access
        
        
            ch.qos.logback
            logback-classic
        
        
            com.github.danielwegener
            logback-kafka-appender
            0.2.0-RC1
        
        
            net.logstash.logback
            logstash-logback-encoder
            5.0
        
        
        org.springframework.boot
        spring-boot-starter-data-elasticsearch
    

在resources文件下创建文件logback.xml复制代码:





    
    
    

    
    
        
            
            
                %date{yyyy-MM-dd HH:mm:ss} | %highlight(%-5level) | %boldYellow(%thread) | %boldGreen(%logger) | %msg%n
            
        
    

    
        ${log.directory}/logs/${logName}.debug.log
        
            DEBUG
            ACCEPT
            DENY
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n
        
        
            ${log.directory}/logs/${logName}.debug.%d{yyyy-MM-dd}.log
        
    

    
        ${log.directory}/logs/${logName}.info.log
        
            INFO
            ACCEPT
            DENY
        
        
            ${log.directory}/logs/${logName}.info.%d{yyyy-MM-dd}.log
            30
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n
        
    

    
        ${log.directory}/logs/${logName}.error.log
        
            ERROR
            ACCEPT
            DENY
        
        
            ${log.directory}/logs/${logName}.error.%d{yyyy-MM-dd}.log
            30
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{40} - %msg%n
        
    

    
    
        
        
        
    


    
        
            true
            true
            
                30
                true
            
        
        my-log-topic
        
        
        
        bootstrap.servers=127.0.0.1:9092
        acks=all
        batch.size=16384
        delivery.timeout.ms=60000
        
        buffer.memory=33554432
    

    
        
            true
            true
            
                30
                true
            
        
        my-log-topics
        
        
        
        bootstrap.servers=127.0.0.1:9092
        acks=all
        batch.size=16384
        delivery.timeout.ms=60000
        
        buffer.memory=33554432
    

    
        
    

    
        
    
    
        
        
        
    

代码中一共有两个管道,分别以elk和elks区分在调用的时候使用lombok注解@Slf4j(topic=“你要发送的管道”)
上面指的管道就是logbak中的elk或者elks
他们分别指向的就是logstash中的各个管道,在模块中topic指定的发布地址.logstash消费的时候会根据配置的管道写入到es中
到这里集成便结束了.
在调用查看的时候,使用官方封装的es的API去调用,具体就不在这里阐述了

你可能感兴趣的:(技术积累,Linux)