2. ELK 技术栈回顾:核心组件功能与数据流

ELK 技术栈由 Elasticsearch、Logstash 和 Kibana 三个核心组件构成,是日志检索与准入门禁 Agent 数据流转的基础设施。理解各组件的职责与协作关系,是设计 Agent 通信机制的前提。

2.1 核心组件功能对比

组件 核心功能 在准入门禁场景中的角色
Elasticsearch 分布式搜索与分析引擎,提供近实时索引、检索、聚合能力 存储 Agent 上报的准入日志、设备指纹、策略审计记录;提供快速检索与异常检测
Logstash 服务端数据处理管道,支持多源采集、过滤、转换、输出 接收 Agent 的 JSON/Protobuf 日志,解析字段、清洗数据、补充上下文后写入 ES
Kibana 可视化与管控平台,提供仪表盘、告警、索引管理 展示准入状态仪表盘、配置告警规则、管理 Agent 索引生命周期

2.2 数据流全景

准入门禁场景下的 ELK 数据流遵循“采集 → 传输 → 解析 → 存储 → 检索 → 可视化”的经典路径。Agent 作为数据源端,通过 Logstash 管道将日志送入 Elasticsearch,最终由 Kibana 呈现。

关键数据流路径: Agent 本地日志 → Filebeat/Logstash 采集 → 消息队列(可选) → Logstash 过滤 → Elasticsearch 索引 → Kibana 查询与告警。
ELK 技术栈数据流(准入门禁场景) Agent 日志源 JSON / Protobuf Logstash 采集 / 过滤 / 转换 Elasticsearch 索引 / 存储 / 检索 Kibana 可视化 / 告警 数据流说明 1. Agent 将准入日志(设备指纹、认证结果、策略命中)以 JSON 格式发送至 Logstash。 2. Logstash 通过 input 插件接收数据,filter 插件解析字段、清洗无效记录、补充地理/时间信息。 3. 处理后的结构化数据通过 output 插件写入 Elasticsearch 的指定索引(如 access-audit-YYYY.MM.dd)。 4. Kibana 连接 ES 集群,提供实时仪表盘、历史检索、异常告警及索引生命周期管理。

2.3 Elasticsearch:分布式存储与检索引擎

Elasticsearch 是 ELK 的核心,基于 Lucene 构建,提供近实时的全文搜索与聚合分析能力。在准入门禁场景中,它承担以下职责:

  • 索引管理:按时间滚动创建索引(如 access-audit-2025.04.01),支持 ILM(索引生命周期管理)自动迁移与删除。
  • 文档存储:每条准入记录作为一个 JSON 文档,包含设备 ID、用户、时间戳、准入结果、策略版本等字段。
  • 检索与聚合:支持基于设备、用户、时间范围的快速检索,以及失败率、设备类型分布等聚合统计。
  • 高可用:通过分片与副本机制保证数据可靠性与查询吞吐量。
准入门禁索引设计建议: 使用 access-audit-{year}.{month}.{day} 作为索引命名规范,设置 1 天滚动周期,保留 90 天数据。主分片数建议为节点数的 1–2 倍,副本数 1–2。

2.4 Logstash:数据处理管道

Logstash 作为数据管道,负责从 Agent 接收原始日志,经过解析、过滤、增强后输出到 Elasticsearch。其核心工作流由三个阶段组成:

  1. Input 阶段:通过 beats 或 http 插件接收 Agent 推送的日志数据。
  2. Filter 阶段:使用 grok、mutate、date、geoip 等插件解析字段、清洗数据、补充 IP 地理位置信息。
  3. Output 阶段:将处理后的结构化数据批量写入 Elasticsearch 索引。
# Logstash 准入门禁日志处理配置示例
input {
  beats {
    port => 5044
    codec => "json"
  }
}

filter {
  # 解析设备指纹字段
  json {
    source => "device_fingerprint"
    target => "device"
  }
  # 转换时间戳
  date {
    match => ["timestamp", "ISO8601"]
    target => "@timestamp"
  }
  # 移除原始冗余字段
  mutate {
    remove_field => ["device_fingerprint", "raw_log"]
  }
}

output {
  elasticsearch {
    hosts => ["http://es-cluster:9200"]
    index => "access-audit-%{+YYYY.MM.dd}"
    user => "logstash_writer"
    password => "${ES_PASSWORD}"
  }
}

2.5 Kibana:可视化与管控平台

Kibana 提供面向准入门禁场景的图形化界面,主要功能包括:

  • 仪表盘:展示实时准入成功率、设备类型分布、异常事件趋势。
  • 检索与发现:支持 KQL(Kibana Query Language)快速过滤特定设备或用户的准入记录。
  • 告警规则:基于 ES 查询设置阈值告警,如“连续 5 分钟准入失败率 > 20%”。
  • 索引管理:通过 Stack Management 配置 ILM 策略、查看索引健康状态。

2.6 组件间通信协议

通信链路 协议 端口 说明
Agent → Logstash HTTP / HTTPS 5044 / 8080 Agent 通过 REST API 或 Beats 协议推送日志
Logstash → Elasticsearch HTTP / HTTPS 9200 批量写入索引文档
Kibana → Elasticsearch HTTP / HTTPS 9200 查询与聚合请求
安全注意事项: 生产环境中所有组件间通信必须启用 TLS 加密,Logstash 与 ES 之间使用 Basic Auth 或 认证,避免明文传输敏感日志。

2.7 准入门禁场景数据流示例

以下是一个 Agent 上报准入日志的完整数据流示例,展示从原始日志到 Kibana 可视化的全过程:

# Agent 原始日志(JSON)
{
  "agent_id": "agent-01",
  "device_id": "device-abc-123",
  "user": "zhangsan",
  "action": "access_request",
  "result": "denied",
  "reason": "device_not_trusted",
  "timestamp": "2025-04-01T10:30:00.000Z",
  "device_fingerprint": {
    "os": "Windows 10",
    "browser": "Chrome 120",
    "ip": "192.168.1.100"
  }
}

# Logstash 处理后写入 ES 的文档
{
  "_index": "access-audit-2025.04.01",
  "_source": {
    "@timestamp": "2025-04-01T10:30:00.000Z",
    "agent_id": "agent-01",
    "device_id": "device-abc-123",
    "user": "zhangsan",
    "action": "access_request",
    "result": "denied",
    "reason": "device_not_trusted",
    "device": {
      "os": "Windows 10",
      "browser": "Chrome 120",
      "ip": "192.168.1.100"
    },
    "geoip": {
      "city_name": "Beijing",
      "country_name": "China"
    }
  }
}

通过 Kibana 的 Discover 页面,安全运维人员可以快速检索到该条被拒绝的准入记录,并基于 reason 字段聚合分析“设备不可信”的占比趋势。