Filebeat ➕ Logstash 将日志文件输出到 Elasticsearch 或 Amazon S3

filebeat是什么

Filebeat 是一个开源的轻量级日志数据收集器,由 Elastic
公司开发。它主要用于实时收集、解析和传输日志数据,将日志数据从不同的源头(如文件、日志文件、系统日志等)传输到目标位置(如
Elasticsearch、Logstash 等),以便进行存储、分析和监控。

Filebeat 的主要特点包括:

  • 轻量级:Filebeat 非常轻量,占用系统资源少,适合在资源有限的环境中运行。
  • 实时性:Filebeat 可以实时监控日志文件的变化,一旦有新的日志产生,就会立即收集和传输。
  • 多源头支持:Filebeat 支持从多种来源收集数据,包括文件、日志文件、系统日志、网络流量等。
  • 数据解析:Filebeat 可以解析日志数据,支持多种输入格式,如 JSON、CSV 等,还可以根据需要添加标签、字段等。
  • 灵活配置:Filebeat 的配置灵活,可以根据需求配置多个输入、多个输出,还可以使用模块来简化特定类型数据的收集和处理。
  • 安全性:Filebeat 支持数据的加密传输,可以确保数据在传输过程中的安全性。
  • 集成性:Filebeat 可以和 Elasticsearch、Logstash、Kibana 等 Elastic Stack
    组件集成,方便进行数据的存储、分析和展示。

总之,Filebeat 是一个非常有用的工具,适用于从各种不同来源收集和传输日志数据,帮助用户更好地进行日志管理、监控和分析。

每一台生产日志数据的服务器都需要安装Filebeat

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/tsp-server/tsp-iot.log
  json.keys_under_root: true
  fields:
    index: 'iot_data_log'
