Monitore o seu sistema com as ferramentas do SYSSTAT

O SYSSTAT é um pacote de softwares para monitoramento da performance do seu sistema Linux.
O pacote contém um conjunto de ferramentas para administradores de sistemas, que retornam informações cruciais sobre o uso da CPU, da memória, do fluxo de dados (E/S) etc.
Saída do comando dmesg com erro na porta USBTodas estas informações podem ser gravadas e analisadas com o intuito de detectar possíveis gargalos no sistema.

Motivos para usar o SYSSTAT

Entre as diversas funções do pacote de aplicativos, o site do desenvolvedor relaciona as seguintes:

  • As estatísticas fornecem médias dos valores, calculados sobre um período de amostra.
  • A maioria dos dados sobre o seu sistema podem ser gravados em um arquivo para uma inspeção posterior.
  • Permite configurar a extensão do histórico de dados a ser armazenado.
  • Detecta novos dispositivos on the fly — o que inclui novos discos conectados ao sistema, interfaces de rede etc., que sejam criados ou registrados dinamicamente.
  • Tem suporte tanto a máquinas UP (uniprocessors) quanto a SMP (Symmetric MultiProcessing.
  • Tem suporte a hotplug CPUs (detecta “automagicamente” processadores ao serem habilitados ou desabilitados) e a tickless CPUs.

    O que é o tickless

    “Anteriormente, o kernel do Linux interrompia periodicamente cada CPU em um sistema em uma frequência pré-determinada, 100 Hz, 250 Hz ou 1000 Hz, dependendo da plataforma. O kernel pesquisava a CPU sobre os processos que estava executando, e usava os resultados para a contabilidade do processo e carga de balanceamento.” — Documentação do Red Hat Linux.

  • Funciona em diversas arquiteturas, seja 32 ou 64 bits.
  • Consome muito pouco recurso da CPU — é escrito em C!
  • As estatísticas do sistema podem ser gravadas e exportadas para diversos formatos (CSV, XML, JSON etc).
  • Tem suporte a diversos idiomas, inclusive o português.
  • Há vários outros programas, que você pode baixar, que interagem com os dados do SYSSTAT — um deles é o isag e ele está incluído no pacote.

Como instalar o SYSSTAT

O principal programa do pacote é o sar.
Para usá-lo, é necessário instalar o pacote SYSSTAT. Veja como fazer isto no Ubuntu ou no Debian:

sudo apt-get update
sudo apt-get install sysstat

Quem usa o Red Hat ou Fedora, pode usar o yum:

yum install sysstat

Se você precisar instalar a partir do código fonte, consulte a página do desenvolvedor (link no final do artigo).

O QUE VEM NO PACOTE SYSSTAT?

O pacote instalado, contém vários aplicativos utilitários para monitorar a performance do seu sistema:

  • iostat — relata as estatísticas de uso da CPU, entradas/saídas dos dispostivos, das partições e da rede.
  • mpstat — exibe estatísticas individuais ou combinadas do uso do processador.
  • pidstat — lista estatísticas referentes aos processos em execução: E/S, CPU, memória etc.
  • sar — coleta, exibe e grava informações sobre as atividades no sistema, o que inclui o uso da CPU, da memória, dos discos, das interrupções, das interfaces de redes, das TTY, das tabelas do kernel etc.
  • sadc — é o coletor de dados de atividades do sistema, usadas como backend para o sar.
  • sa1 — o sa1 coleta e armazena dados binários no arquivo de dados diários das atividades do sistema.
  • sa2 — grava um relatório diário resumido de atividades. Constitui um frontend para o programa sar. É projetado para rodar do cron.
  • sadf — mostra os dados coletados pelo sar, em múltiplos formatos (CSV, XML, texto puro etc.) É útil para exportar dados sobre a performance do sistema para um banco de dados, ou para planilhas eletrônicas.
  • sysstat — trata-se da documentação do arquivo de configuração sysstat, que explica o significado das variáveis do sistema, usadas pelos outros comandos descritos.
  • nfsiostat-sysstat — reporta estatísticas de entrada e saída de de dados (E/S) dos sistemas de arquivos de rede (NFS — Network File System).
  • cifsiostat — relata as estatísticas do CIFS

Leia outros posts relacionados ao Linux neste site.

Como configurar o SYSSTAT

Antes de querer por os olhos nas estatísticas, é necessário se certificar de que o sistema está coletando seus dados.
Abra o arquivo /etc/default/sysstat e verifique a linha

ENABLED="true"

O valor da variável ENABLED tem que ser "true", se você quiser que o SYSSTAT colete dados no sistema.
Você precisa ter privilégios administrativos para alterar este arquivo.
Feita a alteração, é necessário reiniciar o serviço:

sudo service sysstat restart

ou

sudo /etc/init.d/sysstat start

A partir daí o SYSSTAT já estará ativo.

Toque final: o crontab

A principal ferramenta do SYSSTAT é o sar e você já pode usá-lo imediatamente.
Já o aplicativo sa2 foi projetado para rodar dentro do cron.
Se você não tem muita intimidade com o CRON ou o CRONTAB, sugiro ler este artigo.
No exemplo, que segue, o crontab está programado para executar o sa1 e o sa2.
O primeiro, a cada 10 minutos e o segundo, todo dia, às 22:00. Veja:

# Executa o sa1 a cada 10 minutos
*/10 * * * * root /usr/lib/sa/sa1 1 1
# Gera um relatório diário a partir dos dados do sa2, às 22:00 
00 22 * * * root /usr/lib/sa/sa2 -A

Com esta configuração no crontab, todo dia um arquivo novo será criado no diretório /var/log/sa.

Fontes:

Página do desenvolvedor: http://sebastien.godard.pagesperso-orange.fr/documentation.html
Mais informações sobre o sar: http://www.blackmoreops.com/2014/06/18/sysstat-sar-examples-usage/

Saiba mais sobre o CRONTAB: https://elias.praciano.com/?s=crontab

Como usar o comando Crontab – o cron para novatos.

Este post tem a pretensão de dar uma rápida introdução ao cron — e cobrir o básico de tudo o que ele é capaz de fazer para você.

O que é o cron?

Cron é o nome do programa que permite aos usuários do Unix/Linux executar comandos ou scripts (grupos de comandos) automaticamente em um determinado horário/data.

É comumente usado pelos administradores de sistemas para programar a execução de suas tarefas administrativas – como o backup.

Vamos ver, aqui, como funciona o Cron Vixie, uma versão desenvolvida por Paul Vixie.

Como iniciar o cron

Patek Philipecron é um daemon, o que significa que ele é um serviço que é iniciado uma vez (usualmente, quando o sistema é ligado), entra em stand by e, na hora certa, executa a(s) tarefa(s) programada(s) – usualmente, em background, ou seja, nos bastidores do sistema.

Outro exemplo de daemon é o servidor FTP, que fica em stand by, quando não está sendo usado.

O daemon crond já vem instalado na maioria das distros Linux e costuma ter algumas tarefas corriqueiras, já agendadas, como padrão.

Se você quiser saber o estado do seu crond, rode o seguinte comando:

ps aux | grep crond

O meu resultado foi este:

root 311 0.0 0.7 1284 112 ? S Dec24 0:00 crond

2914659 20624 0.0 0.0 112364 856 pts/1 SN+ 12:49 0:00 grep crond

A primeira linha, indica que o crond está sendo executado no meu sistema.

Se ele não estiver rodando no seu sistema, ou ele foi desligado (por você ou outro usuário) ou apenas nem foi iniciado.

Para iniciá-lo, você pode adicionar a linha crond a um dos scripts de inicialização ou rodar o aplicativo manualmente, como root:

crond

como usar o cron

Dentro do diretório /etc/, é possível encontrar subdiretórios chamados cron.hourly/, cron.weekly/, cron.daily/, cron.monthly/. O princípio é simples, assim – ao copiar um script para dentro de um destes diretórios, ele será executado a cada hora (hourly), a cada semana(weekly), a cada mês (monthly). A frequência com que o script será executado, depende do nome do diretório, portanto.

É possível ter mais flexibilidade no modo como a tarefa será executada, através da edição do arquivo /etc/crontab. Em um típico servidor Debian, este arquivo tem a seguinte aparência:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin</p>
<p># m h dom mon dow user	command
17 *	* * *	root    cd / &amp;&amp; run-parts --report /etc/cron.hourly
25 6	* * *	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.daily )
47 6	* * 7	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.weekly )
52 6	1 * *	root	test -x /usr/sbin/anacron || ( cd / &amp;&amp; run-parts --report /etc/cron.monthly )
#

