使用Datadog监视Prometheus Exporter的情况

动力

由于 Prometheus 最近迅速普及,成为事实标准,而且出现了许多不同类型的 Prometheus Exporter 用于指标收集,因此我们在 Datadog 中也希望使用 Prometheus Exporter 来进行指标收集。

检查人工智能任务文件.py

在最新版的Datadog代理程序中,包含了一个用于监视Prometheus Exporter的脚本,名为prometheus_check.py。

从 https://docs.datadoghq.com/ja/guides/agent_checks/ 继承了 AgentCheck 类的 prometheus_check.py,看起来它可以直接作为 Datadog 的 checks 插件使用。然而,实际上由于check方法的实现不是以下所示,所以需要使用prometheus_check.py来进行自定义扩展。

def check(self, instance):
    """
    check should take care of getting the url and other params
    from the instance and using the utils to process messages and submit metrics.
    """
    raise NotImplementedError()

延迟@datadog-agent-prometheus

作为 prometheus_check.py 实现的一个示例,在上述仓库中,公开了一个名为 checks 的脚本。因此,我将使用它来进行本次操作。

将 prometheus.py 文件放置在上述存储库的 check.d 目录中,将其安装到 datadog 的 checks.d 目录中,这样可以从 Datadog 代理程序中调用它。

设置文件的格式在 README 中也有说明,但指定方式如下。

init_config:

instances:
  - target: http://localhost:9100/metrics
    config:
      drop:
        - .*
      keep:
        - node_cpu.*
        - node_memory.*

指定要监视的终端目标。还可以进行一些其他的扩展设置。

根据目前的实施情况来看,似乎支持了以下这样的设定。

    • tags

Datadog のタグとして付与したい文字列を指定します (foo:var,env:prd …)

format

Prometheus Exporter に接続するフォーマットを強制したい場合はここで指定します。
PROTOBUF
TEXT

config.drops

メトリクスのうち、対象にしないものを明示的に指定できます。ワイルドカード指定可。

config.keeps

メトリクスのうち、これだけは必ず対象として残す、というものを明示的に指定できます。drops で指定されていても、keeps の条件に合致するものはメトリクス対象となるようです。

config.headers

Prometheus Exporter へのリクエスト時に送信する HTTP Header について指定します。

春季指标

我打算真实地准备 Prometheus Exporter,并与 Datadog 进行连接以收集指标。

在这里,我们将尝试为Java应用程序设置Prometheus Exporter。为了设定Prometheus Exporter的端点,我们将使用Spring Metrics。

实际上,Spring Metrics 已经支持与 Datadog 的集成功能。
然而,Spring Boot 应用程序本身需要知道 Datadog 的 API 密钥等信息,并且该部分的信息缓冲是通过自定义实现的,有点不太喜欢这一点。因此,这次我们选择了更简单的架构,可以实现监控的 Prometheus Exporter 功能。

pom.xml -> 项目对象模型文件

只需按照以下方式,将 Spring Metrics 和 Prometheus 提供的 simpleclient 添加进去即可生效。

<dependency>
  <groupId>org.springframework.metrics</groupId>
  <artifactId>spring-metrics</artifactId>
  <version>${metrics.version}</version>
</dependency>
<dependency>
  <group>io.prometheus</group>
  <artifact>simpleclient_common</artifact>
  <version>${prom.version}</version>
</dependency>

Java (Spring Boot 应用程序)

通过在注解上设置 @EnablePrometheusMetrics,将自动启用 Prometheus 的 Endpoint。

@SpringBootApplication
@EnablePrometheusMetrics
public class Bootstrap {
    public static void main(String[] args) {
        SpringApplication.run(Bootstrap.class, args);
    }
}

由于Spring Boot Actuator预先使用了/metrics端点,因此添加的端点将被命名为/prometheus。

$ curl http://localhost:8080/prometheus
# HELP jvm_buffer_total_capacity 
# TYPE jvm_buffer_total_capacity gauge
jvm_buffer_total_capacity{id="direct",} 81920.0
jvm_buffer_total_capacity{id="mapped",} 0.0
# HELP jvm_memory_committed 
# TYPE jvm_memory_committed gauge
jvm_memory_committed{id="Par Survivor Space",} 1.07347968E8
jvm_memory_committed{id="CMS Old Gen",} 2.147483648E9
jvm_memory_committed{id="Code Cache",} 7.2548352E7
jvm_memory_committed{id="Compressed Class Space",} 1.1145216E7
jvm_memory_committed{id="Metaspace",} 9.6305152E7
jvm_memory_committed{id="Par Eden Space",} 8.59045888E8
# HELP http_server_requests 
(snip.)

另外,在Spring Metrics中,只需要在Controller类上添加一个名为@Timed的注解,就可以获取与该Controller相关的统计信息(例如,每个状态码的调用次数等)。

关于其他的扩展指标,请参考 Spring Metrics 的文档以获取更详细信息。

Datadog与Prometheus出口转换器

实际进行协作后,您可以确认如下的感觉:可以将Prometheus Exporter的值导入Datadog。

对于 Prometheus Exporter 中的 jvm_memory_committed{id=”Par Eden Space”} 等格式,{} 内的值以 Datadog 的标签形式翻译,在 Datadog 上可用于缩小搜索范围。

image.png

换言之

普罗米修斯导出器提供了许多功能非常丰富且方便使用,因此可以很方便地用于监控使用Datadog。

广告
将在 10 秒后关闭
bannerAds