【问题标题】:How to use prometheus operator service monitor to monitor the external service that is not running in the kubernetes pod如何使用prometheus operator service monitor监控kubernetes pod中没有运行的外部服务
【发布时间】:2021-06-03 09:51:36
【问题描述】:

我已成功配置我的服务监视器以监视提供在 kubernetes pod 中运行的指标的 API。但是,我也想将外部服务添加到我的服务监视器目标中。此外部服务是 arangoDB oasis 导出器指标 (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 外部服务:

【问题讨论】:

    标签: service kubernetes-helm monitor prometheus-operator


    【解决方案1】:

    创建 Kubernetes 服务并以同样的方式使用 Prometheus ServiceMonitor

    创建 K8s 服务

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

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

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

    如此好的服务监视器将检查 Kubernetes 服务,并且 Kubernetes 服务将指向端点和数据库并从外部服务获取指标。

    检查端点服务创建详细信息。 :https://kubernetes.io/docs/concepts/services-networking/service/#services-without-selectors

    【讨论】:

    • 谢谢@Harsh Manvar 我正在尝试配置它,但是我有一个问题,为了连接到我的 arangoDB,我需要根据 arangoDB 绿洲页面添加此参数(bearer_token):scrape_configs : - job_name: 'deployment' bearer_token: '' 方案: 'https' static_configs: - 目标: ['xxxxx.arangodb.cloud:xxxx'] tls_config: insecure_skip_verify: true 怎么做我加这个参数?
    • 我在 service.yaml 中添加了这样的内容:spec: type: ClusterIP externalName: xxxxx.arangodb.cloud:xxxx ports: - name: metrics port: 9000 targetPort: 9000 protocol: TCP - bearer_token :[ARANGODB_TOKEN] 类型:ExternalName 但我收到错误“arangodb-servicemonitor/templates/service.yaml 上的 YAML 解析错误:将 YAML 转换为 JSON 时出错:yaml:第 17 行:未找到预期的 '-' 指示符”。我是否还需要在 endpoints.yaml 中添加此参数?我在这里做错了什么?
    • 抱歉,评论里不太清楚,我会在帖子中添加我的新配置文件,请看我更新的帖子
    • @shuti 您的抓取指标或作业配置错误,您必须使用:bearer_token_file : /etc/prometheus/prometheus.token 之类的东西。将令牌保存到文件中,您可以像上面那样传递它。我也不是 100% 确定,因为抓取文件中存在 YAML 错误,所以请检查第 17 行。
    • 谢谢@Harsh Manvar,我也找到了这个 arangoDB 导出器,我也应该部署 arangoDB 导出器吗? github.com/arangodb-helper/arangodb-exporter 我的项目相当复杂,因为它不是 prometheus 配置文件的直接配置,而是我通过 Helm chart 配置所有内容并通过 Terraform 部署
    猜你喜欢
    • 1970-01-01
    • 2021-02-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多