Translate

quinta-feira, 13 de dezembro de 2012

Diagrama de Gantt Online (Open Source)

Diagrama de Gantt

1. Sobre o Diagrama de Gantt

O Gráfico de Gantt, ou Diagrama de Gantt, é uma ferramenta que permite a visualização do progresso de projetos. É, basicamente, uma ferramenta de acompanhamento, bastante visual, cujo objetivo é deixar a informação o mais transparente possível.
A função do Gráfico de Gantt é, de uma forma genérica, permitir o acompanhamento da realização de tarefas e atividades que compõem um projeto de objetivo maior. Dessa forma, a utilização da ferramenta permite que todos os interessados possam verificar o andamento das atividades. É muito útil para o Gerenciamento de Projetos onde existem muitos envolvidos.

Possibilidades:
  • Criar diagramas pessoais e de projetos;
  • Compartilhar diagrama entre usuários do servidor;
  • Compartilhamento automático de diagrama de projetos aos membros do projetos;
  • Definir políticas de acesso;
  • Renomear, deletar e versionar.

A solução utilizada é uma adaptação da ferramenta Open Source ().

2. Código Fonte PHP

a. gantt.php: script PHP que permite a visualização / impressão dos gráficos de Gantt, executando a leitura em DB;
b. gantt.css / platform.css / teamworkFont.css: arquivo que contém as propriedades de estilo dos objetos utilizados em modelo.php;
c. gantt_save.php: salva as alterações realizadas no Gantt, gerando uma nova versão do mesmo;
d. index.php: listagem de Gantts do usuário / compartilhados;
e. modelo.php: modelo (layout) do gráfico de Gantt;
f. notificacao.php: envia uma notificação por e-mail ao receptor do compartilhamento de Gantt;

O código fonte foi amplamente comentado.

3. Fluxograma


4. Banco de Dados

