我有一个opensearch集群,它从fluentd接收日志。现在,我想应用ISM策略在索引达到某个阈值时滚动索引。
我遵循此文档创建ISM政策
https://opensearch.org/docs/latest/im-plugin/ism/policies/#sample-policy-with-ism-template-for-auto-rollover
。
当前配置如下-
-
fluentd将所有日志发送到特定的索引模式,如“mylogs-k8s-namespace”,因此如果有10个名称空间,我将创建10个索引。
logstash_format false
index_name mylogs-${record['kubernetes']['namespace_name']}
-
接下来,我创建了一个包含滚动条件的ISM策略-
PUT _plugins/_ism/policies/rollover_policy
{
"policy": {
"description": "Example rollover policy.",
"default_state": "rollover",
"states": [
{
"name": "rollover",
"actions": [
{
"rollover": {
"min_size": "10mb"
}
}
],
"transitions": []
}
],
"ism_template": {
"index_patterns": ["mylogs-kube-system*"],
"priority": 100
}
}
}
-
然后,我创建了一个模板,将此策略应用于所有新索引。
PUT _index_template/ism_rollover
{
"index_patterns": ["mylogs-kube-system*"],
"template": {
"settings": {
"plugins.index_state_management.rollover_alias": "mylogs-kube-system"
}
}
}
-
根据文档,下一步是使用上述别名创建索引
PUT mylogs-kube-system-000001
{
"aliases": {
"mylogs-kube-system": {
"is_write_index": true
}
}
}
现在问题来了-
如果fluentd已经开始将日志推送到我的索引“mylogs kube system”,那么上述步骤(4)不起作用。它给出了一个错误,即具有相同名称的索引已经存在。
这很有意义,因为fluentd已经开始推送日志,我们不能让别名、索引或流具有相同的名称。
为了克服这个问题,我必须停止我的fluend,删除索引“mylogs kube system,
在这种情况下
“然后首先应用策略和别名(步骤1到步骤4),然后再次启动fluentd。这样它工作正常,就会发生翻滚。
然而,据我所知,这不是一个好的解决方案,我们不能在每次添加新名称空间时都停止fluentd。我正在寻找一个具体的解决方案,使这项工作。
我试过做以下事情,但没有成功-
-
将fluentd中的索引名称(步骤1)更改为带有日期的logstash\u前缀,但日志会不断添加到新索引(mylogs-kube-system-27052022)等中,但不会发生滚动。
-
尝试将fluentd中的索引名称更改为mylogs-k8s-namespace-000001,但它永远只将日志发送到此索引。
我在这里得出的结论是,我们必须保持索引名和别名不同,但这样一来,fluentd将停止向正确的别名发送日志,我们开始面临滚动问题。