AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 837703
Accepted
Tim
Tim
Asked: 2017-03-12 11:09:28 +0800 CST2017-03-12 11:09:28 +0800 CST 2017-03-12 11:09:28 +0800 CST

Análise de log AWStats - formato de log Nginx personalizado

  • 772

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.

nginx awstats
  • 2 2 respostas
  • 3112 Views

2 respostas

  • Voted
  1. Tero Kilkanen
    2017-03-13T05:03:41+08:002017-03-13T05:03:41+08:00

    Um possível problema está aqui:

    log_format  main  '$remote_addr - $remote_user [$time_local]...
    

    Configuração correspondente em AWStats:

    LogFormat = "%host %logname %time1
    

    E seu arquivo de log contém:

    1.1.1.1 - - [12/Mar/2017:07:23:53 +1300]
    

    %lognamecorresponde 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 %extraXna configuração do AWStats se quiser usar essas informações na construção de relatórios com base nesses fatos.

    • 0
  2. Best Answer
    Tim
    2017-03-17T12:25:33+08:002017-03-17T12:25:33+08:00

    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

    # /etc/nginx/nginx.conf
    log_format combined_custom '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent" $host $request_time $upstream_cache_status';
    

    Claro que tive que fazer com que meu servidor usasse essa configuração. Isso está no meu bloco de servidor.

    # /etc/nginx/sites-enabled/example.com.conf
    access_log  /var/log/nginx/access.log combined_custom;
    

    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

    Este parâmetro [HostAliases] é usado para analisar o campo de referência no arquivo de log e para ajudar o AWStats a saber se uma URL de referência é uma URL local do mesmo site ou uma URL de outro site.

    # /etc/awstats/awstats.example.com.conf
    # Path to you nginx vhost log file
    LogFile="/var/log/nginx/access.log"
    
    # Domain of your vhost
    SiteDomain="www.example.com"
    
    # Directory where to store the awstats data
    DirData="/var/lib/awstats/example/"
    
    # Other alias, basically other domain/subdomain that's the same as the domain above
    HostAliases="localhost"
    
    # Performance optimisation
    DNSLookup=0
    
    # This works with the Nginx combined log format
    # LogFormat=1
    
    # This is the equivalent of LogFormat=1
    # LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot"
    
    # This adds my custom fields
    LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %virtualname %other %other"
    

    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.

    • 0

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve