面试题答案
一键面试1. 异常日志收集
- Agent 方式:在每个微服务实例中部署轻量级日志收集 Agent,如 Filebeat。它能够以较低的资源消耗监控指定的日志文件目录或文件,一旦有新的异常日志写入,立即捕获并发送。
- 日志输出配置:在 Java 微服务中,通过配置日志框架(如 Logback、Log4j)将异常日志输出到指定的文件,确保日志格式统一,包含时间戳、服务名称、异常类型、异常堆栈信息等关键信息。例如在 Logback 配置文件中:
<appender name="FILE" class="ch.qos.logback.core.FileAppender">
<file>/var/log/my-service/error.log</file>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="error">
<appender-ref ref="FILE" />
</root>
2. 日志传输
- Kafka 等消息队列:Filebeat 收集到异常日志后,将其发送到 Kafka 消息队列。Kafka 具有高吞吐量、低延迟的特点,能够在高并发情况下缓冲日志数据,防止数据丢失。Filebeat 可以通过配置 Kafka 输出插件实现:
output.kafka:
hosts: ["kafka-server:9092"]
topic: "exception-logs"
partition.round_robin:
reachable_only: false
- 负载均衡:如果 Kafka 集群有多台服务器,Filebeat 会通过负载均衡机制将日志均匀地发送到各个 Kafka 节点,提高传输效率。
3. 日志处理与存储
- Logstash:从 Kafka 消费异常日志数据,对其进行处理。Logstash 可以配置过滤器(Filter)对日志进行解析、格式化、添加标签等操作。例如,通过 Grok 过滤器解析日志中的特定字段:
filter {
if [type] == "exception-logs" {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} \[%{DATA:thread}\] %{LOGLEVEL:level} %{DATA:logger} - %{GREEDYDATA:exception_message}" }
}
}
}
处理后的日志发送到 Elasticsearch 进行存储。
- Elasticsearch:作为分布式搜索引擎和数据存储,用于存储处理后的异常日志。它提供了高效的索引和搜索功能,支持对日志数据进行快速检索。可以根据服务名称、时间范围、异常类型等多种维度创建索引,方便后续查询和分析。例如,按天创建索引:
exception-logs-%{+YYYY.MM.dd}
。
4. 日志分析与展示
- Kibana:与 Elasticsearch 集成,提供可视化界面。通过 Kibana 的 Discover 功能,可以自由查询和浏览异常日志,通过时间轴、过滤器等工具进行深入分析。利用 Kibana 的可视化组件,如柱状图、折线图、饼图等,创建仪表盘(Dashboard)来展示异常趋势、不同服务的异常分布等信息,辅助故障排查和性能分析。例如,创建一个柱状图展示每天不同服务的异常数量,以便快速定位异常高发的服务和时间段。