Docker搭建Plumelog并集成到SpringBoot(Logback)
开源地址:https://gitee.com/plumeorg/plumelog
同时分享一个大佬整理的各种docker compose:https://gitee.com/zhengqingya/docker-compose
搭建Plumelog服务端
依赖:
- redis
- elasticsearch
- plumelog
下载大佬的compose文件:https://gitee.com/zhengqingya/docker-compose/tree/master/Linux/plumelog
docker-compose.yml
version: "3"
# 网桥 -> 方便相互通讯
networks:
plumelog:
ipam:
driver: default
config:
- subnet: "172.23.0.0/24"
services:
plumelog:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/plumelog:3.5.3
container_name: plumelog
restart: unless-stopped
volumes:
# 引用外部配置文件 ex: es,redis (配置也可通过 -e 去修改)
- ./app/plumelog/application.properties:/home/application.properties
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
JAVA_OPTS: "-XX:+UseG1GC -Dspring.config.location=/home/application.properties,classpath:application.properties,"
ports:
- "8891:8891"
depends_on:
- elasticsearch
- redis
networks:
plumelog:
ipv4_address: 172.23.0.11
elasticsearch:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/elasticsearch:7.14.1 # 原镜像`elasticsearch:7.14.1`
container_name: plumelog_elasticsearch # 容器名为'elk_elasticsearch'
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./app/elasticsearch/data:/usr/share/elasticsearch/data"
- "./app/elasticsearch/logs:/usr/share/elasticsearch/logs"
- "./app/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml"
# - "./app/elasticsearch/config/jvm.options:/usr/share/elasticsearch/config/jvm.options"
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
discovery.type: single-node
ES_JAVA_OPTS: "-Xmx512m -Xms512m"
ELASTIC_PASSWORD: "123456" # elastic账号密码
ports:
- "9200:9200"
- "9300:9300"
networks:
plumelog:
ipv4_address: 172.23.0.22
redis:
image: registry.cn-hangzhou.aliyuncs.com/zhengqing/redis:7.0.5 # 镜像'redis:7.0.5'
container_name: plumelog_redis # 容器名为'redis'
restart: unless-stopped # 指定容器退出后的重启策略为始终重启,但是不考虑在Docker守护进程启动时就已经停止了的容器
command: redis-server /etc/redis/redis.conf --requirepass 123456 --appendonly no # 启动redis服务并添加密码为:123456,默认不开启redis-aof方式持久化配置
# command: redis-server --requirepass 123456 --appendonly yes # 启动redis服务并添加密码为:123456,并开启redis持久化配置
environment: # 设置环境变量,相当于docker run命令中的-e
TZ: Asia/Shanghai
LANG: en_US.UTF-8
volumes: # 数据卷挂载路径设置,将本机目录映射到容器目录
- "./app/redis/data:/data"
- "./app/redis/config/redis.conf:/etc/redis/redis.conf" # `redis.conf`文件内容`http://download.redis.io/redis-stable/redis.conf`
ports: # 映射端口
- "6379:6379"
networks:
plumelog:
ipv4_address: 172.23.0.33
启动: docker-compose up -d
授权app/elasticsearch解决es报错:chmod -R 777 ./app/elasticsearch
修改./app/plumelog/application.properties配置文件,注意redis的db序号,后面在集成springboot的时候需要对应上
spring.application.name=plumelog_server
spring.profiles.active=test-confidential
server.port=8891
spring.thymeleaf.mode=LEGACYHTML5
spring.mvc.view.prefix=classpath:/templates/
spring.mvc.view.suffix=.html
spring.mvc.static-path-pattern=/plumelog/**
spring.boot.admin.context-path=admin
management.health.elasticsearch.enabled=false
#值为4种 redis,kafka,rest,restServer
#redis 表示用redis当队列
#kafka 表示用kafka当队列
#rest 表示从rest接口取日志
#restServer 表示作为rest接口服务器启动
#ui 表示单独作为ui启动
#lite 简易模式启动不需要配置redis等
plumelog.model=redis
#plumelog.lite.log.path=/Users/chenlongfei/lucene
#如果使用kafka,启用下面配置
#plumelog.kafka.kafkaHosts=172.16.247.143:9092,172.16.247.60:9092,172.16.247.64:9092
#plumelog.kafka.kafkaGroupName=logConsumer
#如果启用内置redis,使用下面配置,这边填上本机的ip,和需要启动的端口号,如果你只启用内置的redis,下面关于redis的配置可以不用配置全部注释掉
# plumelog.inside.redis.host=127.0.0.1:7979
#队列redis地址,model配置redis集群模式,哨兵模式用逗号隔开,队列redis不支持集群模式
plumelog.queue.redis.redisHost=127.0.0.1:6379
#如果使用redis有密码,启用下面配置
plumelog.queue.redis.redisPassWord=123456
plumelog.queue.redis.redisDb=10
#哨兵模式需要配置的
#plumelog.queue.redis.sentinel.masterName=myMaster
#管理端redis地址 ,集群用逗号隔开,不配置将和队列公用
#plumelog.redis.redisHost=127.0.0.1:6379
#如果使用redis有密码,启用下面配置
#plumelog.redis.redisPassWord=123456
#plumelog.redis.redisDb=11
#哨兵模式需要配置的
#plumelog.redis.sentinel.masterName=myMaster
#如果使用rest,启用下面配置
#plumelog.rest.restUrl=http://127.0.0.1:8891/getlog
#plumelog.rest.restUserName=plumelog
#plumelog.rest.restPassWord=123456
#redis解压缩模式,开启后不消费非压缩的队列
#plumelog.redis.compressor=true
#elasticsearch相关配置,Hosts支持携带协议,如:http、https
plumelog.es.esHosts=127.0.0.1:9200
#plumelog.es.shards=5
#plumelog.es.replicas=0
#plumelog.es.refresh.interval=30s
#日志索引建立方式day表示按天、hour表示按照小时
#plumelog.es.indexType.model=day
#plumelog.es.maxShards=100000
#ES设置密码,启用下面配置
plumelog.es.userName=elastic
plumelog.es.passWord=123456
#是否信任自签证书
#plumelog.es.trustSelfSigned=true
#是否hostname验证
#plumelog.es.hostnameVerification=false
#单次拉取日志条数
plumelog.maxSendSize=100
#拉取时间间隔,kafka不生效
plumelog.interval=100
#plumelog-ui的地址 如果不配置,报警信息里不可以点连接
plumelog.ui.url=http://demo.plumelog.com
#管理密码,手动删除日志的时候需要输入的密码
admin.password=123456
#日志保留天数,配置0或者不配置默认永久保留
admin.log.keepDays=30
#链路保留天数,配置0或者不配置默认永久保留
admin.log.trace.keepDays=30
#登录配置,配置后会有登录界面
login.username=admin
login.password=admin
springboot集成
添加maven依赖
<dependency>
<groupId>com.plumelog</groupId>
<artifactId>plumelog-logback</artifactId>
<version>3.5.3</version>
</dependency>
修改logback-spring.xml
添加appender
plumelog的appender是直接写入日志到redis中,因此appender需要配置redis的地址和db序号,与plumelog服务端需要保持一致,否则读取不到日志
<springProperty scope="context" name="APP_NAME" source="spring.application.name" />
<appender name="plumelog" class="com.plumelog.logback.appender.RedisAppender">
<appName>${APP_NAME}</appName>
<redisHost>172.28.51.191:6379</redisHost>
<redisAuth>123456</redisAuth>
<redisDb>10</redisDb>
</appender>
将appender添加到root中
<root level="info">
<appender-ref ref="CONSOLE" />
<appender-ref ref="DEBUG_FILE" />
<appender-ref ref="INFO_FILE" />
<appender-ref ref="ERROR_FILE" />
<appender-ref ref="WARN_FILE" />
<appender-ref ref="plumelog"/>
</root>
ok, 可以启动项目查看效果了!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律