Servidor Perfeito · 8 min read · Dec 02, 2025
Estendendo o Servidor Perfeito - Debian Squeeze [ISPConfig 3] - Página 4
9. Estatísticas a qualquer momento com awstats
Nesta seção, você pode aplicar uma modificação que permitirá que você atualize o awstats a qualquer momento que desejar, ou (usando cron) em intervalos de tempo mais frequentes. Antes de prosseguir, devemos mudar o formato de log padrão para o awstats. No Debian Squeeze, o formato padrão é 4, mas precisamos do 1. Então, você pode editar o arquivo /etc/awstats/awstats.conf ou o arquivo /etc/awstats/awstats.conf.local. Eu prefiro o segundo, porque me permitirá acompanhar as atualizações:
nano /etc/awstats/awstats.conf.locale adicionar a linha: LogFormat=1
Depois disso, o arquivo deve parecer com:
# Você pode sobrescrever as diretivas de configuração aqui.
# Isso é particularmente útil para usuários com várias configurações para
# diferentes servidores virtuais, que desejam reutilizar parâmetros comuns.
# Além disso, este arquivo não é atualizado com cada novo lançamento upstream.
LogFormat=1Agora temos que copiar o cron diário padrão do ISPConfig e editá-lo … na verdade, temos que editá-lo MUITO (novo nome do arquivo: mycron.php). Basicamente, temos que cortar muitas linhas e manter apenas algumas delas. Faça:
cp /usr/local/ispconfig/server/cron_daily.php /root/scripts/mycron.php
chmod 700 /root/scripts/mycron.php
nano /root/scripts/mycron.php
e cole todas as linhas a seguir:
uses('ini_parser,file,services,getconf');
#######################################################################################################
// Criar estatísticas do awstats
#######################################################################################################
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE stats_type = 'awstats' AND server_id = ".$conf['server_id'];
$records = $app->db->queryAllRecords($sql);
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
foreach($records as $rec) {
$logfile = escapeshellcmd($rec['document_root'].'/log/access.log');
$domain = escapeshellcmd($rec['domain']);
$statsdir = escapeshellcmd($rec['document_root'].'/web/stats');
$awstats_pl = $web_config['awstats_pl'];
$awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
$awstats_conf_dir = $web_config['awstats_conf_dir'];
$awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';
if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);
if(!is_file($awstats_website_conf_file)) {
$awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"
LogFile="/var/log/ispconfig/httpd/'.$domain.'/access.log"
SiteDomain="'.$domain.'"
HostAliases="www.'.$domain.' localhost 127.0.0.1"';
file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);
}
if(!@is_dir($statsdir)) mkdir($statsdir);
// awstats_buildstaticpages.pl -update -config=mydomain.com -lang=en -dir=/var/www/domain.com/web/stats -awstatsprog=/path/to/awstats.pl
$command = "$awstats_buildstaticpages_pl -update -config='$domain' -lang=en -dir='$statsdir' -awstatsprog='$awstats_pl'";
if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
exec($command);
rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/index.html');
$app->log('Criadas estatísticas do awstats com o comando: '.$command,LOGLEVEL_DEBUG);
} else {
$app->log("Nenhuma estatística do awstats criada. Ou $awstats_pl ou $awstats_buildstaticpages_pl não é propriedade do usuário root.",LOGLEVEL_WARN);
}
}
die("finalizado.\n");
?> Este script é um corte do arquivo cron padrão do ISPConfig e se aplica até o ISPConfig 3.0.3. É feito por Till Brehm, e nós o editamos, para que o procedimento de atualização NÃO modifique nenhum arquivo do sistema (ou de log) sempre que o chamamos. Em palavras simples, o script lê o arquivo access.log de cada domínio e NÃO faz nenhuma rotação ou qualquer modificação, exceto que reproduz os arquivos html para o awstats. Lembre-se de que o trabalho cron padrão do ISPConfig será executado normalmente às 00:30 e simplesmente adicionará ao banco de dados de estatísticas e recriará os arquivos html.
No script acima, você pode mudar o idioma produzido pelo awstats se simplesmente mudar as letras após “lang=” para aquelas que representam seu país.
Para o ISPConfig 3.0.4, use o seguinte código:
uses('ini_parser,file,services,getconf');
#######################################################################################################
// Criar estatísticas do awstats
#######################################################################################################
$sql = "SELECT domain_id, domain, document_root FROM web_domain WHERE stats_type = 'awstats' AND server_id = ".$conf['server_id'];
$records = $app->db->queryAllRecords($sql);
$web_config = $app->getconf->get_server_config($conf['server_id'], 'web');
foreach($records as $rec) {
$logfile = escapeshellcmd($rec['document_root'].'/log/access.log');
$domain = escapeshellcmd($rec['domain']);
$statsdir = escapeshellcmd($rec['document_root'].'/web/stats');
$awstats_pl = $web_config['awstats_pl'];
$awstats_buildstaticpages_pl = $web_config['awstats_buildstaticpages_pl'];
$awstats_conf_dir = $web_config['awstats_conf_dir'];
$awstats_website_conf_file = $web_config['awstats_conf_dir'].'/awstats.'.$domain.'.conf';
if(is_file($awstats_website_conf_file)) unlink($awstats_website_conf_file);
$sql = "SELECT domain FROM web_domain WHERE (type = 'alias' OR AND type = 'subdomain') server_id = ".$conf['server_id'];
$aliases = $app->db->queryAllRecords($sql);
$aliasdomain = '';
if(is_array($aliases)) {
foreach ($aliases as $alias) {
$aliasdomain.= ' '.$alias['domain']. ' www.'.$alias['domain'];
}
}
if(!is_file($awstats_website_conf_file)) {
$awstats_conf_file_content = 'Include "'.$awstats_conf_dir.'/awstats.conf"
LogFile="/var/log/ispconfig/httpd/'.$domain.'/access.log"
SiteDomain="'.$domain.'"
HostAliases="www.'.$domain.' localhost 127.0.0.1"'.$aliasdomain;
file_put_contents($awstats_website_conf_file,$awstats_conf_file_content);
}
if(!@is_dir($statsdir)) mkdir($statsdir);
####################################################################################
######################### RECRIA ESTATÍSTICAS ###########################################
$redo = 0; // defina isso como 1 se você quiser recriar estatísticas para um mês específico
$REMONTH = 11; // selecione o mês
$REYEAR = 2011; // selecione o ano
$LANG = 'gr'; // defina seu idioma
// Após definir o acima, execute este script novamente
// e.g
// php /path/to
####################################################################################
####################################################################################
if ( $redo == 1 ) {
$awmonth = $REMONTH;
$awyear = $REYEAR;
$statsdirold = $statsdir."/".$awyear."-".$awmonth."/";
if (!is_dir($statsdirold)) {
mkdir($statsdirold);
}
$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";
if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
exec($command);
rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');
$app->log('Criadas estatísticas do awstats com o comando: '.$command,LOGLEVEL_DEBUG);
} else {
$app->log("Nenhuma estatística do awstats criada. Ou $awstats_pl ou $awstats_buildstaticpages_pl não é propriedade do usuário root.",LOGLEVEL_WARN);
}
}
else {
if (date("d") == 1) {
$awmonth = date("n")-1;
$awyear = date("Y");
if (date("n") == 0) {
$awyear = date("Y")-1;
$awmonth = "12";
}
$statsdirold = $statsdir."/".$awyear."-".$awmonth."/";
if (!is_dir($statsdirold)) {
mkdir($statsdirold);
$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";
if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
exec($command);
rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');
$app->log('Criadas estatísticas do awstats com o comando: '.$command,LOGLEVEL_DEBUG);
} else {
$app->log("Nenhuma estatística do awstats criada. Ou $awstats_pl ou $awstats_buildstaticpages_pl não é propriedade do usuário root.",LOGLEVEL_WARN);
}
}
}
// ispconfig, no segundo dia do mês, sobrescreve as estatísticas criadas anteriormente por este script
// para sobrescrever a execução padrão do ispconfig no 2º dia do mês, devemos executar o código abaixo
if (date("d") == 2) {
$awmonth = date("n")-1;
$awyear = date("Y");
if (date("n") == 0) {
$awyear = date("Y")-1;
$awmonth = "12";
}
$statsdirold = $statsdir."/".$awyear."-".$awmonth."/";
$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdirold' -awstatsprog='$awstats_pl'";
if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
exec($command);
rename($statsdirold.'awstats.'.$domain.'.html',$statsdirold.'awsindex.html');
$app->log('Criadas estatísticas do awstats com o comando: '.$command,LOGLEVEL_DEBUG);
} else {
$app->log("Nenhuma estatística do awstats criada. Ou $awstats_pl ou $awstats_buildstaticpages_pl não é propriedade do usuário root.",LOGLEVEL_WARN);
}
}
// fim da sobrescrição
// infelizmente o acima será executado muitas vezes (tantas quantas você executar este script pelo cron)
$awmonth = date("n");
$awyear = date("Y");
$command = "$awstats_buildstaticpages_pl -month='$awmonth' -year='$awyear' -update -config='$domain' -lang='$LANG' -dir='$statsdir' -awstatsprog='$awstats_pl'";
if($awstats_pl != '' && $awstats_buildstaticpages_pl != '' && fileowner($awstats_pl) == 0 && fileowner($awstats_buildstaticpages_pl) == 0) {
exec($command);
if(is_file($rec['document_root'].'/web/stats/index.html')) unlink($rec['document_root'].'/web/stats/index.html');
rename($rec['document_root'].'/web/stats/awstats.'.$domain.'.html',$rec['document_root'].'/web/stats/awsindex.html');
if(!is_file($rec['document_root'].'/web/stats/index.php')) copy("/usr/local/ispconfig/server/conf/awstats_index.php.master",$rec['document_root'].'/web/stats/index.php');
$app->log('Criadas estatísticas do awstats com o comando: '.$command,LOGLEVEL_DEBUG);
} else {
$app->log("Nenhuma estatística do awstats criada. Ou $awstats_pl ou $awstats_buildstaticpages_pl não é propriedade do usuário root.",LOGLEVEL_WARN);
}
} //fim redo
} // fim foreach
die("finalizado.\n");
?>
Lembre-se (na versão >=3.0.4) que você não verá estatísticas no primeiro dia de cada mês (como com o script normal). Se você quiser ver as estatísticas atualizadas após a primeira execução no primeiro dia do mês, você deve ler este post: https://www.howtoforge.com/forums/showthread.php?p=270816#post270816
Para executar o script a cada 4 horas, primeiro crie o arquivo /root/scripts/mycron.sh, torne-o executável e depois adicione-o à lista de cronjobs:
touch /root/scripts/mycron.sh
chmod 700 /root/scripts/mycron.sh
nano /root/scripts/mycron.sh
e cole o seguinte:
#!/bin/sh
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/X11R6/bin
/usr/bin/php /root/scripts/mycron.phpAdicione o cronjob:
crontab -eAnexe a seguinte linha, salve e saia:
45 0,4,8,12,16,20 * * * /root/scripts/mycron.shVocê também pode iniciar a criação de estatísticas a qualquer momento por:
/root/scripts/mycron.shVocê pode recriar estatísticas de meses anteriores (desde que haja dados em /var/lib/awstats ou /var/cache/awstats). Leia os comentários no script, defina redo=1 e execute o script. Mais em https://www.howtoforge.com/forums/showthread.php?t=51731
10. Ajuste do mysql
Baixe tuning-primer.sh e mysqltuner.pl. Estes ajudarão você a melhorar o arquivo de configuração do mysql.
cd /root/scripts
wget http://www.day32.com/MySQL/tuning-primer.sh
wget http://mysqltuner.com/mysqltuner.pl
chmod 700 tuning-primer.sh mysqltuner.pl
Para executá-los:
perl /root/scripts/mysqltuner.pl
/root/scripts/tuning-primer.sh
Os scripts farão algumas perguntas simples (usuário/senha) e exibirão em vermelho suas sugestões para configurações críticas. Você pode usar as sugestões deles para aumentar o desempenho do servidor mysql.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.