繁体   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