条件索引在摄取节点管道中不起作用
Conditional indexing not working in ingest node pipelines
我正在尝试实现启用了数据流的索引模板,然后在摄取节点管道中设置包含。这样我就可以获得具有以下索引格式的指标:
.ds-metrics-kubernetes 命名空间
我以前试过这个,我做了上面提到的这些事情,它以这种格式提供指标,但现在当我实现相同的方法时,它并没有改变我的索引中的任何内容。我在 openshift 集群中看不到任何日志,因此摄取似乎工作正常(当我添加文档并测试它工作正常时)
PUT _ingest/pipeline/metrics-index
{
"processors": [
{
"set": {
"field": "_index",
"value": "metrics-{{kubernetes.namespace}}",
"if": "ctx.kubernetes?.namespace==\"dev\""
}
}
]
}
这是我用于索引的摄取节点条件。
metricbeatConfig:
metricbeat.yml: |
metricbeat.modules:
- module: kubernetes
enabled: true
metricsets:
- state_node
- state_daemonset
- state_deployment
- state_replicaset
- state_statefulset
- state_pod
- state_container
- state_job
- state_cronjob
- state_resourcequota
- state_service
- state_persistentvolume
- state_persistentvolumeclaim
- state_storageclass
- event
由于您使用的是 Metricbeat,因此您可以使用另一种更好的方法来执行此操作。
只需像这样配置您的 elasticsearch
输出:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
indices:
- index: "%{[kubernetes.namespace]}"
mappings:
dev: "metrics-dev"
default: "metrics-default"
或者像这样:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
indices:
- index: "metrics-%{[kubernetes.namespace]}"
when.equals:
kubernetes.namespace: "dev"
default: "metrics-default"
或者如果您有很多不同的命名空间并且您不想管理不同的映射,那么简单地这样也可以工作:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
index: "metrics-%{[kubernetes.namespace]}"
在弹性堆栈中创建数据流的步骤:
- 创建 ILM 策略
- 创建一个索引模板,其索引模式与 metrics/logs 的索引模式相匹配。(在索引模板中设置主 shards/replica 分片和映射的数量)
- 在摄取管道中设置条件。(确保不存在这样的索引)
如果满足这些条件,它将创建一个数据流,并且 logs/metrics 将有一个以 .ds- 开头的索引,它将隐藏在索引管理中。
在我的例子中,问题是我没有足够的权限来创建自定义索引。当我检查我的 OpenShift 日志时,我发现 metricbeat 抱怨特权。所以我给了超级用户权限,然后使用摄取节点来设置条件索引
PUT _ingest/pipeline/metrics-index
{
"processors": [
{
"set": {
"field": "_index",
"value": "metrics-{{kubernetes.namespace}}",
"if": "ctx.kubernetes?.namespace==\"dev\""
}
}
]
}
我正在尝试实现启用了数据流的索引模板,然后在摄取节点管道中设置包含。这样我就可以获得具有以下索引格式的指标:
.ds-metrics-kubernetes 命名空间
我以前试过这个,我做了上面提到的这些事情,它以这种格式提供指标,但现在当我实现相同的方法时,它并没有改变我的索引中的任何内容。我在 openshift 集群中看不到任何日志,因此摄取似乎工作正常(当我添加文档并测试它工作正常时)
PUT _ingest/pipeline/metrics-index
{
"processors": [
{
"set": {
"field": "_index",
"value": "metrics-{{kubernetes.namespace}}",
"if": "ctx.kubernetes?.namespace==\"dev\""
}
}
]
}
这是我用于索引的摄取节点条件。
metricbeatConfig:
metricbeat.yml: |
metricbeat.modules:
- module: kubernetes
enabled: true
metricsets:
- state_node
- state_daemonset
- state_deployment
- state_replicaset
- state_statefulset
- state_pod
- state_container
- state_job
- state_cronjob
- state_resourcequota
- state_service
- state_persistentvolume
- state_persistentvolumeclaim
- state_storageclass
- event
由于您使用的是 Metricbeat,因此您可以使用另一种更好的方法来执行此操作。
只需像这样配置您的 elasticsearch
输出:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
indices:
- index: "%{[kubernetes.namespace]}"
mappings:
dev: "metrics-dev"
default: "metrics-default"
或者像这样:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
indices:
- index: "metrics-%{[kubernetes.namespace]}"
when.equals:
kubernetes.namespace: "dev"
default: "metrics-default"
或者如果您有很多不同的命名空间并且您不想管理不同的映射,那么简单地这样也可以工作:
output.elasticsearch:
hosts: ["http://<host>:<port>"]
index: "metrics-%{[kubernetes.namespace]}"
在弹性堆栈中创建数据流的步骤:
- 创建 ILM 策略
- 创建一个索引模板,其索引模式与 metrics/logs 的索引模式相匹配。(在索引模板中设置主 shards/replica 分片和映射的数量)
- 在摄取管道中设置条件。(确保不存在这样的索引)
如果满足这些条件,它将创建一个数据流,并且 logs/metrics 将有一个以 .ds- 开头的索引,它将隐藏在索引管理中。
在我的例子中,问题是我没有足够的权限来创建自定义索引。当我检查我的 OpenShift 日志时,我发现 metricbeat 抱怨特权。所以我给了超级用户权限,然后使用摄取节点来设置条件索引
PUT _ingest/pipeline/metrics-index
{
"processors": [
{
"set": {
"field": "_index",
"value": "metrics-{{kubernetes.namespace}}",
"if": "ctx.kubernetes?.namespace==\"dev\""
}
}
]
}