首页 > 解决方案 > 自定义 Prometheus servicemonitor 未注册目标

问题描述

我已经使用 helm chart 在我的 kubernetes 集群上安装了 Prometheus 操作符。一切看起来都运行良好,但是我有一个带有 /metrics 端点的测试应用程序,我想抓取它,但我无法让它工作。我已经为应用程序创建了 servicemonitor,我在 Prometheus UI 中看到它正在注册并添加到配置中,但是没有显示任何目标。

这是我的应用程序部署:

apiVersion: v1
kind: Namespace
metadata:
  name: api-bootstrap-grape
  labels:
    name: api-bootstrap-grape
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: role-tokenreview-binding
  namespace: api-bootstrap-grape
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: system:auth-delegator
subjects:
- kind: ServiceAccount
  name: vault-auth
  namespace: api-bootstrap-grape
---
apiVersion: v1
kind: Service
metadata:
  name: api-bootstrap-grape-service
  namespace: api-bootstrap-grape
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
spec:
  selector:
    app: api-bootstrap-grape-app
  ports:
    - name: api-bootstrap-grape-http
      port: 3000
      targetPort: 3000
  type: LoadBalancer
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: api-bootstrap-grape-deployment
  namespace: api-bootstrap-grape
spec:
  selector:
    matchLabels:
      app: api-bootstrap-grape-app
  replicas: 3
  template:
    metadata:
      labels:
        app: api-bootstrap-grape-app
      annotations:
        # Pull in any secrets from vault and specify the rest of the config here
        # this ends up in /vault/secrets/env
        vault.hashicorp.com/agent-inject: 'true'
        vault.hashicorp.com/role: 'api-bootstrap-grape-role'
        vault.hashicorp.com/agent-inject-secret-env: 'secret/api-bootstrap-grape/config'
        vault.hashicorp.com/agent-inject-template-env: |
          {{- with secret "secret/api-bootstrap-grape/config" -}}
          {{- range $k, $v := .Data -}}
          {{ $k }}={{ $v }}
          {{ end -}}
          {{- end -}}
          POSTGRES_HOST=database_host
          POSTGRES_PORT=5432
          POSTGRES_USER=postgres
          USERNAME=appuser
          POSTGRES_DB_PROD=product_production
    spec:
      serviceAccountName: vault-auth
      containers:
      - name: api-bootstrap-grape-app
        image: git.domain.com:4567/dev-toolbox/api-bootstrap-grape:latest
        env:
          - name: RACK_ENV
            value: production
          - name: SESSION_COOKIE_DOMAIN
            value: api-bootstrap-grape.domain.com
        ports:
        - containerPort: 3000
        imagePullPolicy: Always
      imagePullSecrets:
      - name: regcred

该应用程序运行良好,我可以确认我可以为它点击服务并且 /metrics 正确返回。

这是我添加的服务监视器:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: api-bootstrap-grape-servicemonitor
  namespace: default
  labels:
    app: api-bootstrap-grape-app
    release: prometheus
spec:
  selector:
    matchLabels:
      app: api-bootstrap-grape-app
  endpoints:
  - port: api-bootstrap-grape-http
    path: "/metrics"
    interval: 15s
  namespaceSelector:
    matchNames:
    - api-bootstrap-grape

目前我认为问题可能是这个应用程序在它自己的命名空间中,而普罗米修斯在默认命名空间中。我已经尝试将服务监视器部署到默认命名空间和 api-bootstrap-grape 命名空间,但都不起作用。我不确定我可能还缺少什么。

如果问题是 Prometheus 在默认命名空间中并且它只是在监视它,我怎么能告诉它监视其他命名空间?

编辑:作为测试,我将此应用程序部署到普罗米修斯所在的默认命名空间,看看这是否是问题所在。我仍然遇到同样的问题,prometheus 配置得到更新,但没有注册目标,所以也许我上面的配置有另一个问题?

标签: kubernetesprometheuskubernetes-helmprometheus-operator

解决方案


推荐阅读