在请求录制文章中, 我们介绍了如何利用filter打印请求信息, 今天再一起看下, 如何收集请求日志. 日志数据的监控和采集一般会选用Logstash和Filebeat, 其中Filebeat占用的系统资源更少而成为首选.
一. 请求收集
通过Filebeat收集指定日志信息, 并通过kafka发送到流量银行服务中, 进行日志分析和存储; 流量银行服务可以根据平台规划存储到mongoDB,ES等存储引擎中.
二. Filebeat
2.1
安装
Filebeat的安装非常简单, 直接从官网下载安装包即可.在mac环境下, 直接解压就可以使用.
官网地址:
代码语言:javascript复制https://www.elastic.co/cn/downloads/beats/filebeat
文件内容:
2.2
配置文件filebeat.yml
Filebeat是需要根据配置文件(filebeat.yml)收集文件信息的. 配置文件主要分为输入项和输出项两部分. 在我们的配置中, 输入项是指定目录下的日志文件, 输出项为Kafka.
代码语言:javascript复制filebeat.inputs:
- type: log
paths:
- "/Users/xxx/logs/*.log"
multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true
multiline.match: after
output.kafka:
hosts: ["kafkaserver:9092"]
topics:
- topic: 'filebeat-log'
when:
contains:
message: "RequestRecordFilter"
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
配置说明: (1)输入项中, 配置日志收集目录, 可配置多项; (2)输入项中, 日志内容需要注意多行合并的情况; (3)输出项中, 配置的kafka地址可以根据集群或单点信息配置多个, 以[,]分隔. (4)输出项中, 配置的topic信息, 也是可以根据上下文配置项信息动态配置. (5)输出项中, 如果在你的日志文件中, 并不只含有你想收集的数据, 或者想根据日志内容分发到不同的kafka topic中, 可以使用[when]条件自定义配置;
点击阅读原文查看更多配置项;
三. Kafka
Kafka的单机安装部署之前我们介绍过,可以参考Kafka单机部署. 在使用docker-compose方式时, 如果需要清理旧的容器信息, 可以执行命令:
代码语言:javascript复制docker-compose rm -v
四. 测试
启动filebeat, 监听日志文件.
代码语言:javascript复制filebeat -e -c filebeat.yml
进入到kafka容器中, 监听topic(filebeat-log)消费内容.
代码语言:javascript复制# 查看topic列表:
kafka-topics.sh --list --zookeeper zookeeper:2181
# 监听命令:
kafka-console-consumer.sh --bootstrap-server kafka:9092 --topic filebeat-log --from-beginning
内容:
代码语言:javascript复制"@timestamp":"2021-02-20T20:51:48.038Z","@metadata":{"beat":"filebeat","type":"_doc","version":"7.11.1"},"agent":{"hostname":"MacBook-Pro.local","ephemeral_id":"9ab03559-417a-45b3-a1be-35532a01e2b9","id":"2f530193-f0cf-45d5-b1a3-f1c556803ac3","name":"MacBook-Pro.local","type":"filebeat","version":"7.11.1"},"log":{"flags":["multiline"],"offset":63440,"file":{"path":"/Users/xxx/logs/spring.log"}},"message":"2021-02-20 20:51:45.027 ERROR [RequestRecord,12ffadfd900cd438,12ffadfd900cd438,true] 65453 --- [http-nio-8080-exec-8] com.in.RequestRecordFilter : uri=[/post/test],method=[POST],Header=[host=localhost:8080;connection=keep-alive;content-length=21;sec-ch-ua="Chromium";v="88", "Google Chrome";v="88", ";Not A Brand";v="99";accept=application/json;charset=UTF-8;sec-ch-ua-mobile=?0;user-agent=Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/88.0.4324.96 Safari/537.36;content-type=application/json;origin=http://localhost:8080;sec-fetch-site=same-origin;sec-fetch-mode=cors;sec-fetch-dest=empty;referer=http://localhost:8080/swagger-ui.html;accept-encoding=gzip, deflate, br;accept-language=zh-CN,zh;q=0.9;cookie=Idea-2af32566=512880ee-48ca-47a8-a36e-8a43047d2321;],Parameter=[],Body=[{n "str": "string"n}],response=[string-1613793105023]","input":{"type":"log"},"ecs":{"version":"1.6.0"},"host":{"name":"MacBook-Pro.local"}}
小结
本文主要介绍,使用Filebeat收集请求数据的简单实现, 有了这些数据, 就可以为后面的流量回放平台做准备了.