Java APM日志发送失败:如何配置属性推送日志至APM Server?
问题排查:Elastic APM Agent日志上报异常
问题描述
- 已配置3个Logback Appender:
JSON-FILE(ch.qos.logback.core.rolling.RollingFileAppender)CONSOLE(ch.qos.logback.core.ConsoleAppender)CONSOLE-OUT-FILE(ch.qos.logback.core.FileAppender)
- 启动Java Agent命令:
nohup java -javaagent:../elastic-apm-agent-1.35.0.jar -Delastic.apm.log_ecs_formatter_allow_list:ch.qos.logback.core.ConsoleAppender -Delastic.apm.service_name=book-service -Delastic.apm.server_urls=http://10.0.114.37:8200 -Delastic.apm.secret_token= -Delastic.apm.environment=development -Delastic.apm.application_packages=com.myapp.book -jar book-service.jar & tail -f nohup.out
- 异常现象:APM Agent事务、指标、错误数据可正常上报,但日志发送功能失效,提示:没有可显示的日志消息,请尝试调整筛选条件
解决方案
1. 修正log_ecs_formatter_allow_list配置
当前配置仅允许ConsoleAppender,若应用日志主要输出到JSON-FILE或CONSOLE-OUT-FILE,这些Appender不在允许列表内会导致Agent无法拦截上报。需将所有需要采集的Appender类加入列表,同时注意JVM系统属性需用等号=赋值(原命令用冒号:会导致属性识别失败):
-Delastic.apm.log_ecs_formatter_allow_list=ch.qos.logback.core.ConsoleAppender,ch.qos.logback.core.rolling.RollingFileAppender,ch.qos.logback.core.FileAppender
2. 配置ECS格式日志编码器
Elastic APM Agent仅能识别ECS格式的日志,需为目标Appender添加对应编码器。示例Logback配置片段:
<appender name="JSON-FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder class="net.logstash.logback.encoder.LogstashEncoder"> <includeCallerData>true</includeCallerData> </encoder> <!-- 其他滚动策略配置 --> </appender> <appender name="CONSOLE-OUT-FILE" class="ch.qos.logback.core.FileAppender"> <encoder class="net.logstash.logback.encoder.LogstashEncoder"/> </appender>
3. 验证日志文件权限与路径
确保JSON-FILE和CONSOLE-OUT-FILE指定的日志路径存在,且应用进程拥有读写权限,避免Agent无法读取日志内容。
4. 开启Agent debug日志排查细节
添加Agent日志配置,查看采集过程中的具体错误:
-Delastic.apm.log_level=DEBUG -Delastic.apm.log_file=apm-agent.log
启动后查看apm-agent.log,可获取Appender加载状态、日志事件捕获情况等关键信息。
内容的提问来源于stack exchange,提问作者Muhammad Iqbal Fadholi
相关产品推荐
相关产品推荐

