【问题标题】:Conditional indexing not working in ingest node pipelines条件索引在摄取节点管道中不起作用
【发布时间】:2022-01-26 23:49:39
【问题描述】:

我正在尝试实现一个启用数据流的索引模板,然后在摄取节点管道中设置包含。这样我就可以得到下面提到的索引格式的指标:

.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

【问题讨论】:

  • 如何告诉您的文档通过metrics-index 摄取管道?
  • 我已经在部署在 openshift 上的 metricbeat.yml 文件中指定了这一点
  • 这是您管道中唯一的处理器吗?
  • 是的。我正在检查它是否有效,但它没有改变索引我不明白发生了什么,因为它不会在 openshift 或摄取管道 UI 中引发任何错误

标签: elasticsearch kibana elastic-stack


【解决方案1】:

由于您使用的是 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]}"

【讨论】:

  • 我们有 30-40 个命名空间,所以在 yml 上做看起来不太好。理想情况下,它必须发生在像 logstash/ingest 节点这样的摄取管道中,我认为这是一种更好的做法。因此,我没有实现这一点。这样做的更好方法是什么?我错了
  • 查看我的更新答案
  • 恐怕这也行不通。它在 12 月初的某个时候开始工作。现在摄取以及 yml 中的条件不起作用。是否有什么原因导致弹性运行索引比我设置的条件具有更高的优先级?
  • 您需要提供有关 Metricbeat 配置的更多信息。是否有启用的模块(如果有,是哪些)?您正在运行哪个版本(ES 和 MB)?与此同时,12 月初发生了哪些变化?
  • Metricbeat 有 Kubernetes 和 Prometheus 模块,但与 12 月份的相比没有显着变化
【解决方案2】:

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

  1. 创建 ILM 策略
  2. 创建一个索引模板,其索引模式与指标/日志的索引模式匹配。(在索引模板中设置主分片/副本分片的数量和映射)
  3. 在摄取管道中设置条件。(确保不存在此类索引)

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

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

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

【讨论】:

    猜你喜欢
    • 2022-01-13
    • 1970-01-01
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-18
    • 1970-01-01
    相关资源
    最近更新 更多