Vire um Registros do contêiner Consulta SQL em um API REST ponto final
Para salvar uma consulta no Construtor de Consultas, clique em Novo ponto final, and you have a URL at api.querystreams.com with its own key. The SQL runs read-only on the Agent that already reads your Container Logs file; the caller gets JSON or CSV and never sees the SQL, the schema or a password. Nothing to host, no port to open. About 90 seconds from a saved query, and the Free plan covers your first endpoint.
O resultado final será o que você obterá.
Um URL em api.querystreams.com que retorna as linhas da sua consulta de Logs de Contêiner salva como JSON ou CSV para qualquer pessoa que possua uma chave, testada no console do portal antes de ser compartilhada. Assim:
| Chave | Valor | Descrição |
|---|---|---|
fluxo cordão Opcional | Seattle | Filtro chamável a partir da consulta salva |
Chave X-API | qsapi_AB•••••••••• | Seu token secreto |
{
"fluxo": "Seattle"
}| Cabeçalho | Valor | Descrição |
|---|---|---|
Chave X-API | qsapi_AB•••••••••• | Seu token secreto. Um por chamador, revogue a qualquer momento. |
Tipo de conteúdo | aplicativo/json | Os parâmetros são transmitidos como um corpo JSON. |
Aceitar | aplicativo/json | Retorna JSON; solicita texto/CSV e recebe CSV. |
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"stream": "Seattle"}'{
"colunas": [ { "nome": "horário do evento", "tipo": "inteiro" }, { "nome": "aplicativo", "tipo": "corda" }, { "nome": "fluxo", "tipo": "corda" } ],
"fileiras": [
{ "horário do evento": 1042, "aplicativo": "Comerciantes do Vento Norte", "fluxo": "Seattle" },
{ "horário do evento": 1057, "aplicativo": "Alpine Outfitters", "fluxo": "Denver" },
{ "horário do evento": 1063, "aplicativo": "Alimentos do Porto", "fluxo": "Halifax" }
],
"meta": { "contagem_de_linhas": 3, "duração_do_agente_ms": 41, "id_da_solicitação": "req_7Hq2mKd9" }
}| Cabeçalho | Valor | Descrição |
|---|---|---|
tipo de conteúdo | application/json; charset=utf-8 | O envelope na aba Corpo |
comprimento do conteúdo | 412 | Bytes retornados; o indicador de tamanho acima |
O Container Logs armazena seus dados em arquivos em um computador que você controla. Se alguém precisar de uma parte desses dados em seu aplicativo, painel ou script, as soluções comuns geralmente envolvem muita coisa: um login de banco de dados que sobrevive ao projeto, uma exportação noturna que fica obsoleta antes do café da manhã ou um pequeno servidor de API que alguém precisa manter atualizado. O Query Streams transforma o endpoint em uma consulta salva e uma chave. O agente que já está associado aos seus logs de contêiner Docker executa a consulta, o api.querystreams.com verifica a chave e o limite de requisições, e o solicitante recebe as linhas. O SQL, o esquema e as credenciais nunca saem da sua conta.
O que você vai precisar
Uma conta do Query Streams
Todos os planos incluem a API REST. O plano gratuito oferece um endpoint, duas chaves e 250 linhas por chamada, o suficiente para criar este guia. Cadastre-se em my.querystreams.com.
The Agent with your Container Logs file added as a connection
Ainda não terminou? Adicione em Dados → Agentes de Dados; leva cerca de dez minutos.
Uma consulta salva no Construtor de Consultas
O endpoint encapsula exatamente uma consulta salva. Escreva o SELECT, execute-o uma vez e salve-o. Adicione um filtro dinâmico (um @variable (na cláusula WHERE) se os chamadores devem poder filtrar.
Quem pode criar endpoints? Proprietários, administradores e criadores. Se o API O item está faltando na sua barra superior. Um administrador pode ativá-lo para o seu usuário em [inserir configurações aqui]. Conta → PermissõesQualquer pessoa com quem você compartilhe um endpoint precisa apenas de uma conta do Query Streams, em qualquer plano.
Configure em quatro etapas
-
Salvar consulta
Em Construtor de consultas Selecione a sua conexão com os Logs do Contêiner, escreva a instrução SELECT que deseja publicar e execute-a uma vez para visualizar as linhas. Limite-se às colunas que o chamador precisa; o endpoint retorna exatamente o que a consulta retorna.
Consulta salva · fileset.eventsSELECIONAR horário do evento, aplicativo, fluxo, mensagem DE conjunto de arquivos.eventos ORDEM POR hora do evento DESC LIMITE 100
Se os usuários precisarem poder filtrar, adicione um Filtro Dinâmico, por exemplo.
ONDE stream = @stream. Cada@variabletorna-se um parâmetro da API na etapa 3. Clique. Salvar e dê um nome à consulta; esse nome se tornará o nome de exibição do endpoint. -
Crie o endpoint
Aberto API na barra superior e clique Novo ponto finalO assistente tem quatro etapas. Selecione a consulta, Configurar, Parâmetros de bloqueio e Compartilhar. Sobre Selecione a consultaClique na consulta que você acabou de salvar; as consultas cujo agente está offline aparecem em cinza. Clique Próximo.
Atalho. A partir do Construtor de Consultas, você pode expor a consulta aberta diretamente; o assistente então inicia em Configurar com a consulta já selecionada.
-
Configurar e bloquear parâmetros
Sobre Configurar As configurações padrão estão corretas para um primeiro ponto de extremidade: Nome de exibição preenchido a partir da consulta, Vida útil Permanente (escolha) Expirando (para uma participação temporária), Modo de resposta Estático (uma resposta JSON; escolha Transmissão (para resultados que excedam o limite estático de linhas do seu plano), Formato interno JSON. O modo e o formato da resposta são fixos após a criação, portanto, defina-os aqui. Clique. Próximo.
Sobre Parâmetros de bloqueio Todos os filtros dinâmicos na consulta são listados. Deixe como estão aqueles que os chamadores podem definir. Invocável e dê a cada um um Nome da string de consulta; marcação Obrigatório Se uma chamada sem ele falhar, fixe um valor que o chamador não deve alterar. Trancadoou um cenário de encontro como Início do mês. Escondido Mantém o valor padrão da consulta e rejeita qualquer tentativa de alterá-lo. Clique. Próximo.
-
Compartilhe e ganhe sua chave.
Sobre Compartilhar você pode convidar Pessoas por e-mail ou adicione um Chave de serviço Para um servidor ou uma ferramenta de automação, ou ignore ambos por enquanto. Clique. Criar e obter minha chaveA tela de sucesso exibe o URL do endpoint e sua chave: uma string de 49 caracteres começando com
qsapi_Copie-o. Você poderá exibi-lo novamente mais tarde a partir do ponto de extremidade. Compartilhamento aba, para que não se perca se você fechar a tela.Clique em Enviar no console para fazer a primeira chamada a partir do próprio portal. O painel de resposta mostra Status, Tempo e Tamanho, o Corpo A aba exibe o JSON e a chamada aparece no Atividade alguns segundos depois.
É isso. Os logs do seu contêiner Docker agora respondem a uma URL, em modo somente leitura, para as chaves que você fornecer. Nada foi instalado, nenhuma porta foi aberta e o SQL permaneceu na sua conta.
Ligue de qualquer lugar
Substitua o ID do endpoint pelo seu, que você encontra na barra de URL do console. qsapi_SUA_CHAVE com sua chave. Os parâmetros chamáveis vão na string de consulta do GET; aqui a consulta salva expõe fluxo:
curl "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19?stream=Seattle" \ -H "X-API-Key: qsapi_YOUR_KEY"
{
"colunas": [ { "nome": "horário do evento", "tipo": "inteiro" }, { "nome": "aplicativo", "tipo": "corda" }, { "nome": "fluxo", "tipo": "corda" } ],
"fileiras": [
{ "horário do evento": 1042, "aplicativo": "Comerciantes do Vento Norte", "fluxo": "Seattle" },
{ "horário do evento": 1057, "aplicativo": "Alpine Outfitters", "fluxo": "Denver" },
{ "horário do evento": 1063, "aplicativo": "Alimentos do Porto", "fluxo": "Halifax" }
],
"meta": { "contagem_de_linhas": 3, "duração_do_agente_ms": 41, "id_da_solicitação": "req_7Hq2mKd9" }
}As linhas retornam como objetos indexados pelo nome da coluna, com a lista de colunas e um meta Bloco que informa quantas linhas existem, se o resultado foi truncado e o ID da solicitação que você pode citar para suporte. A mesma chamada que um POST coloca os parâmetros em um corpo JSON, que é a escolha certa para longas listas de valores:
curl -X POST "https://api.querystreams.com/v1/endpoints/8f2c4d1e-6b3a-4f7e-9c21-5d0a7b3e2f19" \ -H "X-API-Key: qsapi_YOUR_KEY" \ -H "Content-Type: application/json" \ -d '{"params": {"stream": "Seattle"}}'?formato=csv- CSV em vez de JSON, com linha de cabeçalho incluída.
Aceitar: texto/csvfaz o mesmo. Os endpoints de streaming retornam NDJSON (um objeto JSON por linha) com um final{"_summary": true, "row_count": N}linha; verifique essa última linha. ?sample=true- No máximo cinco linhas, sem cobrança. Ideal para conectar os cabos de um cliente.
?compressão=lz4- Um corpo de estrutura LZ4 para chamadas de alto volume com decodificador; o Código A aba contém o trecho de código decodificador para cada idioma. A compressão gzip simples ocorre automaticamente quando seu cliente envia o arquivo.
Codificação aceita: gzip. Autorização: Portador qsapi_…- Aceito como um pseudônimo para
Chave X-APIUse-o a partir do código do navegador.
Onde ele se conecta
Excel e Power BI
Exportar → Power Query M (.pq) Isso lhe fornece uma consulta pronta. Cole-a no Editor Avançado (Excel: Dados → Obter Dados → De Outras Fontes → Consulta em Branco; Power BI: Página Inicial → Transformar dados → Nova Fonte → Consulta em Branco) e substitua o espaço reservado pela sua consulta. qsapi_ chave.
Carteiro, Insônia, Amarelinha
O mesmo Exportar O menu baixa uma coleção do Postman v2.1, uma exportação do Insomnia v5 ou uma coleção do Hoppscotch com os parâmetros preenchidos e um espaço reservado para a chave.
Seu próprio código
O Código A aba contém exemplos funcionais para cURL, Python, JavaScript, TypeScript, Java, C#, Go, PHP, PowerShell e Ruby. Exportar → Especificação OpenAPI 3.1 Alimenta qualquer gerador de cliente ou interface de usuário Swagger.
n8n, Zapier, Make, cron
Criar um Chave de serviço Para a ferramenta, cole o URL e a chave no nó HTTP correspondente e agende a execução. Cada ferramenta recebe sua própria chave, então você pode revogar uma sem afetar as outras.
O que os planos permitem
| Plano | Pontos finais | Chaves por endpoint | Pessoas por ponto final | Linhas por chamada (estático) | Linhas por chamada (streaming) | Chamadas por minuto, por tecla |
|---|---|---|---|---|---|---|
| Gratuito | 1 | 2 | 1 | 250 | 250 | 3 |
| Núcleo Pessoal | 2 | 3 | 2 | 5,000 | 250,000 | 15 |
| Personal Plus | 5 | 5 | 5 | 10,000 | 500,000 | 30 |
| Núcleo de negócios | 5 | 10 | 10 | 50,000 | 1,000,000 | 300 |
| Negócios Plus | 10 | 20 | 25 | 100,000 | 5,000,000 | 600 |
| Business Max | 25 | 30 | 50 | 250,000 | 10,000,000 | 600 |
| Núcleo Empresarial | 50 | 50 | 100 | 500,000 | 25,000,000 | 1,000 |
| Enterprise Plus | 100 | 100 | 250 | 1,000,000 | 50,000,000 | 1,000 |
| Empresa Max | 250 | 200 | 500 | 2,500,000 | 100,000,000 | 1,500 |
Cada chamada também possui um tempo limite fixo de consulta de 60 segundos e um limite de resposta de 8 MiB, e os bytes retornados são contabilizados na sua franquia de dados mensal, a mesma franquia usada pelos suplementos do Excel e do Google Sheets. O plano gratuito inclui um endpoint e 5 MB por mês, o que é suficiente para uma pequena tabela acessada várias vezes ao dia. Consulte a página de preços. para as verbas previstas no plano.
Gratuito é um plano que você mantém. Não se trata de um período de teste. Veja exatamente o que está incluído no anúncio. página de preços.
Mantendo-o seguro
O SQL continua sendo seu.
Quem faz a chamada recebe as linhas. Nunca vê a consulta, os nomes das tabelas ou os detalhes da conexão, e não pode alterar o que o endpoint executa.
Uma chave, um ponto final, um chamador
Uma chave funciona para apenas um ponto de extremidade. Atribua uma chave a cada pessoa ou ferramenta, e todas as chamadas serão registradas para ela. Revogue uma chave e as outras continuarão funcionando; a revogação entra em vigor em cerca de cinco minutos.
Somente leitura, do seu lado da parede.
O agente executa apenas o comando SELECT salvo, e nada mais, dentro da sua rede, através de sua própria conexão de saída. Não há necessidade de abrir nenhuma porta nem de fornecer credenciais na internet.
Cada chamada no livro-razão
O Atividade A aba mostra cada chamada com hora, destinatário, status, linhas, bytes e duração, incluindo as recusadas. Defina um Expirando duração do compartilhamento temporário e o ponto de extremidade se desliga automaticamente na data definida.
Quando algo não funciona
| Status | Código | O que fazer |
|---|---|---|
| 401 | API_KEY_REQUIRED / API_KEY_INVALID | O cabeçalho está faltando ou a chave está incorreta. Enviar X-API-Key: qsapi_…, todos os 49 caracteres. As chaves podem ser copiadas novamente na guia Compartilhamento do endpoint. |
| 403 | API_KEY_ENDPOINT_MISMATCH | Uma chave válida usada em um endpoint diferente. Cada chave pertence a um endpoint. |
| 403 | API_KEY_REVOGADA / API_ENDPOINT_EXPIRED | A chave foi revogada ou o endpoint expirou. Gere uma nova chave ou restaure o endpoint. |
| 400 | API_PARAM_NOT_OVERRIDABLE | Você enviou um parâmetro que o proprietário não marcou como Callable. O corpo da mensagem lista os nomes permitidos. |
| 414 | API_QUERY_TOO_LARGE | A string de consulta GET passou 8 KB ou 200 valores de lista. Envie os mesmos parâmetros como corpo JSON em uma requisição POST. |
| 413 | API_OUTPUT_TOO_LARGE | O resultado ultrapassou o limite de 8 MiB. Refine a consulta ou altere o endpoint para Streaming. |
| 429 | API_RATE_LIMITED | Muitas chamadas neste minuto para a chave ou o ponto de extremidade. Aguarde. Tentar novamente após segundos, ou aumentar Limite de taxa Em Configurações da API → Padrões, dentro do seu plano. |
| 429 | API_DATA_REALM_EXHAUSTED | O pacote de dados mensal do proprietário foi atingido. Ele será renovado no próximo mês de faturamento; faça um upgrade para obter mais dados. |
| 503 | API_AGENT_NOT_CONNECTED | O agente responsável pelo seu arquivo de logs do contêiner está offline. Verifique-o em Dados → Agentes de Dados; as chamadas serão retomadas assim que ele se reconectar. |
| 504 | API_QUERY_TIMEOUT | A consulta demorou mais de 60 segundos. Adicione um filtro ou um índice, ou salve uma consulta mais específica. |
Cada corpo de erro tem a forma {"erro": {"código": "…", "mensagem": "…"}} e cada resposta carrega um X-QS-Request-Id Ao entrar em contato com o suporte, mencione o ID no cabeçalho.
Perguntas que as pessoas fazem
Meus dados são copiados para o Query Streams?
Não. O agente executa a consulta no local onde seus dados estão armazenados e envia apenas as linhas solicitadas pela chamada. Nada é sincronizado ou armazenado em cache nesse meio tempo; cada chamada executa a consulta.
Quem faz a chamada pode alterar o SQL ou solicitar outras tabelas?
Não. Um endpoint executa uma consulta salva. Os chamadores só podem definir os parâmetros que você marcou. Invocávele os valores são vinculados com segurança: o texto é colocado entre aspas e escapado, os números têm seus intervalos verificados e as listas são expandidas.
Como faço para entregar isso a um parceiro?
No ponto final Compartilhamento guia escolher Pessoas e insira o e-mail deles. Eles recebem um link mágico, fazem login com esse endereço (uma conta gratuita funciona) e geram sua própria chave; você vê as chamadas deles por nome na aba Atividade. Para um servidor ou uma ferramenta de automação, crie um Chave de API com um rótulo em vez disso.
O que acontece quando eu edito a consulta salva?
O endpoint executa o novo SQL na próxima chamada e sua especificação OpenAPI é regenerada. A URL e as chaves não mudam. Se você adicionar ou remover um filtro, revise as configurações. Parâmetros de bloqueio para que os chamadores vejam os parâmetros corretos.
O plano gratuito realmente cobre isso?
Sim. O plano gratuito é permanente, não um período de teste com prazo de validade. Ele inclui um endpoint, duas chaves e 250 linhas por chamada. Veja exatamente o que está incluído no [link para a página de detalhes]. página de preços.
O endpoint utiliza o dialeto SQL do Container Logs?
Sim, porque o SQL é seu. Você o escreveu e o executou nos logs do seu contêiner Docker no Query Builder; o endpoint executa essa mesma instrução pela mesma conexão, com os valores dos seus parâmetros vinculados da maneira que o Container Logs espera.
Meus logs de contêiner Docker precisam estar acessíveis pela internet?
Não. Somente o Agente precisa acessá-lo, de dentro da sua rede. O Agente faz uma única conexão de saída com o Query Streams; os chamadores se comunicam com api.querystreams.com e nunca com o seu computador.
Guias relacionados
Todos os guias para Container Logs
Não é bem a sua configuração?
- Seu aplicativo grava seus próprios arquivos de log fora do Docker? O Application Logs lê esses arquivos → App Logs
- O formato do seu log não é um dos tipos de log predefinidos? A Pasta de Log Personalizada permite que você descreva o formato você mesmo → Custom Logs
Setup trouble?
- Agent says the file or folder does not exist, or access is denied? Mapped drives, network shares, OneDrive and Linux home folders each need one fix → Where the Agent can read files from
- Agent shows Offline, or Test connection and Browse are greyed out? Check that the Agent is online → Is the Agent online?

