Instalei o AWStats 7.0 (a versão mais recente no repositório Amazon Linux) para tentar obter informações adicionais sobre o uso de largura de banda. Estou tendo problemas para fazer o AWStats analisar meus logs - suspeito que seja porque não consigo acertar o LogFormat.
Eu tentei muitas variações e eu simplesmente não consigo fazê-lo funcionar.
Aqui está o meu formato de log Nginx
log_format main '$remote_addr - $remote_user [$time_local] "$host" "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" "$request_time" '
'"$upstream_cache_status" "$sent_http_content_encoding" ';
Aqui está uma entrada de registro
1.1.1.1 - - [12/Mar/2017:07:23:53 +1300] "www.example.com" "GET /url/ HTTP/1.1" 200 7455 "https://www.google.ru/" "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36" "46.71.136.54" "0.000" "HIT" "gzip"
Aqui está meu arquivo de configuração AWStats. Qualquer coisa que não esteja aqui é padrão e herdada do arquivo de configuração principal
# Path to you nginx vhost log file
LogFile="/var/log/nginx/pts.access.log"
# Domain of your vhost
SiteDomain="example.com"
# Directory where to store the awstats data
DirData="/var/lib/awstats/pts/"
# Other alias, basically other domain/subdomain that's the same as the domain above
HostAliases="www.example.com"
LogFormat = "%host %logname %time1 %virtualname %methodurl %code %bytesd %refererquot %uaquot %otherquot %otherquot %otherquot %otherquot"
Aqui está a saída do awstats
[root]# /usr/share/awstats/tools/awstats_updateall.pl now -awstatsprog=/usr/share/awstats/wwwroot/cgi-bin/awstats.pl
Running '"/usr/share/awstats/wwwroot/cgi-bin/awstats.pl" -update -config=example.com -configdir="/etc/awstats"' to update config example.com
Create/Update database for config "/etc/awstats/awstats.example.com.conf" by AWStats version 7.0 (build 1.971)
From data in log file "/var/log/nginx/pts.access.log"...
Phase 1 : First bypass old records, searching new record...
Searching new records from beginning of log file...
Jumped lines in file: 0
Parsed lines in file: 323
Found 323 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
Alguém pode identificar o que não está certo? Não consigo encontrar nenhuma informação adicional ou logs de awstats que forneçam mais informações.
Um possível problema está aqui:
Configuração correspondente em AWStats:
E seu arquivo de log contém:
%logname
corresponde a apenas uma única string, ou seja, o nome de usuário fornecido na autenticação HTTP. Agora, seu arquivo de log contém dois traços, o primeiro de sua configuração e o segundo significa um nome de usuário vazio.Assim, AWStats tenta interpretar o segundo traço como um carimbo de data/hora, e isso faz com que considere o registro como falhado.
Portanto, você precisa adicionar o traço à string de formato de log AWStats ou remover o traço do formato de log nginx.
Como observação, você não precisa citar seus últimos parâmetros (
$request_time
,$upstream_cache_status
,$sent_http_content_encoding
) no nginx log, pois eles não podem conter espaços.Você também pode usar
%extraX
na configuração do AWStats se quiser usar essas informações na construção de relatórios com base nesses fatos.Eu finalmente consegui, após cerca de 6 horas de esforço. O principal problema era que eu tinha a configuração do site AWStats incorreta, mas não acho que meu formato de log Nginx ou minha string de formato AWStats estavam corretos também.
Aqui está o meu formato de log do Nginx em funcionamento. Este é o formato de log combinado Nginx padrão, que mapeia para awstats LogFormat=1, mais três campos extras que eu queria em meus logs
Claro que tive que fazer com que meu servidor usasse essa configuração. Isso está no meu bloco de servidor.
Aqui está o arquivo de configuração do meu site AWStats. Isso estende o arquivo /etc/awstats/awstats.conf.local com valores específicos do site.
Observe que um problema foi que eu tinha o SiteDomain errado - omiti o "www" no início do meu domínio. A razão pela qual fiz isso foi porque pensei que "HostAliases" me permitiria adicionar o subdomínio www como um alias, mas não é para isso que serve. é para
Não fui mais longe para fazer o AWStats funcionar, mas assim que o fizer, atualizarei esta postagem com qualquer coisa que achar complicada.
Obrigado a @Tero Kilkanen pela metodologia para resolver isso - ou seja, comece com o formato combinado e trabalhe para frente.