栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

springboot+docker+ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

springboot+docker+ELK(ElasticSearch, Logstash, Kibana)搭建实时日志分析平台

首先得有虚拟机,内存cpu不要太小,不然会崩,我在这上面直接崩了,害的我搞了老半天

 

安装docker,博客里边有docker教程

Linux 下 yum 安装 docker_aloneTK的博客-CSDN博客

1.安装ElasticSearch

# 此处使用的elasticsearch版本为7.6.0,后续的kibana和logstash也会使用该版本
docker pull elasticsearch:7.6.0

2.为elasticsearch创建网络

# 如果已经创建了网络,则省略该步骤
docker network create elastic

3.启动镜像

docker run -d 
--name elasticsearch 
--network elastic 
-p 9200:9200 -p 9300:9300 
-e "discovery.type=single-node" 
elasticsearch:7.6.0

4.验证启动状态,若出现如下的返回信息,则说明elasticsearch已经部署ok

curl 127.0.0.1:9200

 出现这个证明安装成功

5.接下来安装kibana

# 该命令可执行也可不执行,docker run的时候若没有镜像会自动pull镜像
docker pull kibana:7.6.0

启动容器

# 仅使用命令行启动

docker run -d 
--name kibana 
--network elastic 
-e ELASTICSEARCH_URL=http://elasticsearch:9200 
-e I18N_LOCALE=zh-CN 
-p 5601:5601 
kibana:7.6.0
参数说明:

# 指定容器的网络,与elasticsearch使用同一网络即可使用容器名称进行互通
--network elastic

# 指定elasticsearch的服务器地址,elasticsearch:9200表示容器名称:端口号
# 只有同一网络下容器才能使用此种方式互通
-e ELASTICSEARCH_URL=http://elasticsearch:9200

# 容器国际化设配置为简体中文
-e I18N_LOCALE=zh-CN

6.访问kibana界面: http://服务器地址:5601

 证明启动成功

6.安装Logstash(在这里遇见超级多的坑)

# 该命令可执行也可不执行,docker run的时候若没有镜像会自动pull镜像
docker pull logstash:7.6.0

7.启动容器

下面会给出两种启动的方式,看个人喜好去选择,都由我亲自实践,完全莫得bug!

# 1.直接启动容器,不映射配置文件
docker run -d -p 5043:5043 -p 5044:5044 --name logstash --network elastic logstash:7.6.0

# 2.待容器启动完成,进入容器中
docker exec -it logstah /bin/bash

# 3.为logstash安装json_lines插件
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines

# 4. 添加springboot.yml配置文件
========================================================================
vi /usr/share/logstash/pipeline/springboot.yml

# 输入端
input {
  #输入logstash时控制台打印  
  stdin { } 
  #为logstash增加tcp输入口,方便springboot接入
  #5044端口预留给filebeat输入logstah,此处开放5043端口,程序直接输入logstash
  tcp {
      mode => "server"
      host => "0.0.0.0"
      #从5043端口取日志
      port => 5043
      #需要安装logstash-codec-json_lines插件
      codec => json_lines
  }
}

#输出端
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    #hosts中的地址应该写同一network下的容器名称
    hosts => ["http://elasticsearch:9200"]
    # 输出至elasticsearch中的自定义index名称
    index => "flow-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}

========================================================================

# 5. 保存编辑好的yml配置文件,退出容器
exit

# 6.重启容器
docker restart logstash

以映射配置文件的方式启动

# 1.创建存放配置文件的文件夹
 sudo mkdir -p /docker/logstash/config/

# 2.创建配置文件(复制以下全部内容至命令行中)
sudo tee /docker/logstash/config/logstash.yml <<-'EOF'
# 输入端
input {
  #输入logstash时控制台打印  
  stdin { } 
  #为logstash增加tcp输入口,方便springboot接入
  #5044端口预留给filebeat输入logstah,此处开放5043端口,程序直接输入logstash
  tcp {
      mode => "server"
      host => "0.0.0.0"
      #从5043端口取日志
      port => 5043
      #需要安装logstash-codec-json_lines插件
      codec => json_lines
  }
}

#输出端
output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    #hosts中的地址应该写同一network下的容器名称
    hosts => ["http://elasticsearch:9200"]
    # 输出至elasticsearch中的自定义index名称
    index => "flow-%{+YYYY.MM.dd}"
    #user => "elastic"
    #password => "changeme"
  }
}
EOF

# 3.启动容器
docker run -d --name logstash 
-p 5043:5043 -p 5044:5044 
--network elastic 
--privileged=true 
-v /docker/logstash/config/:/usr/share/logstash/pipeline/ 
logstash:7.6.0

# 4.待容器启动完成,进入容器中
docker exec -it logstash /bin/bash

# 5.为logstash安装json_lines插件
/usr/share/logstash/bin/logstash-plugin install logstash-codec-json_lines

# 6. 成功安装插件之后,退出容器
exit

# 7.重启容器
docker restart logstash
docker ps -a查看到并未启动成功,没有端口号

启动后的logstash日志

docker logs -f logstash

可能会报错

docker安装并启动logstash时内存不足

别惊慌别害怕

解决方法
修改jvm.options文件配置
首先查找jvm.options文件位置(每个服务器的位置可能不同)

find / -name jvm.options

 修改内存

找到-Xms  Xmx属性,修改成512m(我的默认为1g)

es的也改了

我的做法是把es的都是512m logstash是1024m 
因为我logstash改成512后安装logstash-codec-json_lines插件给我报内存不足

然后重启容器,我这是所有都重启了

docker start $(docker ps -a -q)

启动参数说明

# logstash 默认会给beats留下一下5044的端口,用作beats的日志收集
# 再开放一个5043端口,用作tcp的日志收集端口
-p 5043:5043 -p 5044:5044

# 获取宿主机文件操作权限,有此权限才能进行文件映射
--privileged=true

# /usr/share/logstash/pipeline/ 此路径是容器的配置文件路径,将其管道的配置
# 文件目录映射出来,方便自己添加自己的日志输入输出配置
-v /docker/logstash/config/:/usr/share/logstash/pipeline/

# 将启动后的容器加入elastic网段中,在同一网段中,容器互通只需要通过容器名称即可
--network elastic

然后就是springboot配置

pom.xml

        
        
            ch.qos.logback
            logback-classic
        
        
            net.logstash.logback
            logstash-logback-encoder
            5.2
        

在resourse目录下新建logback.xml



    
    
    
    
    
    
        
            INFO
        
        false
        
            
            
            %d{yyyy-MM-dd HH:mm:ss} %highlight(%-5level) -- %boldMagenta([%thread]) %boldCyan(%logger) : %msg%n
            UTF-8
        
    

    
    
        
        49.235.205.253:5043
        
        
            
            {"applicationName":"${applicationName}"}
        
    

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

    
    
        
        
    

写一个controller

@Api(tags = "用户模块")
@RestController
public class UserController {
    private final static Logger logger= LoggerFactory.getLogger(UserServiceImpl.class);
    @Resource
    private UserService userService;

    @ApiOperation("登录接口")
    @PostMapping("login")
    private ResultModel list(@RequestBody UserReqVo request){
        logger.info("登录校验开始 "+System.currentTimeMillis()+" ,params:{}",request);
        UserResVo userResVo = userService.selectUserOne(request);
        logger.info("登录校验结束 "+System.currentTimeMillis());
        return ResultModel.success(userResVo);
    }

}

启动调用

 

 

调用

 

 结束

感谢一位老哥,跟着他一路下来解决了很多问题

老哥博客

 Torture - 简书

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/319069.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号