Banco de dados SQLite2, localizado em /var/www/gantt/gantt.db.
Arquitetura: 
a. notificacoes
Tabela responsável por armazenar as notificações de compartilhamento de Gantt. A cada minuto (CRONTAB), o script notificacoes.php verifica a tabela por novas mensagens e as envia.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"NOVO" ou "OK", informando se a mensagem já foi enviada
2ownerTEXTautor do Gantt
3receiverTEXTdestinatário da mensagem (alvo do comaprtilhamento)
4titleTEXTtítulo do Gantt
5dateTEXTdata do compartilhamento
b. $USUÁRIO
Cada usuário do sistema possui uma tabela com a nomenclatura do próprio usuário.
Responsável por armazenar os Gantts pessoais e compartilhamentos.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"OK", "DEL" (removido) e "OCULTO" (versão anterior)
2uidTEXTID do documento (versões anteriores possuem mesmo UID
3ownerTEXTautor do Gantt
4titleTEXTtítulo do Gantt
5ganttTEXTdiagrama
6dateTEXTdata de criação
c. compartilhamentos
Gerencia o compartilhamento de diagramas, armazenando a permissão e localização do mesmo.
cidnametypedescrição
0idINTEGER|ID do item na tabela
1statusTEXT"OK", "DEL" (removido)
2uidTEXTID do documento compartilhado
3ownerTEXTautor do diagrama
4projectTEXTprojeto pertencente
5titleTEXTtítulo
6receptorTEXTdestinatário do compartilhamento
7permissaoTEXT"W" ou "R", permissão de leitura ou escrita
8dateTEXTdata do compartilhamento
d. projects
Responsável por armazenar os Gantts de projetos.
cidnametypedescrição
0idINTEGERID do item na tabela
1statusTEXT"OK", "DEL" (removido) e "OCULTO" (versão anterior)
2uidTEXTID do documento (versões anteriores possuem mesmo UID
3ownerTEXTautor do Gantt
4projectTEXTprojeto pertencente
5titleTEXTtítulo do Gantt
6ganttTEXTdiagrama
7dateTEXTdata de criação

5. Ferramenta de Terceiro: TeamWork Gantt

Localizado localmente no diretório "/var/www/gantt/libs".
Trata-se de uma ferramenta OpenSource que possibilita a elaboração de diagramas de Gantt WEB (PHP).
Desenvolvido em JQuery, possibilita a criação de Gantts, árvores de tarefas, dependências e exportação em formato JSON.

Para maiores informações: http://gantt.twproject.com 


6. Download de Exemplo


 https://www.dropbox.com/s/kmdgho9zp6k46mu/gantt.zip (basta criar o banco de dados)

quarta-feira, 17 de outubro de 2012

Configuração de "Bonding" em placas de rede

  1. Instalar o pacote ifenslave (depende de iproute e libpb-4.8);
  2. Desative as placas de rede:
    ifdown eth0 #Para todas as placas de rede
    ifdown eth1
    /etc/init.d/networking stop
    
  3. Configurar bonding comentando a configuração das placas de rede atualmente configuradas (/etc/network/interfaces);
  4. Inserir a configuração do bonding:
    # == Comentar ==
    # The primary network interface
    #auto eth0
    #allow-hotplug eth0 
    #iface eth0 inet static  
    #    address 10.0.0.88
    #    netmask 255.255.0.0
    #    gateway 10.0.0.9
    
    # The secondary network interface
    #auto eth1
    #llow-hotplug eth1
    #iface eth0 inet static
    #   address 10.0.0.87
    #   netmask 255.255.0.0
    #   gateway 10.0.0.9
    
    # == Adicionar ==
    auto bond0
    iface bond0 inet static
        address 10.0.0.89 #IP virtual utilizado no bonding
        netmask 255.255.0.0
        gateway 10.0.0.9
        slaves eth0 eth1 #Placas de rede físicas a serem utilizadas pelo bonding
        bond-mode active-backup
        bond-miimon 100
        bond-downdelay 200
        bond-updelay 200
    
  5. Inicie a rede:
    ifup bond0
    /etc/init.d/networking start
    
Fonte: http://wiki.debian.org/Bonding

terça-feira, 2 de outubro de 2012

Testlink: Exportar Test Suite para XML suportado pelo MS Excel




Edite o arquivo de configuração lib/testcases/tcExport.php, adicionando o seguinte texto antes de "downloadContentsToFile($content,$gui->export_filename);":
#Linha 133
#Converter codificação ISO-8859-1 em caracteres/simbolos
$content = htmlentities($content, ENT_QUOTES);
#"ENT_QUOTES": converte aspas simples e duplas;
#"ENT_COMPAT": converte aspas duplas;
#"ENT_QUOTES": converte aspas simples.
Este código irá remover tags HTML que "poluem" o relatório de Test Suite.

quarta-feira, 19 de setembro de 2012

Realizar consultas MS SQL 2008 através de PHP



  1. Instalar pré-requisitos:
    apt-get install apache2 php5 libapache2-mod-php5 php5-mssql unixodbc unixodbc-dev freetds-dev tdsodbc freetds-bin
    
  2. Configurar /etc/freetds/freetds.conf, adicionando:
    [tds]
    host = IP_DO_SERVIDOR_MSSQL
    port = 1433
    tds version = 8.0 #Porta padrão para MSSQL
    client charset = UTF-8
    
  3. Configurar /etc/odbcinst.ini, adicionando:
    [tds]
    Description     = FreeTDS Driver for Linux & MSSQL on Win32
    Driver          = /usr/lib/odbc/libtdsodbc.so
    Setup           = /usr/lib/odbc/libtdsS.so
    UsageCount      = 1
    
  4. Configurar /etc/odbc.ini, adicionando:
    [tds]
    Description = Test to freeTDS
    Driver = tds
    Trace = No
    Database = BANCO_DE_DADOS
    Server = IP_DO_SERVIDOR_MSSQL
    Port = 1433 #Porta padrão para MSSQL
    
  5. Testar a conexão:
    isql -v tds USUARIO_DO_DB PASS_DO_DB
    #retornará: o prompt SQL "SQL>"
    
  6. Ativar o módulo ODBC em PHP5 (/etc/php5/apache2/php.ini), adicionando:
    extension = odbc.so
    
  7. Reiniciar o Apache:
    /etc/init.d/apache2 restart
    
  8. Testar a consulta em PHP, criando um script PHP como o seguinte:
    <?php
    //teste_de_coexao.php
    
    echo "<table>";
    $link = mssql_connect('IP_DO_SERVIDOR_MSSQL', 'USUARIO_NO_DB', 'PASS_NO_DB');
    
    if (!$link) {
       die('Unable to connect!');
    }
    
    if (!mssql_select_db('BANCO_DE_DADOS', $link)) {
       die('Unable to select database!');
    }
    
    $result = mssql_query('SELECT * FROM TABELA');
    
    while ($row = mssql_fetch_array($result)) {
       echo "<tr><td>NA: " . $row['numero'] . "/" . $row['ano'] . "</td><td> Solicitante: " . $row['solicitante'] . "</td></tr>";
    }
    
    echo "</table>";
    mssql_free_result($result);
    ?>
    

Acesse o site para verificar se o resultado esperado foi retornado.


Se tiver problemas com charset:
http://www.rafaeltheodoro.com.br/php/converter-codificacao-do-sqlserver-para-o-mysql-em-php-charset-cp850-do-sqlserver-para-mysql/comment-page-1/


segunda-feira, 10 de setembro de 2012

TestLink: exportar relatório HTML para PDF / export report to PDF



Habilitar formato / Enable Format

a. testlink/cfg/reports.cfg.php - habilitar formato: descomentar "FORMAT_PDF => 'format_pdf" (linha 44); / enable format: uncomment "FORMAT_PDF => 'format_pdf" (line 44);
b. testlink/cfg/reports.cfg.php - habilitar formato em cada tipo de relatório: adicionar "format_pdf" em "format" dos tipos de relatórios do qual habilitaremos a saída em PDF (atualmente habilitado nas linhas 79 e 85); enable format in each report type: add "format_pdf" in "format" of the types of reports which habilitaremos the PDF output (I enabled only in 79 and 85);
c. testlink/testlink/lib/results/printDocument.php - se o relatório for em PDF, redirecionar para o conversor: altere as seguintes linhas (262-270): / if the report is in PDF, redirect to the converter: change the following lines (262-270):
// add application header to HTTP
if (($args->format == FORMAT_ODT) || ($args->format == FORMAT_MSWORD))
{
    flushHttpHeader($args->format, $doc_info->type);
}
// send out the data
echo $generatedText;

Para / To:
// add application header to HTTP 
if (($args->format == FORMAT_ODT) || ($args->format == FORMAT_MSWORD))
{
        flushHttpHeader($args->format, $doc_info->type);

} else if ($args->format == FORMAT_PDF) { // ********* Saída do relatório em PDF *********

        //Enviar HTML para DOMPDF, via POST (converter html > pdf) / Send HTML to DOMPDF via POST (convert html> pdf)
        echo "<form action='dompdf/conversor.php' method='post' name='frm'>";
                //Enviar via POST o relatório em HTML para conversão ($PDF) e o nome do documento PDF ($_SESSION['testprojectName']) / Send the POST report to HTML conversion ($ PDF) and the name of the PDF document ($ _SESSION ['testprojectName'])
                echo "<input type='hidden' name='html' value='" . base64_encode(serialize($PDF)) . "'>
                      <input type='hidden' name='projectname' value='" . $_SESSION['testprojectName'] . "'>
                ";
        echo "
                </form>
                <script language=\"JavaScript\">
                        document.frm.submit();
                </script>
        ";

} else {
        // send out the data (!=PDF)
        echo $generatedText;
}

Observações: a variável "$generatedText" recebe o relatório em HTML, para depois exibir través de "echo $generatedText;" (PHP). Para o relatório em PDF, não é interessante que a primeira página e o HTMLHeader sejam exibidos, portanto utiliza-se a variável "$PDF" para receber paralelamente todos os valores tal como "$generatedText", exclusive:
Notes: The variable "$ generatedText" receives the report in HTML to display after abeam of "echo $ generatedText;" (PHP). For the PDF report, is not it interesting that the first page to appear HTMLHeader and therefore uses the variable "$ PDF" to receive all parallel values ​​such as "$ generatedText 'exclusive:
//Linhas / Lines 216-217
//$PDF = renderHTMLHeader($doc_info->type.' '.$doc_info->title,$_SESSION['basehref']); //Desativado / Disable
//$PDF .= renderFirstPage($doc_info); //Desativado / Disable

Valores recebidos pela variável / Amounts received by the variable:
//Linhas / Lines 231-232
$PDF .= renderSimpleChapter(lang_get('scope'), $doc_info->tproject_scope);
$PDF .= renderTestSpecTreeForPrinting($db, $tree, $doc_info->content_range,$printingOptions, null, 0, 1, $args->user_id);

//Linha 242
$PDF .= renderSimpleChapter(lang_get('scope'), $doc_info->testplan_scope);

//Linha 247
$PDF .= renderTestPlanForPrinting($db, $tree, $doc_info->content_range,$printingOptions,null,0,1, $args->user_id,$args->tplan_id,$args->tproject_id);

//Linha 253
$PDF .= buildTestPlanMetrics($doc_data->statistics);

d. testlink/lib/results/dompdf/conversor.php - gera código para executar a conversão através do plugin dompdf:
testlink/lib/results/dompdf/conversor.php - generates code to perform the conversion using the dompdf plugin:
<?php
//Invoca o conversor / Invoke the converter
require_once("dompdf_config.inc.php");
//Recebe o relatório em HTML / Get the HTML report
$html = utf8_decode(unserialize(base64_decode($_POST["html"])));
$dompdf = new DOMPDF();
//Indica o que converter / Indicates that convert
$dompdf->load_html($html, 'UTF-8');
$dompdf->set_paper('a4', 'portrait');
$dompdf->render();
//Disponibiliza o relatório / Provides the report
$dompdf->stream($_POST['projectname'] . ".pdf");
?>

terça-feira, 13 de dezembro de 2011

Acesso remoto a sistema desenvolvidos em CLIPPER (plataforma Windows 16 bits)

Para a próxima feira de jóias de Limeira, precisei bolar uma forma de acessar remotamente um programa em clipper (DOS) com a necessidade de imprimir localmente.
Como no DOS não é possível (com qualidade e velocidade), apelei para o nosso querido amigo Linux... através do DOSEMU e o FreeDOS (veja na bibliografia), emulei o ambiente DOS e rodei o sistema em uma máquina virtual Ubuntu.
Para tonar o acesso remoto/impressão mais confiável e fácil, fiz uma VPN através do Hamachi:

http://rairo.wordpress.com/2009/01/16/ubuntu-instalando-o-hamachi-vpn/

Removi a solicitação de senha para executar comando como root (sudo), não é recomendável mas o objetivo do projeto é torná-lo o mais fácil possível para os usuários acostumados com Windows:
http://www.vivaolinux.com.br/topico/vivaolinux/Permissao-12
Consegui desta forma auto iniciar o hamachi-gui como root no início da sessão no servidor e no cliente (menu sistema > preferências > aplicativos de sessão).

Para que o acesso remoto pudesse imprimir através do computador cliente e não do servidor:
Instalei uma impressora no computador cliente e configurei o CUPS (http://localhost:631/ ou menu sistema > administração > impressão) para compartilhar a impressora (ativei também a opção de compartilhar via internet - ipp). No servidor, busquei a impressora do cliente através do IP da VPN do Hamachi; instalei, e imprimi corretamente.

Para facilitar mais ainda procedimento do usuário:
iniciar a sessão do usuário no Ubuntu automaticamente (menu sistema > administração > tela de login);
criei um script para conectar via SSH ao IP da VPN automaticamente ao iniciar a sessão no Ubuntu 
Exemplo:

#!/bin/bash
ssh usuário@IP_VPN

...coloquei-o no autostart (menu sistema > preferêcias >aplicativos de sessão);
para que não seja solicitada senha para conectar via SSH: http://papogeek.wordpress.com/2008/05/13/login-ssh-sem-senha/;
para que após o acesso ao servidor via SSH o DOSEMU inicie automaticamente, na pasta do usuário (/home/usuário) no servidor, localizei o arquivo ".bashrc" e adicionei na ultima linha o comando "sudo dosemu";
dentro do DOSEMU, editei o arquivo autoexec.bat para executar automaticamente o sistema ao iniciar.

Dica: na configuração do dosemu.conf, a nossa codificação latina para escrita é "cp850".

Se não me esqueci de nada, está pronto! Uma semana de trabalho.

Em suma: consigo acessar remotamente através de SSH um sistema em Clipper (DOS) e ao imprimir, o servidor encaminha a impressão para o computador cliente e assim não é impresso na impressora padrão do servidor. Este processo utiliza pouca banda e é tolerável a variações do link de internet.


Referência Bibliográfica
SILVA, João Almeida. " Implantação de acesso remoto de sistema legado em Clipper sobre Linux". Disponível em <http://www.ginux.ufla.br/node/128>. Acessado em 15/06/2010

domingo, 11 de dezembro de 2011

PROCURE POR ROOTKIT NO LINUX



PROCURE POR ROOTKIT NO LINUX

Pode parecer estranho, mas é possível que algum rookit esteja instalado em servidor Linux sem que o sysadmin possa imaginar. Há alguns relatos de que o Linux já foi invadido por crackers, para nos sentirmos mais seguro o " rkhunter" foi desenvolvido.
O rkhunter é responsável por procurar rootkit em seu sistema e no final do processo ele cria um log caso depois queira ver com maiores detalhes. Para instalar o rkhunter bastar digitar o “apt-get install rkhunter” ou usar o aptitude , a instalação é rápida. Antes de fazer a busca você precisa executar o seguinte procedimento para que o "rkhunter" funcione perfeitamente:

     # rkhunter –propupd (Atualiza a base com as propriedades dos arqivos.)
     # rkhunter –update (Atualiza a base do rkhunter.)
     # rkhunter -c (para fazer a busca)

** rkhunter --cronjob (para utilização em crontab)
** Para filtrar o resultado, é possível utilizar o comando "grep Warning /var/log/rkhunter.log"

Agora é só aguardar o resultado da busca. Os arquivos que apresentarem "WARNING" (em vermelho) estão comprometidos, os arquivos em cor verde "not found" e "ok" não apresentam risco. Por fim o "rkhunter" irá gerar um log em /var/log/rkhunter.log.

Maiores dúvidas: man rkhunter



Fonte:
http://corvolinopunk.wordpress.com/2008/06/07/procure-rootkit-em-seu-linux/
http://hercules-now.com/2011/08/04/procure-rootkit-em-seu-linux/

MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO DO SISTEMA DE MONITORAMENTO ZABBIX




MANUAL DE INSTALAÇÃO E CONFIGURAÇÃO DO SISTEMA DE MONITORAMENTO ZABBIX


1 – Instalação

Os seguintes passos mostram como instalar os pré-requisitos do Zabbix (LAMP e outros pacotes) no Ubuntu 10.04:
a. Instalando o Apache:
sudo apt-get install apache2
b. Instalando o PHP 5: {{{sudo apt-get install php5 libapache2-mod-php5 && sudo /etc/init.d/apache2 restart }}} c. Instalar o MySQL Server:
sudo apt-get install mysql-server #solicitará o password do usuário root do BD
d. Instalar o painel de controle PHPmyadmin:
sudo apt-get install libapache2-mod-auth-mysql php5-mysql phpmyadmin
e. Habilitar extension=msql.so em /etc/php5/apache2/php.ini;
f. Reiniciar o serviço apache2:
sudo /etc/init.d/apache2 restart
g. Instalar outras dependência do Zabbix:
sudo apt-get install build-essencial php5-gd snmp libsnmp9-dev snmpd
h. Adicionar usuário Zabbix ao sistema:
sudo useradd zabbix
i. Acessar o MySQL para gerar o database Zabbix e dar privilégio total a usuário Zabbix em localhost:
mysql -u root -p
(Digite a senha do banco de dados, especificada durante o processo de instalação do mesmo)
CREATE DATABASE zabbix;
GRANT ALL PRIVILEGES ON zabbix.* to zabbix@localhost;
j. Instalar o Zabbix através do aptitude (apresentaram-se erros através do apt-get e do pacote baixado do site): sudo aptitude install zabbix-server-mysql zabbix-agent zabbix-frontend-php (perguntará sobre a necessidade de criar um database no BD, não aceitar pois já foi criado anteriormente, será necessário indicar a senha do BD durante o processo de instalação)
l. Reniciar o apache:
sudo /etc/init.d/apache 2 restart
m. Editar o o arquivo de configuração do PHP para adequa-lo as necessidades do Zabbix:
# vi /etc/php5/apache2/php.ini
Localizar as seguintes linhas e alterar os valores:
date.timezone = America/Sao_Paulo
max_execution_time = 300
max_input_time = 300
post_max_size = 16M
n. Acessar o Zabbix: http://localhost/zabbix (usuário: admin / senha: zabbix):



2 - Possível erro após a instalação: “Zabbix Server is Running: No”

Após todos os procedimentos para instalação do Zabbix, é feito o acesso através do endereço especificado anteriormente. Ao verificar o “status” do sistema em dashboard, o primeiro campo informa que o sistema não está operante (“Zabbix Server is Running = No”).




Acessando o arquivo de log do Zabbix-Server (sudo vi /var/log/zabbix-server/zabbix_server.log), o seguinte erro é registrado: “Connection to database failed: [1045] Access denied for user 'zabbix'@'localhost'”, ficando claro que se trata de uma falha de conexão entre o Zabbix e o MySQL. Para alterar os parâmetros de conexão ao banco, deve-se editar o arquivo de configuração /etc/zabbix/zabbix_server.conf. Analisando o conteúdo do arquivo, as linhas “DBuser”, “DBpassword” e “DBhost” estavam corretas, mas o campo “DBname” que deveria conter “zabbix”, mas estava vazia. Depois de tal correção, reinicie o serviço zabbix-server e acesse novamente o webadmin.
Outro erro bastante comum é o caminho do "mysql.sock" indicado incorretamente no arquivo de configuração do Zabbix. Para saber o caminho correto, basta vevificar a linha socket do arquivo de configuração do MySQL (/etc/mysql/my.cnf).

3 - Instalando o Zabbix-Agent nas estações


a. Instalar o Zabbix-Agent:
# apt-get install zabbix-agent

b. Configurar o Agente do Zabbix
# vi /etc/zabbix/zabbix_agentd.conf






c. Reiniciar o agente do Zabbix para que as alterações tenham efeito.
# /etc/init.d/zabbix-agent restart

d. Com o agente configurado, cadastrar o novo host no servidor Zabbix:
e. Configuração > Hosts > Clique em Criar Hosts





**Caso o Campo: Nos Grupos – esteja com o Grupo Zabbix servers, vamos remover clicando em ">>"

f. Preencha os Campos: Nome: Outros Grupos: Clique em Linux servers e depois em "<<" Endereço IP: Preencher com o IP do Cliente Campos do Associado aos templates: Clique em adicionar, e será aberto um popup – Clique em Grupo e selecione Templates – Localize e marque Template_Linux – Clique no final do popup em Selecionar




De volta a tela de cadastro de Hosts clique em SALVAR
O servidor Zabbix tentará se conectar ao Cliente, caso não haja nenhum problema No Campo Status teremos "Monitorado".



4. Definições


a. Items: são os “dados” coletados pelo zabbix, por si só não fazem nada, apenas ficam armazenados no banco de dados do monitoramento;
b. triggers (Gatilhos): “analisam” os Items coletados e geram alarmes de acordo com condições pré-definidas;
c. actions: ações que o servidor de monitoramento toma mediante a mudança de estado de um trigger (ou grupo de triggers). Estas podem ser: email, sms, mensagem via jabber, execução de um script local ou remoto no servidor que originou o alarme por exemplo.

5. Coleta de dados através de scripts


Na estação a ser monitorada, faça:
a. dê privilégio ao user zabbix para executar comandos através do "sudo" sem solicitar a credencial root
# sudo visudo (sudo é necessário caso o usuário não esteja logado com o usuário root)

Ao final do documento, adicionar: zabbix ALL=NOPASSWD: ALL
b. Criar a pasta onde os scripts serão armazenados:
mkdir /etc/zabbix/scripts

c. Depositar o script na pasta e dar a devida permissão de execussão ao user zabbix
d. No arquivo de configuração do agente zabbix (/etc/zabbix/zabbix_agentd.conf), informar os parâmetros de utilização do script (ao final do arquivo):
UserParameter=auth.log,sudo /etc/zabbix/scripts/auth.log.sh #em negrito refere-se a uma chave inventada por mim para ser apontada na criação do ítem no servidor zabbix, relacionando este item com o comando para executar o script

No servidor Zabbix, faça:
a. Na página de configuração, acesse Configurações>Templates
Neste exemplo será criada a aplicação dentro da template (modelo) Linux. Localize esta template e clique em "Aplicações" na respectiva template
b. Na parte superior direita, clique em "criar aplicação"e dê um nome a ela, tal como: "Log de Acesso"
c. Volte para a página de templates e clique em "itens" da respectiva template. Crie um novo Item, com os seguintes dados:
  • Descrição (nome do item) - Log de Acesso
  • Tipo - agente Zabbix
  • Chave (importante! refere-se a chave colocada em negrito na linha UserParameter nas configurações do agente) - auth.log
  • Tipo de informação (neste script gerado por mim, retornará apenas "0" e "1") - numérico
  • Intervalo de atualização (intervalo entre as verificações) - neste exemplo coloquei 300
  • Status - ativo
  • Aplicaçoes - Log de Acesso
  • Salvar!

d. Reinicie o agente no servidor monitorado:
/etc/init.d/zabbix-agent restart
Pronto, ele estará coletando informações. Caso seja necessário, ative o item acessando Configurações>Hosts>Na linha do servidor monitorado, clique em itens>Locatilze o ítem "Log de Acesso" e clique em cima de "não suportado" (na coluna status) para ativa-lo.

Agora definiremos quais valores retornados pelo ítem devem ser tratados como normal ou criticos
Acesse Configurações>Hosts>Clique em Triggers do referido servidor>Criar trigger
  • Dê um nome a Trigger
  • Expressão, localize o ítem criado (NOME_DO_SERVDIOR:Log de Acesso) e defina a função "Last value = N" e deixe N = 0
  • Defina um grau de risco da ocorrência
  • Clique em salvar

Quando o script captar mudanças no arquivo de log do Linux (/var/log/auth.log), irá retornar o valor "1", acionando o alerta do Zabbix.


Conteúdo do Script: 
#!/bin/bash
diff /var/log/auth.log /var/log/auth.log.old > alteracao
if [ "$alteracao" ==  "" ]; then
        exit 0
else
        cat alteracao | mail DESTINATARIO_DE_E-MAIL -s "[Citosina] Auth.log at ${DATE}" # esta linha foi adiciona para que o diff do log seja enviado por e-mail
        exit 1
fi




5.1. Monitoramento de temperatura

  1. Instalar dependências: libusb-dev, libinline-perl e libdevice-usb-pcsensor-hidtemper-perl;
  2. Baixar pacote que exibe a temperatura: http://www.isp-sl.com/pcsensor-0.0.1.tgz
  3. Instalar pacote: make; cp pcsensor /usr/local/bin/
  4. Adicionar script que coletará a temperatura para o Zabbix (em /etc/zabbix/scripts/temperatura.sh):
    #!/bin/bash
    sudo pcsensor -m | sed -n '1p'
    
  5. Permitir ao usuário zabbix executar "pcsensor" como root sem solicitar senha. Adicione a seguinte linha em /etc/sudoers:
    #Permitir que o usuario zabbix execute a verficação de temperatura como root
    zabbix  ALL = NOPASSWD:/usr/local/bin/pcsensor
    
  6. Adicionar referência do script de coleta de temperatura com a solicitação do servidor Zabbix - configuração /etc/zabbix/zabbix_agentd.conf (computador cliente), adicionar ao final do arquivo:
    #Temperatura ambiente
    UserParameter=temperatura,/etc/zabbix/scripts/temperatura.sh
    
  7. Adicionar item de monitoramento ao Zabbix: em configurações > hosts > itens (do servidor pretendido) > criar item.
    Os dados devem ser preenchidos da seguinte forma:


** chave: refere-se ao ID identificador do script a ser executado no passo f.

h. Adicionar trigger (limite que dispara uma ação/notificação) ao Zabbix: em configurações > hosts > triggers (do servidor pretendido) > criar trigger.
Os dados devem ser preenchidos da seguinte forma:

5.2. Demais scripts em operação

5.2.1. Monitoramento de nobreak

apcupsd é um pacote open source (disponível em repositório APT) que possibilita o monitoramento de nobreaks APC. Informações coletadas:
  1. APC - version, number of records and number of bytes following
  2. DATE - Date and time of last update from UPS
  3. HOSTNAME - hostname of computer running apcupsd
  4. VERSION - apcupsd version number, date and operating system
  5. UPSNAME - UPS name from configuration file (dumb) or EEPROM (smart)
  6. CABLE - Cable type specified in the configuration file
  7. MODEL - UPS model derived from UPS information
  8. UPSMODE - Mode in which UPS is operating
  9. STARTTIME - Date and time apcupsd was started
  10. STATUS - UPS status (online, charging, on battery etc)
  11. MASTERUPD - Last time the master sent an update to the slave
  12. ENDAPC - Date and time of status information was written
Tutorial de configuração: http://www.vivaolinux.com.br/artigo/Desligamento-automatico-seletivo-com-apcupsd/

Através deste pacote é possível enviar dados ao Zabbix através do script (/etc/zabbix/scripts/check_apc_ups.sh, disponível em http://www.zabbix.com/wiki/templates/start):
#!/bin/sh
## Modified for Zabbix by Clayton Kramer (C) 2007
##

## Originally base on Nagios Plugin for apcupsd APC Smart-UPS
## janthony@negative1.org
## Copyright (C) 2004  Joe Anthony
##

## This program is free software; you can redistribute it and/or modify
## it under the terms of the GNU General Public License as published by
## the Free Software Foundation; either version 2 of the License, or
## (at your option) any later version.
##
## This program is distributed in the hope that it will be useful,
## but WITHOUT ANY WARRANTY; without even the implied warranty of
## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## GNU General Public License for more details.
##
## You should have received a copy of the GNU General Public License
## along with this program; if not, write to the Free Software
## Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA


APCA="/sbin/apcaccess"
APCA_ARGS="status"

if [ ! -x $APCA ]; then
        echo "$0: Error: $APCA not found!"
        exit 3
fi

dishelp() {
                echo "Usage: $0 hostname $2 <load|bcharge|time|status>"
                echo "       $0 status"
                echo
                echo "load (%): Returns the percentage of the UPS power load"
                echo "bcharge (%): Returns the percentage of batter charge left"
                echo "time (minutes): Amount of time in minutes the UPS can supply power based on current charge and load"
                echo "staus: Returns a true value if status is critical"
                echo
                echo "UNKNOWN UPS State"
                exit 3
}

case "$2" in
        load)
                LOAD=`$APCA $APCA_ARGS | grep LOAD | awk '{print $3}' | sed -e 's/\.[0-9]* *$//g'`
                echo "${LOAD}"
                exit 0
                ;;
        bcharge)
                CHRG=`$APCA $APCA_ARGS | grep BCHARGE | awk '{print $3}' | sed -e 's/\.[0-9]* *$//g' | sed -e 's/0*//'`
                echo "${CHRG}"
                exit 0
                ;;
        time)
                TLEFT=`$APCA $APCA_ARGS | grep TIMELEFT | awk '{print $3}' | sed -e 's/\.[0-9]0* *$//g'`
                echo "${TLEFT}"
                exit 0
                ;;
        status)
                ONLINE=`$APCA $APCA_ARGS | grep STATUS | awk '{print $3}'`
                if [ "$ONLINE" != ONLINE ]; then
                        exit 2
                fi
                exit 0
                ;;
        *)
                dishelp
