温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ELK Stack日志采集有哪些方法

发布时间:2025-10-13 18:12:46 来源:亿速云 阅读:129 作者:小樊 栏目:系统运维

ELK Stack日志采集的主要方法及工具

ELK Stack(Elasticsearch、Logstash、Kibana)的日志采集流程以轻量级采集器+灵活传输+结构化处理为核心,主要通过Beats组件(如Filebeat)完成日志收集,再结合Logstash、Kafka等工具实现数据传输与预处理。以下是具体的日志采集方法:

1. Filebeat直接采集到Elasticsearch

适用场景:小型环境或对实时性要求高的简单日志采集(如应用服务器本地日志)。
核心组件: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}"

特点:部署简单、资源占用低,无需中间组件,适合日志量较小的场景。

2. Filebeat + Logstash采集(最常见架构)

适用场景:需要数据清洗、结构化处理的中大型环境(如混合日志格式、含敏感信息的日志)。
核心组件: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生态中最经典的采集流程。

3. Filebeat + Kafka + Logstash采集(解耦架构)

适用场景高吞吐量、分布式系统(如电商大促期间海量日志),避免Logstash成为性能瓶颈。
核心组件:Filebeat(采集)+ Kafka(消息队列)+ Logstash(处理)+ Elasticsearch(存储)。
流程:Filebeat将日志发送到Kafka集群(作为缓冲层),Logstash从Kafka消费日志并进行处理,最后写入Elasticsearch。Kafka的分区、副本机制能保证日志不丢失,同时提升系统扩展性。
特点:解耦了日志采集与处理环节,提高系统可靠性,适合大规模日志场景。

4. Logstash独立采集(非Beats场景)

适用场景直接采集非文件日志源(如TCP/UDP流、数据库binlog、API接口数据),或无法使用Filebeat的环境。
核心组件:Logstash(采集+处理)+ Elasticsearch(存储)。
流程:Logstash通过Input插件(如tcpudpjdbchttp_poller)直接读取日志源数据,经Filter插件处理后写入Elasticsearch。
配置示例(采集TCP日志):

input {
  tcp {
    port => 514
    codec => json_lines  # 假设日志以JSON格式传输
  }
}
output {
  elasticsearch {
    hosts => ["localhost:9200"]
    index => "tcp-logs-%{+yyyy.MM.dd}"
  }
}

特点:灵活适配多种数据源,但需手动管理连接与资源,适合定制化采集需求。

5. Kubernetes环境中的Filebeat采集

适用场景容器化环境(如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”。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI