19.6.1 日志平台架构与技术选型
日志平台架构与技术选型#
日志平台目标:全量采集、可靠传输、可扩展存储、快速检索、合规审计。以下内容聚焦架构原则、技术选型、安装与演示、排错与练习。
架构原理草图(标准分层)#
典型选型矩阵(示例)#
- 轻量化:Filebeat + Elasticsearch + Kibana
- 中大型:Fluent Bit/Logstash + Kafka + Elasticsearch + Kibana
- 云原生高性价比:Fluent Bit/Vector + Kafka + Loki + Grafana
- 高合规审计:采集器 + Kafka + 索引引擎 + 对象存储归档 + 审计检索
示例一:Filebeat → Elasticsearch → Kibana(单机小型方案)#
1) 安装与启动(CentOS/RHEL)#
# 安装 Elasticsearch
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
cat <<'EOF' | sudo tee /etc/yum.repos.d/elasticsearch.repo
[elasticsearch]
name=Elasticsearch repository
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
EOF
sudo yum -y install elasticsearch
sudo systemctl enable --now elasticsearch
# 安装 Kibana
sudo yum -y install kibana
sudo systemctl enable --now kibana
# 安装 Filebeat
sudo yum -y install filebeat
sudo systemctl enable --now filebeat
2) Filebeat 配置(采集系统日志)#
路径:/etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/messages
fields:
app: system
fields_under_root: true
output.elasticsearch:
hosts: ["http://127.0.0.1:9200"]
index: "syslog-%{+yyyy.MM.dd}"
setup.kibana:
host: "http://127.0.0.1:5601"
3) 启动与验证#
sudo systemctl restart filebeat
curl -s http://127.0.0.1:9200/_cat/indices?v | grep syslog
预期:出现 syslog-YYYY.MM.DD 索引。
4) 常见排错#
# 1) Filebeat 发送失败查看日志
sudo journalctl -u filebeat -n 100 --no-pager
# 2) Elasticsearch 服务状态
curl -s http://127.0.0.1:9200
# 3) 索引未写入:检查 filebeat 采集路径是否存在
ls -l /var/log/messages
示例二:Fluent Bit → Kafka → Elasticsearch(中大型方案)#
1) 安装 Kafka(单机演示)#
# 需要 Java 11+
sudo yum -y install java-11-openjdk
# 下载并解压 Kafka
curl -LO https://downloads.apache.org/kafka/3.6.0/kafka_2.13-3.6.0.tgz
tar -xzf kafka_2.13-3.6.0.tgz
cd kafka_2.13-3.6.0
# 启动 Zookeeper 与 Kafka(演示环境)
bin/zookeeper-server-start.sh -daemon config/zookeeper.properties
bin/kafka-server-start.sh -daemon config/server.properties
# 创建 Topic
bin/kafka-topics.sh --create --topic log-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
2) Fluent Bit 安装与配置#
sudo yum -y install fluent-bit
# /etc/fluent-bit/fluent-bit.conf
cat <<'EOF' | sudo tee /etc/fluent-bit/fluent-bit.conf
[SERVICE]
Flush 1
Daemon Off
Log_Level info
[INPUT]
Name tail
Path /var/log/messages
Tag syslog
[OUTPUT]
Name kafka
Match syslog
Brokers localhost:9092
Topics log-topic
EOF
sudo systemctl enable --now fluent-bit
3) Logstash 消费 Kafka 并写入 ES(示意)#
# /etc/logstash/conf.d/kafka-es.conf
cat <<'EOF' | sudo tee /etc/logstash/conf.d/kafka-es.conf
input {
kafka {
bootstrap_servers => "localhost:9092"
topics => ["log-topic"]
}
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "kafka-syslog-%{+YYYY.MM.dd}"
}
}
EOF
4) 排错要点#
# Kafka Topic 有无消息
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic log-topic --from-beginning --timeout-ms 5000
# Fluent Bit 输出失败查看
sudo journalctl -u fluent-bit -n 100 --no-pager
# Logstash 是否运行
sudo systemctl status logstash
技术选型关键命令与解释(评估与基准)#
# Elasticsearch 写入吞吐与集群健康
curl -s http://127.0.0.1:9200/_cluster/health?pretty
curl -s http://127.0.0.1:9200/_cat/nodes?v
# 索引膨胀率观测
curl -s http://127.0.0.1:9200/_cat/indices?v | awk '{print $3,$7}'
_cluster/health:查看集群健康、节点数与状态_cat/indices:查看索引大小与文档数量
选型与规模评估实践(简表)#
- EPS 1万以内:Filebeat/Vector + ES
- EPS 1万~10万:Fluent Bit + Kafka + ES
- EPS >10万:Kafka 分区扩展 + ES 热/冷分层
- 标签检索为主:Loki + Grafana
练习#
- 在测试机采集
/var/log/messages,写入到syslog-YYYY.MM.dd索引,验证 Kibana 中可检索。 - 将 Filebeat 输出从 ES 切换到 Kafka,并用 Logstash 消费写入 ES。
- 调整 Kafka 分区数(3→6),观察消费延迟变化。
常见故障速查(高频)#
- 索引未生成:检查采集路径、Filebeat 输出地址、ES 是否健康
- 消息堆积:查看 Kafka Topic lag、消费端吞吐
- 查询慢:优化索引模板、冷热分层、减少字段
- 日志丢失:确认采集器重试/缓冲、Kafka 磁盘健康
小结#
日志平台选型需兼顾规模、合规、成本与团队运维能力。建议从轻量方案起步,结合 EPS 与检索需求逐步演进到 Kafka 解耦与冷热分层架构。