Você pode verificar o arquivo, no seu sistema, com o seguinte comando:

cat /etc/crontab

explicando o arquivo crontab

As primeiras linhas, do arquivo, definem algumas variáveis usadas pelo cron. A segunda parte é a que exige um pouco mais de atenção. Vamos usar tabela para explicar a linha

# m h dom mon dow user	command
Item Descrição
m ou minute minuto – determina a quantos minutos, dentro de uma hora, o comando será executado. Os valores aceitos vão de 0 a 59.
h ou hour hora – determina a que hora o comando será executado e sua especificação segue o padrão 24h. Portanto, aceita valores entre 0 e 23 (sendo que 0 é meia-noite).
dom ou day of month dia do mês – determina o dia do mês em que o comando será executado. Se quiser que a tarefa seja executada no dia 25 do mês, use o valor 25.
mon ou month mês – determina o mês em que o comando será executado. Aceita tanto valores numéricos referentes aos meses do ano, como alfabéticos (e. g. August).
dow ou day of week dia da semana – aceita tanto valores numéricos de 0 a 7, como caracteres: sun, mon, tue, wed, thu, fri e sat, que correspondem, respectivamente a domingo, segunda, terça, quarta, quinta, sexta e sábado.
user usuário – determina o usuário do sistema sob cujos privilégios o comando irá ser executado
cmd ou command comando – determina o comando a ser executado.

