Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /
/ / /

Implemente un recurso para utilizar con Prometheus

Puedes utilizar el mongodb-prometheus-sample.yaml archivo para implementar un recurso de MongoDB en tu clúster de Kubernetes, con un ServiceMonitor para indicarle a Prometheus cómo consumir los datos de métricas del mismo.

El ejemplo especifica un recurso MongoDB simple con un usuario y el spec.prometheus atributo con autenticación HTTP básica y sin TLS. La muestra te permite probar las métricas que MongoDB envía a Prometheus.

Nota

No puedes usar Prometheus con una implementación multi-Kubernetes-clúster.

Probamos esta configuración con la versión 0.54 del Operador Prometheus.

  • Kubernetes 1.16+

  • Timón 3+

Puedes instalar el Prometheus operador usando Helm. Para obtener más información, consulta las instrucciones de instalación.

Para instalar el Operador Prometheus usando Helm, ejecuta los siguientes comandos:

helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update
helm install prometheus prometheus-community/kube-prometheus-stack \
--namespace <prometheus-system> \
--create-namespace

Ejecuta el siguiente comando para instalar el Operador Kubernetes y crear un namespace que contenga al Operador Kubernetes y a los recursos:

helm install mongodb-kubernetes-operator mongodb/mongodb-kubernetes \
--namespace <mongodb> --create-namespace

Para obtener más información,consulte Instalar los controladores MongoDB para el operador de Kubernetes.

Puede usar el archivo mongodb-prometheus-sample.yaml para implementar un recurso de MongoDB en su clúster de Kubernetes, con un ServiceMonitor para indicar a Prometheus cómo consumir datos de métricas de ese recurso.

Puede aplicar la muestra directamente con el siguiente comando:

Nota

Especifica la ruta completa al archivo mongodb-prometheus-sample.yaml. Asegúrese de especificar spec.credentials y spec.cloudManager.configMapRef.name.

kubectl apply -f <mongodb-prometheus-sample.yaml>

Este comando crea dos secrets que contienen la autenticación de un nuevo usuario de MongoDB y la autenticación básica de HTTP para el endpoint de Prometheus. El comando crea ambos secrets en el espacio de nombres mongodb.

Este comando también crea un ServiceMonitor que configura Prometheus para consumir las métricas de este recurso. Este comando crea el ServiceMonitor en el namespace prometheus-system.

  1. Para instalar cert-manager utilizando Helm, consulta la documentación de instalación de cert-manager.

  2. Para crear un Issuer cert-manager, consulte la documentación de configuración de cert-manager

  3. Para crear un certificado, consulta la documentación de uso de cert-manager.

Importante

¡NO use esta configuración en entornos de producción! Un experto en seguridad le aconsejará sobre cómo configurar TLS.

Para habilitar TLS, debe agregar una nueva entrada a la sección del recurso personalizado spec.prometheus de MongoDB. Ejecute la siguiente operación de parche para agregar la entrada necesaria.

Nota

tlsSecretKeyRef.name apunta a un secreto de tipo kubernetes.io/tls que posee un certificado de servidor.

kubectl patch mdbc mongodb --type='json' \
-p='[{"op": "add", "path": "/spec/prometheus/tlsSecretKeyRef", "value":{"name": "prometheus-target-cert"}}]' \
--namespace mongodb

La siguiente respuesta aparece:

mongodbenterprise.mongodbenterprise.mongodb.com/mongodb patched

Después de unos minutos, el recurso MongoDB debería volver a la fase de ejecución. Ahora debe configurar Prometheus ServiceMonitor para que apunte al punto final HTTPS.

Para actualizar ServiceMonitor, ejecute el siguiente comando para parchear el recurso nuevamente:

kubectl patch servicemonitors mongodb-sm --type='json' \
-p='
[
{"op": "replace", "path": "/spec/endpoints/0/scheme", "value": "https"},
{"op": "add", "path": "/spec/endpoints/0/tlsConfig", "value": {"insecureSkipVerify": true}}
]
' \
--namespace mongodb

Aparece la siguiente respuesta:

servicemonitor.monitoring.coreos.com/mongodb-sm patched

