如何使用prometheus operator service monitor监视未在kubernetes pod中运行的外部服务

flmtquvp  于 2023-03-17  发布在  Kubernetes
关注(0)|答案(1)|浏览(141)

我已成功配置服务监视器,以监视提供kubernetes Pod中运行的度量的API。但是,我还想向服务监视器目标添加外部服务。此外部服务是arangoDB oasis exporter metrics(https://www.youtube.com/watch?v=c8i7K4HUPF4&t=554s)。此服务未在kubernetes容器中运行。以下是我的相关配置文件:

  1. /helm/charts/prometheus-xxx/templates/service_monitor.tpl
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: {{ template "jobs-manager-servicemonitor.fullname" . }}
  # Change this to the namespace the jobs-manager-servicemonitor instance is running in
  namespace: {{ .Values.serviceMonitor.namespace }}
  labels:
    serviceapp: {{ template "jobs-manager-servicemonitor.name" . }}
    release: "{{ .Release.Name }}"
spec:
  selector:
    matchLabels:
      # Targets jobs-manager service
      app.kubernetes.io/instance: {{ .Values.instance.name }}
  endpoints:
    - port: {{ .Values.service.metricsPort.name }}
      interval: {{ .Values.serviceMonitor.interval }}
      {{- if .Values.serviceMonitor.scrapeTimeout }}
      scrapeTimeout: {{ .Values.serviceMonitor.scrapeTimeout }}
      {{- end }}
  namespaceSelector:
    matchNames:
    - {{ .Values.Namespace }}
  1. /helm/charts/prometheus-xxx/Chart.yaml
apiVersion: v1
appVersion: "1.0.0"
description: Prometheus Service monitor, customized
name: jobs-manager-servicemonitor
version: 1.0.1
  1. /helm/charts/prometheus-xxx/templates/_helpers.tpl
{{/*
Expand the name of the chart.
*/}}
{{- define "jobs-manager-servicemonitor.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
{{- end }}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "jobs-manager-servicemonitor.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}
  1. /helm/charts/prometheus-xxx/values.yaml
serviceMonitor:
  enabled: false
  namespace: prometheus
  interval: 10s
  scrapeTimeout: 10s

service:
  metricsPort:
    name: http

instance:
  name: jobs-manager
  
Namespace: test1

对于如何将kubernetes pod中没有运行的外部服务添加到服务监视器的目标中,您有什么建议吗?提前感谢您。

----------更新后----------

以下是我在图表模板arangodb-servicemonitor中的新配置文件:

  1. /helm/charts/arangodb-servicemonitor/templates/service.yaml
apiVersion: v1
kind: Service
metadata:
  name: arangodb
  namespace: prometheus
  labels:
    app: arangodb
    release: prometheus
spec:
  type: ClusterIP
  externalName: xxxxx.arangodb.cloud:xxxx
  ports:
    - name: metrics
      port: 9000
      targetPort: 9000
      protocol: TCP
    - bearer_token: [ARANGODB_TOKEN]
    type: ExternalName
  1. /helm/charts/arangodb-servicemonitor/templates/endpoints.yaml
kind: Endpoints
apiVersion: v1
metadata:
  name: arangodb
  labels:
    app: arangodb
subsets:
- addresses:
  - ip: xxxxx.arangodb.cloud:xxxx
  ports: 
  - name: metrics
    port: 9000
    protocol: TCP
  1. /helm/charts/arangodb-servicemonitor/templates/service_monitor.tpl
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: arangodb-servicemonitor
  # Change this to the namespace the arangodb-servicemonitor instance is running in
  namespace: prometheus
  labels:
    serviceapp: arangodb-servicemonitor
    release: prometheus
spec:
  selector:
    # Targets arangodb service
    app: arangodb
  endpoints:
    # TO DO: use an array (List) of endpoints to monitor many endpoints
    - port: metrics
      interval: 30s
  namespaceSelector:
    matchNames:
    # TO DO: use an array (List) of endpoints to monitor many endpoints
    - default

但是当我执行terraform apply时,我收到关于我添加的bearer_token的错误消息:

有关信息,我需要添加此令牌以连接到ArangoDB外部服务:

svmlkihl

svmlkihl1#

创建Kubernetes服务并以相同的方式使用Prometheus服务监视器
创建K8s服务

kind: Service
apiVersion: v1
metadata:
 name: arangoDB
spec:
 type: ClusterIP
 ports:
 - name: metrics
   port: 9000
   targetPort: 9000

在此prometheus中创建该数据库的Endpoint配置应该能够访问数据库的IP

kind: Endpoints
apiVersion: v1
metadata:
 name: arangoDB
subsets:
 - addresses:
     - ip: IP of Database
   ports: 
     - name: metrics
       port: 9000

因此,Nice服务监视器将检查Kubernetes服务,Kubernetes服务将指向端点和数据库,并从外部服务获取指标。
请在以下位置检查端点服务创建详细信息:https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors

相关问题