Repository navigation
Conversation
As DAGs de API emitiam 4 a 5 linhas em INFO por requisicao HTTP, dentro de loops de paginacao de milhares de iteracoes. Medido em 06/10/2026 numa unica task de fetch_relatorios_gestao: 118.232 linhas, 87MB -- e outra execucao da mesma task chegou a 178MB. Distribuicao das repeticoes nesse arquivo: 23.669 [cliente_base.py] Attempt N for GET ... 23.625 [cliente_base.py] Request successful with status N 23.625 [cliente_transferegov.py] Fetched N registros 23.625 [api_relatorios_gestao_dag.py] Buscando relatorios para plano ID 14.734 [api_relatorios_gestao_dag.py] Plano N: N relatorios FINAL 8.891 [api_relatorios_gestao_dag.py] Nenhum relatorio encontrado Isso somou ~7GB de log local e foi uma das causas de o disco da VM de homologacao chegar a 100% (0 byte livre), derrubando o Airflow. O que muda: - cliente_base.py: as duas linhas por requisicao vao para debug. Beneficia os 11 clientes que herdam dele, nao so o transferegov. A visibilidade de falha nao se perde: o except ja loga warning por tentativa e error ao esgotar as retentativas. A linha de Attempt ainda inclui kwargs, que pode carregar parametros de consulta -- outro motivo para nao ficar em info. - cliente_transferegov_fundo_a_fundo.py: "Fetched N registros" e por chamada de endpoint, nao por task; vai para debug. - api_relatorios_gestao_dag.py: as tres linhas por plano vao para debug, e os planos sem relatorio passam a ser contados e reportados no resumo que ja existia no fim da extracao. Trocar 8.891 warnings por um numero: um warning repetido milhares de vezes para uma condicao esperada e ruido, nao sinal. Nada e perdido de forma irreversivel: com logging_level=DEBUG o detalhe por requisicao volta quando for preciso investigar. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problema
As DAGs de API emitem 4 a 5 linhas em INFO por requisição HTTP, dentro de loops de paginação de milhares de iterações. Uma única task de
fetch_relatorios_gestaomedida em 06/10/2026: 118.232 linhas, 87 MB — e outra execução da mesma task chegou a 178 MB.Distribuição das repetições nesse arquivo:
[cliente_base.py] Attempt N for GET ...[cliente_base.py] Request successful with status N[cliente_transferegov.py] Fetched N registros[api_relatorios_gestao_dag.py] Buscando relatórios para plano ID[api_relatorios_gestao_dag.py] Plano N: N relatórios FINAL[api_relatorios_gestao_dag.py] Nenhum relatório encontradoSomou ~7 GB de log local e foi uma das causas de o disco da VM de homologação chegar a 100% (0 byte livre), derrubando o Airflow.
Agrava o custo: o log estruturado do Airflow 3 repete
dag_id,task_id,run_id,ti_id,filenameelinenoem toda linha. A média do arquivo é 770 bytes por linha para mensagens de ~110 caracteres — o envelope custa mais que o conteúdo.O que muda
cliente_base.py— as duas linhas por requisição vão paradebug. Beneficia os 11 clientes que herdam dele, não só o transferegov. A visibilidade de falha não se perde: oexceptjá logawarningpor tentativa eerrorao esgotar as retentativas. A linha deAttemptainda incluikwargs, que pode carregar parâmetros de consulta — outro motivo para não ficar eminfo.cliente_transferegov_fundo_a_fundo.py—Fetched N registrosé por chamada de endpoint, não por task; vai paradebug.api_relatorios_gestao_dag.py— as três linhas por plano vão paradebug, e os planos sem relatório passam a ser contados e reportados no resumo que já existia no fim da extração:Trocar 8.891 warnings por um número: um warning repetido milhares de vezes para uma condição esperada é ruído, não sinal.
Reversibilidade
Nada se perde de forma irreversível. Com
logging_level=DEBUGo detalhe por requisição volta quando for preciso investigar.Contexto
Terceira das três causas que lotaram o disco. As outras duas:
airflow-logscom 0 objetos), entãodelete_local_logs = Truenunca disparava e nada era apagado. Causa identificada: o upload roda no supervisor da task, que não resolve connection pela execution API; a correção é exporAIRFLOW_CONN_MINIO_DEFAULTcomo env var e está no repo de infra.🤖 Generated with Claude Code