我目前有微服务环境,每个服务都会将日志写入自己的文件。 我想实现分布式日志记录,为此我找到了使用elk的解决方案。但我不想打扰我目前将日志写入多个文件的架构。
我是否可以将日志写入文件,然后将其发送到kafka主题。
PS。我目前正在使用logback进行日志记录。
答案 0 :(得分:2)
你只需要在现有配置上添加一个appender,你就不需要打扰"打扰"你的建筑。
Here一个logback kafka appender,您只需添加到pom.xml
:
<dependency>
<groupId>com.github.danielwegener</groupId>
<artifactId>logback-kafka-appender</artifactId>
<version>0.2.0</version>
<scope>runtime</scope>
</dependency>
<!-- probably you already have the following or the ones provided by spring, this is an example -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.1.2</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.8</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>1.1.6</version>
<scope>runtime</scope>
</dependency>
并在src/main/resources/logback.xml
中,您可以添加appender并使用它:
<appender name="kafkaAppender" class="com.github.danielwegener.logback.kafka.KafkaAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
<topic>logs</topic>
<keyingStrategy class="com.github.danielwegener.logback.kafka.keying.NoKeyKeyingStrategy" />
<deliveryStrategy class="com.github.danielwegener.logback.kafka.delivery.AsynchronousDeliveryStrategy" />
<appender-ref ref="STDOUT" />
</appender>
<root level="info">
<appender-ref ref="kafkaAppender" />
</root>
如果您查看文档,可以使用其他appender。
答案 1 :(得分:0)
更标准的模式只是将您的微服务中的事件直接发送到Kafka。从那里,您可以将其流式传输到Elasticsearch和任意数量的其他目标。写入日志然后从日志中读取是完全多余的。