Arquivo mensal: janeiro 2016
VMware – Erro no Event Viewer: Failed registration of app type 2
Estava observando erros frequentes no Event Viewer em alguns servidores Windows 2003 em hosts VMware ESXi 5.x.
A mensagem completa no Event Viewer:
Event Type: Warning Event Source: VMware Tools Event Category: None Event ID: 1000 Date: 16/1/2016 Time: 15:18:23 User: SRV-DESKTOP-REM\user Computer: SRV-DESKTOP-REM Description: [ warning] [vmusr:vmtoolsd] Failed registration of app type 2 (Signals) from plugin unity.
Após muitas informações desencontradas, o problema básico é que o arquivo tools.conf não é criado, é criado vazio ou seu conteúdo (em caso de upgrade do tipo de VM) está com valores incorretos.
Para as versões VMware 5.x o conteúdo correto é o seguinte:
[logging] log = true # Enable tools service logging to vmware.log vmsvc.level = debug vmsvc.handler = vmx # Enable new "vmusr" service logging to vmware.log vmusr.level = error vmusr.handler = vmx # Enable "Volume Shadow Copy" service logging to vmware.log vmvss.level = debug vmvss.handler = vmx
Ele deve ser salvo com o nome tools.conf na pasta apropriada do OS guest.
Windows XP and Windows Server 2000/2003:
C:\Documents and Settings\All Users\Application Data\VMware\VMware Tools\tools.conf
Windows Vista, Windows 7, and Windows Server 2008 :
C:\ProgramData\VMware\VMware Tools\tools.conf
Linux, Solaris e FreeBSD :
/etc/vmware-tools/tools.conf
Maiores detalhes:
Passando uma variável shell Unix para uma query SQL
Resolvi alterar alguns scripts que coletavam dados de arquivos texto de log por meio de querys SQL em um banco de dados.
Os scripts rodam após a meia noite e os dados coletados são do dia anterior.
Não gostei muito da sintaxe dos comandos SQL para selecionar a data do dia anterior, ia ter que deixar os comandos num arquivo .sql externo, queria queries de uma linha dentro do shell.
Criar uma variável com a data do dia anterior é fácil com o uso do comando date em formato AAAA-MM-DD, mas estava com problemas para que o SQL abrisse a variável. A solução é o uso de aspas duplas para a query a ser executada e simples na parte do comando onde a variável deve ser convertida.
#!/bin/sh
ontem=$(date +%F --date="1 days ago")
# Extraindo dados do banco de dados MySQL
/usr/bin/mysql -u db_user -pdb_password -e "select FromHost from SystemEvents WHERE ReceivedAt LIKE '%${ontem}%' " DataBaseName
Análise e visualização de arquivos de log
Por conta de alguns equipamentos remotos que gerencio comecei a fazer a coleta de logs em um único servidor Linux, o problema passou a ser como tratar e visualizar esses logs.
Algumas necessidades são cobertas por scripts que varrem os arquivos e enviam emails automáticos informando situações de maior severidade.
O que eu queria de verdade era poder analisar esses arquivos por meio de uma página onde eu pudesse fazer buscas por horário, equipamento, tipo de erro ou alguma combinação.
Para isso os arquivos deveriam ser consolidados em um banco de dados e uma interface web seria acrescentada.
A necessidade seria coberta com um conjunto de utilitários:
rsyslog – versão mais moderna do syslog original do Linux, com o recurso de acesso a um banco de dados SQL para consolidação dos dados.
MySQL – o banco de dados SQL escolhido. Poderia ser o PostgreSQL
LogAnalyzer – frontend em PHP para visualização e análise dos logs.
rsyslog – Instalação e configuração
A substituição do syslog pelo rsyslog é bem simples, basta instalar o pacote:
Comandos para CentOS e RedHat:
yum install rsyslog rsyslog-mysql
Comandos para Debian e Ubuntu:
apt-get install rsyslog rsyslog-mysql
Como e já tinha o MySQL configurado basta criar o banco de dados para o rsyslog. O rsyslog fornece um script pronto que cria um banco chamado Syslog:
# mysql < /usr/share/doc/rsyslog-mysql-3.22.1/createDB.sql
mysql> grant all on Syslog.* to syslogwriter@localhost identified by 'syslogwriter_password';
mysql> flush privileges ;
Como eu já usava o syslog para fazer a coleta copiei o arquivo /etc/syslog.conf para /etc/rsyslog.conf e adicionei adicionei as linhas necessárias para o rsyslog no início do arquivo:
# Use traditional timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat# Provides kernel logging support (previously done by rklogd)
$ModLoad imklog# Provides support for local system logging (e.g. via logger command)
$ModLoad imuxsock# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514# provides MySQL database support
$ModLoad ommysql
e no final do arquivo as linhas para acesso ao banco de dados:
# Logging mysql database
*.* >localhost,Syslog,syslogwriter,syslogwriter_password
Baixei e instalei o LogAnalyser
tar zxvf loganalyzer-3.6.5.tar.gz
cd loganalyzer-3.6.5
mkdir /var/www/html/syslog
cp -a src/* /var/www/html/syslog
cd /var/www/html/syslog
touch config.php
chmod 666 config.php
Abra um browser e abra a configuração inicial do LogAnalyzer:
Informe o nome do banco de dados, usuário e senha.
O resultado é muito bom:
Podemos selecionar por evento (ssh):
Ter uma visão geral (observe que clicar sobre uma linha permite usar esse evento como filtro):
E a página de estatísticas: