【发布时间】:2022-01-13 06:40:50
【问题描述】:
说明
作为 grafana 和 prometheus 世界的新手,我正在努力将我的 laravel php cli 应用程序中的自定义指标添加到 grafana 云 - 最好通过 grafana 代理。
情况
我在运行 laravel php worker 的 linux 服务器上使用 grafana cloud 和他们的 grafana 代理,而没有 web 服务器。 grafana 代理与 node_exporter 集成一起运行。我已经尝试找到一些关于如何添加自定义导出器或添加刮板来收集信息的文档。我目前发现的是,代理将以某种方式(?)查询 HTTP 端点并解析响应(哪种格式?)以将其发布到 grafa 云端点(据我所知,prometheus 推送网关)。
我没有找到有关如何为 grafana 代理编写自定义导出器的文档,因为我正在该服务器上运行一个没有 http 端点的 php 工作线程。在端点上公开这些信息是可行的,但感觉不对,不是吗?基本上我想做一个 'php artisan mypackage:metrics' 并让该调用生成正确的输出,然后代理使用该输出发布到 grafana。
问题
- 如何编写由 grafana 代理查询的自定义导出器?
- 正确的数据格式是什么?
- 如果 grafana 代理出口商的方向不正确,如何抓取?
我的尝试
- 关于数据结构/格式
根据 [1],我尝试创建如下自定义指标 - 正确吗?
# TYPE mynamespace_some_metric counter
mynamespace_some_metric 42
- 关于发布到 grafana 云
Grafana 云提供了一个远程写入端点,其 URL 类似于 https://prometheus-prod-01-eu-west-0.grafana.net/api/prom/push 和不记名身份验证令牌。我尝试使用上述数据向该端点发送 POST 请求,但只收到 400 bad request 响应,说 snappy:rupt input。
所以我认为缺少一些基本的理解,希望能朝着正确的方向前进……
解决方案
感谢@anemyte,我提出了这个解决方案,现在效果很好:
-
创建一个控制器,它使用 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; -
注册一个使用上面控制器的路由/metrics。
-
配置 /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
- 重新启动代理,您的指标就可以使用了。
【问题讨论】:
标签: prometheus grafana