docker搭建elk环境并实现logstash监听logback,亲测有效!!!

原因:线上日志太多且没有长期保存,导致问题发现晚点就找不到日志了,当然可以更改日志保存时间,但是还有个问题就是不好查询,需要根据时间去查找到底查询哪个日志文件,于是想到了用elk收集日志,这样就好查询了。

elk是什么

简单了解了一下elk是什么,首先elk是三个中间件。
Elasticsearch:一个分布式的实时搜索和分析引擎,用于存储和检索数据,相当于数据库。
Logstash:收集日志的,比如从一个日志文件中提取你想要的数据,实时收集等。
Kibana:一个用于数据可视化的工具,提供了强大的图形化界面,能够实时地查询和分析 Elasticsearch 中的数据,并以图表、表格等形式展示。

安装elasticsearch

elk最好都安装同一版本的,我这里都安装的7.7.0版本,本来我安装的是8版本的,但是这个版本的安装要复杂一些。

docker run --name es -d \
    -e ES_JAVA_OPTS="-Xms1g -Xmx1g" \
    -e "discovery.type=single-node" \
    -p 9200:9200 -p 9300:9300 \
    -v /home/zh188/elk/es/data:/usr/share/elasticsearch/data \
    -v /home/zh188/elk/es/plugins:/usr/share/elasticsearch/plugins \
    -v /home/zh188/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \
    --privileged elasticsearch:7.7.0

解释

docker run:运行容器的命令。
--name es:为容器指定一个名称,这里是 "es"。
-d:以分离模式(detached mode)运行容器,使其在后台运行。
-e ES_JAVA_OPTS="-Xms1g -Xmx1g":设置 Elasticsearch 的 Java 虚拟机参数。在这里,设置了最小堆内存 -Xms 为 1GB 和最大堆内存 -Xmx 为 1GB。
-e "discovery.type=single-node":设置 Elasticsearch 的节点发现类型为单节点模式。
-p 9200:9200 -p 9300:9300:将容器的 9200 和 9300 端口映射到主机的对应端口。9200 端口用于 HTTP 请求,9300 端口用于节点间通信。
-v /home/zh188/elk/es/data:/usr/share/elasticsearch/data:将主机上的目录挂载到容器中,用作 Elasticsearch 存储数据的路径。
-v /home/zh188/elk/es/plugins:/usr/share/elasticsearch/plugins:将主机上的目录挂载到容器中,用于存放 Elasticsearch 插件的路径。
-v /home/zh188/elk/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml:将主机上的 Elasticsearch 配置文件挂载到容器中,覆盖默认配置。
--privileged:赋予容器特权,可能需要根据实际情况使用。
elasticsearch:7.7.0:指定要运行的容器镜像及其版本号。

默认启动连接是不需要账号密码的,如果要设置密码可以看看其他博客怎么设置账号秘密。
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第1张图片

验证

执行一下命令

curl -v http://127.0.0.1:9200

docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第2张图片
返回这样的信息表示安装成功。

安装kibana

docker run -d --name kibana7 \
    -e ELASTICSEARCH_HOSTS=http://本机ip:9200 \
    -p 5601:5601 \
    kibana:7.7.0

注意:
ELASTICSEARCH_HOSTS=http://本机ip:9200
这儿表示连接我们的es,如果是集群的话需要去配置文件里面配置多个es地址
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第3张图片
启动起来了,在页面上访问一下
http://服务器ip:5601
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第4张图片

安装logstash

如果需要挂载配置文件到宿主机安装要稍微麻烦一些,需要先不挂载启动,然后把配置文件复制到你需要挂载的路径,把容器再删除,在重启挂载启动。

不挂载启动

sudo docker run --name logstash \
-p 4560:4560 \
-d logstash:7.7.0

启动完成后复制配置文件

docker container cp logstash:/usr/share/logstash/config /home/zh188/elk/logstash \
& docker container cp logstash:/usr/share/logstash/pipeline /home/zh188/elk/logstash

