使用Filebeat+kafka+Logstash+ES构建日志分析系统
使用Filebeat+kafka+Logstash+ES构建日志分析系统
kafka是一种分布式,高吞吐,可扩展的消息队列服务,广泛用于日志收集,监控数据聚合,在线和离线分析等大数据领域,已成为大数据生态中不可或缺的部分
在实际应用场景中,为了满足大数据实时检索的需求,可以使用filebeat采集日志数据,并输出到kafka中,kafka实时接收filebeat中的数据,并输出到Logstash中,使用Logstash对数据进行格式化,最后将格式化后的数据输出到ex中进行分布式检索,并通过kibana进行数据分析与展示
操作流程
安装并配置filebeat
设置input为系统日志,output为kafka,将日志数据采集到kafka的指定Topic中
安装并配置kafka
安装kafka,创建Topic 和 Consumer Group等
安装并配置Logstash
配置Logstash管道的input为kafka,output为es,使用Logstash消费Topic中的数据并传输到es中
查看日志消费状态
在消息队列kafka中查看日志数据的消费状态,验证日志数据是否采集成功
通过kibana过滤日志数据
在kibana控制台的discover页面,通过filter过滤出kafka相关的日志
步骤
步骤一:安装并配置Filebeat
本文以6.8.5版本为例,安装命令如下,详细信息请参见Install Filebeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.8.5-linux-x86_64.tar.gz
tar xzvf filebeat-6.8.5-linux-x86_64.tar.gz执行以下命令,进入Filebeat安装目录,创建并配置filebeat.kafka.yml文件。
cd filebeat-6.8.5-linux-x86_64
vim filebeat.kafka.ymlfilebeat.kafka.yml配置如下
filebeat.prospectors:
- type: log
enabled: true
paths:
- /var/log/.log
output.kafka:
hosts: ["alikafka-post-cn-zvp2n4v7***-1-vpc.alikafka.aliyuncs.com:9092"]
topic: estest
version: 0.10.2重要 当Filebeat为7.0及以上版本时,filebeat.prospectors需要替换为filebeat.inputs。
参数说明
参数说明
type 输入类型。设置为log,表示输入源为日志。
enabled 设置配置是否生效:true:生效false:不生效
paths 需要监控的日志文件的路径。多个日志可在当前路径下另起一行写入日志文件路径。
hosts 消息队列Kafka实例的单个接入点,可在实例详情页面获取,详情请参见查看接入点。由于本文使用的是VPC实例,因此使用默认接入点中的任意一个接入点。
topic 日志输出到消息队列Kafka的Topic,请指定为您已创建的Topic。
version Kafka的版本,可在消息队列Kafka的实例详情页面获取。重要不配置此参数会报错。由于不同版本的Filebeat支持的Kafka版本不同,例如8.2及以上版本的Filebeat支持的Kafka版本为2.2.0,因此version需要设置为Filebeat支持的Kafka版本,否则会出现类似报错:Exiting: error initializing publisher: unknown/unsupported kafka version '2.2.0' accessing 'output.kafka.version' (source:'filebeat.kafka.yml'),详细信息请参见version。
启动Filebeat
./filebeat -e -c filebeat.kafka.yml步骤二:配置Logstash管道
配置文件如下
input {
kafka {
bootstrap_servers => ["alikafka-post-cn-zvp2n4v7-1-vpc.alikafka.aliyuncs.com:9092,alikafka-post-cn-zvp2n4v7-2-vpc.alikafka.aliyuncs.com:9092,alikafka-post-cn-zvp2n4v7-3-vpc.alikafka.aliyuncs.com:9092"]
group_id => "es-test"
topics => ["estest"]
codec => json
}
}
filter {
}
output {
elasticsearch {
hosts => "http://es-cn-n6w1o1x0w001c.elasticsearch.aliyuncs.com:9200"
user =>"elastic"
password =>"<your_password>"
index => "kafka‐%{+YYYY.MM.dd}"
}
}
input参数说明
参数说明
bootstrap_servers 消息队列Kafka实例的接入点,可在实例详情页面获取,详情请参见查看接入点。由于本文使用的是VPC实例,因此使用默认接入点。
group_id 指定为您已创建的Consumer Group的名称。
topics 指定为您已创建的Topic的名称,需要与Filebeat中配置的Topic名称保持一致。
codec 设置为json,表示解析JSON格式的字段,便于在Kibana中分析。
output参数说明
参数说明
hosts 阿里云Elasticsearch的访问地址,取值为http://<阿里云Elasticsearch实例的私网地址>:9200。说明您可在阿里云Elasticsearch实例的基本信息页面获取其私网地址,详情请参见查看实例的基本信息。
user 访问阿里云Elasticsearch的用户名,默认为elastic。您也可以使用自建用户,详情请参见通过Elasticsearch X-Pack角色管理实现用户权限管控。
password 访问阿里云Elasticsearch的密码,在创建实例时设置。如果忘记密码,可进行重置,重置密码的注意事项及操作步骤请参见重置实例访问密码。
index 索引名称。设置为kafka‐%{+YYYY.MM.dd}表示索引名称以kafka为前缀,以日期为后缀,例如kafka-2020.05.27。