php - Kubernetes php-fpm 自定义指标 - 发生内部错误:无法获取指标
问题描述
我尝试根据 phpfpm 的活动进程计数来实现 HPA。我将 prometheus、prometheus-adapter 和 exporter 作为 sidecar 安装到我的 PHP 应用程序中。在 prometheus 的 UI 上获得正确的指标。
这是我的普罗米修斯适配器配置:
- seriesQuery: 'phpfpm_active_processes{kubernetes_namespace!="",kubernetes_pod_name!=""}'
resources:
overrides:
kubernetes_namespace:
resource: "namespace"
kubernetes_pod_name:
resource: "pod"
name:
matches: "phpfpm_active_processes"
as: "phpfpm_avg_processes"
metricsQuery: 'avg(avg_over_time(phpfpm_active_processes[30s])) by (kubernetes_pod_name,kubernetes_namespace))'
如果我调用 k8s-api,我会看到可用的指标:
$ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1 | jq .
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "custom.metrics.k8s.io/v1beta1",
"resources": [
{
"name": "namespaces/phpfpm_avg_processes",
"singularName": "",
"namespaced": false,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "pods/phpfpm_avg_processes",
"singularName": "",
"namespaced": true,
"kind": "MetricValueList",
"verbs": [
"get"
]
}
]
}
但是 HPA 失败并出现错误:
unable to get metric phpfpm_avg_processes: unable to fetch metrics from custom metrics API: Internal error occurred: unable to fetch metrics
如果我尝试通过 kubectl 获取指标,我会收到错误消息:
$ kubectl get --raw '/apis/custom.metrics.k8s.io/v1beta1/namespaces/default/pods/*/phpfpm_avg_processes' | jq
Error from server (InternalError): Internal error occurred: unable to fetch metrics
prometheus-adapter 的日志包括以下消息:
2020-11-03T08:27:07.7920803Z I1103 08:27:07.791793 1 httplog.go:90] GET /apis/custom.metrics.k8s.io/v1beta1/namespaces/mynamespace/pods/%2A/phpfpm_avg_processes?labelSelector=myapp.service%3Dtestapp: (13.6381ms) 500
我还尝试将--kubelet-insecure-tls
和添加--kubelet-preferred-address-types=InternalIP
到指标服务器,但没有成功。
信息:为了测试我使用 docker-for-mac
有人可以帮忙吗?我不知道如何调试或在哪里看?!
解决方案
我已经修改了我的 Adapter-Config,现在它可以工作了。我将有关 metricsQuery 的行更改为metricsQuery: 'avg(avg_over_time(phpfpm_listen_queue{<<.LabelMatchers>>}[30s])) by (<<.GroupBy>>)'
推荐阅读
- toloka - 为 Toloka.ai 任务提供资产的存储
- c# - 如何在 .NET Core 3.1 中对签名进行 DER 编码?
- django-rest-framework - Django rest 按字段过滤数据
- python-3.x - Dom Traversal 与 lxml 进入图数据库并传递 ID 以建立完整的树
- javascript - 解释 chrome 扩展的 background.js 中的十六进制变量
- laravel - Lavachart - 无法设置 null 的“样式”属性
- powershell - Windows 11 是否破坏了 Visual Studio Code
- python - 在行中追加新元素并保存 CSV [python]
- docker - Docker 容器中不存在文件
- next.js - 如何在 ubuntu-nginx-server 中部署 nextjs?