
1) 【一句话结论】
采用“采集-传输-存储-处理-查询”分布式架构,通过Kafka高吞吐传输、Elasticsearch+MinIO冷热分离存储、Flink/Spark处理,结合多副本、负载均衡及自动故障转移,保障系统高可用,满足360云安全海量日志的低延迟处理与持久化存储需求。
2) 【原理/概念讲解】
老师口吻解释各组件逻辑:
timestamp、source、level、message),解决不同源格式不一致问题,确保数据质量。类比“数据清洗工”,统一格式后数据更易处理。3) 【对比与适用场景】
存储技术对比(ES vs MinIO):
| 技术名称 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Elasticsearch | 分布式搜索引擎 | 写入延迟较高(秒级),支持实时查询、多维度聚合 | 热数据(近7天),实时查询需求高 | 副本数不足会导致数据丢失 |
| MinIO | 分布式对象存储 | 写入延迟低(毫秒级),支持无限扩展 | 冷数据(7天以上),归档存储 | 查询需通过ES索引,冷数据访问延迟较高 |
冷热分离时间阈值设定依据:结合查询频率(冷数据查询频率低,约每天10次)和存储成本(MinIO成本为ES的1/10),分析7天阈值是否合理:若缩短为3天,冷数据量减少,但存储成本降低,但查询频率不变,可能不划算;若延长至14天,存储成本增加,但查询频率不变,影响成本。最终设定7天为平衡点,可根据实际查询频率动态调整(如查询频率增加,可延长阈值)。
4) 【示例】
{"timestamp":"2024-01-01T12:00:00","source":"web_server","level":"error","message":"500 internal server error"})通过Agent发送到Kafka,先经过Logstash处理,转换为统一JSON格式。from pyflink.common import KeyedDeserializationSchema
from pyflink.datastream import StreamExecutionEnvironment
from pyflink.table import StreamTableEnvironment, Table, Functions
env = StreamExecutionEnvironment.get_execution_environment()
env.set_parallelism(4) # 集群并行度
t_env = StreamTableEnvironment.create(env)
# 读取Kafka数据
kafka_source = env.add_source(
"KafkaSource",
"kafka:9092:server_logs",
KeyedDeserializationSchema(
lambda record: (record["source"], record),
lambda key, value: value
)
)
# 转换为Table
t_env.from_data_stream(kafka_source).to_table(
t_env, 'logs_table'
)
# SQL处理
t_env.execute_sql("""
SELECT
source,
COUNT(*) AS fail_count,
MAX(timestamp) AS last_fail_time
FROM logs_table
WHERE level = 'error' AND message LIKE '%login failed%'
GROUP BY source
HAVING fail_count > 5 AND DATEDIFF(last_fail_time, CURRENT_TIMESTAMP) < 5
OUTPUT PROJECTION
""")
5) 【面试口播版答案】
面试官您好,我来设计一个高可用日志分析系统。核心是构建“采集-传输-存储-处理-查询”的分布式架构。首先,日志采集端通过Agent采集日志,先经过Logstash标准化格式(如统一为JSON),解决不同源格式不一致问题。然后,通过Kafka(多副本部署)传输数据,分区数根据日志速率(如每秒1157条)和分区处理能力(1万条/秒)计算,确保高吞吐。存储层采用Elasticsearch(热数据,近7天,实时查询)与MinIO(冷数据,7天以上归档),实现冷热分离,平衡性能与成本。处理层用Flink实时处理攻击日志(如异常行为检测,低延迟告警),Spark批处理历史数据。高可用保障包括:Kafka多副本+负载均衡,ES主从复制,处理层集群故障自动切换(如Flink检查点恢复任务)。这样既能处理海量日志,又能保证系统稳定,满足360云安全对日志分析的需求。
6) 【追问清单】
timestamp、source、level等),避免ES解析失败或查询错误。7) 【常见坑/雷区】