如何用Micrometer与Spring Boot 3推送日志至RabbitMQ?配置后无消息
场景一:将追踪数据通过RabbitMQ推送至Zipkin
1. 调整依赖
移除直接HTTP发送的Zipkin Exporter,添加OpenTelemetry的RabbitMQ Exporter依赖:
<!-- 移除原有HTTP Zipkin Exporter --> <!-- <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-zipkin</artifactId> </dependency> --> <!-- 添加RabbitMQ Exporter依赖(版本适配Spring Boot 3.0.2即可) --> <dependency> <groupId>io.opentelemetry</groupId> <artifactId>opentelemetry-exporter-rabbitmq</artifactId> <version>1.29.0</version> </dependency>
2. 修改配置文件
注释掉HTTP直连Zipkin的配置,添加OpenTelemetry RabbitMQ传输配置:
management.tracing.sampling.probability=1.0 # 注释掉原HTTP Zipkin端点 # management.zipkin.tracing.endpoint=http://localhost:9411/api/v2/spans management.metrics.distribution.percentiles-histogram.http.server.requests=true logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] # 保留原有RabbitMQ连接配置 spring.rabbitmq.host=localhost spring.rabbitmq.port=5672 spring.rabbitmq.username=guest spring.rabbitmq.password=guest # OpenTelemetry RabbitMQ Exporter配置 management.opentelemetry.exporter.rabbitmq.host=localhost management.opentelemetry.exporter.rabbitmq.port=5672 management.opentelemetry.exporter.rabbitmq.username=guest management.opentelemetry.exporter.rabbitmq.password=guest management.opentelemetry.exporter.rabbitmq.queue=zipkin # 队列名需和Zipkin消费配置一致
3. 配置Zipkin消费RabbitMQ数据
启动Zipkin时指定RabbitMQ消费参数:
java -jar zipkin-server-2.24.0-exec.jar --zipkin.collector.rabbitmq.addresses=localhost:5672 --zipkin.collector.rabbitmq.username=guest --zipkin.collector.rabbitmq.password=guest
场景二:将带TraceId的应用日志推送至RabbitMQ
以Logback日志框架为例:
1. 添加Logback配置文件
在src/main/resources下创建logback-spring.xml,配置RabbitMQ Appender:
<?xml version="1.0" encoding="UTF-8"?> <configuration> <include resource="org/springframework/boot/logging/logback/defaults.xml"/> <include resource="org/springframework/boot/logging/logback/console-appender.xml"/> <!-- RabbitMQ日志输出Appender --> <appender name="RABBITMQ" class="org.springframework.amqp.rabbit.logback.AmqpAppender"> <layout> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}] %m%n</pattern> </layout> <host>${spring.rabbitmq.host}</host> <port>${spring.rabbitmq.port}</port> <username>${spring.rabbitmq.username}</username> <password>${spring.rabbitmq.password}</password> <exchangeName>logs-exchange</exchangeName> <exchangeType>topic</exchangeType> <routingKeyPattern>app.logs.${spring.application.name}</routingKeyPattern> <declareExchange>true</declareExchange> <queueName>logs-queue</queueName> <declareQueue>true</declareQueue> <bindingRoutingKey>app.logs.#</bindingRoutingKey> <durable>true</durable> <autoDelete>false</autoDelete> </appender> <root level="INFO"> <appender-ref ref="CONSOLE"/> <appender-ref ref="RABBITMQ"/> </root> </configuration>
2. 验证
重启应用后调用接口,RabbitMQ中会生成配置的logs-queue队列,同时收到应用日志消息。
内容的提问来源于stack exchange,提问作者Mohamed Aymen Charrada
相关产品推荐
相关产品推荐

