本文的内容
- 如何用filebeat kafka es做一个好用,好管理的日志收集工具
- 放弃logstash,使用elastic pipeline
- gunicron日志格式与filebeat/es配置
- flask日志格式与异常日志采集与filebeat/es配置
- 以上的配置
概况
我有一个HTTP请求,经过的路径为
Gateway(kong)-->WebContainer(gunicorn)-->WebApp(flask)
我准备以下流向处理我的日志
file --> filebeat --> kafka topic--> filebeat --> elastic pipeline --> elasticsearch
|
| ----------> HBase
为什么这么做
Logstash去哪里了?
- Logstash太重了,不过这不是问题,也就是多个机器加点钱的问题。能把事情处理就行。
- Logstash不美,Logstash虽然是集中管理配置,但是一个logstash好像总是不够,Logstash好像可以分开配置,但是你永远不知道如何划分哪些配置应该放在一个配置文件,哪些应该分开。
- 删除一个配置?不可能的,我怎么知道应该删除什么配置。
- 如果用了Logstash. As a 'poor Ops guys having to understand and keep up with all the crazy input possibilities. _
Filebeat的痛处
- 看看这个Issue吧, 万人血书让filebeat支持
grok
, 但是就是不支持,不过给了我们两条路,比如你可以用存JSON的日志啊, 或者用pipeline - Filebeat以前是没有一个好的kafka-input。只能自己写kafka-es的转发工具
简单点
我想要的日志采集就是简简单单,或者说微服务的内聚力。 一条日志采集线就不该和其他业务混合。最好的就是以下这种状态
onefile -> filebeat_config -> kafka_topic -> filebeat_config -> elastic pipepline -> es index
Gunicorn日志
gunicorn日志
gunicorn日志采集如下的信息
- time
- client_ip
- http method
- http scheme
- url
- url query string
- response status code
- client name
- rt
- trace id
- remote ips
日志格式
%(t)s [%(h)s] [%(m)s] [%(H)s] [%(U)s] [%(q)s] [%(s)s] [%(a)s] [%(D)s] [%({Kong-Request-ID}i)s] [%({X-Forwarded-For}i)s]
日志例子
[15/Nov/2019:10:23:37 +0000] [172.31.37.123] [GET] [HTTP/1.1] [/api/v1/_instance/json_schema/Team/list] [a=1] [200] [Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.97 Safar