Em um ambiente de produção formal, o desempenho e a latência do banco de dados são essenciais para garantir a operação estável e eficiente do sistema. Especialmente ao interagir com o banco de dados CnosDB, torna-se importante obter uma compreensão mais profunda do seu desempenho. Neste momento, o sistema de rastreamento distribuído Jaeger desempenha um papel importante. Neste blog, nos aprofundaremos em como rastrear e monitorar o banco de dados CnosDB usando Jaeger para obter uma compreensão mais completa de seu desempenho, latência e possíveis problemas.
Saiba mais sobre Jaeger e CnosDB
Jaeger: Jaeger é um poderoso sistema de rastreamento distribuído de código aberto, compatível com a API OpenTracing e projetado para monitorar e depurar o processo de solicitação na arquitetura de serviço de software. Ao capturar o fluxo de solicitações entre diferentes microsserviços, Jaeger ajuda os desenvolvedores a identificar gargalos de desempenho e possíveis problemas.
CnosDB: CnosDB é um banco de dados de código aberto de alto desempenho comumente usado para armazenar e gerenciar grandes quantidades de dados de série temporal. Em uma arquitetura de microsserviços, o CnosDB geralmente atua como backend para armazenamento e recuperação de dados.
Habilite o suporte Jaeger no CnosDB
Cancele o comentário de configuração [trace] [https://docs.cnosdb.com/zh/latest/reference/config.html#trace] para ativar a função de rastreamento Jaeger.
| Dica: Para que a configuração tenha efeito, é necessário reiniciar o serviço.
[trace]
auto_generate_span = false
[trace.log]
path = '/tmp/cnosdb'
[trace.jaeger]
jaeger_agent_endpoint = 'http://127.0.0.1:14268/api/traces'
max_concurrent_exports = 2
max_queue_size = 4096
Instale e inicie o Jaeger
| Para outros métodos de implantação, consulte Jaeger Deployment [https://www.jaegertracing.io/docs/deployment/]
docker run -d --name jaeger \
-p 6831:6831/udp \
-p 6832:6832/udp \
-p 16686:16686 \
-p 14268:14268 \
jaegertracing/all-in-one:latest
Após a inicialização bem-sucedida, use seu navegador para acessar http://127.0.0.1:16686
Rastreie eventos no CnosDB
1. Adicione contexto de extensão à solicitação.
| Você pode definir auto_generate_span = true no arquivo de configuração para gerá-lo automaticamente. Se você precisar analisar uma instrução específica, personalize o valor uber-trace-id na solicitação. O formato é o seguinte (para obter instruções detalhadas sobre o formato, por favor consulte: Formato de propagação [https : //www.jaegertracing.io/docs/1.46/client-libraries/#propagation-format])
uber-trace-id: 3a3a43:432e345:0:1
Exemplo:
| Para a fonte de dados no exemplo, consulte:
https://docs.cnosdb.com/zh/latest/start/quick_start.html
Consulte os dados na tabela aérea no banco de dados oceanic_station, classifique-os em ordem cronológica inversa e retorne os primeiros 5 dados.
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=oceanic_station&pretty=true" -d "select * from air order by time desc limit 5;"
Use painéis para análise
1. Período de registro:
Quando um aplicativo cliente envia uma consulta ou solicitação de gravação ao banco de dados CnosDB, o CnosDB envia o registro Span resultante para Jaeger. Cada período representa um estágio da solicitação, incluindo tempo de processamento, nome da operação e outras informações relacionadas.
2.Selecione Serviço:
Na caixa suspensa Serviço da interface do usuário Jaeger, selecione o serviço relacionado ao CnosDB (por exemplo: cnosdb_singleton_1001).
3. Encontre rastros:
Na interface, clique no botão “Encontrar Rastros” e o sistema irá recuperar todos os rastros relacionados ao serviço selecionado. Isso exibirá uma série de solicitações e intervalos correspondentes.
4. Analise os detalhes do rastreamento:
Clique no traço de interesse para entrar na visualização detalhada. Nesta visualização você verá todo o processo de solicitação e o tempo de execução de cada span. Essas informações de tempo ajudarão você a entender quanto tempo leva para processar cada etapa da sua consulta.
5. Otimize consultas e sistemas:
Com o registro de tempo detalhado, você pode analisar com precisão o desempenho da consulta. Num ambiente de produção formal, isto se tornará uma ferramenta valiosa para otimizar declarações de consulta e melhorar o desempenho do sistema. Ao analisar o tempo de execução de cada período, você pode encontrar etapas que podem causar atrasos e tomar medidas de otimização direcionadas.
Além disso, Jaeger também pode rastrear outros eventos do CnosDB, como segue:
- Componente de consulta
- API REST
- API Arrow Flight SQL
Conclusão
Ao usar o Jaeger para rastrear o desempenho e a latência do banco de dados CnosDB, podemos obter uma compreensão mais abrangente do desempenho do banco de dados. Ao inserir código instrumentado apropriado em segmentos de código críticos, podemos capturar o fluxo de solicitações e interações de banco de dados, identificar facilmente gargalos de desempenho e resolver possíveis problemas prontamente. A integração do Jaeger e do CnosDB nos permite obter insights mais profundos e melhorar o desempenho geral e a confiabilidade.
Exemplo estendido
Solicitação de API REST
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=usage_schema&pretty=true" -d "select * from user_queries order by time desc limit 5;"
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/sql?db=usage_schema&pretty=true" -d "CREATE TABLE air (visibility DOUBLE,temperature DOUBLE,presssure DOUBLE,TAGS(station));"
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/write?db=public&pretty=true" -d "ma,station=XiaoMaiDao visibility=50,temperature=63,pressure=52"
Usando o Prometheus para leitura e escrita remota
remote_write:
- url: "http://127.0.0.1:8902/api/v1/prom/write?db=prometheus"
headers:
uber-trace-id: '3a3a43:432e345:0:1'
basic_auth:
username: 'root'
password: ''
remote_read cnosdb
remote_read:
- url: "http://127.0.0.1:8902/api/v1/prom/read?db=prometheus"
headers:
uber-trace-id: '3a3a43:432e345:0:1'
basic_auth:
username: 'root'
password:
Escreva usando OpenTSDB
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/opentsdb/write?db=public" -d 'opentsdb 1689054412124000000 1 tag1=t1 field1="f1" value1=1'
curl -i -u "root:" -H "Accept: application/json" -H "uber-trace-id: 3a3a43:432e345:0:1" -XPOST "http://127.0.0.1:8902/api/v1/opentsdb/put?db=public" -d '[{"metric":"tsdbput","timestamp": 1689069407572000000,"value": 9,"tags":{"tag1":"t1","tag2":"t2"}}]'
Introdução ao CnosDB
CnosDB é um banco de dados de série temporal distribuído de código aberto, de alto desempenho e fácil de usar, que foi lançado oficialmente e é totalmente de código aberto.
Bem-vindo a seguir o site da nossa comunidade: https://cn.cnosdb.com