注意:/home/zh188/elk/logstash是自己建的文件夹,路径随意

停止并删除容器

docker stop logstash 
docker rm logstash 

挂载启动

sudo docker run --name logstash \
-p 4560:4560 \
-v /home/zh188/elk/logstash/config:/usr/share/logstash/config \
-v /home/zh188/elk/logstash/pipeline:/usr/share/logstash/pipeline \
-d logstash:7.7.0

启动之后在配置一下es路径,在挂载的/home/zh188/elk/logstash/config路径下有个logstash.yml文件

编辑logstash.yml

http.host: "0.0.0.0"
#xpack.monitoring.elasticsearch.hosts: [ "http://es服务器ip:9200" ]

配置管道信息

/home/zh188/elk/logstash/pipeline路径下有个logstash.conf配置文件

input {
    tcp {
        port => 9092
    }
}

filter {
    json {
        source => "message"
    }
}
output {
   elasticsearch {
            hosts => "192.168.5.188:9200"
            index => "hlw-log-index-test-%{+YYYY.MM.dd}"
        }
}
解释
input {
    tcp {
        port => 9092   //监听tcp9092端口
    }
}

filter {
    json {
        source => "message" //将取到的信息json格式化,就是过滤还有很多其他的过滤插件
    }
}
output {
//向es输出,索引为hlw-log-index-test-日期,每天新建一个索引
   elasticsearch {
            hosts => "192.168.5.188:9200"  //ip改为es服务器ip和端口
            index => "hlw-log-index-test-%{+YYYY.MM.dd}"
        }
}

注意:我是用docker部署,这儿我监听了9092端口,所以我一定要进行映射容器9092端口,刚开始我就没有映射导致一直接受不到消息。
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第5张图片

配置logback

引起依赖

springboot已经默认集成了logback框架,所以无需在引入logback了,以下依赖是logback和logstash通讯所需的依赖

 
            net.logstash.logback
            logstash-logback-encoder
            6.3
  

配置文件

yml配置文件中加上

logging:
  config: classpath:log/logback-spring.xml

在resource中加上log/logback-spring.xml配置文件
在这里插入图片描述







    
    Logback For Boss
    
    
    
    
    
    

    
    
        192.168.5.188:9092
        
    

    
    
        
            %cyan(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%thread] %highlight(%-5level) %logger{36} - %msg%n
            UTF-8
        
    

    
    
        
            ERROR
            ACCEPT
            DENY
        
        
            ${logDir}\%d{yyyyMMdd}\error.log
            ${maxHistory}
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
                %msg%n
            UTF-8
        
        true
        false
    

    
    
        
            ${logDir}\%d{yyyyMMdd}\info.log
            ${maxHistory}
        
        
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger -
                %msg%n
            UTF-8
        
        false
        false
    

    
    
        
            
            ${logDir}/%d{yyyyMMdd}/boss.%d{yyyy-MM-dd}.log
            
            30
        
        
            
            %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n
        
        
        
            10MB
        
    

    
    
        true
        
        0
        
        512
        
    

    
    
    
    
    
    
    
    

    
    
        
        
        
        
        
        
    

主要配置
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第6张图片
启动程序就会有日志,然后去kibana中查看是否有生成的索引。

kibana简单使用

查看索引是否建立成功

docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第7张图片
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第8张图片
索引自动建立成功并且有数据,说明搭建elk成功,接下来就看是否有日志信息。

新建索引模式

docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第9张图片
填入我们的索引名,点击下一步
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第10张图片
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第11张图片
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第12张图片
创建成功

查看数据

docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第13张图片
docker搭建elk环境并实现logstash监听logback,亲测有效!!!_第14张图片
可以看到我们的数据日志数据已经能成功展示了,我们可以检索了,检索可以根据字段,时间,这样能更好查看日志了,都看到这里了,点个赞在走吧。

你可能感兴趣的:(docker,elk,logback)