👉 点击关注不迷路 👉 点击关注不迷路 👉 点击关注不迷路
文章大纲 5.1.1 Filebeat + Logstash + ES + Kibana 全链路配置实 1. 架构设计与组件选型 2. Filebeat 高级配置 3. Logstash 数据处理管道 3.1 多阶段处理流程 3.2 `Grok`性能优化表 4. Elasticsearch 索引设计 5. `Kibana` 可视化实战 6. 全链路监控与调优 7. 安全加固方案 8. 实战案例:电商大促日志监控
5.1.1 Filebeat + Logstash + ES + Kibana 全链路配置实
日志处理全链路架构与数据流向示意图
数据采集(Filebeat):Filebeat 作为轻量级的日志采集器,通过安装在各个数据源所在的主机上的 Filebeat 代理来工作
。它会监控指定的日志文件或目录,一旦有新的日志数据产生,就会将其收集起来,并发送给 Logstash
进行进一步处理。数据处理(Logstash)
:Logstash 接收来自 Filebeat 的日志数据,通过配置的过滤器(Filter)对数据进行清洗、解析和转换等操作
。例如,过滤器可以提取日志中的关键信息(如时间戳、日志级别、消息内容等),并将其转换为结构化的数据格式。数据存储(Elasticsearch)
:Elasticsearch 是一个分布式的搜索引擎和数据存储系统
,它接收来自 Logstash 的结构化日志数据,并将其存储在索引中。数据可视化(Kibana)
:Kibana 是 Elastic 生态系统中的数据可视化工具,它连接到 Elasticsearch 集群,从存储的日志数据中提取信息,并以各种可视化的方式展示出来,如柱状图、折线图、饼图、仪表盘等
。用户可以通过 Kibana 对日志数据进行交互式分析,快速发现问题、趋势和模式
。
数据可视化
数据存储
数据处理
数据采集
数据源
Kibana 仪表盘
Kibana
Elasticsearch 集群
Elasticsearch
Logstash 过滤器
Logstash 转换器
Logstash
Filebeat 代理
Filebeat
系统日志文件
应用程序日志
网络设备日志
数据源
1. 架构设计与组件选型
1.1 技术栈对比分析
EPS
,代表着 Elasticsearch 集群每秒能够处理的事件数量。20000 EPS
意味着系统具有强大的并发处理能力,能够在每秒内接收、解析、索引和存储
大量的事件数据,展示了系统应对高流量数据输入的潜力
。QPS
,每秒查询率(Queries Per Second
)。
组件 推荐版本 核心功能 性能基准(单节点) Filebeat
8.12.2 轻量级日志采集 20,000 EPS
(事件/秒) Logstash
8.12.1 数据清洗与富化 15,000 EPS
(含复杂处理) Elasticsearch
8.12.0 分布式存储与检索 50,000 写入QPS
Kibana
8.12.0 可视化与分析 支持100并发查询
1.2 硬件配置推荐
节点类型 CPU 内存 存储 网络 数量 Filebeat
4核 8GB 100GB SSD 1Gbps 按需 Logstash
16核 32GB 500GB NVMe(临时存储) 10Gbps 3 Elasticsearch
32核 128GB 4TB NVMe x3(RAID0) 25Gbps 5 Kibana
8核 16GB 200GB SSD 1Gbps 2
2. Filebeat 高级配置
2.1 多输入源配置
filebeat.inputs:- type: filestreamid: nginx-accesspaths:- /var/log/nginx/access.log*fields:log_type: "nginx_access" parsers:- ndjson: ~- type: containerid: docker-logspaths:- '/var/lib/docker/containers/*/*.log' processors:- add_docker_metadata: ~- type: syslogprotocol.udp:host: "0.0.0.0:5140" tags: [ "syslog" ]
2.2 性能优化参数
queue.mem : events : 4096 flush.min_events : 1024 flush.timeout : 5s
output.logstash : hosts : [ "logstash-prod:5044" ] worker : 8 compression_level : 3 loadbalance : true
logging.level : warning
3. Logstash 数据处理管道
3.1 多阶段处理流程
input { beats { port => 5044 ssl => true ssl_certificate => "/etc/pki/tls/certs/logstash.crt" ssl_key => "/etc/pki/tls/private/logstash.key" }
}
filter { if [ fields] [ log_type] == "nginx_access" { grok { match => { "message" => '%{IPORHOST:clientip} %{USER:ident} %{USER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{DATA:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} %{NUMBER:bytes} "%{DATA:referrer}" "%{DATA:useragent}"' } } date { match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ] } useragent { source => "useragent" target => "ua" } } mutate { convert => { "response" => "integer" "bytes" => "integer" } remove_field => [ "message" ] }
}
output { elasticsearch { hosts => [ "es - node1:9200" , "es - node2:9200" ] index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}" template => "/etc/logstash/templates/nginx - template.json" template_name => "nginx - access" ilm_enabled => true } stdout { codec => rubydebug { metadata => true } }
}
3.2 Grok
性能优化表
Grok
是一个非常实用的工具,通常结合 Logstash
一起使用,用于解析非结构化的日志数据并将其转换为结构化的数据,以便于在 Elasticsearch 中进行索引、搜索和分析。 是一种基于正则表达式的模式匹配语言。 常用预定义模式 %{IPORHOST}
:用于匹配 IP 地址或主机名。%{USER}
:匹配用户名。%{HTTPDATE}
:匹配 HTTP 日期格式,如 01/Jan/2024:12:00:00 +0800。%{WORD}
:匹配一个单词。%{NUMBER}
:匹配一个数字。
模式复杂度
原始性能(事件/秒) 优化策略
优化后性能
提升幅度 简单模式 12,000 预编译正则表达式 15,000 25%↑ 中等模式 8,500 使用Oniguruma
引擎 11,200 32%↑ 复杂模式 3,200 模式分解+条件判断 5,800 81%↑
4. Elasticsearch 索引设计
4.1 ILM生命周期策略
PUT _ilm/ policy/ logs- policy
{ "policy" : { "phases" : { "hot" : { "actions" : { "rollover" : { "max_size" : "50gb" , "max_age" : "7d" } , "set_priority" : { "priority" : 100 } } } , "warm" : { "min_age" : "7d" , "actions" : { "forcemerge" : { "max_num_segments" : 1 } , "shrink" : { "number_of_shards" : 1 } } } , "delete" : { "min_age" : "30d" , "actions" : { "delete" : { } } } } }
}
4.2 索引模板配置
PUT _index_template/ logs- template
{ "index_patterns" : [ "logs-*" ] , "template" : { "settings" : { "number_of_shards" : 3 , "number_of_replicas" : 1 , "index.lifecycle.name" : "logs-policy" , "index.codec" : "best_compression" } , "mappings" : { "dynamic" : "strict" , "properties" : { "@timestamp" : { "type" : "date" } , "message" : { "type" : "text" } , "response" : { "type" : "integer" } , "geoip" : { "type" : "object" , "properties" : { "location" : { "type" : "geo_point" } } } } } }
}
5. Kibana
可视化实战
5.1 仪表板配置要点
POST / api/ saved_objects/ dashboard
{ "attributes" : { "title" : "Nginx访问监控" , "description" : "实时流量分析仪表板" , "panelsJSON" : [ { "type" : "timeseries" , "title" : "请求量趋势" , "params" : { "index" : "logs-nginx-*" , "time_field" : "@timestamp" , "interval" : "1h" , "series" : [ { "name" : "总请求量" , "aggregation" : "count" } ] } } , { "type" : "pie" , "title" : "HTTP状态码分布" , "params" : { "index" : "logs-nginx-*" , "split_mode" : "terms" , "terms_field" : "response" , "size" : 5 } } ] }
}
5.2 关键可视化类型对比
图表类型 适用场景
性能影响 数据精度 交互性 时间序列图 流量趋势分析 低 高 强 热力图 异常检测 中 中 中 地理地图
IP分布分析
高 高 弱 数据表 原始日志查看 低 最高 弱
6. 全链路监控与调优
6.1 性能监控指标
组件 关键指标
健康阈值 告警阈值
监控工具 Filebeat Harvester活跃数 < 1000 > 2000 Metricbeat Logstash Pipeline延迟 < 500ms > 2s Prometheus Elasticsearch 索引延迟 < 1s > 5s Elastic监控 Kibana 查询响应时间 < 3s > 10s APM
Harvester
是 Filebeat 中负责实际读取文件内容的核心组件 Harvester 是 Filebeat 里的一个文件读取器,当 Filebeat 监测到有符合采集规则的文件时,会为每个文件启动一个 Harvester 实例。 它的主要任务是逐行读取文件内容,将读取到的行封装成事件,然后发送给 Filebeat 的 spooler 进行后续处理。 APM(Application Performance Monitoring)
用于对应用程序的性能进行监控和分析。 功能特点: 性能指标监控、分布式追踪、错误分析、用户体验监控。
6.2 典型瓶颈解决方案
7. 安全加固方案
7.1 传输层加密配置
output.logstash : hosts : [ "logstash:5044" ] ssl : enabled : true certificate_authorities : [ "/etc/pki/ca.crt" ] certificate : "/etc/pki/client.crt" key : "/etc/pki/client.key"
xpack.security.transport.ssl : enabled : true verification_mode : certificatekeystore.path : certs/elastic- certificates.p12truststore.path : certs/elastic- certificates.p12
7.2 权限控制矩阵
角色 数据访问范围 操作权限
适用场景 log_viewer logs-* read, view_index_metadata 普通运维人员 log_admin logs-* manage, create_index 系统管理员 alert_manager .kibana-event-log-* read, index 监控告警系统 report_user
特定索引模式 read 审计与报表生成
8. 实战案例:电商大促日志监控
8.1 场景参数
{ "业务场景" : "双11大促监控" , "日志规模" : { "峰值QPS" : "120,000 EPS" , "单日数据量" : "8TB" , "保留周期" : "30天" } , "架构特性" : [ "自动扩缩容" , "多级缓存" , "实时异常检测" ]
}
8.2 性能测试结果
测试阶段 写入延迟(p95)
查询响应时间 系统可用性 预热阶段 23ms 280ms 100% 峰值压力 89ms 1.2s 99.98% 故障恢复 自动切换5.8s - 99.95%
p95
P95 指的是第 95 百分位数
。它是一种统计指标,将一组数据从小到大排序后,处于第 95% 位置的值就是 P95。例如,有 100 个数据,将它们按从小到大排列,第 95 个数据的值就是 P95。在性能测试和数据分析中,P95 常用于衡量数据的分布和性能表现
。
附录:常用诊断命令速查表
功能 Filebeat命令 ES API端点 查看采集状态 filebeat test output
GET _cat/indices?v
检查管道状态 journalctl -u filebeat
GET _nodes/stats/ingest
监控队列积压 filebeat -e -d "*"
GET _cat/thread_pool?v
验证配置语法 filebeat test config
GET _cluster/pending_tasks
最佳实践建议 :
建议采用「先索引模板后数据写入
」的流程 日志类数据优先使用时间序列索引模式
定期执行_forcemerge
优化存储空间 重要操作需通过变更管理系统审批