esac



5.2.2. Enviar SMS gratuito de notificação através do Google Agenda

Disponível em: http://gesielbernardes.blogspot.com.br]] Local do script: /etc/zabbix/scripts/sms.sh Implementado em: Zabbix

5.2.3. RAID Health - HP Utillity

Local do script: /etc/zabbix/scripts/raid_status_dados_zabbix.sh Conteúdo:
#!/bin/bash
sudo /opt/compaq/hpacucli/bld/hpacucli controller all show config | grep "logicaldrive 1" | cut -f3 -d, | 
>> cut -c2-3 | while read status; do [ "$status" = "OK" ] && echo -n 1 || echo -n 0; done
Dependência: hpacucli

5.2.4. RAID Health - SoftRAID

Local do script: /etc/zabbix/scripts/raidstatus.sh
Conteúdo:
#!/bin/bash
if /sbin/mdadm --detail --test /dev/md1 2>> /var/log/mdadm.log 1> /dev/null
then
        exit 1
else
        exit 0
fi
Dependência: SoftRAID implementado Implementação em: Servidor de Backup

6. Comandos remotos


Quando um gatilho (trigger) é acionado, através de ações preestabelecidas o Zabbix poderá enviar mensagens (e-mail, SMS ou jabber) avisando sobre a ocorrência, ou até mesmo executar ações (scripts) de correções.
Por exemplo, poderemos "startar" script de recuperação para o Apache caso o mesmo, por algum motivo, pare de ser executado. Para isto, deve-se habilitar a opção que habilita a execução de scripts remotos:
a. na estação a ser monitorada, adicione "EnableRemoteCommands=1" no arquivo de de configuração do agente (/ect/zabbix/zabbix_agentd.conf);
b. definiremos o script através da área administrativa no servidor (WebGUI), em Configuracoes > Ações e clicando em "Criar ação";
c. deve-se dar um nome a ação (ex. Apache, tal como na imagem abaixo);
d. em condições da ação, deve-se definir qual trigger ativará a ação;
e. ao lado direito, em "operações da ação", clique em "Nova" e escolha "Comando remoto" para o "Tipo de operação";
f. inserir o script, sempre precedido de: {HOSTNAME}:sudo ( {HOSTNAME}: indica o destino do comando, não alterar; sudo: para que os comandos sejam executados com privilégios administrativos). Veja na imagem abaixo o funcionamento;
g. Não se esqueça de salvar a Ação.



