如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch

本文所使用的是阿里云Elasticsearch和Logstash,Logstash30天免费试用:https://common-buy.aliyun.com/new?spm=a2c0j.9528745.1335467…51f65a368bTZhJ&commodityCode=elasticsearch_logstash_pre&orderType=BUY&accounttraceid=f1c871a1c5f94bef9e54c5dd781ef5ddafdu

准备工作

  • 开通阿里云Elasticsearch和Logstash,详情请参见创建阿里云Elasticsearch实例和创建Logstash实例。创建时,请确保ES与Logstash实例的版本相同,并且在同一VPC下。

  • 准备与Logstash和ES处于同一VPC下的ECS,并搭建Httpd服务。
    注意 Beats目前仅支持Aliyun Linux ,RedHat和CentOS这三种操作系统。

    为了便于通过可视化工具分析展示日志,建议在httpd.conf中将Apache日志格式定义为JSON格式,详情请参见Apache官方说明。本文的测试环境配置如下。

LogFormat "{\"@timestamp\":\"%{%Y-%m-%dT%H:%M:%S%z}t\",\"client_ip\":\"%{X-Forwa rded-For}i\",\"direct_ip\": \"%a\",\"request_time\":%T,\"status\":%>s,\"url\":\"%U%q\",\"method\":\"%m\",\"http_host\":\"%{Host}i\",\"server_ip\":\"%A\",\"http_referer\":\"%{Referer}i\",\"http_user_agent\":\"%{User-agent}i\",\"body_bytes_sent\":\"%B\",\"total_bytes_sent\":\"%O\"}"  access_log_json
# 注销原有CustomLog修改为CustomLog "logs/access_log" access_log_json
  • 确保目标ECS上安装了云助手。
  • 确保目标ECS上安装了Docker服务。
  • 开启阿里云ES的自动创建索引功能。阿里云ES默认不允许自动创建索引。但是Beats目前依赖该功能,因此如果采集器Output选择为Elasticsearch,需要开启自动创建索引功能,详情请参见YML文件配置。

操作步骤

  1. 进入阿里云ES的Beats数据采集中心控制台,单击新建采集器区域中的Filebeat
  2. 配置采集器。配置方法请参见安装和管理采集器,本文使用的配置如下。
    如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch_第1张图片
    说明
  • 采集器Output需要指定目标Logstash的实例ID,并且在YML配置中不需要重新指定Output。
  • Filebeat文件目录需要填写数据源所在的目录,同时需要在YML配置中开启log数据采集,并配置log路径。
  1. 选择采集器安装的ECS实例。所选择的ECS实例,需要满足上文准备工作中的条件。
    如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch_第2张图片
  2. 启动并查看采集器安装情况。
    如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch_第3张图片
  3. 配置Logstash管道。单击左侧导航栏的Logstash实例,切换至Logstash控制台。找到采集器输出数据的目标Logstash实例,并创建管道。参考如下示例配置管道,详细配置方法请参见配置文件管理。
input {
  beats {
      port => 8000
    }
}
filter {
  json {
        source => "message"
        remove_field => "@version"
        remove_field => "prospector"
        remove_field => "beat"
        remove_field => "source"
        remove_field => "input"
        remove_field => "offset"
        remove_field => "fields"
        remove_field => "host"
        remove_field => "message"
      }

}
output {
  elasticsearch {
    hosts => ["http://es-cn-mp91cbxsm00******.elasticsearch.aliyuncs.com:9200"]
    user => "elastic"
    password => ""
    index => ""
  }
}

说明
Logstash input用来接收beat采集的数据;filter中通过json插件进行message数据解码,使用remove_field删除指定字段;output用来将数据传输至ES中进行分析。关于更多filter插件支持的参数请参见filter plugin官方文档。
output中的需要替换为您ES集群的访问密码;需要替换为您定义的索引名称。

结果验证

  1. 登录ES的Kibana控制台,单击左侧导航栏的Dev Tools(中文为开发工具),在Console中执行如下命令查看采集成功的数据。
GET /_search

需要替换为您在Logstash的管道配置时,output中所定义的索引名称。
2. 单击左侧导航栏的Discover,选择一段时间,查看采集的数据详情。
如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch_第4张图片
在查询前,请确保你已经创建了的索引模式。否则需要在Kibana控制台中,单击Management,再单击Kibana模块中的Index Patterns > Create index pattern,按照提示创建索引模式。

详细操作步骤,请前往阿里云官方文档中心:Filebeat采集Apache日志数据最佳实践

你可能感兴趣的:(如何使用Filebeat采集Apache日志数据并通过Logstash上传至Elasticsearch)