使用:
Kubernetes: 1.18.8
Helm: 3.3.4
Datadog DaemonSet agent: 7.23.0
Datadog cluster-agent: 1.9.0
Azure Database for PostgreSQL 11.x (i.e. external postgres-service)
我正在按照here提供的说明将Datadog部署为DaemonSet,并将集群代理启用到Kubernetes集群。
helm install my-kubernetes -f values.yaml --set datadog.apiKey=<DATADOG_API_KEY> datadog/datadog --set targetSystem=linux
我正在使用指定的values.yaml
文件配置Datadog。
我想做一些自定义指标,特别是使用以前称为postgres.yaml
的集成。我已经尝试按照在here中找到的values.yaml
模板中指定的方式执行此操作(像这样(将其放入集群代理中,因为它们是集群范围的指标)):
# clusterAgent.confd -- Provide additional cluster check configurations
## Each key will become a file in /conf.d
## ref: https://docs.datadoghq.com/agent/autodiscovery/
confd:
postgres.yaml: |-
init_config:
instances:
- host: my-postgres-host.com
port: 5432
username: my-user
password: some-password
dbname: some-database
ssl: True
tags:
- some_tag
custom_queries:
- metric_prefix: some.prefix
query: SELECT COUNT(*) FROM bla WHERE timestamp > NOW() - INTERVAL '1 hour';
columns:
- name: countLastHour
type: count
根据文档,我可以确认使用|-
前缀确实在节点上的路径/etc/datadog-agent/conf.d/postgres.yaml
中创建了一个文件,我希望它在该文件中。该文件正确包含了块中的所有内容,即以init_config:...
现在,当启动节点时,我在日志(DEBUG)中看到了这一点:
'/ conf.d / postgres.yaml'->'/etc/datadog-agent/conf.d/postgres.yaml' /conf.d/..2020_10_22_10_22_27.239825358-> /etc/datadog-agent/conf.d/..2020_10_22_10_22_27.239825358 '/conf.d/..2020_10_22_10_22_27.239825358/postgres.yaml'-> '/etc/datadog-agent/conf.d / .. 2020_10_22_10_22_27.239825358 / postgres.yaml'
2020-10-22 10:22:29 UTC |集群|调试| (pkg / autodiscovery / providers / file.go:196在collectEntry中)|找到了 文件中的有效配置:/etc/datadog-agent/conf.d/postgres.yaml
2020-10-22 10:22:29 UTC |集群|调试| (pkg / collector / scheduler.go:154 in getChecks)|无法加载支票 从配置'postgres'的实例中:Core Check Loader:检查postgres 在目录中找不到
2020-10-22 10:22:29 UTC |集群|错误| (在GetChecksFromConfigs中为pkg / collector / scheduler.go:201)| 无法 加载支票:无法从config'postgres'加载任何支票
文档here指出,代理v7.x中的postgres yaml内容实际上应位于/etc/datadog-agent/conf.d/postgres.d/conf.yaml
中,而不应位于/etc/datadog-agent/conf.d/postgres.yaml
中。无法创建子文件夹/不能在config键中使用正斜杠(内部使用ConfigMap创建文件)。
我什至不确定问题出在yaml文件路径还是核心集成缺失。因此,我的主要追求是:如何在设置中正确启用Datadog postgres-integration?
答案 0 :(得分:1)
此答案不能解决问题,因为postgres不在群集中运行,而是在Azure中运行。由于可能会很有趣,因此我将其保留,但是我针对实际的环境设置发布了另一个答案。
对于容器化设置,通常不建议设置configmap或尝试为代理提供yaml文件。相反,建议的配置是将注释放在postgres窗格上:https://docs.datadoghq.com/integrations/postgres/?tab=containerized#containerized。
这种将配置放置在应用程序pod上而不是使用datadog代理的概念称为自动发现。这篇博客文章很好地解释了此解决方案的好处:https://www.datadoghq.com/blog/monitoring-kubernetes-with-datadog/#autodiscovery
这是一个图片图,显示了代理如何到达同一节点上的Pod并从中提取配置:
要进行配置,您需要使用yaml配置的每个部分,将它们转换为json,然后将其设置为postgres清单上的注释。在此处https://docs.datadoghq.com/agent/kubernetes/integrations/?tab=kubernetes#examples
中提供了有关如何为redis,apache和http设置pod注释的示例。对于您的情况,我会做类似的事情:
apiVersion: v1
kind: Pod
metadata:
name: mypostgres
annotations:
ad.datadoghq.com/mypostgres.check_names: '["postgres"]'
ad.datadoghq.com/mypostgres.init_configs: '[{}]'
ad.datadoghq.com/mypostgres.instances: |
[
{
"host":"%%host%%",
"port":5432,
"username":"my-user",
"password":"some-password"
}
]
labels:
name: mypostgres
spec:
containers:
- name: mypostgres
image: postgres:latest
ports:
- containerPort: 5432
请注意文件夹名称postgres.d/conf.yaml
如何映射到check_names
注释,init_configs
部分如何映射到init_configs
注释,等等。
关于自定义指标的部分,由于我个人对yaml配置更加熟悉,并且更容易填写,因此我通常会使用yaml到json转换器,并从那里复制json
metadata:
name: mypostgres
annotations:
ad.datadoghq.com/mypostgres.instances: |
[
{
"host": "%%host%%",
"port": 5432,
"username": "my-user",
"password": "some-password",
"dbname": "some-database",
"ssl": true,
"tags": [
"some_tag"
],
"custom_queries": [
{
"metric_prefix": "some.prefix",
"query": "SELECT COUNT(*) FROM bla WHERE timestamp > NOW() - INTERVAL '1 hour';",
"columns": [
{
"name": "countLastHour",
"type": "count"
}
]
}
]
}
]
所有这些配置要注意的关键是,我从未设置主机名。代理在扫描容器时会自动发现这一点。
但是您可能已经设置了my-postgres-host.com
,因为此postgres实例实际上并未在您的kubernetes集群中运行,而是独立运行,而不是在容器中。如果是这种情况,我建议您尝试直接将代理直接放在postgres节点上,如果该数据库和代理都直接在虚拟机上,那么您所做的所有yaml东西都可以正常工作。
答案 1 :(得分:1)
问题似乎已经更新,说您要监视的此postgres数据库实际上并未运行集群。而且您无法将代理直接放置在postgres服务器上,因为它是Azure中的托管服务,因此您无权访问基础主机。
在这种情况下,通常还是在其他主机上设置一个随机的datadog代理来设置postgres集成,但是不要在yaml配置中使用host: localhost
,而要使用要访问数据库的主机名在外部。在您的示例中为host: my-postgres-host.com
。这提供了与常规集成相同的所有好处(除非您显然没有可用的cpu /磁盘/资源指标)
这很好并且很有意义,但是如果您安装的所有代理都是您创建的kubernetes守护程序集中的代理,该怎么办?您没有直接在VM上的任何主机来运行此检查。但是我们绝对不建议配置守护程序集直接运行此检查。如果这样做了,那就意味着您正在从集群中每个节点中的一个postgres数据库中收集重复的指标。由于每个代理都是副本,因此每个代理都将在您定义的同一数据库上运行相同的检查。
幸运的是,我注意到您正在运行Datadog Cluster Agent。这是一个单独的Datadog工具,每个集群一次部署为一项服务,而不是每个节点运行一次守护程序。可以将群集代理配置为运行“群集级别”检查。非常适合用于数据库,消息队列或http检查。
基本思想是(除了其他工作之外)群集代理还将安排检查。 DCA(数据狗群集代理)将从守护程序集中选择一个代理来运行检查,如果该节点代理吊舱死亡,则DCA将找到一个新的代理来运行群集检查。
以下是有关如何设置DCA以运行群集检查的文档:https://docs.datadoghq.com/agent/cluster_agent/clusterchecks/#how-it-works
要配置它,您将启用一些标志,并将使用配置映射创建的yaml文件提供给DCA,或者直接安装该文件。 DCA将将该配置传递给它选择运行检查的任何节点代理。