使用Filebeat创建新索引ILM的问题

我编辑了 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社区都提了,英文实在捉急,有没有大神了解呢?

不知道你的index是怎么创建的, 所以我猜一下, 你的两个问题的答案可能是一样的.

就是你需要用通过index template创建data stream, 而不是直接创建index.
如果你使用的是filebeat自动创建的index template, 那么它创建出来的data stream会自动套用默认的filebeat ILM policy, 你可以直接修改这个policy.
index template中也会指定alias.

非常感谢!是的, 我直接创建了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}

方便的话,可以提供一个示例yml吗?我在filebeat文档中index template相关部分仍然没有找到alias配置的地方

index template不是通过filebeat.yml来管理的.

基于你的实际状况, 我建议的步骤是这样:

  1. filebeat.yml里, 通过指定index来区分不同业务应用: index: "filebeat-%{[agent.version]}-xxx"

  2. 指定filebeat的mapping. 如果你要用默认的, 那么就在elasticsearch服务器上装filebeat, 然后让它连接elasticsearch, 这样filebeat会自动创建默认的template. 如果你不想这么做, 那么就在你的filebeat上把mapping导出成json, 然后自己手动创建template.

  3. 我猜你有用kibana, 那你通过kibana-Stack Management-Index Management-Index Templates, 可以找到filebeat自动创建的template, 或者你要在这里手动创建你自己的.

  4. 修改template的index patterns来匹配你的不同业务的index. 最坏的情况无非是有多少种index, 就制造多少个template.

  5. 在template中enable data stream, 自动创建的template大概已经enable了.

  6. filebeat也会自动创建ilm policy, 在kibana里面你可以修改它. 第四步的template里面, index里面可以修改template 的 ilm policy

  "index": {
    "lifecycle": {
      "name": "packetbeat"
    },

大概就是这样, 应该可以用了. 不过在你创建好正确的template前, 不要让filebeat自行创建indices. 否则应该template不会创建同名index的data stream吧.

谢谢你的回答,为我提供了很大的帮助!目前我的做法是每个应用对应一个index template。之前遇到的别名的设置问题,是因为rollover_alias在filebeat8版本中取消了,退回至7.17版本后,策略、别名的设置都生效了。

不用谢! 麻烦你标注问题已解决.

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.