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

练习#

  1. 在测试机采集 /var/log/messages,写入到 syslog-YYYY.MM.dd 索引,验证 Kibana 中可检索。
  2. 将 Filebeat 输出从 ES 切换到 Kafka,并用 Logstash 消费写入 ES。
  3. 调整 Kafka 分区数(3→6),观察消费延迟变化。

常见故障速查(高频)#

  • 索引未生成:检查采集路径、Filebeat 输出地址、ES 是否健康
  • 消息堆积:查看 Kafka Topic lag、消费端吞吐
  • 查询慢:优化索引模板、冷热分层、减少字段
  • 日志丢失:确认采集器重试/缓冲、Kafka 磁盘健康

小结#

日志平台选型需兼顾规模、合规、成本与团队运维能力。建议从轻量方案起步,结合 EPS 与检索需求逐步演进到 Kafka 解耦与冷热分层架构。