使用 grafana agent / prometheus 监控 grafana 的应用程序指标

Monitor application metric to grafana with grafana agent / prometheus

描述

作为 grafana 和 prometheus 世界的新手,我正在努力将自定义指标从我的 laravel php cli 应用程序添加到 grafana 云 - 最好通过 grafana 代理。

情况

我在 linux 服务器上使用 grafana 云及其 grafana 代理,该服务器是 运行 laravel php 没有网络服务器的工作人员。 grafana代理是运行node_exporter整合。我已经尝试找到一些关于如何添加自定义导出器或添加刮板来收集信息的文档。我目前发现的是,代理将以某种方式(?)查询 HTTP 端点并将响应(哪种格式?)解析为 post 到 grafa 云端点(据我所知是普罗米修斯推送网关) .

我没有找到关于如何为 grafana 代理编写自定义导出器的文档,因为我是 运行 一个 php 工作线程,该服务器上没有 http 端点。在端点上公开这些信息是可行的,但感觉不对,不是吗?基本上我想做一个 'php artisan mypackage:metrics' 并让该调用生成正确的输出,然后代理将其用于 post 到 grafana。

问题

我试过的

根据 [1],我尝试创建如下自定义指标 - 正确吗?

# TYPE mynamespace_some_metric counter
mynamespace_some_metric 42

Grafana 云提供了一个带有 URL 的远程写入端点,例如 https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push 和承载身份验证令牌。我试图用上面的数据向那个端点发送一个 POST 请求,但只收到一个 400 错误的请求响应,说 snappy: corrupt input.

所以我认为缺少一些基本的理解,希望能在正确的方向上有所作为...

[1] - https://www.metricfire.com/blog/prometheus-pushgateways-everything-you-need-to-know/#strongSending-Metricsstrong

解决方案

感谢@anemyte,我提出了这个解决方案,现在效果很好:

  1. 创建一个控制器,它使用 promphp/prometheus_client_php 包呈现所需的输出,如下所示:

     $registry = new CollectorRegistry(new InMemory());
    
     $counter = $registry->getOrRegisterGauge('test', 'some_counter', 'it sets', ['type']);
     $counter->set(rand(1, 99), ['blue']);
    
     $renderer = new RenderTextFormat();
     $result = $renderer->render($registry->getMetricFamilySamples());
    
     header('Content-type: ' . RenderTextFormat::MIME_TYPE);
     echo $result;
    
  2. 注册一个使用上面Controller的路由/metrics。

  3. 配置/etc/grafana-agent.yaml 并在prometheus yaml 部分添加配置:

  prometheus:   
    configs:
      - name: mycustomwebsite
        scrape_configs:
          - job_name: default
            static_configs:
                - targets: ['www.mywebsite.de:80']
        remote_write:
        - basic_auth:
            password: YOURPASSWORD
            username: YOURUSERNAME
          url: https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push
      - name: integrations
        remote_write:
        - basic_auth:
            password: YOURPASSWORD
            username: YOURUSERNAME
          url: https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push
  1. 重新启动代理,您的指标就可以使用了。

Grafana Agent 使用与 Prometheus 相同的度量格式。它专注于抓取指标 而不是 Prometheus,并将它们(remote_write)推送到 Grafana Cloud 为您托管的 Prometheus 实例。 the list of product features.

中提到了这一点

可以用Prometheus PHP library to create metrics and avoid troubles with the raw format. The best practices也适用

创建完指标后,您需要指示代理从您的服务器上抓取它们。使用这些文档 (one, two) 作为参考。

解决方案

感谢@anemyte,我想出了这个解决方案,现在效果很好。

  1. 创建一个控制器,它使用 promphp/prometheus_client_php 包呈现所需的输出,如下所示:

     $registry = new CollectorRegistry(new InMemory());
    
     $counter = $registry->getOrRegisterGauge('test', 'some_counter', 'it sets', ['type']);
     $counter->set(rand(1, 99), ['blue']);
    
     $renderer = new RenderTextFormat();
     $result = $renderer->render($registry->getMetricFamilySamples());
    
     header('Content-type: ' . RenderTextFormat::MIME_TYPE);
     echo $result;
    
  2. 注册一个使用上面Controller的路由/metrics。

  3. 配置/etc/grafana-agent.yaml 并在prometheus yaml 部分添加配置:

  prometheus:   
    configs:
      - name: mycustomwebsite
        scrape_configs:
          - job_name: default
            static_configs:
                - targets: ['www.mywebsite.de:80']
        remote_write:
        - basic_auth:
            password: YOURPASSWORD
            username: YOURUSERNAME
          url: https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push
      - name: integrations
        remote_write:
        - basic_auth:
            password: YOURPASSWORD
            username: YOURUSERNAME
          url: https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push
  1. 重新启动代理,您的指标就可以使用了。