7. Backup da Base de Dados


O MySQLDUMP pode produzir arquivos no formato SQL que contenham declarações CREATE TABLE e INSERT para recriar os arquivos ou para produzir arquivos de dados delimitados por tabulações.
O comando para efetuar o backup da base de dados do Zabbix será semelhante ao seguinte:
# mysqldump --user=root --password=DEFINIDO_NA_INSTALACAO_DO_DB --databases zabbix > backup.zabbix-06-12-1.sql

Sugestão de leitura (script de backup aprimorado): http://zabbixzone.com/zabbix/backuping-full-database

8. Informações complementares


a. Configuração do serviço de Discovery
Um recurso muito interessante do Zabbix, é o Discovery, com ele, você define um range de IPs e os testes que serão realizados. Para cada IP que o Zabbix encontrar, ele passará a monitorar na parte do discovery.
Para configurar o discovery, basta ir em Configuration -> Discovery -> Create Rule
Definir o Nome, range de IPs e os testes que devem ser realizados, ex: icmp ping, http smtp, etc.
Observação, dependendo da sua topologia de rede, cuidado para não definir um intervalo muito pequeno para não sobrecarregar a rede e o servidor.

b. Montando um mapa de rede básico
O Zabbix permite que se monte um “Mapa de Rede” (topologia) com os devices monitorados. Este mapa, mostra a sua rede de forma gráfica em tempo real, dá um pouco de trabalho, mas se bem feito, o resultado final pode ser bem interessante.
Para criar o Mapa, vá em Configuration -> Maps -> Create Map. Após criar o mapa, edite ele, e uma janela com uma tela branca toda quadriculada irá aparecer.
O Mapa é basicamente composto de dois tipos de itens: Elements e Connectors e uma tela quadriculada a cada 50pixeis.
Crie um novo elemento associando a algum host (exemplo mailserver), observar que nesta tela, você pode associar até 4 ícones diferentes para um mesmo item. Um para cada estado OK, problem (exemplo um servidor pegando fogo), unknown e disabled. Após associar os ícones, você precisa informar em qual ponto da matriz este servidor irá aparecer ex: x50 y50
Agora cadastre um switch da mesma forma que cadastrou o servidor, apenas defina um ponto diferente na matriz.
Com estes dois itens cadastrados, podemos adicionar um Conector entre eles escolha quais itens serão interligados e em link status indicator, adicione uma condição para sempre que o “mailserver” estiver unreachable, o link fique vermelho, agora configure a cor para o estado OK (exemplo verde). Com este mapa, você pode acompanhar os problemas da sua rede de uma forma bem visual, uma outra dica (dependendo do tamanho da sua rede), seria exibir este mapa em um telão para pode acompanhar no seu NOC.

