busishe
(Busishe)
July 4, 2022, 5:51am
1
我编辑了 filebeat.yml 中的配置项"setup.ilm.policy_name"指定索引的ilm策略为我在kibana中自建的测试策略。
filebeat日志启动的时候看到它做了相关的检测,这个配置是生效了的。
{"log.level":"info","@timestamp ":"2022-07-04T02:51:11.473Z","log.logger":"index-management.ilm","log.origin":{"file.name":"ilm/std.go","file.line":118},"message":"ILM policy my-1day-test exists already." ,"service.name":"filebeat","ecs.version":"1.6.0"}
但是在这个已存在的策略没有实际添加在索引上,我在kibana的索引管理功能中查看索引的详细信息json:
"lifecycle": { "name": "", "parse_origination_date": "false", "step": { "wait_time_threshold": "12h" }, "indexing_complete": "false", "rollover_alias": "", "origination_date": "-1" },
另外还有一个问题,当我的策略涉及到rollover时,要求索引必须有一个别名"alias",旧版本的filebeat里面有一个配置项"setup.ilm.rollover_alias",但是我使用的8.2版本中取消了,请问现在有什么办法能在filebeat创建索引时指定别名吗?es的api是可以的,但不是很方便,还是希望能在filebeat创建索引时就指定。
可以看到lifecycle中的name为空。同样的问题我在filebeat和es社区都提了,英文实在捉急,有没有大神了解呢?
hansc
(Hans)
July 5, 2022, 7:14pm
2
不知道你的index是怎么创建的, 所以我猜一下, 你的两个问题的答案可能是一样的.
就是你需要用通过index template创建data stream, 而不是直接创建index.
如果你使用的是filebeat自动创建的index template, 那么它创建出来的data stream会自动套用默认的filebeat ILM policy, 你可以直接修改这个policy.
index template中也会指定alias.
busishe
(Busishe)
July 6, 2022, 12:47am
3
非常感谢!是的, 我直接创建了index,我尝试一下用template。不过policy我确实需要自定义,因为我是在 云集群环境下把filebeat当做边车容器来使用,不同业务应用的ilm清理策略可能不一样,这些内容都是通过容器启动时环境变量传进来的。
filebeat.config:
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
- type: filestream
id: ${FS_ID}
enabled: true
paths:
- ${YOUR_LOG_PATH}
setup.template.settings:
index.number_of_shards: 1
setup.template.enabled: false
setup.ilm.enabled: true
setup.ilm.policy_name: "my-1day-test"
processors:
# - add_cloud_metadata: ~
# - add_docker_metadata: ~
- drop_fields:
fields: ["agent","cloud","log","ecs","log_type","input_type","offset","beat","source","type","input","host"]
output.elasticsearch:
hosts: ${ES_CLUSTER}
index: ${ES_INDEX}
busishe
(Busishe)
July 6, 2022, 1:02am
4
方便的话,可以提供一个示例yml吗?我在filebeat文档中index template相关部分仍然没有找到alias配置的地方
hansc
(Hans)
July 6, 2022, 8:09am
5
index template不是通过filebeat.yml来管理的.
基于你的实际状况, 我建议的步骤是这样:
filebeat.yml里, 通过指定index来区分不同业务应用: index: "filebeat-%{[agent.version]}-xxx"
指定filebeat的mapping. 如果你要用默认的, 那么就在elasticsearch服务器上装filebeat, 然后让它连接elasticsearch, 这样filebeat会自动创建默认的template. 如果你不想这么做, 那么就在你的filebeat上把mapping导出成json, 然后自己手动创建template.
我猜你有用kibana, 那你通过kibana-Stack Management-Index Management-Index Templates, 可以找到filebeat自动创建的template, 或者你要在这里手动创建你自己的.
修改template的index patterns来匹配你的不同业务的index. 最坏的情况无非是有多少种index, 就制造多少个template.
在template中enable data stream, 自动创建的template大概已经enable了.
filebeat也会自动创建ilm policy, 在kibana里面你可以修改它. 第四步的template里面, index里面可以修改template 的 ilm policy
"index": {
"lifecycle": {
"name": "packetbeat"
},
大概就是这样, 应该可以用了. 不过在你创建好正确的template前, 不要让filebeat自行创建indices. 否则应该template不会创建同名index的data stream吧.
busishe
(Busishe)
July 7, 2022, 1:16am
6
谢谢你的回答,为我提供了很大的帮助!目前我的做法是每个应用对应一个index template。之前遇到的别名的设置问题,是因为rollover_alias在filebeat8版本中取消了,退回至7.17版本后,策略、别名的设置都生效了。
system
(system)
Closed
August 5, 2022, 12:19pm
8
This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.