Notas:

  • Nos campos em que você não deseja fixar valor algum, pode inserir um asterisco ‘*’.
  • No campo dow, dia da semana, tanto 0 como 7 correspondem a domingo
  • Caso você determine valores para dom e para dow, o sistema não entra em conflito. O cron executa o comando nos dois casos
  • O Vixie Cron aceita listas. O que significa que você pode enumerar especificamente, por exemplo, os dias da semana em que você deseja que um script seja disparado. Veja um exemplo:
    59 11 * * 1,2,3,4,5 root backup.sh

    irá executar o script backup.sh toda segunda, terça, quarta, quinta e sexta, às 11:59

  • Se você preferir, pode usar assim:
    59 11 * * 1-5 root backup.sh

    onde 1 – 5 significa de segunda a sexta

  • Você também pode “pular” números. Veja como:
  • se você usar o valor */2 no campo dom, o comando irá rodar a cada 2 dias.
  • */5, no campo de horas, fará com que o comando seja executado a cada 5 horas
  • Os nomes dos meses e dos dias da semana não são sensíveis à caixa. Ou seja, tanto faz escrever Jul como jul. O importante é que você use apenas as 3 primeiras letras do dia da semana ou do nome do mês.
  • Você pode (e deve) inserir comentários para explicar o que está fazendo. Para isto, basta usar um ‘#’ no início da linha comentada.

O crontab é multiusuário

O Unix é um sistema, por natureza, multiusuário. Cada usuário que se conecta ao sistema pode, em tese, programar as próprias tarefas a serem executadas pelo sistema.

Assim, você, que tem um blog WordPress instalado em um servidor – que te forneça acesso SSH – pode programar um backup e determinar a frequência com que ele irá ocorrer.

Para começar a personalizar o seu próprio crontab, use o comando:

crontab -e

O sistema irá abrir o seu editor de textos padrão (o meu é o nano).

Se você quiser usar o nano também, para editar o crontab execute o seguinte comando:

export EDITOR=nano

Note que o seu crontab “particular” segue os padrões do arquivo /etc/crontab do sistema.

Uma vez terminada a edição, o cron faz a verificação sintática e permite corrigir possíveis erros. Se tudo estiver bem, é só deixar rolar.

Outros editores de texto

Usuários que se sintam mais confortáveis com outros editores de texto, podem faze a edição no aplicativo da sua preferência.

Depois de concluído, é só usar o comando crontab para substituir o seu arquivo crontab atual pelo arquivo que você acabou de criar.

Vamos supor que você tenha escrito as definições em um arquivo chamado meu.arquivo.cron, o comando a ser usado é o seguinte:

crontab meu.arquivo.cron

Outros usos

Para listar as definições atuais do crontab:

crontab -l

Para apagar e remover o seu crontab atual:

crontab -r

Como restringir acesso ao crontab

Quem é administrador de um sistema pode impedir que usuários tenham acesso ao cron. Você pode inserir, no arquivo /etc/cron.allow os usuários que têm permissão de alterar o crontab. O arquivo /etc/cron.deny é onde são inscritos os usuários que terão seu acesso negado ao serviço.

Uma maneira de restringir quase todos e permitir o acesso a alguns é adicionar a linha ALL ao /etc/cron.deny e ir acrescentando um a um os usuários aos quais você deseja liberar o acesso em /etc/cron.allow.

Veja como restringir o acesso de todo mundo ao serviço:

echo ALL &gt;&gt; /etc/cron.deny

Para permitir o acesso à usuária sandrinha, use o comando:

echo sandrinha &gt;&gt; /etc/cron.allow

Na ausência de qualquer um destes dois arquivos, o uso do cron, no sistema, é irrestrito — ou seja, todo mundo pode usar.

Se você tiver apenas o arquivo /etc/cron.allow e, nele, inscrever a usuária sandrinha, o sistema vai entender que todos os outros usuários estão proibidos e somente esta poderá fazer uso do serviço.

Com estas dicas básicas, você já estará habilitado a administrar as tarefas programadas no seu sistema. Mais informações podem ser encontradas com o comando man crontab.

Have fun!