Filebeat 日志源配置:
filebeat.inputs:
Each - is an input. Most options can be set at the input level, so
you can use different inputs for various configurations.
Below are the input specific configurations.
- type: log
Change to true to enable this input configuration.
enabled: true
Paths that should be crawled and fetched. Glob based paths.
paths:
- /log/error.log
这三行可以将 json 内容解析成键值对的形式,否则会将全部 json 内容放到一个 message 字段里
json.keys_under_root: true
json.add_error_key: true
json.overwrite_keys: true
Filebeat 发送到 Elasticsearch:
#==================== Elasticsearch template setting ==========================
setup.template.name: “weblog”
setup.template.pattern: “weblog_*”
setup.template.overwrite: false
setup.template.enabled: true
setup.template.settings:
index.number_of_shards: 1
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
hosts: [“127.0.0.1:9200”]
按月建索引
index: “weblog_%{+YYYY.MM}”
Protocol - either http
(default) or https
.
protocol: “https”
Authentication credentials - either API key or username/password.
api_key: “id:api_key”
username: “elastic”
password: “changeme”
配置发送到 Elasticsearch 时候出现一个问题,花了很长时间才解决,问题如下:
(status=404): {“type”:“type_missing_exception”,“reason”:“type[doc] missing”,“index_uuid”:“j9yKwou6QDqwEdhn4ZfYmQ”,“index”:“secops-seclog_2020.04.16”,“caused_by”:{“type”:“illegal_state_exception”,“reason”:“trying to auto create mapping, but dynamic mapping is disabled”}}
网上查找资料,大部分给出的解决办法都是配置 document_type
,但是我用的 Filebeat 是 5.6 版本,这个参数已经取消了,无奈只能另找办法。
最后,就在我已经快要放弃的时候,通过把 Elasticsearch template type 改成 doc
,而不是用自定义字段,解决了这个问题。
而且我发现一个很奇怪的现象,那就是总能在快要放弃之时找到解决问题的办法,所以多坚持一下还是很有必要的。
发送到 Elasticsearch 之后,就可以通过 Kibana 从页面来查询数据了,但这样做并不是最好的办法。更通用的架构是,先把数据发送到数据总线 Kafka,然后通过消费者程序来消费 Kafka 里的数据,最后入库到 Elasticsearch 或者其他存储组件。
Filebeat 发送到 Kafka:
output.kafka:
hosts: [“kafka1:9092”]
topic: ‘web-log’
username: ‘XXX’
password: ‘XXX’
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
去除不需要的字段:
Filebeat 在发送日志时,会添加一些字段,如果不想要这些字段的话,可以通过下面的配置将这些字段过滤。
#================================ Processors =====================================
Configure processors to enhance or manipulate events generated by the beat.
processors:
- drop_fields:
fields: [“agent”, “ecs”, “host”, “input”, “log”]