ATUALIZAÇÃO: A partir da versão 2.8, o Sync Gateway inclui suporte integrado ao exportador Prometheus. As estatísticas são exportadas em formato compatível com o Prometheus por meio do endpoint de métricas. Isso significa que não há mais a necessidade de ter um exportador separado. Leia a documentação do Couchbase para obter mais detalhes sobre Monitoramento do Sync Gateway v2.8+ usando o novo ponto de extremidade.
O Couchbase Mobile 2.5 A versão introduziu uma extensa relatórios de estatísticas recursos no Gateway de sincronização. As estatísticas fornecem informações importantes sobre a integridade da implantação do Couchbase Mobile e constituem uma parte integrante de qualquer implantação.
Este é um guia passo a passo para usar o Prometeu (monitoramento e alerta de código aberto) com clusters do Sync Gateway em Kubernetes. Usaremos Grafana para visualizar as estatísticas.
Costuma-se afirmar que o Prometheus e o Kubernetes compartilham um "ancestralidade espiritual". Ambos os projetos são hospedados pelo Fundação para computação nativa em nuvem. Eles são orientados por objetivos de design comuns, o que torna o Prometheus muito adequado para monitorar implantações do Kubernetes.
Em uma postagem relacionadaNa publicação anterior, discutimos a configuração do monitoramento com o Prometheus em um cluster do Couchbase Mobile em um ambiente sem o Kubernetes. Se você acompanhou essa publicação, pode pular as seções iniciais e ir direto para a seção Arquitetura de implantação seção.
Histórico
Relatório de estatísticas do gateway de sincronização
As estatísticas do Sync Gateway são relatadas no formato JSON e estão disponíveis por meio do _expvar por meio do Sync Gateway Administrador REST interface.
Essas são as categorias de estatísticas que são relatadas.
Prometeu
Prometeu é uma plataforma de monitoramento e alerta de sistemas de código aberto. Em seu núcleo, Servidor Prometheus é responsável por sondar os "alvos do Prometheus" para obter estatísticas e armazená-las como dados de série temporal. Os alvos do Prometheus são configurados estaticamente ou podem ser descobertos pelo Prometheus.
Grafana
Grafana é uma plataforma de alerta e visualização de dados de código aberto. Ela é compatível com o Prometheus como fonte de dados e pode ser usada para criar painéis abrangentes.
Apresentando o Prometheus Sync Gateway Exporter
Para que o Prometheus monitore o Sync Gateway, precisamos de um "alvo do Prometheus" correspondente ao Sync Gateway. Esse destino é o Exportador do gateway de sincronização, aqui denominada "o Exportador". Em termos simples, o Exportador é responsável por exportar as estatísticas do Sync Gateway para as métricas do Prometheus.

Arquitetura de implantação
Quando juntamos tudo isso, uma implantação típica se parece com o seguinte:

