目的
收集应用日志到文件目录和redis,筛选只留下Error级别得日志,并对错误堆栈进行合并。
准备工作
准备一个springboot应用jar包 app.jar(port:8093,日志目录/logs/backend-demo/docker-demo/logback.*.log,日志格式:%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n)
该app暴露一个接口/api/test,调用可以产生异常
下载logstash安装包 logstash-7.6.1.tar.gz
解压 tar -vxzf logstash-7.6.1.tar.gz
改名 mv logstash-7.6.1 logstash
考虑到自己云服务器得内存需要需改logstash jvm参数(默认1G):vim logstash/config/jvm.options 改为256M

非DOCKER
1、定义logstash 基于 app.jar得收集配置文件 app.config
input:(采集对应目录得日志并合并)
输入为app.jar得日志目录,
codec=>multiline:日志合并(堆栈)
filter(筛选只留下error级别得日志):
match:正则对应自app.jar得日志格式,并定义变量(?<变量名称>)\
output(输出到文件,redis,控制台)\
2、启动logstash: sh logstash/bin/logstash -f app.config
3、启动app.jar java -jar app.jar
观察各个输出,jar启动没有error级别得日志,不会有任何输出,调用接口产生异常,查看logstash文件输出
Docker
场景:app.jar进行docker部署,该demo将logstash和app构建为一个镜像,使用shell脚本在运行镜像时将两个应用同时启动。
保证自己服务器得内存是否充足,否则容器内得logstash会被Kill掉
将app.jar,app.config,logstash放于同一目录方便构建容器时进行拷贝(修改redis host为ip地址,用127.0.0.1是无法访问宿主机得redis得)
创建shell启动脚本,最后得tail -f /dev/null是必须得,否则容器将会退出
构建Dockerfile
logstash输出得目录定义为了data,所以这边也提前创建了一个data得空文件夹
构建镜像
docker build -t logstash-app:v3 .
启动容器 docker run -itd -m 700M -p 8093:8093 dc9e879e8304
等一会(内存较小,logstash启动比较慢) 测试即可,效果跟本地部署是一样得