Couchbase Server actualmente tiene una plétora de estadísticas de rendimiento de acceso a datos en KV y consulta a los recursos del sistema como disco IO y CPU a los nuevos servicios como eventos. Ha habido varios exportadores de Prometheus creados por la comunidad para Couchbase, así como el programa exportador para supervisar Sync Gateway y estamos aprovechando ese impulso para añadirlo primero a Kubernetes y OpenShift de forma oficial.
Con el lanzamiento de Operador Autónomo 2.0, admitimos las estadísticas de Prometheus junto con los despliegues gestionados de Operador. Aunque no pero soportado oficialmente, también hay configuraciones alternativas de tiempo de ejecución para lograr los mismos objetivos. Más información al final.
En esta entrada del blog se explicará cómo configurar el exportador junto con Prometheus y Grafana, además de ofrecer una breve descripción general de cómo supervisar un Base de datos NoSQL.
Fondo
Couchbase Server ya expone métricas en formato JSON a través de una interfaz Rest, por lo que el trabajo del exportador es tomar esas métricas y mostrarlas en un formato compatible con Prometheus.
Convierte las estadísticas REST endpoint de Couchbase Server como estas, que se encuentran en bucket info -
1 2 3 4 5 6 7 8 9 10 11 |
basicStats: { quotaPercentUsed: 24.55603790283203, opsPerSec: 0, diskFetches: 0, itemCount: 7303, discoUsado: 28024334, datosUtilizados: 19720703, memUsado: 25748872, vbActiveNumNonResident: 0 }, |
En un formato como éste
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
# HELP CBBucketInfo_basic_dataused_bytes basic_dataused # TYPE Calibre CBBucketInfo_basic_dataused_bytes CBBucketInfo_basic_dataused_bytes{bucket="cerveza-muestra"} 1.9720703e+07 CBBucketInfo_basic_dataused_bytes{bucket="tester"} 8.435712e+06 # HELP CBBucketInfo_basic_diskfetches basic_diskfetches # TYPE Calibrador CBBucketInfo_basic_diskfetches CBBucketInfo_basic_diskfetches{bucket="cerveza-muestra"} 0 CBBucketInfo_basic_diskfetches{bucket="tester"} 0 # HELP CBBucketInfo_basic_diskused_bytes basic_diskused # TYPE Calibre CBBucketInfo_basic_diskused_bytes CBBucketInfo_basic_diskused_bytes{bucket="beer-sample"} 2.8024334e+07 CBBucketInfo_basic_diskused_bytes{bucket="tester"} 8.463402e+06 # HELP CBBucketInfo_basic_itemcount basic_itemcount # TYPE Calibre CBBucketInfo_basic_itemcount CBBucketInfo_basic_itemcount{cubo="muestra-de-cerveza"} 7303 CBBucketInfo_basic_itemcount{bucket="tester"} 0 |
Que puede utilizarse para crear cuadros de mando como éste.
A nivel de componentes, se hace así:
Profundicemos un poco más en cada componente.
Exportador Couchbase
En esencia, Couchbase Exporter proporciona el primer bloque de construcción en este flujo de trabajo al proporcionar puntos finales de Prometheus que se extraen en un intervalo definido por el servidor Prometheus. Para ello, también ofrece opciones de seguridad de red con TLS y mTLS y protección de cualquier posible dato sensible del exportador mediante un token portador.
Mientras se ejecuta dentro del Operador Autónomo, el Exportador Couchbase vive como un sidecar en cada Pod Kubernetes, maximizando la red local cuando se trata de estadísticas de nodos específicos y reduciendo la cantidad de tráfico intracluster. Además, proporciona cierto grado de redundancia; si un pod se cae, las estadísticas generales del clúster y las estadísticas de los pods activos persisten.
Esto significa que cada nodo que ejecuta Couchbase tiene que ejecutar una copia del exportador para que estas estadísticas por nodo estén disponibles. Cada copia del exportador sólo extraerá estadísticas por nodo del nodo en el que se esté ejecutando. Una vez configurado, cada uno de estos exportadores ejecutará un punto final disponible para cualquier servidor Prometheus.
Prometeo
Prometheus es un conjunto de herramientas de alerta y monitorización de sistemas de código abierto, y el segundo proyecto en unirse al CNCF después de Kubernetes, por lo que es un ajuste natural para entornos Kubernetes y ampliamente adoptado.
Es más un protocolo y un conjunto de herramientas para poblar una base de datos de series temporales y no una herramienta de panel de control. Dispone de una ligera capacidad para graficar estadísticas, pero es más habitual utilizar Grafana.
Grafana
Para visualizar los datos recopilados por Prometheus podemos utilizar la increíblemente flexible Grafana, que consume la API de Prometheus para crear cuadros de mando personalizables. Grafana es una plataforma de código abierto de visualización de datos y alertas, que se utiliza sobre todo para crear cuadros de mando increíblemente completos y personalizables por el usuario.
Los cuadros de mando pueden ser bastante específicos para lo que a ti como usuario te interesa, por lo que querrás personalizarlos en consecuencia. Si quieres un punto de partida, hay algunos paneles de Grafana de muestra en la sección couchbase-exporter repositorio GitHub que se irá mejorando con el tiempo. Todas las contribuciones son bienvenidas.
Instalación
Para que todo funcione, necesitarás configurar los cuatro componentes principales de este pipeline de monitorización, el propio Couchbase Server, el Couchbase Exporter, Prometheus y Grafana.
El exportador es compatible con las versiones 5.5.x y posteriores de Couchbase Server, pero recomendamos utilizar la versión 6.0.4 o posterior debido al próximo fin de vida de la versión 5.x.
Configuración de Grafana
Para instalar y configurar Grafana, elija la plataforma correspondiente y siga las instrucciones de instalación. guía. Una vez que esté funcionando, cuando cargamos Grafana por primera vez en http://localhost:3000 te pedirá un nombre de usuario y una contraseña, que es "admin" para ambos. A continuación, le pedirá que establezca una nueva contraseña.
El siguiente paso es añadir Prometheus como fuente de datos. Dependiendo de dónde esté ejecutando Prometheus, la dirección URL HTTP será localhost o la dirección donde lo haya alojado o expuesto, con el puerto 9090. A continuación se muestra un ejemplo de Prometheus ejecutándose en Docker.
A continuación, podemos importar uno de nuestros cuadros de mando de muestra para visualizar nuestros datos. Para importar el cuadro de mandos que desee, sitúese sobre el icono del signo más de la barra lateral izquierda y seleccione "Importar". Como punto de partida, copie y pegue el JSON proporcionado en la carpeta Grafana del exportador y, a continuación, pulse Cargar.
Es posible que tenga que ir a Configuración -> Variables -> cubo y pulse Actualizar para que se carguen los cubos correctos y aparezcan los datos.
Seguridad
El exportador admite la comunicación a través de TLS y mTLS, así como la restricción de quién ve la información de métricas mediante el uso de un indicador de token de portador. Junto con el operador Couchbase, el token de portador se suministra como un secreto de Kubernetes. TLS y mTLS se habilitan mediante la activación de estos en la opción grupo general. Un ejemplo de ficha al portador como Secreto:
1 2 3 4 5 6 7 |
apiVersion: v1 amable: Secreto metadatos: nombre: cb-métricas-ficha tipo: Opaco stringData: ficha: su-llano-texto-al portador-ficha-aquí |
En modo autónomo, proporcione la ubicación de un archivo token utilizando el indicador "-token", y algo similar para cualquier recurso PKI utilizando los indicadores "-key", "-cert" y "-ca", donde "-key" se refiere a la clave privada que se va a utilizar, "-cert" a la cadena de certificados y "-ca" a la autoridad de certificación de nivel superior.
Funcionamiento autónomo
Aunque todavía no está soportado oficialmente, como se ha mencionado, es posible ejecutarlo como un proceso o como un contenedor Docker junto a tus nodos de Couchbase Server.
Para el exportador, descargue el código fuente de la página couchbase/couchbase-exporter Repo de GitHub.
1 |
git clonar https://github.com/couchbase/couchbase-exporter.git |
Como alternativa, puede utilizar la imagen oficial de Dockerhub que se encuentra en aquí.
1 |
docker tire de couchbase/exportador |
Sin embargo, es posible que no siempre esté actualizado, mientras que el repositorio git sí lo estará.
Para ejecutar el exportador localmente basta con utilizar el comando
1 |
docker ejecute --nombre couchbase-exportador -d -p 9091:9091 couchbase-exportador:1.0.0 |
Siga las instrucciones que se encuentran en el README para cualquier configuración más avanzada.
Puede ejecutar Prometheus tanto localmente como a través de Docker, al igual que el exportador.
Descargue y ejecute Prometheus localmenteutilice nuestro prometheus.yml que contiene la tarea scrape_config que incluye una búsqueda de localhost:9091 - que es donde deben servirse las métricas del exportador si se ejecuta localmente. Si no es así, edite el archivo en consecuencia si es necesario para que la tarea scrape_config incluya la dirección IP correcta para el exportador.
- job_name: 'couchbase'
# estos dos valores pueden ajustarse a una granularidad mínima de 1s si se necesita tal precisión
scrape_interval: 60s
scrape_timeout: 55s
metrics_path: /metrics
static_configs:
- objetivos: ['localhost:9091']
Para ejecutar a través de Docker, asegúrese de que su archivo prometheus.yml es correcto y, a continuación, ejecute uno de los siguientes comandos:
1 2 3 4 |
docker ejecute \ -p 9090:9090 \ -v /ruta/a/config/prometheus.yml:/etc/prometheus/prometheus.yml \ baile de graduación/prometheus |
1 2 3 4 |
docker ejecute \ -p 9090:9090 \ -v /ruta/a/config:/etc/prometheus \ baile de graduación/prometheus |
Con la bandera -d si desea ejecutar la imagen separada en segundo plano.
Fuente: https://prometheus.io/docs/prometheus/latest/installation/#using-docker
Ejecute prometheus y el exportador que aloja las métricas en localhost:9091/metrics, y la URL del exportador debería aparecer en la lista de objetivos de Prometheus en localhost:9090/objetivos e informar como UP.
Si está ejecutando tanto el exportador como Prometheus en Docker, la configuración es ligeramente más complicada. Utilice los comandos docker network list y docker network inspect para encontrar la dirección IPv4 del contenedor Couchbase Exporter y sustituir este valor por localhost en la lista de objetivos de raspado.
El futuro
Uno de los objetivos de este proyecto es proporcionar un exportador oficial de Prometheus para Couchbase. Debido a la naturaleza Open Source de Prometheus y los exportadores que existían antes, queremos fomentar activamente las contribuciones de la comunidad al proyecto.
Para cualquier error, problema o solicitud de funciones, utilice nuestro JIRA.
Una mención especial a Carlos Becker y al resto del colaboradores en el proyecto TOTVS Labs couchbase exporter, así como en el Leansys couchbase exporter, por haber servido de inspiración para este proyecto.
Otros recursos
Con el lanzamiento del Operador Autónomo 2.0, un tutorial en la documentación.
En el momento de escribir esto, una de las formas más sencillas de configurar Prometheus y Grafana es utilizar el Operador Prometheus. El tutorial enlazado cubre el proyecto GitHub kube-prometheus y su correspondiente gráfico Helm.
https://github.com/coreos/kube-prometheus
https://github.com/helm/charts/tree/master/stable/prometheus-operator
https://github.com/coreos/prometheus-operator