c. Criando um gráfico customizado
O Zabbix por default, provê gráficos para todos os itens monitorados, mas pode ser muito interessante, criar um gráfico mais “personalizado”, mostrando em uma unica imagem, diversas informações ao mesmo tempo. Isto pode ser realizado em Configuration -> Graphs. d. Criando telas específicas Se você gostou da idéia do “telão”, um outro item muito interessante, seria a criação de telas personalizadas. Você poderia inserir por exemplo o mapa da rede, com o gráfico de uso dos principais links (ou um gráfico customizado)junto com uma tela que mostra todos os alarmes ativos. Desta forma, otimizando a informação mostrada.
Para criar esta tela, vá em Configuration -> Screens -> Create Screen e o Zabbix pedirá um nome e a quantidade de linhas e colunas. Ao editar o gráfico criado, você verá uma “tabela”, e em cada célula desta tabela, pode ser inserido algum tipo de informação diferente.

9. Leitura recomendada


Referência Bibliográfica

"Zabbix Documentation". Disponível em: <http://www.zabbix.com/documentation>. Data de acesso: 01/12/2011;
UBUNTU-BR. “Zabbix”. Disponível em: <http://wiki.ubuntu-br.org/Zabbix>. Data de acesso: 01/12/2011;
RICARDO, Teotonio. “Instalar o LAMP no Ubuntu”. Disponível em: <http://www.webtuga.com/instalar-o-lamp-no-ubuntu>. Data de acesso: 01/12/2011;
BONOMO, Esley. “Gerenciamento e Monitoração de Redes de Computadores Utilizando-se Zabbix”. 62 páginas. Universidade Federal de Lavras. 2006;
PINHEIRO, Ricardo. "Instalando e configurando o Agente Zabbix". Disponível em: <http://www.cooperati.com.br/wordpress/2011/10/11/instalando-e-configurando-o-agente-zabbix/>. Data de acesso: 01/12/2011;
SILVA, Eduardo. "Instalando agentes e administrando o Zabbix". Disponível em: <http://eduardosilva.eti.br/sysadmin/zabbix_parte_iii_agentes_e_administracao/>. Data de acesso: 07/12/2011;
PINHEIRO E BERNARDES, Ricardo e Rafael. Diversos artigos sobre Zabbix. Disponível em: <http://www.cooperati.com.br/wordpress/?s=zabbix>. Acessado em 07/12/11.