es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Conecta la aplicación de Flask a Prometheus en un clúster de Kubernetes.

Soy nuevo en Prometheus y tengo una aplicación Flask simple en un clúster de Kubernetes, también tengo servicios de Prometheus-Monitoring-Grafana en el clúster en el espacio de nombres llamado “prometheus-monitoring”. Pero el problema es que cuando creo un ServiceMonitor a través de un archivo .yaml para conectar mi aplicación para ser monitoreada con Prometheus, veo que los objetivos no se agregan, pero en la configuración veo que se agregó el trabajo. Pero el estado en Prometheus – Service Discovery es “Dropped”.

No tengo idea de por qué mi servicio no se conecta al ServiceMonitor.

serviceMonitor/default/monitoring-webapp/0 (0 / 2 objetivos activos)

app.py

app = Flask(__name__)
metrics = PrometheusMetrics(app)

@app.route('/api')
def index():
    return 'ok'

deployment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: webapp-deployment
  labels:
    app: webapp
spec:
  replicas: 1
  selector:
    matchLabels:
      app: webapp
  template:
    metadata:
      labels:
        app: webapp
    spec:
      containers:
      - name: webapp
        image: dmitriy83/flaskone:latest
        imagePullPolicy: Always
        resources:
          requests:
            memory: "64Mi"
            cpu: "250m"
          limits:
            memory: "128Mi"
            cpu: "500m"
        ports:
        - containerPort: 5000
        env:
          - name: flaskurl
            value: http://flasktwo-service:5003
      imagePullSecrets:
      - name: dockersecret 

apiVersion: v1
kind: Service
metadata:
  name: webapp-service
spec:
  selector:
    app: webapp
  ports:
    - name: service
      protocol: TCP
      port: 5000
      targetPort: 5000

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: monitoring-webapp
  labels:
      release: prometheus-monitoring
      app: webapp
spec:
  endpoints:
  - path: /metrics
    port: service
    targetPort: 5000
  namespaceSelector:
    matchNames:
    - default
  selector:
    matchLabels:
      app: webapp
Tags:  ,

Answer

  1. Avatar for davy.ai

    El problema que estás enfrentando es que los objetivos de tu ServiceMonitor no se están agregando en Prometheus, aunque puedes ver que el trabajo se está agregando en la configuración. El primer paso para solucionar este problema es verificar que el archivo YAML de ServiceMonitor esté configurado correctamente para que coincida con las etiquetas de tu aplicación Flask. A partir del archivo YAML que proporcionaste, parece que las etiquetas coinciden con las etiquetas en tus archivos YAML de Deployment y Service, pero es una buena práctica verificarlo nuevamente.

    Asumiendo que el archivo YAML está configurado correctamente, el siguiente paso es verificar si Prometheus puede descubrir los objetivos de ServiceMonitor. Puedes hacer esto revisando los registros de Prometheus en busca de cualquier error relacionado con el Descubrimiento de Servicios. Si no hay errores, intenta ejecutar el comando promtool para validar la sintaxis de tu archivo YAML de ServiceMonitor.

    Si la sintaxis es correcta, el problema podría estar relacionado con el archivo de configuración de Prometheus. Verifica que el archivo de configuración tenga la configuración correcta de Descubrimiento de Servicios para Kubernetes, y que el archivo prometheus.yml incluya el campo serviceMonitorSelector o serviceMonitorNamespaceSelector para seleccionar correctamente los ServiceMonitors. También puedes intentar agregar manualmente el objetivo al archivo de configuración de Prometheus para ver si funciona.

    Por último, verifica que el panel de Grafana para tu aplicación Flask esté configurado correctamente para consultar las métricas de Prometheus. Si todo parece estar configurado correctamente, es posible que debas investigar el problema más a fondo con registros adicionales y depuración.

Comments are closed.