Requisitos previos
Como se menciona en Parte 1 del blog, necesitamos ejecutar Prometheus y Grafana en el entorno Kubernetes en nuestro Amazon EKS. La forma recomendada es utilizar Kube-Prometheusun proyecto de código abierto. Esto no sólo simplificará el despliegue, sino que añade muchos más componentes, como el Exportador de nodos Prometheus que supervisa las métricas del host Linux y se utiliza normalmente en un entorno Kubernetes.
Clonar el https://github.com/coreos/kube-prometheus de Github, pero no crees ningún manifiesto todavía.
Componentes incluidos en este paquete:
- En Operador de Prometheus
- Alta disponibilidad Prometeo
- Alta disponibilidad Gestor de alertas
- Exportador de nodos Prometheus
- Adaptador de Prometheus para las API de métricas de Kubernetes
- kube-state-metrics
- Grafana
1 2 3 4 5 6 |
➜ kube-prometheus git:(maestro) ✗ ls ACA LÉAME.md ejemplos jsonnet guiones LICENCIA construya.sh experimental jsonnetfile.json sincronizar-a-interno-registro.jsonnet Makefile código-de-diríjase a.md ir.mod jsonnetfile.cierre.json prueba.sh AVISO docs ir.suma kustomización.yaml pruebas PROPIETARIOS ejemplo.jsonnet piratear manifiestos |
Nota:
Este tutorial funciona sobre la base de que los manifiestos que traen los recursos pertinentes para Prometheus Operator todavía se encuentran en la carpeta manifiestos.
Si se han producido cambios, le rogamos que se adapte a ellos, ya que el repositorio es experimental y está sujeto a cambios.
Crear el Couchbase ServiceMonitor
ServiceMonitor indica a Prometheus que supervise un recurso de servicio que define los puntos finales que Prometheus rastrea para las métricas entrantes proporcionadas por couchbase-exporter. Este archivo,couchbase-serviceMonitor.yaml, debe ser kube-prometheus/manifestos directorio.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
apiVersion: monitoring.coreos.com/v1 amable: ServiceMonitor metadatos: nombre: couchbase espacio de nombres: por defecto # <1> etiquetas: aplicación: couchbase spec: puntos finales: - puerto: métrica # <2> intervalo: 5s # <3> namespaceSelector: matchNames: - por defecto # selector: matchLabels: aplicación: couchbase # <5> |
Leyenda:
- Puede que desee incluir nuestro Couchbase
ServiceMonitor
en elcontrol
junto con los demás espacios de nombresServicioMonitores
. Para los ejemplos de este tutorial lo hemos dejado en elpor defecto
para facilitar su uso. - En
puerto
puede ser un valor de cadena y funcionará para diferentes números de puerto del servicio siempre que el nombre coincida. intervalo
indica a Prometheus la frecuencia con la que debe rastrear el endpoint. En este caso queremos que coincida con el espacio de nombres del archivoServicio
que crearemos en el siguiente paso,- tenga en cuenta que el espacio de nombres nuestro
Servicio
debe coincidir con el espacio de nombres del clúster de Couchbase del que queremos obtener las métricas. - Similar a la
namespaceSelector
, se trata de un simplelabelSelector
que seleccionará el servicio que vamos a crear.
Crear el servicio de métricas Couchbase
En Servicio
definirá el puerto que describimos en nuestro ServiceMonitor en spec.endpoint[0].port
antes. su expediente,couchbase-service.yaml, debe ser kube-prometheus/manifestos directorio.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
apiVersion: v1 amable: Servicio metadatos: nombre: couchbase-metrics espacio de nombres: por defecto # <1> etiquetas: aplicación: couchbase spec: puertos: - nombre: métricas puerto: 9091 # <2> protocolo: TCP selector: aplicación: couchbase couchbase_cluster: cb-ejemplo # <3> |
Leyenda:
- Como se ha mencionado anteriormente, asegúrese de que el
Servicio
está en el mismo espacio de nombres que el clúster de Couchbase del que desea obtener métricas, de lo contrario no se seleccionará ningún pod y no se mostrará ningún endpoint en Prometheus Targets. Asegúrese también de que este valor coincide conspec.namespaceSelector
en elServiceMonitor
. - Mantenga este puerto en su valor por defecto de 9091 ya que este es el puerto al que exportará Couchbase Exporter.
- Se puede añadir un nivel más de granularidad a tu selector en el caso de que tengas más de un Cluster Couchbase funcionando en el mismo espacio de nombres.
Descubrimiento de servicios dinámicos Prometheus
Prometheus descubre los puntos finales de monitorización, dinámicamente, haciendo coincidir las etiquetas del ServiceMonitor con los Servicios que especifican el clúster y los puntos finales, Puerto 9091 en nuestro caso.
Crear los manifiestos
Siga el comando específico dado en el LÉEME de Github para que aparezcan nuestros recursos creados junto con los demás manifiestos predeterminados proporcionados.
Componentes como Prometheus, AlertManager, NodeExporter y Grafana deberían arrancar y podemos confirmarlo inspeccionando los pods en el namespace control
.
Comencemos.
Crear el espacio de nombres Kubernetes y CRDs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
kube-prometheus git:(maestro) $ kubectl crear -f manifiestos/configuración espacio de nombres/control creado definición personalizada de recursos.apiextensions.k8s.io/alertmanagers.seguimiento.coreos.com creado definición personalizada de recursos.apiextensions.k8s.io/podmonitores.seguimiento.coreos.com creado definición personalizada de recursos.apiextensions.k8s.io/prometeos.seguimiento.coreos.com creado definición personalizada de recursos.apiextensions.k8s.io/prometheusrules.seguimiento.coreos.com creado definición personalizada de recursos.apiextensions.k8s.io/servicemonitores.seguimiento.coreos.com creado definición personalizada de recursos.apiextensions.k8s.io/thanosrulers.seguimiento.coreos.com creado clusterrole.rbac.autorización.k8s.io/prometheus-operador creado clusterrolebinding.rbac.autorización.k8s.io/prometheus-operador creado despliegue.aplicaciones/prometheus-operador creado servicio/prometheus-operador creado cuenta de servicio/prometheus-operador creado |
Espere unos minutos antes del siguiente paso, pero puede ser necesario ejecutar el comando varias veces para que todos los componentes se creen correctamente.
Crear los recursos restantes
1 2 3 4 5 6 7 8 9 10 11 |
kube-prometheus git:(maestro) $ kubectl crear -f manifiestos/ alertmanager.seguimiento.coreos.com/principal creado secreto/alertmanager-principal creado servicio/alertmanager-principal creado cuenta de servicio/alertmanager-principal creado servicemonitor.seguimiento.coreos.com/alertmanager creado servicio/couchbase-métricas creado servicemonitor.seguimiento.coreos.com/couchbase creado ... servicemonitor.seguimiento.coreos.com/kubelet creado |
Comprobar los espacios de nombres de supervisión
Componentes como Prometheus, AlertManager, NodeExporter y Grafana deberían arrancar y podemos confirmarlo inspeccionando los pods en el namespace control
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl consiga vainas -n control NOMBRE LISTO ESTADO RESTARTS EDAD alertmanager-principal-0 2/2 Ejecutar 0 69m alertmanager-principal-1 2/2 Ejecutar 0 69m alertmanager-principal-2 2/2 Ejecutar 0 69m grafana-75d8c76bdd-4l284 1/1 Ejecutar 0 69m kube-estado-métricas-54dc88ccd8-nntts 3/3 Ejecutar 0 69m nodo-exportador-pk65z 2/2 Ejecutar 0 69m nodo-exportador-s9k9n 2/2 Ejecutar 0 69m nodo-exportador-vhjpw 2/2 Ejecutar 0 69m prometheus-adaptador-8667948d79-vfcbv 1/1 Ejecutar 0 69m prometheus-k8s-0 3/3 Ejecutar 1 69m prometheus-k8s-1 3/3 Ejecutar 0 69m prometheus-operador-696554666f-9cnnv 2/2 Ejecutar 0 89m |
Comprueba que nuestro ServiceMonitor ha sido creado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
$ kubectl consiga servicemonitores --todos-espacios de nombres NAMESPACE NOMBRE EDAD por defecto couchbase 2m33s control alertmanager 2m33s control coredns 2m22s control grafana 2m26s control kube-apiserver 2m22s control kube-controlador-director 2m22s control kube-programador 2m21s control kube-estado-métricas 2m25s control kubelet 2m21s control nodo-exportador 2m25s control prometheus 2m22s control prometheus-operador 2m23s |
Comprobar que nuestro Servicio ha sido creado.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ kubectl consiga svc --todos-espacios de nombres NAMESPACE NOMBRE PUERTO(S) por defecto cb-ejemplo 8091/TCP,8092/TCP,8093/TCP, por defecto cb-ejemplo-srv 11210/TCP,11207/TCP por defecto couchbase-métricas 9091/TCP por defecto couchbase-operador 8080/TCP,8383/TCP por defecto couchbase-operador-admisión 443/TCP por defecto kubernetes 443/TCP kube-sistema kube-dns 53/UDP,53/TCP kube-sistema kubelet 10250/TCP,10255/TCP,4194/TCP,... control alertmanager-principal 9093/TCP control alertmanager-operado 9093/TCP,9094/TCP,9094/UDP control grafana 3000/TCP control kube-estado-métricas 8443/TCP,9443/TCP control nodo-exportador 9100/TCP control prometheus-adaptador 443/TCP control prometheus-k8s 9090/TCP control prometheus-operado 9090/TCP control prometheus-operador 8443/TCP |
En la salida anterior, no sólo vemos los servicios, sino también los puertos. Usaremos esta información para reenviar estos puertos, como hicimos con la interfaz de administración de Couchbase, para acceder a estos servicios.
Para comprobar que todo funciona correctamente con la implantación de Prometheus Operator, ejecute el siguiente comando para ver los registros:
1 |
$ kubectl Registros -f despliegues/prometheus-operador -n control prometheus-operador |
Reenvío de puertos
Ya hemos reenviado el puerto 8091 de Couchbase Admin UI desde un nodo de Couchbase anteriormente, pero voy a dar esto de nuevo, esta vez desde el punto de vista del servicio.
Además de ese puerto, en realidad sólo necesitamos el acceso al servicio Grafana, Puerto 3000. Sin embargo, vamos a acceder al servicio Prometheus Puerto 9090 también. Entonces podemos echar un vistazo a todas las métricas de los diferentes exportadores y probar un poco de PromQL, el Prometheus Query Language también.
Ahora bien, las 3 anteriores deberían ser suficientes. Sin embargo, hay alguna ventaja adicional de echar un vistazo a las métricas de cada servicio individual también. El exportador de Couchbase expone las métricas de Couchbase en el puerto 9091. Por lo tanto, podemos reenviar esos puertos también. Ten en cuenta que sólo necesitas acceso a Grafana.
1 2 3 4 5 6 |
kubectl --espacio de nombres por defecto puerto-adelante svc/cb-ejemplo 8091 & kubectl --espacio de nombres control puerto-adelante svc/prometheus-k8s 9090 & kubectl --espacio de nombres control puerto-adelante svc/grafana 3000 & kubectl --espacio de nombres control puerto-adelante svc/alertmanager-principal 9093 & kubectl --espacio de nombres control puerto-adelante svc/nodo-exportador 9100 & kubectl --espacio de nombres por defecto puerto-adelante svc/couchbase-métricas 9091 & |
Echa un vistazo a Prometheus Targets
Acceso: http://localhost:9090/targets
Todos los objetivos de Prometheus deberían estar ARRIBA. Hay bastantes de estos desde Kube-Prometheus desplegado un montón de exportadores.
Consulta las métricas de Couchbase sin procesar
Acceso: http://localhost:9091/metrics
1 2 3 4 5 6 7 8 9 10 11 12 |
# HELP cbbucketinfo_basic_dataused_bytes basic_dataused # TYPE cbbucketinfo_basic_dataused_bytes indicador cbbucketinfo_basic_dataused_bytes{cubo="almohada"} 1.84784896e+08 cbbucketinfo_basic_dataused_bytes{cubo="viaje-muestra"} 1.51648256e+08 # HELP cbbucketinfo_basic_diskfetches basic_diskfetches # TYPE cbbucketinfo_basic_diskfetches calibre cbbucketinfo_basic_diskfetches{cubo="almohada"} 0 cbbucketinfo_basic_diskfetches{cubo="viaje-muestra"} 0 # HELP cbbucketinfo_basic_diskused_bytes basic_diskused # TYPE indicador cbbucketinfo_basic_diskused_bytes cbbucketinfo_basic_diskused_bytes{cubo="almohada"} 1.98967788e+08 cbbucketinfo_basic_diskused_bytes{cubo="viaje-muestra"} 1.91734038e+08 |
Esta salida es útil, ya que permite buscar rápidamente en la lista.
Prueba una consulta PromQL básica
En la interfaz de usuario anterior, haga clic en Gráfico primero.
El cuadro desplegable le ofrece la lista de métricas raspadas. Esta es la lista completa de todos las métricas raspadas por todos los exportadores y esa es una lista bastante desalentadora. Un método para reducir la lista a sólo métricas Couchbase, es, por supuesto, acceder al punto final 9091 como se describió anteriormente.
Eche un vistazo a Grafana
Acceso: http://localhost:3000
El nombre de usuario y la contraseña son: admin/admin
El despliegue kube-prometheus de Grafana ya tiene definida la fuente de datos Prometheus y un amplio conjunto de Cuadros de mando por defecto. Echemos un vistazo al Cuadro de mandos del nodo por defecto
Crear un panel de Grafana de ejemplo para supervisar las métricas de Couchbase
No vamos a construir un Dashboard completo, sino una pequeña muestra con algunos paneles para mostrar cómo se hace. Este dashboard monitorizará el número de elementos en un bucket y el número de operaciones GET y SET.
Nota: Por favor, ejecute la aplicación de lucha de almohadas tal y como se describe en la Parte 1. Esto generará las operaciones que nos interesa monitorizar.
Métricas Prometheus
Acceso: http://localhost:9091/gráfico
Estamos interesados en los elementos actuales de un cubo. Hay un par de métricas que proporcionan esto, a nivel de cluster y por nodo. Vamos a utilizar la métrica por nodo. Así permitiremos que Prometheus gestione todas las agregaciones, según las mejores prácticas. Otra ventaja es que incluso podemos mostrar los elementos actuales en el cubo, por nodo, sólo para comprobar si nuestro conjunto de datos está sesgado.
Veamos un elemento:
1 |
cbpernodebucket_curr_items{cubo="almohada",punto final="métricas",instancia="192.168.2.93:9091",empleo="couchbase-metrics",espacio de nombres="por defecto",nodo="cb-example-0000.cb-example.default.svc:8091",vaina="cb-example-0000",servicio="couchbase-metrics"} |
En el ejemplo anterior, nos interesan estas etiquetas: cuboparte de nodo (la parte central, cb-ejemplo que es el nombre del cluster, y vaina. También estamos interesados en servicio para filtrar. Esto nos ayudará a diseñar un panel de control en el que podremos ver las métricas por bucket, nodo o clúster.
El cuadro de mandos de muestra
Vamos a crear un nuevo salpicadero de muestra en blanco.
Añadir variables
Como queremos las métricas por cubo, nodo y cluster, vamos a añadir estas variables para que se puedan seleccionar en un desplegable.
El ejemplo anterior crea la variable bucket. Observe la expresión Query y Regex.
Vamos a crear 2 más para tener 3 variables:
La consulta no cambia para estos 3, pero aquí están las expresiones Regex:
1 2 3 4 5 |
Consulta: {servicio="couchbase-metrics"} $nodo: Regex= .*vaina="(.*?)".* $cubo: Regex= .*cubo="(.*?)".* $grupo: Regex=.*nodo=\".*\.(.*)\..*\..*:8091\".* |
Creación de un panel
Crear 3 paneles para elementos actuales, GETs y SETs
Puede duplicar cada panel y editarlos. Estas son las consultas:
Panel Items: sum(cbpernodebucket_curr_items{bucket=~"$bucket",pod=~"$node"}) by (bucket)
Panel GETs: sum(cbpernodebucket_cmd_get{bucket=~"$bucket",pod=~"$node"}) by (bucket)
Panel SETs: sum(cbpernodebucket_cmd_set{bucket=~"$bucket",pod=~"$node"}) by (bucket)
El ejemplo completo de Grafana Dashboard
Este es el aspecto final de nuestro panel de control de muestra.
Limpieza
Por último, limpie su despliegue:
1 2 3 4 5 6 7 |
kube-prometheus git:(maestro) $ kubectl borrar --ignore-no-encontrado=verdadero -f manifiestos/ -f manifiestos/configuración cao-2 $ kubectl borrar -f pelea de almohadas-datos-cargador.yaml cao-2 $ kubectl borrar -f mi-grupo.yaml cao-2 $ papelera/cbopcfg | kubectl borrar -f - cao-2 $ kubectl borrar -f crd.yaml cao-2 $ eksctl borrar grupo --región=us-este-1 --nombre=prasadCAO2 |
Recursos:
- Descargar Couchbase Autonomous Operator 2.0 Beta para Kubernetes
- Introducción a Couchbase Autonomous Operator 2.0 Beta
- Tutorial - Operador autónomo de Couchbase en EKS
- Comparta su opinión sobre el Foros de Couchbase