集中式日志分析平台 - ELK Stack - 基于 Type 的多日志分离写入 ES

前言

前文解决了链路的基本部署和配置调整,见专题 集中式日志分析平台 - ELK Stack。在实际的生产过程中,我们需要把多个不同来源的日志按照不同的 index 写入 ES,这样方便针对不同的数据进行汇总分析。本文介绍如何根据 type 和 document_type 进行日志分离,达到我们所期望的效果,整个配置步骤我们是从数据流的产生到传输到落地这个角度去阐述。

本文针对的是整合了 Kafka 作为缓冲消息队列的架构:

filebeat -> kafka -> logstash -> elasticsearch -> kibana

Filebeat 端配置

Filebeat 官方文档中描述了一个配置,可以对数据流按照 input_type 级别的打标,通过 document_type 关键字申明:

filebeat.prospectors:
- input_type: log
  paths:
    - /home/admin/soft/filebeat-5.2.1-linux-x86_64/logs/filebeat
  document_type: fb_log
- input_type: log
  paths:
    - /home/admin/soft/elasticsearch-5.2.1/logs/elasticsearch.log
  document_type: es_log

比如上面的配置表述,prospectors 具有 2 个采集输入,分别是采集 filebeat 日志和 elasticsearch 日志,filebeat 日志打标为 fb_log,elasticsearch 日志打标为 es_log。

然后,我们的输出是 kafka,我们可以通过宏去通配推送数据到不同的 kafka topic :

output.kafka:
  hosts: ["172.16.134.3:9092"]
  topic: '%{[type]}'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000

这样配置,我们的 filebeat 日志和 elasticsearch 日志会推送到不同的 kafka topic,分别是 fb_log 和 es_log,配置完成后记得重启。

Logstash 端配置

和 filebeat 对应的, logstash 的 input / filter / output 配置段,也有类似的打标方式:

input {
  kafka {
    bootstrap_servers => "${BOOTSTRAP_SERVERS}"
    consumer_threads => 3
    topics => "fb_log"
    type => "fb_log"
  }
  kafka {
    bootstrap_servers => "${BOOTSTRAP_SERVERS}"
    consumer_threads => 3
    topics => "es_log"
    type => "es_log"
  }
}

output {
  if [type] == "fb_log" {
    elasticsearch {
      hosts => "${HOSTS}"
      manage_template => false
      index => "fb_log-%{+YYYY.MM.dd}"
      document_type => "fb_log"
    }
  }
  if [type] == "es_log" {
    elasticsearch {
      hosts => "${HOSTS}"
      manage_template => false
      index => "es_log-%{+YYYY.MM.dd}"
      document_type => "es_log"
    }
  }
}

配置完成后重启。

和之前的文档类似,我们在 Kibana Discover 中,需要添加剥离后的 Index,比如按照 fb_log-* 去搜索。

小结

本文简述了,在 ELK 生产环境中,如何进行按照日志来源区别的 ES index 配置。

你可能感兴趣的:(集中式日志分析平台 - ELK Stack - 基于 Type 的多日志分离写入 ES)