【问题标题】:Unable to find Prometheus custom app exporter as a target in Prometheus server deployed in Kubernetes无法在 Kubernetes 中部署的 Prometheus 服务器中找到 Prometheus 自定义应用程序导出器作为目标
【发布时间】:2021-05-15 15:55:42
【问题描述】:

我使用 prometheus-client 包在 Python 中创建了一个自定义导出器。然后创建必要的工件以在部署在 Kubernetes 上的 Prometheus 中找到作为目标的指标。

但尽管遵循了所有可用说明,但我无法将指标视为目标。 感谢您帮助找出问题。

这是我所做的总结。

  1. 使用 Helm 在命名空间中的 K8s 集群上安装 Prometheus prometheus
  2. 使用 prometheus-client 包创建了一个 python 程序来创建一个指标
  3. 在 dockerhub 中创建并部署了导出器的映像
  4. 在命名空间 prom-test 中针对指标图像创建了部署
  5. 创建了一个服务、ServiceMonitor 和一个 ServiceMonitorSelector
  6. 创建了服务帐户、角色和绑定以启用对端点的访问

以下是代码。

服务与部署

apiVersion: v1
kind: Service
metadata:
  name: test-app-exporter
  namespace: prom-test
  labels:
    app: test-app-exporter
spec:
  type: ClusterIP
  selector:
    app: test-app-exporter
  ports:
  - name: http
    protocol: TCP
    port: 6000
    targetPort: 5000
    

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app-exporter
  namespace: prom-test
spec:
  selector:
    matchLabels:
      app: test-app-exporter
  template:
    metadata:
      labels:
        app: test-app-exporter
    spec:
      #serviceAccount: test-app-exporter-sa
      containers:
      - name: test-app-exporter
        image: index.docker.io/cbotlagu/test-app-exporter:2
        imagePullPolicy: Always
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - name: http
          containerPort: 5000
      imagePullSecrets:
        - name: myregistrykey    

服务帐号和角色绑定

apiVersion: v1
kind: ServiceAccount
metadata:
  name: test-app-exporter-sa
  namespace: prom-test

---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test-app-exporter-binding
subjects:
  - kind: ServiceAccount
    name: test-app-exporter-sa
    namespace: prom-test
roleRef:
  kind: ClusterRole
  name: test-app-exporter-role
  apiGroup: rbac.authorization.k8s.io

---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: test-app-exporter-role
rules:
- apiGroups: [""]
  resources:
  - nodes
  - nodes/metrics
  - services
  - endpoints
  - pods
  verbs: ["get", "list", "watch"]
- apiGroups: [""]
  resources:
  - configmaps
  verbs: ["get"]
- apiGroups:
  - networking.k8s.io
  resources:
  - ingresses
  verbs: ["get", "list", "watch"]

服务监视器和选择器

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: test-app-exporter-sm
  namespace: prometheus
  labels:
    app: test-app-exporter
    release: prometheus
spec:
  selector:
    matchLabels:
      # Target app service
      app: test-app-exporter
  endpoints:
  - port: http
    interval: 15s
    path: /metrics
  namespaceSelector:
    matchNames:
    - default
    - prom-test
    #any: true
---
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: service-monitor-selector
  namespace: prometheus
spec:
  serviceAccountName: test-app-exporter-sa
  serviceMonitorSelector:
    matchLabels:
      app: test-app-exporter-sm
      release: prometheus
  resources:
    requests:
      memory: 400Mi

【问题讨论】:

标签: kubernetes prometheus


【解决方案1】:

我能够得到普罗米修斯识别的目标。 但是,尽管可以在集群内以及从节点 IP 到达终点。普罗米修斯说目标已经下降。 除此之外,我看不到任何其他目标。 Prom-UI

非常感谢任何帮助

以下是我更改的代码 部署与服务

apiVersion: v1
kind: Namespace
metadata:
  name: prom-test
---  
apiVersion: v1
kind: Service
metadata:
  name: test-app-exporter
  namespace: prom-test
  labels:
    app: test-app-exporter
spec:
  type: NodePort
  selector:
    app: test-app-exporter
  ports:
  - name: http
    protocol: TCP
    port: 5000
    targetPort: 5000
    

---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: test-app-exporter
  namespace: prom-test
spec:
  replicas: 1
  selector:
    matchLabels:
      app: test-app-exporter
  template:
    metadata:
      labels:
        app: test-app-exporter
    spec:
      serviceAccountName: rel-1-kube-prometheus-stac-operator
      containers:
      - name: test-app-exporter
        image: index.docker.io/cbotlagu/test-app-exporter:2
        imagePullPolicy: Always
        resources:
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - name: http
          containerPort: 5000
      imagePullSecrets:
        - name: myregistrykey    

集群角色

apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: pod-reader
  namespace: prom-test
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  - endpoints
  - pods
  - services
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-from-prom-test
  namespace: prom-test
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: pod-reader
subjects:
- kind: ServiceAccount
  name: rel-1-kube-prometheus-stac-operator
  namespace: monitoring
---  
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  name: monitoring-role
  namespace: monitoring
rules:
- apiGroups:
  - ""
  resources:
  - nodes/metrics
  - endpoints
  - pods
  - services
  verbs:
  - get
  - list
  - watch
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: pod-reader-from-prom-test
  namespace: monitoring
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: Role
  name: monitoring-role
subjects:
- kind: ServiceAccount
  name: rel-1-kube-prometheus-stac-operator
  namespace: monitoring

服务监视器

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: test-app-exporter-sm
  namespace: monitoring
  labels:
    app: test-app-exporter
    release: prometheus
spec:
  selector:
    matchLabels:
      # Target app service
      app: test-app-exporter
  endpoints:
  - port: http
    interval: 15s
    path: /metrics
  namespaceSelector:
    matchNames:
    - prom-test
    - monitoring
---
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
  name: service-monitor-selector
  namespace: monitoring
spec:
  serviceAccountName: rel-1-kube-prometheus-stac-operator
  serviceMonitorSelector:
    matchLabels:
      app: test-app-exporter
      release: prometheus
  resources:
    requests:
      memory: 400Mi

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-04
    • 2019-11-19
    • 2021-04-12
    • 1970-01-01
    • 2020-02-02
    相关资源
    最近更新 更多