我正在使用稳定/ prometheus-operator图表部署Prometheus。它安装在monitoring
命名空间中。在default
命名空间中,我有一个运行着名为my-pod
的Pod,带有三个副本。此pod在端口9009上吐出指标(我已经通过执行k端口转发并验证了localhost:9009中显示的指标来对此进行验证)。我希望prometheus-operator能够抓取这些指标。所以我将以下配置添加到values.yaml
prometheus:
prometheusSpec:
additionalScrapeConfigs:
- job_name: 'my-pod-job'
scrape_interval: 15s
kubernetes_sd_configs:
- role: pod
namespaces:
names:
- default
relabel_configs:
- source_labels: [__meta_kubernetes_pod_name]
action: keep
regex: 'my-pod'
然后我使用以下命令安装prometheus:
helm upgrade --install prometheus stable/prometheus-operator \
--set kubeEtcd.enabled=false \
--set kubeControllerManager.enabled=false \
--set kubeScheduler.enabled=false \
--set prometheusOperator.createCustomResource=true \
--set grafana.smtp.existingSecret=smtp-secret \
--set kubelet.serviceMonitor.https=true \
--set kubelet.enabled=true \
-f values.yaml --namespace monitoring
但是,当我转到/service-discover
时,看到
my-pod-job (0/40 active targets)
问题
如何配置prometheus,以使其从默认名称空间中运行的pod抓取指标并在端口9009上吐出指标?
答案 0 :(得分:0)
要告诉普罗米修斯刮豆荚,请添加以下注释:
...
template:
metadata:
annotations:
prometheus.io/scrape: 'true'
prometheus.io/port: '9009'
答案 1 :(得分:0)
正如@gears所提到的,如果您要从特定的pod或服务中刮取指标,则必须对它应用prometheus刮擦注释。例如:
...
spec:
replicas: 1
template:
metadata:
annotations:
prometheus.io/path: <path_to_scrape>
prometheus.io/port: "80"
prometheus.io/scrape: "true"
...
但是,如前所述:
prometheus运算符不支持基于注释的发现 服务,使用 serviceMonitor CRD取代了它,因为它提供了更多的配置选项。
现在,如果我正确理解了ServiceMonitor
对象,则应在应用程序所在的同一个命名空间中创建该对象。您需要确保serviceMonitorNamespaceSelector
选择该命名空间和Prometheus服务器具有访问该命名空间中的Service / Endpoints / Pod对象的适当权限。
请让我知道是否有帮助。