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 查询与告警。
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。其核心工作流由三个阶段组成:
- Input 阶段:通过
beats或http插件接收 Agent 推送的日志数据。 - Filter 阶段:使用
grok、mutate、date、geoip等插件解析字段、清洗数据、补充 IP 地理位置信息。 - 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 字段聚合分析“设备不可信”的占比趋势。