簡體   English   中英

自定義 Prometheus servicemonitor 未注冊目標

[英]Custom Prometheus servicemonitor not registering targets

我已經使用 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 配置得到更新,但沒有注冊目標,所以也許我上面的配置有另一個問題?

我有一個類似的問題,一旦我為我的服務添加標簽,我就能讓它工作。 您的服務沒有標簽,但是如果您添加了您的ServiceMonitor正在尋找的selector.matchLabels (因為它的目標是Service ),那么它可能會起作用:

apiVersion: v1
kind: Service
metadata:
  name: api-bootstrap-grape-service
  namespace: api-bootstrap-grape
  annotations:
    service.beta.kubernetes.io/aws-load-balancer-internal: "true"
  labels:
     app: api-bootstrap-grape-app
spec:
  selector:
    app: api-bootstrap-grape-app
  ports:
    - name: api-bootstrap-grape-http
      port: 3000
      targetPort: 3000
  type: LoadBalancer

這是我的問題。 令人困惑的是,它不是針對我的 pod 的selectorLabels來允許端點工作的。 它只是查看Service上的標簽。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM