
1) 【一句话结论】采用分层架构设计高可用日志系统,通过分布式采集(多源接入+TLS加密)、多副本存储(ES索引不可修改+Kafka commit log持久化+HDFS/S3冗余)、实时查询(ES全文检索)与分级归档(合规周期驱动),保障审计不可篡改与故障快速排查,满足证券交易系统合规与可靠性需求。
2) 【原理/概念讲解】老师可以解释,证券交易系统的日志是“金融黑匣子”,核心要求是不可篡改(审计链路可追溯)、加密(数据传输与存储安全)。系统分四层:
3) 【对比与适用场景】
| 组件 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| Elasticsearch | 分布式搜索引擎 | 索引不可修改(创建后不可更新)、全文检索、高并发查询 | 实时审计、故障快速定位 | 索引扩容需停机,冷数据查询性能低 |
| Kafka | 分布式消息队列 | 持久化写入(commit log)、高吞吐、多消费者 | 日志缓冲、数据流处理 | 需消费端处理,查询需额外解析 |
| HDFS | 分布式文件系统 | 海量存储、多副本冗余、高容错 | 长期归档、备份 | 读写延迟较高,适合批量处理 |
| S3 | 对象存储 | 弹性扩展、多区域冗余 | 冷数据长期存储 | 存储成本高,适合非频繁访问 |
4) 【示例】
<source>
@type tail
path /var/log/transactions/*.log
pos_file /var/log/transactions/pos.log
read_from_head true
tag k8s.ingest
</source>
<match k8s.ingest>
@type elasticsearch
hosts http://elasticsearch:9200
index_name logs-%{+YYYY.MM}
type transaction
# TLS加密传输
ssl.enabled true
ssl.certificate /etc/fluentd/certs/fluentd.crt
ssl.key /etc/fluentd/certs/fluentd.key
</match>
GET /logs-2024.05/_search
{
"query": {
"bool": {
"must": [
{ "range": { "@timestamp": { "gte": "now-1h" } } },
{ "match": { "status": "failed" } }
]
}
}
}
def archive_logs():
# 每天凌晨0点
for index in get_es_indices():
if index.endswith('2024.05'):
# 转存至HDFS,动态调整副本数(如初始3副本,满载后增加至5)
hdfs_client.copy_from_local(f'/data/es/{index}', f'/hdfs/logs/{index}')
hdfs_client.set_replication(f'/hdfs/logs/{index}', 5) # 动态扩容
# 删除ES索引
es_client.delete_index(index)
# 30天后转存至S3,批量上传优化
if is_older_than_30_days(index):
s3_client.upload_folder(f'/hdfs/logs/{index}', f's3://logs-archive/{index}', batch_size=100) # 批量上传
hdfs_client.delete_folder(f'/hdfs/logs/{index}')
5) 【面试口播版答案】
面试官您好,针对证券交易系统的日志系统设计,我的核心思路是构建分层、高可用的架构,覆盖采集、存储、查询、归档全流程,重点满足审计不可篡改与合规存储需求。首先,采集层采用Fluentd等工具,多源接入交易服务器、数据库等,通过TLS加密传输日志,确保数据传输安全;存储层分实时与归档:实时用Elasticsearch+Kafka,ES部署3节点主从复制,Kafka设置3分区+2副本,保证高可用;归档用HDFS(多副本)+S3(多区域),满足长期存储。查询基于ES的API,支持复杂查询(如按交易ID、时间筛选),延迟低;归档按监管要求(如30年周期)分级,热数据ES保留7天,冷数据转HDFS(30天)再转S3(长期),定期清理。这样能确保审计链路不可篡改,故障排查快速响应,同时符合证券合规要求。
6) 【追问清单】
7) 【常见坑/雷区】