【发布时间】:2020-07-28 17:49:15
【问题描述】:
几周前,我们将 filebeat、metricbeat 和 apm 添加到了运行在 kubernetes 集群上的 dotnet 核心应用程序中。 它工作得很好,最近我们发现 filebeat 和 metricbeat 能够根据多个规则编写不同的索引。
我们想为 APM 做同样的事情,但是 searching the documentation 我们找不到任何选项来设置要写入的索引的名称。
这是否可能,如果可以,如何配置?
我还尝试在代码库中查找当前名称 apm-*,但在配置时找不到任何匹配项。
我们想要解决的问题是 kibana 中的每个空间都可以看到每个应用程序的 apm 指标。某些应用程序不应该在这个空间内,因此我认为一个新的apm-application-* 索引可以解决问题......
编辑
因为它不应该在代理上配置,而是在云服务控制台中配置。我无法根据自己的喜好“用户覆盖”设置。
我想要的规则:
- 当应用程序不存在于 kubernetes 命名空间内时
default或kube-system写入名为apm-7.8.0-application-type-2020-07的索引 - 其他命名空间中的所有其他应用程序应保留在默认索引中
我知道你可以添加 output.elasticsearch.indices 来实现这一点:Array of index selector rules supporting conditionals and formatted string.
我通过复制与 metricbeat 相同的内容进行了尝试,并将其更新为使用 apm 语法,并得到以下“用户覆盖”
output.elasticsearch.indices:
- index: 'apm-%{[observer.version]}-%{[kubernetes.labels.app]}-%{[processor.event]}-%{+yyyy.MM}'
when:
not:
or:
- equals:
kubernetes.namespace: default
- equals:
kubernetes.namespace: kube-system
但是当我使用这个设置时它告诉我:
Your changes cannot be applied
'output.elasticsearch.indices.when': is not allowed
Set output.elasticsearch.indices.0.index to apm-%{[observer.version]}-%{[kubernetes.labels.app]}-%{[processor.event]}-%{+yyyy.MM}
Set output.elasticsearch.indices.0.when.not.or.0.equals.kubernetes.namespace to default
Set output.elasticsearch.indices.0.when.not.or.1.equals.kubernetes.namespace to kube-system
然后我更新了示例,但得出了相同的结论,因为它也无效..
【问题讨论】:
-
您的 APM 服务器是否直接输出到 elasticsearch?索引名称在APM Server中定义。
-
是的,@leandrojmp 是对的,.NET 代理本身不控制索引名称,这是在 APM 服务器中完成的,链接的文档对此进行了解释。 ps:我在.NET Agent上工作。
-
啊,我明白了!我们正在使用弹性云解决方案。所以我们还没有设置 APM-server 本身的配置。无论如何要更新此配置?
-
用我想要的更具体的输出更新了问题
标签: elasticsearch .net-core kibana elastic-stack elastic-apm