Valter Douglas Lisbôa Júnior
Capítulo 1
Conhecendo o Zabbix...12
1.1. Conhecendo a ferramenta...13
1.2. Comunidades e forums...13
Capítulo 2 Criando uma Infraestrutura de Monitoramento – Parte 1, Sistema...14
2.1. Introdução...15
2.2. Configurando os componentes de recebimento de alertas...15
2.2.1. Configurando o cliente de correio eletrônico...16
2.2.2. Mensagens instantâneas...24
2.3. Obtendo os fontes do Zabbix...27
2.4. Preparando o banco de dados...27
2.4.1. Instalação...28
2.4.2. Criando o usuário e o banco...28
2.4.3. Carga inicial...30
2.4.4. Concedendo as permissões necessárias ao usuário...30
2.5. Instalação do servidor Zabbix via código fonte...31
2.5.1. Dependências de compilação...34
2.5.2. Compilando e instalando...35
2.5.3. Serviços de rede...37
2.5.4. Arquivos de configuração...37
2.5.5. Testando sua instalação...39
2.5.6. Scripts de boot...41
2.6. Instalação do agente Zabbix via compilação...41
2.6.1. Exercício: compile e instale o agente nas VM com Gnu/Linux...42
2.6.2. Acesso ao agente pelo servidor...42
2.6.3. Exercício sobre instalação de agente em Linux...46
2.7. Instalando o agente em ambientes Windows...46
2.7.1. Executando o agente como serviço...50
2.8. Instalação do agente Zapcat para JBoss...52
2.8.1. Obtenção do binário...52
2.8.2. Deployment...52
2.8.3. Opções de inicialização do JBoss...53
2.8.4. Liberando o firewall para acesso ao Zapcat...55
2.9. Testando o acesso via SNMP...55
2.11.1. Instalação do Apache e PHP5...58
2.11.2. Configuração do Virtual Host...58
2.11.3. Configurando o front end...61
2.12. Exercícios de revisão...72
Capítulo 3 Criando uma Infraestrutura de Monitoramento - Parte 2, Front end...74
3.1. Introdução...75
3.1.1. Organização do front end...75
3.2. Gerenciamento de usuários...77
3.2.1. Cadastrando os usuários do LDAP no Zabbix...81
3.3. Meios de alertas...83
3.3.1. Correio eletrônico...84
3.3.2. Mensagens instantâneas...84
3.3.3. Apontando os alertas aos usuários...85
3.3.4. Boas práticas com Media types...87
3.4. Hosts, host groups e templates...87
3.4.1. Templates para o caso de estudo...88
3.4.2. Vínculo entre templates...90
3.4.3. Backup dos templates...91
3.4.4. Hosts...91
3.4.5. Gerenciando os Host Groups...92
3.4.6. Criando um novo host...93
3.4.7. Fazendo backup dos hosts...95
3.4.8. Configurando uma permissão de acesso...95
3.4.9. Exercícios sobre usuários, hosts, grupos e permissões...97
3.5. Mapas...98
3.5.1. Importando imagens para o mapa...98
3.5.2. Criando um mapa...100
3.5.3. Adicionando um elemento...103
3.5.4. Editando um elemento do mapa...104
3.5.5. Salvando o mapa...106
3.5.6. Adicionando os outros elementos...106
3.5.7. Criando e editando links...110
3.5.8. Prática Dirigida...111
3.5.9. Exercícios sobre Mapas...113
3.6. Templates, applications e items...114
3.6.1. Criando um Application e um Item dentro de um template...115
3.6.2. Interdependência de templates...118
Monitoramento voltado para disponibilidade...128
4.1. Introdução...129
4.2. Checagens manual via front end...129
4.2.1. Adequando o script de traceroute...132
4.2.2. Criando novos comandos para o menu...135
4.2.3. Exercícios...138
4.3. Checando disponibilidade via protocolo ICMP...138
4.3.1. Como funciona o ping ICMP...138
4.3.2. Visualizando o ping ICMP no Front end...139
4.3.3. Criando um gatilho de parada de host...141
4.3.4. Lidando com os eventos...146
4.3.5. Criando uma action para envio de alerta...150
4.3.6. Exercícios...153
4.3.7. Boas práticas com triggers...154
4.4. Checagem genérica de portas e serviços...156
4.4.1. Conexões TCP e handshakes...157
4.4.2. Criando um teste de serviço via varredura de portas...159
4.4.3. Exercício sobre checagem de portas...162
4.5. Validação de páginas WEB...163
4.5.1. Disponibilidade do site...163
4.5.2. Exercícios...168
4.6. Checando disponibilidade via agentes...169
4.6.1. Checando se o agente esta operacional...169
4.6.2. Criando um trigger com a função nodata()...171
4.6.3. Exercícios...175
4.7. Tempo on-line e última inicialização do S.O...175
4.7.1. Trigger para alerta de reinicialização...180
4.7.2. Exercícios...181
4.8. Checando serviços pelo agente...181
4.8.1. Verificando os processos ativos na memória...181
4.8.2. Checagem de portas e serviços localmente via agente...185
4.8.3. Exercícios...190
4.8.4. Verificando serviços no Windows...190
4.8.5. Restabelecendo serviços offline via Zabbix...198
4.8.6. Exercícios...202
4.9. Medindo a “saúde” de sua rede...202
4.9.1. Latência de rede...202
4.9.5. Exercícios...210
4.10. Espaço disponível em disco...210
4.10.1. Gráficos para espaço em disco...213
4.10.2. Gatilhos para alertas de espaço em disco...216
4.10.3. Exercícios...217
4.11. Scripts externos...218
4.11.1. Checando a disponibilidade do PostgreSQL...218
4.11.2. Medindo a disponibilidade de um link Internet...223
4.11.3. Exercícios...227
REFERÊNCIAS BIBLIOGRÁFICAS...228
Anexo I Performance do Sistema Operacional...230
Introdução...230
Processamento...230
Métricas de memória...231
Throughput e banda de rede...232
Performance de Disco...232 Anexo II Performance de serviços...233 Introdução...233 PostgreSQL...233 JBoss...234 Apache...234
Índice de tabelas
Tabela 1: Opções de compilação do Zabbix...34Tabela 2: Binários de uma instalação de servidor e agente do Zabbix...36
Tabela 3: Arquivos e diretórios de configuração...38
Tabela 4: Função dos menus no front end...77
Table 5: Usuários do cenário do curso...81
Tabela 6: Relação de permissões entre hosts e usuários...98
Tabela 7: Lista de imagens iniciais para o mapa...100
Tabela 8: Serviços do cenário do curso...163
Tabela 9: Responsáveis de cada host...175
Figura 2.2: Configuração do evolution (2/10)...17
Figura 2.3: Configuração do evolution (3/10)...18
Figura 2.4: Configuração do evolution (4/10)...19
Figura 2.5: Configuração do evolution (5/10)...20
Figura 2.6: Configuração do evolution (6/10)...21
Figura 2.7: Configuração do evolution (7/10)...22
Figura 2.8: Configuração do evolution (8/10)...23
Figura 2.9: Configuração do evolution (9/10)...23
Figura 2.10: Configuração do evolution (10/10)...24
Figura 2.11: Tela de boas vindas do Pidgin...25
Figura 2.12: Configurando uma conta Jabber no Pidgin...25
Figura 2.13: Definindo o uso de criptografia...26
Figura 2.14: Baixando o agente do Zabbix no Windows...47
Figura 2.15: Instalando os executáveis no Windows...48
Figura 2.16: Diretório de configuração do Zabbix no Windows...48
Figura 2.17: Configurando o agente no Windows...49
Figura 2.18: Desbloqueando o agente no Windows...50
Figura 2.19: O agente do Zabbix sendo executado como serviço automático...51
Figura 2.20: Tela de entrada do Zapcat...54
Figura 2.21: Configuração do front end (1/10)...61
Figura 2.22: Configuração do front end (2/10)...62
Figura 2.23: Configuração do front end (3/10)...63
Figura 2.24: Configuração do front end (4/10)...65
Figura 2.25: Configuração do front end (5/10)...66
Figura 2.26: Configuração do front end (6/10)...67
Figura 2.27: Configuração do front end (7/10)...68
Figura 2.28: Configuração do front end (8/10)...69
Figura 2.29: Configuração do front end (9/10)...70
Figura 2.30: Configuração do front end (10/10)...71
Figura 2.31: Tela inicial do Zabbix após o primeiro login...71
Figura 3.1: Gerenciamento de usuários do Zabbix...78
Figura 3.2: Editando o Admin...79
Figura 3.3: Configurando a autenticação LDAP...80
Figura 3.4: Novo Grupo JBoss Administrators...81
Figura 3.8: Configurando o Zabbix para enviar mensagens instantâneas...84
Figura 3.9: Media Types de um usuário sem apontamentos...85
Figura 3.10: Adicionando o Media Type Email a um usuário...85
Figura 3.11: Adicionando um media type Jabber a um usuário...86
Figura 3.12: Media Types de um usuário após o cadastro...86
Figura 3.13: Selecionando todos os templates pré cadastrados...88
Figura 3.14: Excluindo os templates selecionados...89
Figura 3.15: Criando um novo template...89
Figura 3.16: Cadastrando um novo template...89
Figura 3.17: Vinculando um template a outro...90
Figura 3.18: Exportando um template...91
Figura 3.19: Layout dos hosts a serem monitorados...92
Figura 3.20: Como criar um novo grupo de hosts...93
Figura 3.21: Novo host group...93
Figura 3.22: Host pré-cadastrado no front end na tela de Hosts...93
Figura 3.23: Botão para criar um host...93
Figura 3.24: Todos os hosts do cenário cadastrados...95
Figura 3.25: Concedendo permissões de acesso (1/4)...95
Figura 3.26: Concedendo permissões de acesso (2/4)...96
Figura 3.27: Concedendo permissões de acesso (3/4)...96
Figura 3.28: Concedendo permissões de acesso (4/4)...97
Figura 3.29: Tela inicial das imagens...99
Figura 3.30: Importando uma nova imagem...99
Figura 3.31: Imagem do primeiro mapa a ser criado...100
Figura 3.32: Mapas pré-cadastrados...101
Figura 3.33: Novo mapa...101
Figura 3.34: Barra de ferramentas para edição de mapas...103
Figura 3.35: Criando um novo elemento...103
Figura 3.36: Posicionando um novo elemento com o mouse...104
Figura 3.37: Editando um elemento na tela...105
Figura 3.38: Botão Save do mapa...106
Figura 3.39: Dialogo de salvar mapa...106
Figura 3.40: Outros elementos gráficos a serem adicionados...107
Figura 3.41: Editando o elemento que representa o host Presentation...108
Figura 3.42: Detalhes do host switch dentro do mapa...109
Figura 3.43: Hosts acrescentados no mapa...110
Figura 3.48: Templates e seus elementos...114
Figura 3.49: Criando um application (1/4)...115
Figura 3.50: Criando um application (2/4)...115
Figura 3.51: Criando um application (3/4)...115
Figura 3.52: Criando um application (4/4)...116
Figura 3.53: Criando seu primeiro item (1/3)...116
Figura 3.54: Criando seu primeiro item (2/3)...117
Figura 3.55: Criando seu primeiro item (3/3)...118
Figura 3.56: Campo para associação de templates...119
Figura 3.57: Tela para escolha de templates...119
Figura 3.58: Template associado...119
Figura 3.59: Template associado na lista de templates...119
Figura 3.60: Inter-relação dos templates base...120
Figura 3.61: Associando o template do JBoss ao host JBoss AS (1/6)...120
Figura 3.62: Associando o template do JBoss ao host JBoss AS (2/6)...120
Figura 3.63: Associando o template do JBoss ao host JBoss AS (3/6)...120
Figura 3.64: Associando o template do JBoss ao host JBoss AS (4/6)...121
Figura 3.65: Associando templates a hosts (5/11)...121
Figura 3.66: Associando o template do JBoss ao host JBoss AS (6/6)...121
Figura 3.67: Templates para Windows e SNMP associados aos seus respectivos hosts. . .121
Figura 3.68: Associando um template a múltiplos hosts simultaneamente (1/4)...122
Figura 3.69: Associando um template a múltiplos hosts simultaneamente (2/4)...122
Figura 3.70: Associando um template a múltiplos hosts simultaneamente (3/4)...123
Figura 3.71: Associando um template a múltiplos hosts simultaneamente (4/4)...123
Figura 3.72: Todos os templates associados aos hosts do cenário...123
Figura 3.73: Host presentation não monitorado...124
Figura 3.74: Dialogo de confirmação de ativação...124
Figura 3.75: Host presentation monitorado...124
Figura 3.76: Item não suportado...125
Figura 3.77: Item suportado e ativo...127
Figura 4.1: Menu de Ferramentas acessado pelo mapa...130
Figura 4.2: Saída de um comando ping...130
Figura 4.3: Saída de um comando que falhou do traceroute...131
Figura 4.4: Saída do traceroute adequando a nova necessidade ...135
Figura 4.5: Criando um novo script para testar portas SSH (1/2)...136
Figura 4.9: Diagrama de comportamento do echo ICMP...139
Figura 4.10: Hosts ativos com ping ICMP em funcionamento...140
Figura 4.11: Um value maps de estado de serviços...140
Figura 4.12: Editando o value map para nossa necessidade...140
Figura 4.13: Value map editado e pronto para uso...141
Figura 4.14: Selecionando um value map no trigger...141
Figura 4.15: Values maps no overview...141
Figura 4.16: Pausando o host Database...142
Figura 4.17: Host database parado no overview...142
Figura 4.18: Criando um trigger para a parada do host (1/9)...143
Figura 4.19: Criando um trigger para a parada do host (2/9)...143
Figura 4.20: Criando um trigger para a parada do host (3/9)...143
Figura 4.21: Criando um trigger para a parada do host (4/9)...143
Figura 4.22: Criando um trigger para a parada do host (5/9)...144
Figura 4.23: Criando um trigger para a parada do host (6/9)...144
Figura 4.24: Criando um trigger para a parada do host (7/9)...145
Figura 4.25: Criando um trigger para a parada do host (8/9)...145
Figura 4.26: Criando um trigger para a parada do host (9/9)...146
Figura 4.27: Indicação de problemas no Dashboard...146
Figura 4.28: Overview com indicação dos items com alerta...147
Figura 4.29: Overview com visualização dos triggers ativos...147
Figura 4.30: Mapa indicando o host Database como down...148
Figura 4.31: Tela de Events, indicando a queda e o retorno dos hosts...148
Figura 4.32: Tela de acknowledgement...149
Figura 4.33: Acknowledge (confirmação) aplicado...149
Figura 4.34: Criando uma action para enviar o alerta (1/9)...150
Figura 4.35: Criando uma action para enviar o alerta (2/9)...150
Figura 4.36: Criando uma action para enviar o alerta (3/9)...151
Figura 4.37: Criando uma action para enviar o alerta (4/9)...151
Figura 4.38: Criando uma action para enviar o alerta (5/9)...151
Figura 4.39: Criando uma action para enviar o alerta (6/9)...152
Figura 4.40: Criando uma action para enviar o alerta (7/9)...152
Figura 4.41: Criando uma action para enviar o alerta (8/9)...152
Figura 4.42: Criando uma action para enviar o alerta (9/9)...153
Figura 4.43: Mensagens de alerta recebidas no Evolution...153
Figura 4.44: Reiniciando o host Database...154
Figura 4.49: Criando um cenário para disponibilidade Web (2/6)...164
Figura 4.50: Criando um cenário para disponibilidade Web (3/6)...165
Figura 4.51: Criando um cenário para disponibilidade Web (4/6)...166
Figura 4.52: Criando um cenário para disponibilidade Web (5/6)...167
Figura 4.53: Criando um cenário para disponibilidade Web (6/6)...167
Figura 4.54: Visualizando a checagem Web...167
Figura 4.55: Detalhes do monitoramento Web...167
Figura 4.56: Gráfico de velocidade de download para o cenário Web...168
Figura 4.57: Gráfico de tempo de resposta para o cenário Web...168
Figura 4.58: Novo item para monitorar o agente...170
Figura 4.59: Copiando o item de ping de agente para o template do JBoss (1/2)...170
Figura 4.60: Copiando o item de ping de agente para o template do JBoss (2/2)...171
Figura 4.61: Criando um trigger para o agent.ping (1/5)...172
Figura 4.62: Criando um trigger para o agent.ping (2/5)...172
Figura 4.63: Criando um trigger para o agent.ping (3/5)...173
Figura 4.64: Criando um trigger para o agent.ping (4/5)...173
Figura 4.65: Criando um trigger para o agent.ping (5/5)...173
Figura 4.66: Trigger para o agent ping criado e ativo...173
Figura 4.67: Trigger de agente ativado...174
Figura 4.68: Dependência entre triggers evitando que o gatilho filho seja ativado...174
Figura 4.69: Item para tempo de uptime...177
Figura 4.70: Uptime via Zapcat...178
Figura 4.71: Uptime via SNMP...178
Figura 4.72: Overview exibindo os uptimes a partir do agente padrão, Zapcat e SNMP..179
Figura 4.73: Um trigger para a reinicialização de um host...180
Figura 4.74: Item para verificação de número de processos...183
Figura 4.75: Overview refletindo o número de processos...183
Figura 4.76: Trigger para queda do daemon...184
Figura 4.77: Teste de queda do sshd...185
Figura 4.78: Reflexo da queda do daemon SSH no overview...185
Figura 4.79: Item para verificação da porta local...186
Figura 4.80: Fluxograma da dependência entre triggers para análise de serviços...187
Figura 4.81: Trigger para verificação da porta local...189
Figura 4.82: Trigger para verificação de porta remota...189
Figura 4.83: Serviço telnet do Windows...190
Figura 4.87: Liberando o telnet no firewall do Windows (1/3)...194
Figura 4.88: Liberando o telnet no firewall do Windows (2/3)...194
Figura 4.89: Liberando o telnet no firewall do Windows (3/3)...195
Figura 4.90: item para monitorar serviços Windows...197
Figura 4.91: Estado do serviço Telnet no Overview...197
Figura 4.92: Action para parada do SSH (1/3)...200
Figura 4.93: Action para parada do SSH (2/3)...200
Figura 4.94: Action para parada do SSH (3/3)...201
Figura 4.95: Comando remoto para o action de parada do serviço de SSH...201
Figura 4.96: Item para latência de rede...203
Figura 4.97: Macro para latência de rede...205
Figura 4.98: Trigger para latência de rede usando a macro...205
Figura 4.99: Gráfico para medir a latência de rede...206
Figura 4.100: Criando um gráfico de latência de rede...206
Figura 4.101: Adicionando métricas ao gráfico...207
Figura 4.102: Mapa com labels personalizadas exibindo dados...209
Figura 4.103: Exemplo de labels com valores de métricas...209
Figura 4.104: Exemplo de gráfico de latência de serviços para exercícios...210
Figura 4.105: Macro para limite de espaço em disco utilizado...211
Figura 4.106: Primeiro item de espaço em disco...212
Figura 4.107: Items a serem clonados para espaço em disco...213
Figura 4.108: Botão para clonar items...213
Figura 4.109: Gráfico de pizza para exibição de espaço livre e ocupado...214
Figura 4.110: Criando um gráfico de pizza...214
Figura 4.111: Gráfico de histórico de espaço em disco...215
Figura 4.112: Criando o gráfico de histórico de uso de disco...215
Figura 4.113: Trigger para cálculo de espaço em disco...217
Figura 4.114: Trocando o template do host database para o PostgreSQL...222
Figura 4.115: Disponibilidade do PostgreSQL ativa no database...223
Figura 4.116: Latência sendo exibida no label do link...226
Figura 4.117: Latência de rede e trigger associados ao link com a Internet no mapa...226
Capítulo 1
Conhecendo o Zabbix
OBJETIVOS • Apresentar a ferramento ao aluno. • Como o “front end” organiza os componentes dentro do Zabbix. • Componentes visuais de monitoramento. • Alertas de incidentes. • Reinicialização de serviços. • Mostrar ao aluno onde obter informações.1.1. Conhecendo a ferramenta
Siga os passos indicados pelo professor para acesso ao exemplo pronto na máquina dele. Você vai fazer um passoapasso conhecendo a ferramenta como um usuário comum (não superusuário).
1.2. Comunidades e forums
O Zabbix tem uma documentação online que será usada durante o curso para consultas. O link de acesso é http://www.zabbix.com/documentation/.
As comunidades também mantém uma série de fóruns em
http://www.zabbix.com/forum/. Em destaque os seguinte: • Zabbix announcements: anúncios e novas versões • Zabbix help: fórum principal de ajuda • Zabbix cookbook: várias configurações prontas postadas e comentadas. Muito útil. • Zabbix throubleshooting: se um problema persiste, este é o local para postar erros e soluções. • Zabbix em português y em espanhol: fórum em português e espanhol, útil quando você não lê inglês muito bem.
Capítulo 2
Criando uma Infraestrutura de Monitoramento
– Parte 1, Sistema
OBJETIVOS • Preparar o ambiente de recebimento de alertas: • Configurar o Evolution para receber emails de alertas; • Configurar o Pidgin para receber mensagens instantâneas de alertas. • Preparar o ambiente para instalar o servidor do Zabbix: • Obter os fontes da ferramenta; • Preparar o PostgreSQL para servir de back end. • Instalar o servidor e agente: • Compilar o servidor e agente na máquina destinada a ser o monitorador e nas demais; • Instalação dos binários dentro do Windows 2003 (com inicialização do agente como serviço);• Executar deploy do agente Zapcat no JBoss para monitoramento do servidor de aplicações
• Configuração de um virtual host dentro do Apache para o front end, incluindo modificação dos parâmetros do PHP.
2.1. Introdução
Este capítulo apresenta todas as tarefas relacionadas a criação da base de sua solução de monitoramento. Aqui é onde será abordado a maior parte do conhecimento técnico de console Linux, deploying em JBoss, serviços de Windows e acesso à SNMP, visando incutir as competências necessárias para que, sozinho, você seja capaz de reproduzir estes passos em um ambiente de produção. Além disso, serão vistos os primeiros passos na utilização e familiarização com a interface web do Zabbix, mostrando como gerenciar os elementos mais básicos da ferramenta: usuários, hosts, templates, grupos de hosts e mapas.
2.2. Configurando os componentes de recebimento de alertas
Por padrão o Zabbix possui quatro formas de alertas embutidos dentro de seu sistema: e mails, cliente jabber, SMS via modem GSM e SMS via serviço de torpedos. De todos, o último não é muito útil aqui no Brasil, devido seguir os padrões das operadoras no Canadá e Estados Unidos. Dos restantes vamos ver o funcionamento do sistema de correios e de jabber dentro da sala de aula, devido a natureza do hardware, a emulação das máquinas virtuais do cenário e custos de mensagem não abordamos o uso dentro do nosso cenário com SMS. No entanto temos um apêndice que cobre o sistema de SMS com throubleshooting e dicas de configuração. Receber mensagens por cliente de email é a maneira mais tradicional de todas. Para caso de estudos precisamos configurar o Evolution, cliente de email padrão do Gnome. Abra o Evolution pelo menu principal do Gnome e siga os passos descritos a seguir.Esta é apenas um tela de boas vindas, clique em Avançar.
Não há nada para ser restaurado, clique novamente em Avançar.
Começaremos a configurar as contas de usuários dentro do sistema de LDAP que o cenário possui. Preencha os campos como abaixo para configurar a primeira conta e, em seguida, clique em Avançar.
1) Nome Completo: System administrator
2) Endereço de email: sysadmin@curso468.4linux.com.br.
3) Tipo de Servidor: devemos escolher POP, que é o recurso implantado para recepção
de emails no cenário.
4) Servidor: é o endereço externo do servidor de email.
5) Nome do usuário: o primeiro usuário que usaremos é o sysadmin.
6) Lembrar senha: para comodidade dos testes em curso ative o recurso de
armazenamento de senha.
Esta opção não é segura para ser usada em produção! Mas como no curso os
usuários são fictícios e possuem a senha 123456 isso não vai nos impactar.
Nesta tela, configure o recebimento automático a cada 1 minuto, assim não precisamos ficar esperando emails chegarem e, também não precisamos ficar clicando em Enviar/Receber a todo momento.
Apesar de não utilizar o envio de email sob o ponto de vista do usuário, é interessante configurar o SMTP para averiguar se os emails estão caminhando dentro do cenário. 1) No Tipo de Servidor escolha SMTP. 2) No Servidor coloque o mesmo endereço de email que colocamos no POP3. Não reproduza este comportamento de aceite de emails sem autenticação em produção! O servidor de correio eletrônico dentro do cenário é apenas um meio de sabermos que as mensagens de alertas do Zabbix estão sendo enviadas por email.
1) Nome: Por final, configure um nome para esta conta. Isto é usado apenas para
exibição no Evolution.
Esta é apenas uma tela de finalização, clique em Aplicar.
Torne o Evolution o seu cliente de email padrão.
Figura 2.9: Configuração do evolution (9/10) Figura 2.8: Configuração do evolution (8/10)
Na primeira vez que você entrar ele irá pedir a senha (123456) do usuário, digitea e verifique se não houve nenhum erro. Não há nenhum email na caixa de mensagens do sysadmin, logo nenhuma mensagem vai aparecer.
Agora que o Evolution esta é funcionamento, acesse o menu Editar → Preferências e
clique no ícone Contas de Correio a esquerda. Através do botão Adicionar cadastre mais três contas seguindo os mesmos passos que anteriormente, mudando apenas os nomes e usuários. As contas a serem acrescentadas são Windows Administrator (winadmin), Java Engineer (javaeng) e DBA (dba). Após o término, escolha duas contas e teste o envio de mensagens entre elas.
2.2.2. Mensagens instantâneas
Receber mensagens de alertas via Instant Messaging é útil em empresas que possuem um sistema interno de IM e os funcionários estão logados constantemente. O Zabbix suporta o envio destas mensagens via protocolo Jabber e o cenário já possui este tipo de serviço através de um servidor OpenFire instalado na máquina mestra do Zabbix.Vamos então configurar o Pidgin, um cliente de IM simples e eficiente para receber os
alertas enviados via protocolo Jabber pelo servidor do Zabbix. Abra o aplicativo pelo menu principal do Gnome e siga os passos a seguir.
Na tela de boas vindas clique em Adicionar.
Figura 2.12: Configurando uma conta Jabber no Pidgin Figura 2.11: Tela de boas vindas do Pidgin
3) No domínio, você deve apontar o nome da máquina cadastrada para IM e não o domínio. 4) Na senha coloque 123456. 5) Ative o Lembrar Senha. Não ative a opção “Lembrar Senha” em produção! Isso seria uma terrível falha de segurança. Ela só esta sendo ativada para comodidade do curso. 1) Clique na aba Avançado. 2) Escolha para usar criptografia apenas se estiver disponível. Clique em Adicionar e ative a conta na interface do Pidgin.
2.3. Obtendo os fontes do Zabbix
Antes de começar a trabalhar com as diversas partes básicas da instalação, precisamos baixar o código fonte do Zabbix. Você sempre pode fazêlo através da URL http://www.zabbix.com/download.php, mas o comando abaixo já vai colocar o pacote de fontes no local apropriado dentro da máquina virtual “zabbixsrv”. # cd /usr/src # wget http://ufpr.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest %20Stable/1.8.4/zabbix1.8.4.tar.gz # tar xf zabbix1.8.4.tar.gz Você também pode escolher outros mirrors e trocar o endereço acima se desejar.
2.4. Preparando o banco de dados
O Zabbix não utiliza recursos como o RRDTools para armazenar dados, ele faz uso apenas de um SGBD ou de um banco de dados mais simplório (como o sqlite) para armazenar configurações, hosts, templates, histórico, etc.
Por isso precisamos selecionar um dos bancos nativos ou usar ODBC (este último não é recomendado). No caso deste curso elegemos o PostgreSQL, um SGBD livre e de alta performance capaz de manipular uma grande quantidade de dados. Apesar da maioria das instalações de Zabbix estar em MySQL recomendamos fortemente que seja usado o PostgreSQL pois sua robustez se mostrou mais adequada aos tipos de dados que o Zabbix manipula. Embora não pareça a princípio, o banco de dados do Zabbix é de extrema valia para a empresa, pois ele contém todo o histórico de funcionamento de sua infraestrutura e através dele podemos coletar SLAs e informações de “capacity plan”. É recomendado também que seu banco de dados possua um plano de backups regular via PITR – Point in Time Recovery.
Para instalar a versão do repositório do PostgreSQL:
# aptitude install postgresql8.4
# yum install postgresql84server
2.4.2. Criando o usuário e o banco
Com o banco de dados instalado devemos criar uma base de dados e um usuário com as devidas permissões de acesso ao mesmo. O nome de ambos elementos são totalmente opcionais, mas neste material vamos convencionar que o banco de dados se chamará zabbixdb e o usuário será zabbix. Muitas documentações e até o próprio arquivo padrão de configuração do zabbix server utiliza o nome do banco como zabbix, mas isso pode causar algumas confusões entre ele e o nome do usuário, foi por isso que optamos pela convenção acima. Somente o superusuário do PostgreSQL, chamado postgres tem permissão de realizar a criação dos objetos citados acima, logo, para podermos acessar o terminal de console do banco (psql) temos que entrar como usuário postgres no Gnu/Linux e então usar o comando correto.
Note que o prompt de comando irá se alterar indicando que estamos no console do PostgreSQL. # su – postgres $ psql psql (8.4.5) Digite "help" para ajuda. postgres=#
Agora que conseguimos o acesso como superusuário, vamos primeiro criar o banco de dados. O comando “create database” irá cuidar desta tarefa. Note que todos os comandos digitados dentro deste console terminam com pontoevírgula (;).
postgres=# CREATE DATABASE zabbixdb;
Com o banco de dados criado com sucesso vamos criar o usuário e definir sua senha. Para propósito de organização deste material a senha do banco de dados do zabbix será
zabbixdbpw. Ao digitar a senha note que ela não aparece como no quadro de comando abaixo! Este é apenas um demonstrativo didático. postgres=# CREATE ROLE zabbix LOGIN; postgres=# \password zabbix Digite nova senha: zabbixdbpw Digitea novamente: zabbixdbpw É interessante definir a senha por \password pois assim ela não fica armazenada no histórico de comandos do usuário. Agora precisamos liberar a conexão do servidor ao banco de dados do zabbix, para isso edite o arquivo “pg_hba.conf” conforme abaixo e acrescente a linha em destaque. postgres=# \q $ logout # vim /etc/postgresql/8.4/main/pg_hba.conf … host zabbixdb zabbix 127.0.0.1/32 md5 Reinicie o banco de dados e realize o teste de conexão. # /etc/init.d/postgresql restart # psql h localhost U zabbix zabbixdb psql (8.4.5) conexão SSL (cifra: DHERSAAES256SHA, bits: 256)
zabbixdb=> \q
#
Se você estiver usando a versão 9.0 do PostgreSQL é importante lembrar que o suporte a imagens do Zabbix assume que o banco utiliza a forma antiga de armazenamento bytea (escape em vez de hex). Para configurar o comportamento
antigo use o comando “ALTER DATABASE nomedabase SET
bytea_output=escape;” dentro do console do psql. Isso pode ser configurado no
usuário ou no “postgresql.conf” também.
2.4.3. Carga inicial
Agora vamos fazer a carga inicial do banco carregando os esquemas, os dados mais básicos. # su postgres $ cd /usr/src/zabbix1.8.4/create/schema $ cat postgresql.sql | psql zabbixdb $ cd ../data $ cat data.sql | psql zabbixdbNão faça a carga do arquivos de imagens, iremos abordar como colocar figuras personalizadas e de melhor definição mais a frente, neste capítulo.
2.4.4. Concedendo as permissões necessárias ao usuário
Agora é o momento de conceder as permissões de acesso nas tabelas. O usuário Zabbix precisa de permissões de SELECT, INSERT, UPDATE e DELETE apenas. Com a sequência de comandos abaixo você conseguirá ativar todas as permissões necessárias. Embora este processo seja mais complicado do que fazer deixar o usuário zabbix como dono do banco ele é muito mais seguro e deve ser utilizado assim em produção1 postgres=# \t 2 postgres=# \a 3 postgres=# \o /tmp/grantzabbix.sql 4 postgres=# SELECT 'GRANT SELECT,UPDATE,DELETE,INSERT ON ' || schemaname || '.' || tablename || ' TO zabbix ;' FROM pg_tables; 5 postgres=# \o 6 postgres=# \i /tmp/grantzabbix.sql 7 postgres=# \q $ logout 1) O comando \a remove o alinhamento dos elementos na tabela; 2) O \t mostra apenas tuplas, eliminando cabeçalhos e rodapés; 3) O comando \o grava o “output” no arquivo definido (/tmp/grantzabbix.sql). Note que é preciso de outro \o sem o nome do arquivo para encerrar o “output”; 4) Este comando em SQL seleciona todas as tabelas do banco de dados e monta uma “string” com o comando de permissão (GRANT), você pode ver o conteúdo deste comando no arquivo “/tmp/grantzabbix.sql”; 5) O comando \i carrega e executa o conteúdo do arquivo gerado acima.
2.5. Instalação do servidor Zabbix via código fonte
Em alguns casos a distribuição Gnu/Linux que você escolher pode possuir em seu repositório uma versão satisfatória do Zabbix disponível. Se for este o caso, ótimo! Simplesmente instale o pacote e comece a configurar.
No entanto isso nem sempre é verdade e pode ser necessário uma versão mais recente (devido a recursos novos, etc.) na sua solução de monitoramento. Para suprir esta necessidade é preciso compilar o Zabbix a partir de seu código fonte.
Esta sessão toda é dedicada ao processo de criar os binários, cobrindo quais dependências devem ser instaladas e como escolher os recursos a serem compilados. Via de regra se algum tipo de recurso não se mostrar necessário a princípio não o ative, isso gera binários mais leves (com menos código embutido) e alivia o consumo de memória em servidores
Debian, o buildessential e o make. O primeiro é um meta pacote que irá instalar todos os pacotes mínimos de compilação de fontes (compilador, linkeditor, cabeçalhos do kernel e da libc, etc.) e o segundo é um automatizador de compilação. No terminal do zabbixsrv rode os seguintes comandos. # aptitude install buildessential make # cd /usr/src/zabbix1.8.4 # ./configure help | less O configure é um script gerado a partir do “autotools”, que é um conjunto de ferramentas para facilitar a compilação de fontes em C. A opção help fornecida acima irá listar todas as opções que podemos ativar ou não para compilar o Zabbix. Note que o configure não compila nada ele apenas “prepara a cama” para realizar a compilação com o “make”. Na tabela a seguir estão as opções relevantes do configure para a nossa tarefa.
Opção do configure Descrição
--prefix=diretório Define onde o Zabbix será instalado. É importante lembrar que se nada for configurado nesta opção os binários e manuais serão colocados em /usr/local como padrão. No entanto para manter a instalação organizada e facilitar atualizações de versões do Zabbix nós o colocaremos em /opt/zabbix-1.8.4.
--mandir=/usr/share/man Aponta a localização correta das páginas de manual, assim podemos usar o comando man para acessar as opções dos binários do Zabbix.
--enable-static Ativa a geração de binários em forma estática (sem shared libraries). É recomendado deixar esta opção desligada.
--enable-server Ativa a compilação do servidor. No caso presente iremos ativar esta opção, quando formos compilar apenas o agente iremos desabilitá-la.
--enable-proxy Compila os binários para sistemas distribuídos. Como neste curso não abordaremos o sistema de proxy do Zabbix vamos deixar esta opção sempre desabilitada.
--enable-agent Compila os binários para os agentes. É uma excelente ideia sempre deixar esta opção ativada. Mesmo em servidores dedicados do Zabbix é uma boa prática monitorar a própria máquina.
absolutamente necessário, dado ao recente anúncio do esgotamento de endereços IP da IANA o IPV6 logo será necessário em muitos ambiente.
--with-ibm-db2 Ativa o suporte ao “back end” do bando de dados IBM DB2. Vamos deixá-lo desabilitado uma vez que usaremos o PostgreSQL. Você pode escolher apenas um “back end”. --with-mysql Ativa o suporte ao “back end” do bando de dados MySQL.
Vamos deixá-lo desabilitado uma vez que usaremos o PostgreSQL. Você pode escolher apenas um “back end”. --with-oracle Ativa o suporte ao “back end” do bando de dados Oracle.
Vamos deixá-lo desabilitado uma vez que usaremos o PostgreSQL. Você pode escolher apenas um “back end”. --with-pgsql Ativa o suporte ao “back end” do bando de dados
PostgreSQL, vamos deixá-lo habilitado. Você pode escolher apenas um “back end”.
--with-sqlite3 Ativa o suporte ao “back end” do bando de dados sqlite versão 3. Vamos deixá-lo desabilitado uma vez que usaremos o PostgreSQL. Você pode escolher apenas um “back end”.
--with-jabber Ativa o suporte do servidor de contato com servidores Jabber permitindo que o Zabbix envie alertas taravés deste serviço de mensagens instantâneas. Vamos ativar essa opção.
--with-libcurl Ativa o suporte a biblioteca de HTTP CURL. É necessária para o monitoramento de serviços Web e autenticação via HTTP.
--with-iodbc Ativa o suporte ao “back end” do bando de dados via ODBC. Não é recomendado.
--with-unixodbc Como o anterior mas usa unixODBC ao invés de iODBC. Este pacote é mais encontrado do que o iODBC.
--with-net-snmp Ativa o suporte a monitoramento via SNMP usando a biblioteca “net-snmp” do unix. Vamos deixá-la ativada. --with-ucd-snmp Mesmo que o anterior, mas usando a biblioteca ucd,
menos comum. Vamos deixá-la desativada.
--with-ssh2 Ativa suporte a monitoramento via SSH e verificação de status de um serviço de conexão remota segura. Vamos deixá-lo ativado.
--with-openipmi Ativa suporte a comandos e monitoramento de hardware por IPMI. Só é relevante quando o hardware que você vai monitorar e o S.O. Instalado nele possuem esta especificação. Para este curso deixaremos ele desativado.
Tabela 1: Opções de compilação do Zabbix
2.5.1. Dependências de compilação.
Ao executar o comando abaixo, colete cada erro que aparecer e aponte na tabela o pacote que deve ser instalado para resolver a dependência. Isto vai servir de referência para você em futuras instalações e também tem como intenção ensinar a lidar com erros de dependências de compilação. Use o comando “aptitude” para encontrar os pacotes corretos. ./configure prefix=/opt/zabbix1.8.4 –mandir=/usr/share/man enableserver disablestatic disableproxy enableagent enableipv6 withpgsql withjabber withlibcurl withnet snmp withssh2 withoutopenipmi withldap Erro DependênciaCPU compatível se você exportar as variáveis de ambiente CFLAGS e CXXFLAGS com o seguinte valor “O2 pipe march=native”, antes de executar o configure. Se você estiver usando um sistema de 32 bits acrescente ainda fomitframepointer. Cuidado com outros flags de compilação! Você pode acabar com um binário defeituoso!
2.5.2. Compilando e instalando
Agora que o “configure” chegou ao ponto final e todas as dependências foram resolvidas é hora de executar a compilação com o comando “make”. Na verdade o “make” não é umcompilador, ele apenas chama os comandos necessários para construir os binário através de um arquivo Makefile que foi gerado pelo “configure”.
Execute conforme abaixo, os comandos. No final o comando “ln” irá criar um link
simbólico para /opt/zabbix. Isso é uma boa prática para ajudar a trocar as versões do Zabbix durante uma migração, apontando o link para a pasta com os novos binários, enquanto mantemos os anteriores para o caso de um “downgrade” emergencial. Você pode substituir o j2 por outro número para acelerar a sua compilação se você tiver múltiplos cores. Uma regra geral é 2xCores+1. # make j2 # make install # ln svf /opt/zabbix1.8.4 /opt/zabbix # tree /opt/zabbix O comando “tree” vai mostrar a hierarquia de diretórios e arquivos abaixo do caminho da instalação. A tabela abaixo tem o descritivo de cada um deles. Binário Funcionalidade
zabbix_get Utilitário para realizar consultas nos agentes via linha de comando. Muito útil e nós o utilizaremos extensamente durante o curso.
zabbix_sender Utilitário para envio de “traps” para o servidor do Zabbix. É necessário criar um
servidor como o início, termino ou erro de um backup.
zabbix_agent Agente para ser usado com o “super daemon xinetd” ou similar. Não é necessário na grande maioria dos casos e será removido do diretório.
zabbix_agentd O daemon do agente do Zabbix que fica na memória a espera das requisições do servidor.
zabbix_server O daemon do servidor do Zabbix. Este é o componente principal de toda a infraestrutura.
Tabela 2: Binários de uma instalação de servidor e agente do Zabbix
É preciso remover o “zabbix_agent” e sua página de manual, uma vez que iremos usar apenas o “daemon zabbix_agentd”. Também é uma boa prática não manter os símbolos de depuração nos binários de produção. O comando “strip” irá retirar estes símbolos e o executável final será ligeiramente menor em tamanho (o que ajuda a consumir menos memória também). # rm /opt/zabbix1.8.4/sbin/zabbix_agent # rm /usr/share/man/man1/zabbix_agent.1* # strip stripall /opt/zabbix1.8.4/*/* Não é aconselhável executar daemons de sistema com o usuário root, por isso vamos criar um grupo e usuário de nome zabbix para que o serviço entre na memória como usuário não privilegiado. O nome do usuário que o Zabbix usa é hadcoded, ou seja, ele é programado dentro do código fonte e não pode ser alterado via configuração. Desse modo sempre temos que criar o usuário com o nome zabbix, já o nome do grupo é totalmente opcional. # groupadd zabbix # useradd g zabbix m s /bin/bash zabbix
ambos.
# mkdir /var/{log,run}/zabbix p # chown zabbix. /var/{run,log}/zabbix
2.5.3. Serviços de rede
Acrescente ao “/etc/services” o mapeamento de portas do “Zabbix Agent” e “Zabbix Trapper”. # vim /etc/services … zabbixagent 10050/tcp Zabbix Agent zabbixagent 10050/udp Zabbix Agent zabbixtrapper 10051/tcp Zabbix Trapper zabbixtrapper 10051/udp Zabbix Trapper Estas entradas permitem que programas como “wireshark” e “netstat” reconheçam as portas do Zabbix.
2.5.4. Arquivos de configuração
Os arquivos de configuração do Zabbix acompanham os seus fontes, mas a 4Linux preparou um conjunto de arquivos para uso em produção com uma organização melhorada. Ao invés de simplesmente colocar todas as configurações em um único arquivo, os parâmetros foram distribuídos em grupos lógicos separados em vários arquivos e diretórios.
O Zabbix por padrão procura pelos seus arquivos em /etc/zabbix, a partir dos arquivos principais (zabbix_server.conf e zabbix_agentd.conf) outros arquivos foram chamados e inseridos na configuração. A tabela abaixo demonstra como ficaram organizados os diretórios e seu conteúdo.
Diretório ou arquivo Descrição
/etc/zabbix/agent.d/checkings.conf Configuração de checagens ativas e passivas do agente.
/etc/zabbix/agent.d/logs.conf Configuração de logs (local, nível de debug, etc.) do agente.
/etc/zabbix/agent.d/network.conf Configurações de rede do agente.
/etc/zabbix/agent.d/remote_commands.conf Configuração de recebimento de comandos remotos no agente.
/etc/zabbix/alert.d Diretório para scripts de alertas externos
/etc/zabbix/externalscripts Diretório para scripts de extensão do agente do Zabbix.
/etc/zabbix/server.d Diretório para configurações extras do servidor (carregado pelo arquivo principal)
/etc/zabbix/server.d/database.conf Configuração do “back end” de banco de dados do servidor.
/etc/zabbix/server.d/logs.conf Configuração de logs (local, nível de debug, etc.) do servidor.
/etc/zabbix/server.d/network.conf Configurações de rede do servidor. /etc/zabbix/server.d/process.conf Configurações de quais daemons
devem iniciar e quantos de cada um deles, além de consumo de memória do servidor.
/etc/zabbix/server.d/proxy.conf Configuração de monitoramento distribuído do servidor.
/etc/zabbix/zabbix_agentd.conf Arquivo principal de configuração do agente
/etc/zabbix/zabbix_server.conf Arquivo principal de configuração do servidor
Tabela 3: Arquivos e diretórios de configuração
Copie o arquivo compactado do DVD (confs/configserver.tar.bz2 e confs/config agent.tar.bz2) para dentro do /tmp da máquina virtual. Este arquivos tem vários valores padrões razoáveis para começar e necessitam de pouca configuração. Não é de intenção deste material dissecar cada uma das opções de configuração, vamos abordar apenas as mais relevantes, porém os arquivos tem extensos comentários em português criados pelo autor deste material.
# tar xf /tmp/configserver.tar.bz2 # tar xf /tmp/configagent.tar.bz2 # chown root.zabbix /etc/zabbix R # find /etc/zabbix type d exec chmod 0750 {} \; # find /etc/zabbix type f exec chmod 0640 {} \; 1) Note que o grupo dos diretórios e seus arquivos foram apontados para “zabbix”. O dono continuou a ser o root; 2) Todos os diretórios tiveram a permissão de acesso global revogada, nenhum usuário do sistema tem que acessar esta pasta exceto o do Zabbix (existem informações sensíveis como senhas em text/plain nestes arquivos). Também, apenas o root tem direitos de gravação nessas pastas o grupo zabbix tem apenas acesso de leitura. 3) Os arquivos seguem a mesma lógica que os diretórios. Não deixe de fazer o procedimento das permissões, ele vai tornar a sua instalação do Zabbix muito mais segura. Para finalizar vamos configurar o sistema para apontar o PATH para o link simbólico de instalação. Isso vai facilitar o acesso aos comandos. # vim /etc/profile.d/zabbixpath.sh 8 export PATH=”$PATH:/opt/zabbix/sbin:/opt/zabbix/bin” # . /etc/profile # zabbix_get help # zabbix_agentd help
2.5.5. Testando sua instalação
Utilize o manual do “zabbix_agentd” para descobrir como listar as métricas suportadas pelo ambiente e como testar um delas individualmente. Depois inicie o agente, veja o conteúdo do arquivo de logs e use os comandos “ps” e “netstat” para ver quais os processos que ele iniciou e em quais portas eles se vincularam. Depois do término com o agente vamos configurar o servidor conforme os passos a seguir e realizar o mesmo procedimento de inicialização e pesquisa que no agente.DBPort=5432 DBName=zabbixdb DBUser=zabbix DBPassword=zabbixdbpw 1) O endereço IP ou nome DNS do servidor que esta com o banco de dados. Como no nosso cenário o banco e o servidor Zabbix estão na mesma máquina virtual utilizamos o endereço de “loopback”; 2) A porta TCP de acesso do banco. Esta é a porta padrão do PostgreSQL; 3) Nome do banco de dados que criamos no início do capítulo; 4) Nome do usuário que criamos e demos permissão; 5) Senha do usuário acima. Agora execute os comandos de inicialização dos daemons conforme indicado abaixo. # zabbix_agentd # zabbix_server Verifique se as últimas linhas do log indicam se ambos iniciaram corretamente e também se todos os processos estão na memória. # tail n1 /var/log/zabbix/zabbix_server.log 1203:20110207:092633.044 server #1 started [DB Cache] # tail n1 /var/log/zabbix/zabbix_agentd.log 871:20110207:092607.522 zabbix_agentd collector started # ps u C zabbix_agentd SER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND zabbix 863 0.0 0.1 4836 496 ? SN 09:25 0:00 /opt/zabbix/sbin/zabbix_agentd … # ps u C zabbix_server USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND zabbix 1201 0.0 1.0 46696 2636 ? SN 09:26 0:03 /opt/zabbix/sbin/zabbix_server …
Note que a saída do último comando é muito grande. Ao final dos testes mate os processos com o comando “killall”: # killall zabbix_server zabbix_agentd
2.5.6. Scripts de boot
No CD temos alguns scripts de boot prontos para uso no Debian, copie os arquivos “boot/debian/serverbootscripts.tar.bz2” e “boot/debian/agentbootscripts.tar.bz2” para o “/tmp” e descompacteos na raiz. # cd / # tar xvf /tmp/serverbootscripts.tar.bz2 # tar xvf /tmp/agentbootscripts.tar.bz2 Teste a instalação dos scripts. # /etc/init.d/zabbixserver start # /etc/init.d/zabbixagent start Por fim, coloque os scripts no boot da máquina virtual. # updaterc.d zabbixagent defaults # updaterc.d zabbixserver defaults2.6. Instalação do agente Zabbix via compilação
Agora chegou o momento de instalar o agente do Zabbix nas outras máquinas virtuais com Gnu/Linux. O procedimento de instalação é similar ao do servidor, mas não iremos habilitar a opção “enableserver” no “configure”. Também não são necessários todos as opções de “with” usadas acima. O agente é certamente mais simples que o servidor em termos de funcionamento e só precisa do suporte a LDAP.Com as informações acima em mãos realize os procedimentos de instalação dos agentes na máquina virtual Presentation. Não se esqueça também de colocar os scripts de boot e os arquivos de configuração nela e iniciar o processo na memória.
2.6.2. Acesso ao agente pelo servidor
Agora que o agente esta instalado e rodando é preciso realizar algumas configurações básicas para que ele permita o acesso vindo do servidor. Primeiro vamos verificar se suas configurações de porta e rede estão de acordo, usando o comando “netstat” para listar as portas que ele esta escutando. # netstat lntp | grep zabbix tcp 0 0 127.0.0.1:10050 0.0.0.0:* OUÇA 592/zabbix_agentd A saída do comando mostra que o daemon esta apenas vinculado ao endereço localhost da máquina, vamos modificar seu arquivo de configuração e reiniciálo. Identifique qual o IP local da máquina que pertence a DMZ (rede 172.27.0.0/24) e substitua 127.0.0.1 por ele dentro do arquivo /etc/zabbix/agent.d/networks.conf no parâmetro ListenIP. # vim /etc/zabbix/agent.d/network.conf 1 # Este é o arquivo de configuração de rede do agente do Zabbix. 2 3 #==================================================================== 4 # Qual porta e IP que o agente vai se vincular para receber checagens passivas do servidor. 5 # 6 ListenIP=172.27.0.1 7 ListenPort=10050 8 9 #==================================================================== 10 # IP o qual o agente do Zabbix irá usar para enviar dados, é opcional pois o sistema usa o IP o qual esta designado a enviar dados conforme a tabela de oteamento. 11 #1) Mudar para o IP interno do Presentation. Agora reinicie o agente e confira novamente a qual IP ele esta vinculado. # /etc/init.d/zabbixagent restart Stopping Zabbix agent daemon: zabbix_agentd Starting Zabbix agent daemon: zabbix_agentd # netstat lntp | grep zabbix tcp 0 0 172.27.0.1:10050 0.0.0.0:* OUÇA 654/zabbix_agentd Se o serviço agora estiver vinculado ao IP correto repita estes passos em cada VM. Neste ponto é importante paramos para verificar uma possível falha de conexão. Vamos forçar a VM “zabbixsrv” a se comunicar com o gateway (presentation) via “zabbix_get”. Vamos usar a “key agent.ping” como exemplo. # zabbix_get s gateway k 'agent.ping' zabbix_get [6646]: Get value error: *** Cannot connect to [gateway]:10050 [Connection timed out] Note a mensagem 'Connection timed out' no final da linha de erro, também repare que levou algum tempo para que o comando retornasse a mensagem. Isso acontece porque o filtro de pacotes da máquina esta bloqueando conexões, podemos averiguar isto com mais precisão usando a ferramenta “nmap” conforme abaixo: # nmap P0 p 10050 gateway Starting Nmap 5.00 ( http://nmap.org ) at 20110130 02:17 BRST Interesting ports on gateway.curso468.4linux.com.br (172.27.0.1): PORT STATE SERVICE 10050/tcp filtered unknown MAC Address: 08:00:27:BD:55:12 (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 0.47 seconds
sistema. Para podermos liberar o acesso use o procedimento abaixo no terminal da máquina “presentation”. # iptables A INPUT j ACCEPT p tcp dport 10050 s 172.27.0.10 # iptablessave > /etc/iptables/rules Repetindo o “nmap” a partir do servidor do Zabbix: # nmap P0 p 10050 gateway Starting Nmap 5.00 ( http://nmap.org ) at 20110130 02:34 BRST Interesting ports on gateway.curso468.4linux.com.br (172.27.0.1): PORT STATE SERVICE 10050/tcp open unknown MAC Address: 08:00:27:BD:55:12 (Cadmus Computer Systems) Nmap done: 1 IP address (1 host up) scanned in 0.27 seconds Se o estado retornado for “open”, então o servidor é capaz de se conectar ao agente no nível da camada TCP, mas ainda precisamos ter certeza absoluta que ele esta permitindo conexões no nível de camada de aplicação. Vamos repetir o teste com o zabbix_get e ver se o agente retorna o valor 1. # zabbix_get s gateway k 'agent.ping' ← Note que ele não retorna nada! Apenas uma linha em branco aparece no resultado do comando. Isso esta ocorrendo porque o agente precisa liberar a consulta para o servidor, por padrão os arquivos de configuração apenas permitem que ele seja acessado a partir do localhost. Para liberar o acesso temos que editar o arquivo “/etc/zabbix/agent.d/checkings.conf” e mudar dois parâmetros.
nome da máquina com o qual o agente deve se apresentar ao servidor. Este nome deve ser único e não necessariamente precisa ser igual ao hostname real da máquina, de fato no nosso cenário iremos deixálo diferente. # vim /etc/zabbix/agent.d/checkings.conf 1 # Este é o arquivo para configuração de checagens no agente. Há dois tipos de checagens, a passiva e a ativa. 2 # 3 # Checagens passivas são o padrão, o servidor faz o agendamento das métricas e manda uma requisição ao agente que aguarda passivamente (dai o nome), este então coleta o dado do sistema e envia de volta ao servidor. 4 # 5 # Uma checagem ativa permite que o agente receba uma lista de itens a serem monitorados do servidor e ao invés deste último cuidar do agendamento e requisições é o agente que toma para si esta tarefa. 6 # 7 # Checagens ativas são úteis quando o Firewall não permite que o servidor de monitoramento alcance o agente via rede ou quando se utiliza um sistema de monitoramento de logs onde o monitoramento ativo é obrigatório. 8 #==================================================================== 9 # Quais são os servidores para recebimento de requisições ou obtenção da lista de checagens ativas. 10 Server=172.27.0.10 11 12 #==================================================================== 13 # Como este host esta cadastrado dentro do Zabbix isto não precisa corrsponder ao hostname da máquina ele é uma string de identificação do agente para com o servidor do Zabbix. 14 # 15 Hostname=Presentation …
2) Este é o nome a ser cadastrado no “front end” do Zabbix e não o nome de DNS (apesar de poderem ser os mesmos). Reinicie o agente mais uma vez e faça o teste com “zabbix_get” a partir do servidor. # zabbix_get s gateway k 'agent.ping' 1 ← Se o comando resultante retornou 1 então o servidor poderá acessar o agente a partir de agora.
2.6.3. Exercício sobre instalação de agente em Linux
1) Instale o agente do Zabbix via compilação nas máquinas virtuais Application e Database conforme mostrado neste capítulo.
2.7. Instalando o agente em ambientes Windows
Um dos objetivos do curso é demonstrar como o Zabbix é capaz de monitorar redes heterogêneas com vários sistemas operacionais e ativos de rede. Esta sessão cuida de instalar o agente do Zabbix em um Windows 2003.
Primeiro é preciso baixar os executáveis pelo endereço http://www.zabbix.com/downloads.php, localize o link de binários para Windows como na Figura 2.14. Clique no link de download e escolha um local para colocar o arquivo compactado, no exemplo da apostila ele foi colocado em C:\Downloads. Abra a pasta em que o arquivo foi salvo e descompacte o arquivo. Dentro dele você encontrará outras duas pastas para arquiteturas de 32 e 64 bits. No nosso caso iremos usar os de 32 bits.
Volte a raiz e crie um diretório chamado Zabbix e dentro dele ainda crie mais três diretórios: conf, log e bin e copie os executáveis descompactados dentro deste último.
Obtenha os arquivos do DVD com a configuração do agente do Windows (conf/agentwin config.zip) e descompacte dentro da conf o seu conteúdo. Apague o arquivo zip depois disso.
O arquivo zabbix_agentd.conf deve ficar na raiz da pasta conf, assim como os diretórios agent e externalscripts. Cuidado na hora de descompactar.
Edite o arquivo c:\Zabbix\conf\agent\checkings.conf e mude os parâmetros Server e HostName conforme a Figura 2.17, para permitir o acesso do servidor e o arquivo
c:\Zabbix\conf\agent\network.conf para vinculálo ao endereço IP da placa de rede.
Use o Wordpad para alterar estes arquivos, o Notepad tem vários problemas com codificação e finais de linha.
Figura 2.15: Instalando os executáveis no Windows
Agora vamos testar a instalação, abra dois prompts de comando, no primeiro acesse o diretório dos binários e execute o comando conforme abaixo. cd C:\Zabbix\bin zabbix_agentd c ..\zabbix_agentd.conf Note que uma mensagem dizendo que ele foi iniciado pelo console irá aparecer na tela. É porque o Windows não é capaz de executar o agente como um daemon da maneira que o Linux faz, mais a frente veremos como iniciálo como serviço do Windows que é maneira correta de se fazer. Outra mensagem, desta vez via caixa de dialogo, também vai aparecer na tela. É o serviço de segurança do Windows que esta perguntado se deve bloquear ou não esta aplicação. Obviamente devemos clicar em Desbloquear.
Agora no segundo prompt de comando, use o comando “netstat” como abaixo para verificar se ele esta escutando no endereço correto.
netstat an
2.7.1. Executando o agente como serviço
Instalar o agente do Zabbix como serviço é muito simples. No prompt de comando onde você o testou pressione “CTRL+C” para cancelar a execução do programa (demora alguns segundos). Quando o prompt retornar digite:
zabbix_agentd.exe c c:\Zabbix\conf\zabbix_agentd.conf install
Duas mensagens irão aparecer indicando a instalação do agente como “Service” e “Event Source”. Para conferir se o agente esta mesmo no ar abra o Painel de Controle →Ferramentas Administrativas →Serviços e procure pelo serviço chamado “Zabbix Agent”.
Nesta tela é também possível parar, reiniciar, etc. o agente através da barra de ícones na parte superior da janela. Como o serviço inicia parado devemos clicar sobre ele e no ícone Iniciar o Serviço (representado pelo símbolo de “play”). Certifiquese que ele esta para ser iniciado automaticamente, assim quando o sistema for reiniciado o serviço também será. Teste no servidor do Zabbix se ele esta conseguindo alcançar o agente. # zabbix_get s win2003 k 'agent.ping' 1 Se ele retornar 1 como acima, então a instalação esta concluída.
2.8. Instalação do agente Zapcat para JBoss
O Zabbix possui alguns agentes programados por terceiros além do nativo que acompanha os fontes padrão. Um destes agentes é o Zapcat, que é capaz de monitorar através
de um “deploy”, servidores JBoss e Tomcat. No nosso cenário temos um servidor JBoss na máquina virtual Application que será monitorado pelo Zapcat. O resto desta sessão é dedicado à instalação e configuração deste agente. O Zapcat é na verdade um JMX Bridge, ele é capaz de coletar os MBeans JMX do servidor e expôlo para o Zabbix via Zabbix API. Diferente do agente, ele escuta na porta 10051 (mas isso é configurável) e requer que outro “host” a parte seja criado dentro da interface do Zabbix (veremos isso mais adiante).
2.8.1. Obtenção do binário
Siga o procedimento abaixo para obter o binário do zapcat. Você irá baixálo do Source Forge. # cd /var/tmp # wget http://ufpr.dl.sourceforge.net/project/zapcat/zapcat/zapcat1.2/zapcat1.2.zip # unzip zapcat1.2.zip # cd zapcat1.2 # ls bin build.xml COPYING lib openfire README samples src templates webapp zapcat 1.2.jar zapcat1.2.war zapcatopenfire1.2.jar Note que o zapcat vem na forma de um .war (aplicação web java) e .jar (applicativo java). Vamos nos ater apenas ao modo web.2.8.2. Deployment
Para instalar o Zapcat, simplesmente copie o binário para a pasta de “deploy” da instância em execução do JBoss. No nosso caso esta pasta é /opt/jboss/server/application/deploy/.# cp zapcat1.2.war /opt/jboss/server/application/deploy/ # tail /opt/jboss/server/application/log/server.log … 20110130 06:08:10,616 INFO [org.jboss.system.server.Server] JBoss (MX MicroKernel) [4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)] Started in 27s:81ms 20110130 06:10:25,679 INFO [org.jboss.web.tomcat.service.TomcatDeployer] deploy, ctxPath=/zapcat1.2, warUrl=.../tmp/deploy/tmp3690979215130123277zapcat1.2exp.war/ A última mensagem do log indica que o pacote foi instalado com sucesso (deployed). Ele já esta funcionando e podemos averiguar isso com o comando “netstat” como fizemos anteriormente. # netstat lntp | grep ':1005' tcp 0 0 172.27.0.20:10050 0.0.0.0:* OUÇA 28751/zabbix_agentd tcp 0 0 0.0.0.0:10052 0.0.0.0:* OUÇA 29181/java Repare que, como ele é um aplicativo java, o “netstat” não vai informar o nome dele (Zapcat) na saída com p.