Ok... parece muito mais complexo do que realmente é. Na verdade, é bastante simples:
Contêiner do exportador do gateway de sincronização
Os contêineres Exporter e Sync Gateway devem ser colocados no mesmo pod usando o padrão sidecar. A API REST do Sync Gateway Admin é, por padrão, apenas exposto no localhost. Essa configuração também é altamente recomendada em ambientes de produção. Como o exportador pesquisa a API de administração do Sync Gateway para obter estatísticas, ele precisa estar no mesmo host/nó que o Sync Gateway.
Além disso, as estatísticas do Sync Gateway são relatadas por nó. Portanto, em um cluster de dois ou mais nós do Sync Gateway, cada nó do Sync Gateway deve ter seu próprio exportador.
Serviço do exportador do gateway de sincronização
Os pods do Sync Gateway que contêm o Exporter devem ser expostos a outros serviços no cluster. No Kubernetes, você faz isso por meio de um Serviço de rede do Kubernetes. O Sync Gateway Exporter Service expõe os pods do Sync Gateway e o torna acessível ao Prometheus Service.
Operador do Prometheus
Pesquisa continuamente as estatísticas do exportador, que, por sua vez, pesquisa o ponto de extremidade REST do Sync Gateway. O servidor usa as regras definidas na seção rules.yaml para enviar alertas para o Gerenciador de alertas. A maneira mais simples de implantar o Prometheus no cluster do Kubernetes é usando o comando Operador do Prometheus. O Prometheus Operator cuida da implantação da pilha do Prometheus, incluindo o Gerenciador de alertas e o Grafana.
O Operador atua em várias Definições de Recursos Personalizados (CRDs). A mais interessante é a Monitor de serviço. O Service Monitor é responsável por definir como os serviços devem ser monitorados. Nesse caso, os pods do Sync Gateway que são expostos por meio do Sync Gateway Exporter Service são monitorados.
Grafana
O serviço pesquisa as estatísticas do Prometheus Server e as representa graficamente em um painel baseado na Web que pode ser acessado por meio do navegador da Web. Para acessar o painel do Grafana de fora do cluster, você precisará usar o encaminhamento de porta. Você também pode expô-lo usando o NodePort ou o equivalente no Kubernetes. Novamente, o Prometheus Operator deve cuidar da implantação do mesmo.
Código-fonte do exportador
O Sync Gateway Exporter é de código aberto couchbaselabs e está disponível no GitHub. Ele é compatível com o Couchbase Sync Gateway 2.5+. Para isso, embora nos esforcemos para mantê-lo atualizado com a versão mais recente do Sync Gateway, não podemos garantir isso. A boa notícia é que ele é de código aberto e inclui instruções sobre como você pode estendê-lo para suportar estatísticas adicionais.
Clone a fonte do Exporter do Github e atualize os submódulos relevantes. O repositório inclui todos os yaml arquivos de configuração que seriam usados para a implantação.
1 2 3 |
git clone https://github.com/couchbaselabs/couchbase-sync-gateway-exporter git submódulo atualização --inicial --rebase --remoto --recursivo |
O yaml Os arquivos de configuração mencionados nesta postagem estão disponíveis na pasta "kubernetes".
1 |
cd /caminho/para/clonado/exportador/fonte/kubernetes |
Instalação
No restante da postagem, examinaremos as etapas para configurar o monitoramento em um cluster do Couchbase Mobile no cluster do Kubernetes. As instruções aqui contidas devem se aplicar a qualquer implantação gerenciada do Kubernetes.
Implantação do cluster do Couchbase Server
Siga as instruções aqui para implantar a versão mais recente do cluster do Couchbase Server usando o Couchbase Autonomous Operator.
Implantação do cluster do Sync Gateway
Siga as instruções aqui para implantar um cluster do Sync Gateway no Kubernetes
Implantação do Prometheus e do Grafana
Há vários opções para implantar o Prometheus. De fato, a maioria dos serviços gerenciados do Kubernetes pode ter opções
Uma das opções mais simples é implantar usando o Operador do Prometheus usando Leme.
O gráfico do Prometheus implantará toda a pilha de monitoramento, incluindo o servidor Prometheus, o Grafana, o Alert Manager etc.
Instalando o Helm
Se você já tiver o Helm em execução em seu cluster, pule esta etapa
1 2 3 4 |
kubectl criar conta de serviço --espaço de nome cubo-sistema Leme kubectl criar aglutinação de papéis Leme-agrupamento-administrador --papel de agrupamento=agrupamento-administrador --conta de serviço=cubo-sistema:Leme leme inicial --serviço-conta Leme --atualização |
Instalando o Prometheus
Instale o Prometheus Operator executando este comando na raiz do repositório clonado.
- Crie um novo arquivo de configuração chamado values.yaml usando um editor de texto. O principal é a senha padrão de administrador usada para fazer login no painel do Grafana. Você pode alterá-la após o login inicial.
- O values.yaml também está disponível no arquivo repositório de origem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
prometeu: prometheusSpec: réplicas: 1 imagem: etiqueta: v2.10.0 serviceMonitorSelectorNilUsesHelmValues: falso serviceMonitorNamespaceSelector: {} serviceMonitorSelector: {} ruleSelectorNilUsesHelmValues: falso ruleNamespaceSelector: {} ruleSelector: {} prometheusOperator: imagem: etiqueta: v0.30.0 grafana: adminPassword: administrador |
- Implantar o Helm Chart
O gráfico do Prometheus é implantado no prometeu espaço de nome
1 |
leme instalar --espaço de nome prometeu --nome baile estável/prometeu-operador -f valores.yaml --versão 5.10.4 |
- Verificar a instalação
A saída deve mostrar os pods correspondentes à pilha do Prometheus
1 2 3 4 5 6 7 8 9 10 11 |
kubectl -n prometeu obter cápsulas NOME PRONTO STATUS RESTARTS IDADE gerenciador de alertas-baile-prometeu-operador-gerenciador de alertas-0 2/2 Em execução 0 27d baile-grafana-6459ffb669-6qzht 2/2 Em execução 9 27d baile-cubo-estado-métricas-55bc76f8c4-dppcz 1/1 Em execução 0 27d baile-prometeu-nó-exportador-6j9lz 1/1 Em execução 0 27d baile-prometeu-nó-exportador-7wd68 1/1 Em execução 0 27d baile-prometeu-nó-exportador-7wqgz 1/1 Em execução 0 27d baile-prometeu-operador-operador-6b48475c74-srwwl 1/1 Em execução 0 27d prometeu-baile-prometeu-operador-prometeu-0 3/3 Em execução 0 27d |
Implementação do Sync Gateway Exporter
Com a pilha de monitoramento do Prometheus configurada, é hora de instalar o exportador para monitoramento.
O contêiner do exportador será implantado no mesmo pod que o Sync Gateway usando o padrão de contêiner sidecar. Para fazer isso, atualizaremos o cluster do Sync Gateway Implantação para incluir a implantação do contêiner do Exporter com couchbasesamples/sync-gateway-prometheus-exporter:latest
disponível no Docker Hub.
- Abra o sgw-deployment.yaml em um editor de texto e atualize-o para incluir o contêiner do Exportador, conforme mostrado abaixo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
Versão da API: extensões/v1beta1 gentil: Implantação metadados: nome: sincronização-portal especificação: réplicas: 1 modelo: metadados: rótulos: aplicativo: sincronização-portal especificação: afinidade: podAntiAffinity: requiredDuringSchedulingIgnoredDuringExecution: - labelSelector: matchExpressions: - chave: aplicativo operador: Em valores: - sincronização-portal topologyKey: "kubernetes.io/hostname" contêineres: - nome: sincronização-portal imagem: couchbase/sincronização-portal:2.6.0-empresa argumentos: ["/sync-gateway-config/sgw-config.json"] volumeMounts: - nome: sgw-configuração-volume mountPath: /sincronização-portal-configuração readOnly: verdadeiro env: - nome: GOMAXPROCS valor: "1" recursos: solicitações: CPU: 250m limites: CPU: 250m - nome: exportador imagem: amostras de bases de sofá/sincronização-portal-prometeu-exportador:mais recente argumentos: ["--log.level=info"] env: - nome: GOMAXPROCS valor: "1" portos: - nome: http containerPort: 9421 recursos: solicitações: CPU: 100m limites: CPU: 100m volumes: - nome: sgw-configuração-volume segredo: secretName: sgw-configuração |
Se você tiver um nó de importação do Sync Gateway, será necessário atualizar sgw-deployment-import.yaml também.
- Depois de atualizar o arquivo yaml, aplique-o ao seu cluster
1 |
kubectl aplicar -f sgw-implantação.yaml |
- Verifique o status da implementação. Esse cluster de amostra inclui dois nós do Sync Gateway.
1 2 3 4 5 6 7 8 9 10 |
kubectl obter cápsulas NOME PRONTO STATUS RESTARTS IDADE cb-exemplo-0000 1/1 Em execução 0 35d cb-exemplo-0001 1/1 Em execução 0 35d cb-exemplo-0002 1/1 Em execução 0 35d couchbase-operador-84cd9f6598-6mm8r 1/1 Em execução 4 56d couchbase-operador-admissão-6c974bf6f-77qmk 1/1 Em execução 0 56d sincronização-portal-54b46fdbc6-2c56l 2/2 Em execução 0 29d sincronização-portal-importação-b448f69dd-wjd8g 2/2 Em execução 0 29d |
- Você pode visualizar os detalhes do pod Sync Gateway e verificar se ele contém o contêiner do exportador
1 2 3 4 5 6 |
kubectl superior cápsula sincronização-portal-54b46fdbc6-2c56l --contêineres POD NOME CPU(núcleos) MEMÓRIA(bytes) sincronização-portal-54b46fdbc6-2c56l sincronização-portal 140m 20Mi sincronização-portal-54b46fdbc6-2c56l exportador 0m 3Mi |
Implantação do serviço Sync Gateway Exporter
Em seguida, implantamos um serviço Kubernetes que expõe os nós do Sync Gateway e os disponibiliza para outros nós do cluster.
- Crie um novo arquivo de configuração chamado svc.yaml usando um editor de texto. O svc.yaml também está disponível no arquivo repositório de origem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
Versão da API: v1 gentil: Serviço metadados: nome: sincronização-portal-exportador espaço de nome: couchbase rótulos: aplicativo: sincronização-portal especificação: portos: - porto: 9421 protocolo: TCP porta de destino: http nome: http seletor: aplicativo: sincronização-portal tipo: ClusterIP |
- Implantar o serviço
1 |
kubectl aplicar -f serviço.yaml |
- Verifique a instalação. O ponto principal a ser observado no resultado é que o serviço aponta para os dois endpoints do Sync Gateway.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
kubectl descrever serviço sincronização-portal-exportador Nome: sincronização-portal-exportador Namespace: padrão Rótulos: aplicativo=sincronização-portal Anotações: kubectl.kubernetes.io/último-aplicado-configuração={"apiVersion":"v1","tipo":"Serviço","metadata":{"annotations" (anotações):{},"rótulos":{"aplicativo":"sync-gateway"},"name" (nome):"exportador de gateway de sincronização","namespace":"default"},... Seletor: aplicativo=sincronização-portal Tipo: ClusterIP IP: 10.15.254.14 Porto: http 9421/TCP Porta de destino: http/TCP Pontos finais: 10.12.0.41:9421,10.12.2.42:9421 Sessão Afinidade: Nenhum Eventos: <nenhum> |
Configuração do Prometheus Service Monitor
Para que o Prometheus descubra o serviço Sync Gateway Exporter, teremos que definir um Monitor de serviço. Conforme discutido anteriormente, o Prometheus Monitor de serviço especifica como os serviços devem ser monitorados. O Prometheus Operator gera a configuração do Prometheus Scrape com base na definição.
- Crie um novo arquivo de configuração chamado servicemonitor.yaml usando um editor de texto. O servicemonitor.yaml também está disponível no arquivo repositório de origem.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
Versão da API: monitoramento.núcleos.com/v1 gentil: Monitor de serviço metadados: nome: sincronização-portal espaço de nome: padrão rótulos: aplicativo: sincronização-portal especificação: jobLabel: sincronização-portal seletor: matchLabels: aplicativo: sincronização-portal namespaceSelector: matchNames: - padrão pontos finais: - porto: http # comente as seguintes linhas para usar o IP do pod em vez de seu nome como instância: rotulagens: - sourceLabels: [__meta_kubernetes_pod_name] separador: ; regex: (.*) targetLabel: instância substituição: $1 ação: substituir |
- Implantar o serviço
1 |
kubectl aplicar -f monitor de serviços.yaml |
Configuração de alertas do Prometheus
Esta etapa é opcional e só é necessária se você quiser que o Prometheus Alerting Manager envie alertas. Os alertas são baseados em um conjunto de regras de alerta configuradas:
- Uma amostra rules.yaml está disponível no arquivo repositório de origem. Ele inclui alguns exemplos de regras definidas por este especificação. Você pode editá-lo para se adequar ao seu ambiente.
- Aplicar as regras
1 |
kubectl aplicar -f regras.yaml |
Amarrando tudo
Verificação do monitoramento do Prometheus
Agora, verificaremos se o Prometheus ServiceMonitor é capaz de acessar e monitorar o Sync Gateway Service.
- Habilite o encaminhamento de porta de seu computador local para o servidor Prometheus remoto na porta 9090. Isso só é necessário para fins de teste. Você não precisa habilitar o encaminhamento de porta para operações normais.
1 |
kubectl -n prometeu porto-avançar serviço/baile-prometeu-operador-prometeu 9090:9090 |
Acesse a webUI do Prometheus em seu navegador local
1 |
aberto http://localhost:9090 |
Se tudo correr bem, você verá os nós do Sync Gateway Exporter listados no Metas menu
Verificação do Grafana
- Habilite o encaminhamento de porta de seu computador local para o servidor Grafana remoto.
1 |
kubectl -n prometeu porto-avançar serviço/baile-grafana 3000:80 |
- Acesse a webUI do painel do Grafana em seu navegador local.
1 |
aberto http://localhost:3000 |
- Faça login com as credenciais padrão de "admin" e a senha de "admin". Você pode alterá-las após o login inicial. A próxima etapa é configurá-lo com o painel do Sync Gateway
- Um painel padrão do "Couchbase Sync Gateway" chamado
dashboard.jsonnet
está disponível no repositório de origem como um jsonnet arquivo. - A próxima etapa seria adicionar o "Prometheus" como a "Fonte de dados" e importar o arquivo JSON "Sync Gateway dashboard" que foi gerado anteriormente. Você poderia fazer isso manualmente seguindo as opções do menu. Simplificamos esse processo e fornecemos uma script que fará tudo isso por você!
Primeiro, certifique-se de que o serviço Grafana esteja sendo executado na porta 3000. Execute o script a partir da raiz do seu repositório clonado usando o comando abaixofazer
nografana-dev
alvo. Isso faz o seguinte:- Regenera o
dashboard.json
painel de controle dodashboard.jsonnet
arquivo - Usa a API do Grafana para adicionar o Prometheus como uma fonte de dados
- Usa a API do Grafana para carregar o
dashboard.json
gerado na etapa anterior
- Regenera o
1 |
fazer grafana-dev |
Visualização de estatísticas do Grafana
- Depois que o script for executado com êxito, você deverá atualizar a interface do usuário da Web do Grafana em seu navegador da Web. Você verá o "Couchbase Sync Gateway Dashboard" na lista de painéis disponíveis. O painel apresenta graficamente todas as estatísticas relatadas pelo Sync Gateway. Você pode personalizar o painel.
- Clique em "Couchbase Sync Gateway Dashboard" para ver as estatísticas. Você pode filtrá-las por Sync Gateway (se tiver mais de um) ou banco de dados
É isso aí! Você configurou com êxito o monitoramento do Couchbase Sync Gateway Kubernetes com o Prometheus. Agora você pode conduzir replicações com clientes do Couchbase Lite e monitorá-las.
O painel padrão do Sync Gateway é um ponto de partida. Você pode personalizar o painel, editando o dashboard.jsonnet
ou diretamente pela interface do usuário do Grafana.
O que vem a seguir
O Prometheus é adequado para monitorar implantações do Kubernetes. Usando o Sync Gateway Exporter, você pode exportar as estatísticas do Sync Gateway para o Prometheus e visualizá-las usando ferramentas de visualização como o Grafana. Isso simplifica muito o monitoramento dos seus clusters do Couchbase Mobile.
Além do exportador, fornecemos um painel padrão do Grafana que você pode personalizar. Além de personalizar o próprio painel, você também pode personalizar as regras para alertas.
Em caso de dúvidas ou feedback, deixe um comentário abaixo. Ou sinta-se à vontade para entrar em contato comigo pelo Twitter @rajagp ou por e-mail priya.rajagopal@couchbase.com. O Fóruns do Couchbase são outro bom lugar para entrar em contato com perguntas.
Agradecimentos
Gostaria de agradecer a Carlos Becker por seu trabalho na criação da primeira versão do Sync Gateway Exporter.