- type: log
  enabled: true
  paths:
    - /var/log/aws-files/log/*/*.log
  fields:
    index: 'aws_s3'
- type: log
  enabled: true
  paths:
    - /var/log/tsp-server/tsp-data-statistics-device.log
  json.keys_under_root: true
  fields:
    index: 'data_statistics_device_log'
- type: log
  enabled: true
  paths:
    - /var/log/tsp-server/tsp-data-statistics-consumer.log
  json.keys_under_root: true
  fields:
    index: 'data_statistics_consumer_log'
- type: log
  enabled: true
  paths:
    - /var/log/tsp-server/tsp-data-statistics-warning.log
  json.keys_under_root: true
  fields:
    index: 'data_statistics_warning_log'
- type: log
  enabled: true
  paths:
    - /var/log/tsp-server/tsp-data-statistics-message.log
  json.keys_under_root: true
  fields:
    index: 'data_statistics_message_log'

#filebeat.config.modules:
#  path: ${path.config}/modules.d/*.yml
#  reload.enabled: false
#setup.template.settings:
#  index.number_of_shards: 5
#setup.kibana:

output.logstash:
  hosts: ["172.31.37.123:5044"]
  loadbalance: false

#processors:
#  - drop_fields:
#      fields: ["log","input","host","agent","ecs"]

logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat.log
  keepfiles: 7
  permissions: 0644                                

这个配置文件指定了多个输入路径,每个输入路径都对应一个不同类型的日志。例如,第一个输入路径 /var/log/tsp-server/tsp-iot.log 表示从这个日志文件收集日志,并将其解析为 JSON 格式,然后添加一个字段 index,值为 ‘iot_data_log’。类似地,其他输入路径也有类似的配置。

最后,配置文件中的 output.logstash 部分指定了输出目标为 Logstash 服务器,主机地址为
172.31.37.123,端口为 5044。

这个配置文件的作用是,根据不同的输入路径和类型的日志,Filebeat 将日志数据收集并发送到 Logstash 进行进一步的处理和分发。

Logstash是什么

Logstash 是一个开源的数据收集、处理和传输工具,由 Elastic
公司开发。它主要用于从不同的数据源(如日志文件、数据库、消息队列等)收集数据,然后进行处理、转换和传输到目标位置(如
Elasticsearch、其他存储系统等),以便进行存储、分析和可视化

Logstash 的主要特点包括:

  • 多数据源支持:Logstash 支持从多种数据源收集数据,包括文件、日志文件、数据库、消息队列、网络流量等。
  • 数据处理:Logstash 提供强大的数据处理能力,可以对数据进行过滤、解析、转换和丰富,使数据更具有结构和可用性。
  • 插件系统:Logstash 支持丰富的插件系统,用户可以根据需要添加不同类型的输入、过滤器和输出插件,以适应不同的数据源和目标。
  • 灵活配置:Logstash 的配置文件使用简单的配置语言,可以灵活地定义数据流的输入、过程和输出。
  • 实时性:Logstash 可以实时监控数据源的变化,一旦有新的数据产生,就会立即进行处理和传输。
  • 数据传输:Logstash 可以将处理后的数据传输到多种目标,包括 Elasticsearch、其他存储系统、消息队列等。
  • 数据清洗:Logstash 可以清洗原始数据,去除噪音、重复和不必要的字段,以减小数据体积并提高数据质量。
  • 集成性:Logstash 可以和其他 Elastic Stack 组件(如 Elasticsearch、Kibana、Beats
    等)无缝集成,构建端到端的数据流解决方案。

总之,Logstash
是一个非常强大的数据收集和处理工具,适用于将各种类型的数据从不同的来源收集、处理和传输到目标位置,以支持数据分析、监控和可视化。

Logstash一般安装到中间件服务器

input { 
    beats {
        port => "5044"
    } 
}   
filter {
    ruby {
        code => "
            path = event.get('log')['file']['path']
            puts format('path = %s', path: path)
            if (!path.nil?) && (!path.empty?)
                array = path.split('/')
                if array[-2] == 'User'
                    event.set('folder', array[-2] + '/' + event.get('@timestamp').time.strftime('%Y-%m-%d'))
                else
                    event.set('folder', array[-2] + '/' + array[-1].split('.')[0] + '/' + event.get('@timestamp').time.strftime('%Y-%m-%d'))
                end
            end
        "
    }
}
output {
    if [fields][index] == 'iot_data_log' {
        elasticsearch {
            action => "index"
            hosts => ["172.31.37.123:9200"]
            index => "iot_data_log"
        }
    }
    if [fields][index] == 'aws_s3' {
        s3 {
            access_key_id => "AKIATP4H2KLWZELKPKNZ"
            secret_access_key => "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"
            region => "ap-northeast-1"
            bucket => "knt.private.kawasaki"
            size_file => 102400000
            time_file => 1440
            codec => line { format => "%{message}" }
            canned_acl => "private"
            prefix => "uat/%{folder}/"
            temporary_directory => "/var/log/logstash/tmp"
        }
    }
    if [fields][index] == 'data_statistics_consumer_log' {
        elasticsearch {
        action => "index"
        hosts => ["172.31.37.123:9200"]
        index => "data_statistics_consumer_log"
      }
    }
    if [fields][index] == 'data_statistics_device_log' {
      elasticsearch {
        action => "index"
        hosts => ["172.31.37.123:9200"]
        index => "data_statistics_device_log"
      }
    }
    if [fields][index] == 'data_statistics_message_log' {
      elasticsearch {
        action => "index"
        hosts => ["172.31.37.123:9200"]
        index => "data_statistics_message_log"
      }
    }
    if [fields][index] == 'data_statistics_warning_log' {
       elasticsearch {
        action => "index"
        hosts => ["172.31.37.123:9200"]
		        index => "data_statistics_warning_log"
      }
    }

}

这段代码是一个 Logstash 配置文件,用于处理日志数据并将其发送到不同的输出目的地。Logstash
是一个开源的数据收集和处理工具,常用于将不同来源的日志数据整合、转换和传输到各种目标系统。

这个配置文件的主要功能是:

  1. 从 Beats 输入插件接收数据,该插件监听在 5044 端口上的数据流。
  2. 使用 Ruby 过滤器插件来根据日志路径设置一个名为 ‘folder’ 的字段,用于确定日志应该存储在哪个目录中。
  3. 使用条件语句根据 [fields][index] 字段的值,将数据发送到不同的输出目标。根据 [fields][index]
    的值,可以确定数据是发送到 Elasticsearch 还是 Amazon S3 存储桶。
  4. 对于 Amazon S3 输出,配置了 S3 输出插件以将数据发送到指定的 S3 存储桶中。这里还设置了文件大小、文件时间和其他参数。
  5. 对于 Elasticsearch 输出,配置了 Elasticsearch 输出插件以将数据发送到指定的 Elasticsearch
    主机和索引中。

总之,这段配置文件的目的是根据输入的日志数据进行处理,并将其发送到 Elasticsearch 或 Amazon S3
存储桶中,以便后续的查询、分析和存储。

你可能感兴趣的:(elasticsearch,大数据,filebeat,logstash)