条件索引在摄取节点管道中不起作用

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]}"

在弹性堆栈中创建数据流的步骤:

  1. 创建 ILM 策略
  2. 创建一个索引模板,其索引模式与 metrics/logs 的索引模式相匹配。(在索引模板中设置主 shards/replica 分片和映射的数量)
  3. 在摄取管道中设置条件。(确保不存在这样的索引)

如果满足这些条件,它将创建一个数据流,并且 logs/metrics 将有一个以 .ds- 开头的索引,它将隐藏在索引管理中。

在我的例子中,问题是我没有足够的权限来创建自定义索引。当我检查我的 OpenShift 日志时,我发现 metricbeat 抱怨特权。所以我给了超级用户权限,然后使用摄取节点来设置条件索引

PUT _ingest/pipeline/metrics-index
{
   "processors": [
    {
      "set": {
      "field": "_index",
      "value": "metrics-{{kubernetes.namespace}}",
      "if": "ctx.kubernetes?.namespace==\"dev\""
       }
    }
   ]
}