ELK Stack(Elasticsearch、Logstash、Kibana)的日志采集流程以轻量级采集器+灵活传输+结构化处理为核心,主要通过Beats组件(如Filebeat)完成日志收集,再结合Logstash、Kafka等工具实现数据传输与预处理。以下是具体的日志采集方法:
适用场景:小型环境或对实时性要求高的简单日志采集(如应用服务器本地日志)。
核心组件:Filebeat(轻量级日志采集器)+ Elasticsearch(存储与索引)。
流程:Filebeat安装在日志源服务器上,监控指定日志文件(如/var/log/nginx/access.log),实时读取新增日志行,并通过HTTP API直接发送到Elasticsearch集群。
配置示例(filebeat.yml):
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/nginx/access.log
output.elasticsearch:
hosts: ["localhost:9200"]
index: "nginx-access-%{+yyyy.MM.dd}"
特点:部署简单、资源占用低,无需中间组件,适合日志量较小的场景。
适用场景:需要数据清洗、结构化处理的中大型环境(如混合日志格式、含敏感信息的日志)。
核心组件:Filebeat(采集)+ Logstash(处理)+ Elasticsearch(存储)+ Kibana(可视化)。
流程:Filebeat收集日志后,发送到Logstash,Logstash通过Input插件(如beats)接收数据,再用Filter插件(如grok解析非结构化日志、date格式化时间戳、geoip丰富IP地理位置)处理数据,最后通过Output插件写入Elasticsearch。
配置示例(Logstash的logstash.conf):
input {
beats {
port => 5044
}
}
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" } # 解析Apache/Nginx通用日志格式
}
date {
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
target => "@timestamp"
}
geoip {
source => "clientip"
target => "geo"
}
}
output {
elasticsearch {
hosts => ["elasticsearch:9200"]
index => "nginx-access-%{+yyyy.MM.dd}"
}
}
特点:Logstash的灵活性强,能处理复杂日志格式,是ELK生态中最经典的采集流程。
适用场景:高吞吐量、分布式系统(如电商大促期间海量日志),避免Logstash成为性能瓶颈。
核心组件:Filebeat(采集)+ Kafka(消息队列)+ Logstash(处理)+ Elasticsearch(存储)。
流程:Filebeat将日志发送到Kafka集群(作为缓冲层),Logstash从Kafka消费日志并进行处理,最后写入Elasticsearch。Kafka的分区、副本机制能保证日志不丢失,同时提升系统扩展性。
特点:解耦了日志采集与处理环节,提高系统可靠性,适合大规模日志场景。
适用场景:直接采集非文件日志源(如TCP/UDP流、数据库binlog、API接口数据),或无法使用Filebeat的环境。
核心组件:Logstash(采集+处理)+ Elasticsearch(存储)。
流程:Logstash通过Input插件(如tcp、udp、jdbc、http_poller)直接读取日志源数据,经Filter插件处理后写入Elasticsearch。
配置示例(采集TCP日志):
input {
tcp {
port => 514
codec => json_lines # 假设日志以JSON格式传输
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "tcp-logs-%{+yyyy.MM.dd}"
}
}
特点:灵活适配多种数据源,但需手动管理连接与资源,适合定制化采集需求。
适用场景:容器化环境(如Kubernetes集群),采集Pod、Node、Events等日志。
核心组件:Filebeat(以DaemonSet形式部署)+ Elasticsearch/Kibana。
流程:通过DaemonSet在每个Node上运行一个Filebeat Pod,监控Node上的容器日志目录(如/var/log/containers/*.log),自动收集Pod日志,并添加容器元数据(如Pod名称、命名空间、容器ID)作为索引字段,方便后续查询。
配置示例(filebeat-kubernetes.yaml片段):
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_kubernetes_metadata: ~ # 自动添加Kubernetes元数据
output.elasticsearch:
hosts: ["elasticsearch:9200"]
特点:自动适配Kubernetes环境,支持日志标签、命名空间过滤,是云原生日志采集的主流方案。
以上方法覆盖了ELK Stack日志采集的常见场景,可根据日志量、实时性要求、环境复杂度选择合适的方案。例如,小型环境用“Filebeat直接采集”,中大型环境用“Filebeat+Logstash”,高吞吐量场景用“Filebeat+Kafka+Logstash”,容器化环境用“Kubernetes DaemonSet+Filebeat”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。