Keycloak 17+(Quarkus版)日志输出到Logstash配置问题咨询
Keycloak 17+(Quarkus内核)GELF日志对接Logstash配置校验与故障排查
现有配置问题说明
你提供的配置存在3类问题,无法正常生效:
- 无效配置项:所有前缀为
quarkus.log.handler.gelf.json.*的参数均不属于Quarkus GELF日志扩展的合法配置。该扩展默认输出标准GELF格式JSON日志,不存在json开关、key-overrides、exception-output-type、json层级下的additional-field这类配置项,属于混淆Wildfly版Keycloak子系统配置、其他JSON日志扩展参数导致的错误。 - 格式错误:
${env-LOGSTASH_QUEUE:1000}的环境变量占位符写法错误,Quarkus配置中环境变量引用的分隔符为.,正确写法为${env.LOGSTASH_QUEUE:1000};quarkus.log.handler.gelf.host参数中添加的tcp:前缀为非法值,协议需通过独立的protocol参数配置,host字段仅需填写Logstash服务的IP或域名,前缀会直接导致域名解析失败,无法建立连接。 - 逻辑错误:配置中填写的默认端口5044是Logstash Beats输入插件的默认端口,与GELF协议不兼容,GELF输入默认端口为12201,端口不匹配会导致流量被Logstash直接丢弃。
可直接使用的正确配置
以下配置可完全替代原Wildfly版本的CLI日志配置,适配Quarkus内核Keycloak:
# 启用GELF日志处理器 quarkus.log.handler.gelf.enabled=true # GELF服务端连接配置 quarkus.log.handler.gelf.host=${env.LOGSTASH_DESTINATION:logstash服务地址} quarkus.log.handler.gelf.port=${env.LOGSTASH_PORT:12201} quarkus.log.handler.gelf.protocol=tcp quarkus.log.handler.gelf.block-on-reconnect=true # 异步发送配置 quarkus.log.handler.gelf.async=true quarkus.log.handler.gelf.async.queue-length=${env.LOGSTASH_QUEUE:1000} quarkus.log.handler.gelf.async.overflow=block # 日志捕获级别 quarkus.log.handler.gelf.level=ALL # 内置字段配置 quarkus.log.handler.gelf.facility=${env.LOGSTASH_APPNAME:keycloak} quarkus.log.handler.gelf.include-full-mdc=true # 自定义附加字段(按需添加,无json层级前缀) quarkus.log.handler.gelf.additional-field."appname".value=${env.LOGSTASH_APPNAME:myApplicationName} quarkus.log.handler.gelf.additional-field."@version".value=1
说明:标准GELF协议默认自带
@timestamp字段,无需额外配置字段映射即可被Logstash、Kibana直接识别。
安装logging-gelf特性后Kibana无日志的排查方向
- 配置加载验证:Keycloak 17+版本的自定义配置需写入
conf/keycloak.conf文件,首次修改配置启动时需添加--auto-build参数触发配置构建。可开启DEBUG日志(启动参数添加--log-level=DEBUG)查看启动日志,确认GELF处理器初始化成功、无连接报错。仅安装logging-gelf特性未正确启用处理器时,不会向外发送日志。 - 协议与端口匹配:确认Logstash侧已开启GELF类型输入,输入协议(TCP/UDP)、端口与Keycloak侧配置完全一致,禁止使用Beats、HTTP等其他输入插件的端口接收GELF流量,协议不兼容时流量会被直接丢弃。
- 网络连通性验证:在Keycloak部署节点直接测试到Logstash对应端口的连通性,确认节点出站规则、Logstash入站规则、防火墙/安全组没有拦截对应端口流量。
- 全链路验证:确认Logstash接收GELF日志后,过滤规则正常、输出到Elasticsearch无报错,Elasticsearch索引正常生成,Kibana侧索引模式匹配正确、查询时间范围覆盖日志产生时间。
内容的提问来源于stack exchange,提问作者Jaroslaw Pasiak
相关产品推荐
相关产品推荐