Con estos cambios, el nuevo ServiceMonitor apunta al endpoint HTTPS (definido en /spec/endpoints/0/scheme). También configuraste spec/endpoints/0/tlsConfig/insecureSkipVerify en true, para que Prometheus no verifique los certificados TLS en el extremo de MongoDB.

Prometheus ahora debería poder raspar el objetivo de MongoDB mediante HTTPS.

Cree el siguiente archivo mongodb-prometheus-sample.yaml para implementar un recurso de MongoDB en su clúster de Kubernetes, con un ServiceMonitor que indica a Prometheus cómo obtener datos de métricas de ella.

Este archivo de ejemplo especifica un recurso MongoDB simple con un usuario y el atributo con autenticación spec.prometheus HTTP básica y sin TLS. El ejemplo permite probar las métricas que MongoDB envía a Prometheus.

Para obtener más información, consulte Configuración de Prometheus.

---
apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-replica-set
spec:
members: 3
version: 8.0.0
cloudManager:
configMapRef:
name: <project-configmap>
credentials: <credentials-secret>
type: ReplicaSet
persistent: true
prometheus:
passwordSecretRef:
# SecretRef to a Secret with a 'password' entry on it.
name: metrics-endpoint-password
# change this value to your Prometheus username
username: prometheus-username
# Enables HTTPS on the prometheus scrapping endpoint
# This should be a reference to a Secret type kuberentes.io/tls
# tlsSecretKeyRef:
# name: <prometheus-tls-cert-secret>
# Port for Prometheus, default is 9216
# port: 9216
#
# Metrics path for Prometheus, default is /metrics
# metricsPath: '/metrics'
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
# This needs to match `spec.ServiceMonitorSelector.matchLabels` from your
# `prometheuses.monitoring.coreos.com` resouce.
labels:
release: prometheus
name: mongodb-sm
# Make sure this namespace is the same as in `spec.namespaceSelector`.
namespace: mongodb
spec:
endpoints:
# Configuring a Prometheus Endpoint with basic Auth.
# `prom-secret` is a Secret containing a `username` and `password` entries.
- basicAuth:
password:
key: password
name: metrics-endpoint-creds
username:
key: username
name: metrics-endpoint-creds
# This port matches what we created in our MongoDB Service.
port: prometheus
# If using HTTPS enabled endpoint, change scheme to https
scheme: http
# Configure different TLS related settings. For more information, see:
# https://github.com/prometheus-operator/prometheus-operator/blob/main/pkg/apis/monitoring/v1/types.go#L909
# tlsConfig:
# insecureSkipVerify: true
# What namespace to watch
namespaceSelector:
matchNames:
# Change this to the namespace the MongoDB resource was deployed.
- mongodb
# Service labels to match
selector:
matchLabels:
app: my-replica-set-svc
---
apiVersion: v1
kind: Secret
metadata:
name: metrics-endpoint-creds
namespace: mongodb
type: Opaque
stringData:
password: 'Not-So-Secure!'
username: prometheus-username
...

Los siguientes ejemplos muestran las definiciones de recursos necesarias para utilizar Prometheus con tu recurso MongoDB.

Para obtener más información, consulte Configuración de Prometheus.

---
apiVersion: mongodb.com/v1
kind: MongoDB
metadata:
name: my-replica-set
spec:
members: 3
version: 8.0.0
cloudManager:
configMapRef:
name: <project-configmap>
credentials: <credentials-secret>
type: ReplicaSet
persistent: true
prometheus:
passwordSecretRef:
name: metrics-endpoint-password
username: prometheus-username
...
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
release: prometheus
name: mongodb-sm
namespace: mongodb
spec:
endpoints:
- basicAuth:
password:
key: password
name: metrics-endpoint-creds
username:
key: username
name: metrics-endpoint-creds
port: prometheus
scheme: http
namespaceSelector:
matchNames:
- mongodb
selector:
matchLabels:
app: my-replica-set-svc
...
---
apiVersion: v1
kind: Secret
metadata:
name: metrics-endpoint-creds
namespace: mongodb
type: Opaque
stringData:
password: 'Not-So-Secure!'
username: prometheus-username
...

Volver

Clúster fragmentado

En esta página