Existe uma maneira de fazer solicitações de despejo do IIS para seus arquivos de log o mais rápido possível?
Contexto
Estou enfrentando um atraso muito longo entre uma solicitação que faço ao IIS ser atendida e ser realmente registrada nos logs do IIS. Isso pode variar entre 20 e 60 segundos de atraso.
Alguns pontos-chave:
- Assim que a solicitação aparecer no arquivo de log, ele mostrará a hora real em que a solicitação ocorreu,
- os relatórios de solicitação são processados em até 350 ms,
- nos logs de solicitação do IIS, as solicitações também não ficam "travadas"
- a solicitação é totalmente tratada no navegador rapidamente
- Pude notar que em uma produção, pouco ocupada ou nada, o Windows Server 2012 (IIS 6.2 build 9200)
- mesmo comportamento em meu host de desenvolvimento, nem um pouco ocupado , Windows 10 (IIS 10.0.19041.1)
- a produção está no armazenamento da Amazon (não sei dizer a tecnologia exata que eles usam, acredito que seja derivada do SSD)
- o armazenamento local é um disco SSD
- se eu monitorar arquivos no mesmo disco/sistema de arquivos, as atualizações dos arquivos serão refletidas instantaneamente na tela (no máximo, se houver, atraso de 1s)
Algumas coisas que eu tentei
Tentei tail -f
ou continuo repetindo tail
o comando e também o Notepad ++ com o modo "Visualizar> Monitoramento (tail -f)" . Todos atualizando o conteúdo do arquivo ao mesmo tempo, obedecendo ao atraso um tanto aleatório, mas sempre longo.
A partir de uma cópia desta pergunta que postei (fora do tópico) em StackOverflow , Xudong Peng sugeriu que eu tentasse uma configuração flushByEntryCountW3CLog do arquivo de configuração de todo o servidor IIS ( %WinDir%\System32\Inetsrv\Config\applicationHost.config
ou nó de nível superior do Gerenciador IIS (computador) > Editor de configuração > sites.applicationHost/sites/siteDefaults/logFile
). Isso fez com que o intervalo de registro mudasse, mas para pior. Senti que agora estava sendo descartado a cada minuto, então reverti para 0.
No tópico acima, também garanti que o específico <site>
que estava testando não substituísse o sitesDefault/logFile/flushByEntryCountW3CLog
in applicationHost.config
. Também reciclei o pool de aplicativos (portanto, os sites também foram reciclados) e a configuração certamente entraria em vigor. Continua a mesma mudança de “comportamento” que parecia pior.
Parece que, mesmo que o buffer (dessas configurações, 64k) não seja preenchido, ele é despejado a cada minuto. Ao definir 1
isso, senti que o despejo aconteceu entre 1 e 2 minutos.
Não consegui encontrar nenhuma outra configuração relacionada ao "buffer do arquivo de log" (para que o IIS preenchesse um buffer de entradas de log antes de "despejá-las" nos arquivos).
Conclusão
Isso é normal? Todo mundo que lida com logs do IIS precisa reservar um tempo para verificar as solicitações nos logs, ou talvez haja uma maneira de (pelo menos temporariamente) fazer solicitações de despejo do IIS para o arquivo de log o mais rápido possível?