sexta-feira, 8 de dezembro de 2017

Relato 1º Zabbix Meetup do Interior - Campinas-SP

Introdução

Os Meetups de Zabbix vem ocorrendo desde 2016, todos organizados pelo Premium Partner da Zabbix SIA no Brasil, a Unirede. Porém, o Luiz Sales procurou o Hernandes Martins e Eu, com a ideia de organizarmos um Meetup 100% Comunidade.

Nós adoramo a ideia, o principal ponto é poder levar os Meetups para outras cidades que não sejam capitais, mesmo que sejam eventos menores, com poucas pessoas, esse é o espírito original dos Meetups. Quem nunca fez um churrasco ou encontrou os amigos nerds num buteco e ficou ali horas trocando ideias sobre tecnologia.

Onde ocorreu o evento

O evento ocorreu nas dependências da Faculdade Devry Metrocamp, que nos forneceu o espaço sem custo algum, nesse ponto tenho algumas pessoas a agradecer: Profa. Daniela Cartoni, Prof. Ronaldo Barbosa, Prof. Julio Magro e Prof. Luiz Turatti, todos foram essenciais para que o evento ocorresse com sucesso.

O Público

 Essa foi a primeira grata surpresa, e que confirmou, que precisamos de mais eventos como esse, organizados fora dos eixos principais. A maioria dos presentes era de iniciantes no universo do Zabbix.

É comum para quem está envolvido, como eu, se deslocar para São Paulo, e, até mais longe para participar de um evento, mas para um iniciante, o sentimento não é o mesmo. "E se eu for até São Paulo e não entender nada?", "E se for uma panelinha, e eu me sentir deslocado?", esses são sentimentos comuns, mas sendo na cidade da pessoa, ou na cidade vizinha, dá para chamar uns amigos e se sentir mais confortável.

As Palestras

As palestras foram a segunda surpresa, no fim de Abril, participei do Meetup em São Paulo, foi impressionante ver a diferença no nível das palestras, o pessoal evoluiu muito, trouxeram temas relevantes e atualizados para esse Meetup.

Abaixo farei algumas considerações sobre as palestras e disponibilizarei os links para quem quiser conferir os slides.

Utilizando Zabbix com IoT - Douglas Esteves (IoTMakers)

O Douglas Esteves abriu o evento com um tema super atual: IoT, ele compartilhou vários de seus projetos, incluindo a utilização do computador em módulo Omega2, o desenvolvimento de placas e o módulo wifi ESP8266. Slides.

Monitoração de Ambiente Críticos SAP com Zabbix - Carlos Eduardo Felicio de Oliveira (UOLDiveo)

A palestra do Felicio teve muita troca de ideias, muitos dos presentes trabalham ou já trabalharam com ambiente SAP, o que gerou uma troca de experiências muito interessante. Ele comentou sobre as soluções existentes para o monitoramento desse ambiente e as cifras exorbitantes envolvidas, com certeza, se você possui SAP na sua empresa, e apresentar a possibilidade de monitorá-lo com Zabbix, vai ser visto com outros olhos. Slides.

Implementação em massa do Zabbix Agent em ambiente UNIX - Vinícius Bastos (DXC/CPFL)

A palestra do Vinícius foi totalmente hands on, nada de slides, ele conectou na hora num ambiente GNU/Linux em Docker e demonstrou seus scripts. Ele desenvolveu uma solução de instalação/atualização de Agentes Zabbix em ambiente *nix, onde ele trabalha eles possuem muitos Unix, além dos Linux, e essa solução diminuiu de meses para dias o processo de atualização de versão dos agentes.

Zabbix under Docker - Luiz Sales (O2B)

O Luiz falou sobre Zabbix com Docker, fez uma introdução sobre o universo do Docker e suas vantagens, explanou sobre a utilização do Zabbix nessa tecnologia e no final fez um hands on, demonstrando um ambiente composto por Zabbix, Grafana e uma Dashboard PHP personalizada, sendo disponibilizados em 2 minutos, do enter ao endereço de acesso web disponível, incluindo as configurações no ambiente da Amazon, tornando assim a solução acessível para qualquer um com acesso à internet. Slides.

Kit de Desenvolvimento de Soluções de IoT com Zabbix - Guilherme L. da Silva (IoTools)

Guilherme apresentou um kit que é o verdadeiro "caixeiro viajante" da IoT, em uma maleta ele tem tudo que precisa para demonstrar a utilização de uma solução de Rede de Sensores sem Fio, que coleta dados, envia para um Zabbix local instalado em um Rapsberry Pi3, que ainda conta com o Grafana. Por fim, ele comentou sobre uma aplicação que ele desenvolveu com o kit, para estimar o nível de ocupação de uma fila. Slides.

Integração do Zabbix com AWS EC2 Auto-Scalling - Emmanuel Arias (O2B)

Em seguida tivemos uma apresentação internacional, já que o "Manu" é Argentino. Ele iniciou a apresentação com uma explicação sobre os ambientes de hoje, que precisam ser elásticos, em eventos como Black Friday, é preciso escalar muitas máquinas rapidamente e que são destruídas após um período curto de tempo. Monitorar esses ambientes é um desafio, após dar exemplos do que ocorre com essa máquinas que são destruídas, ele demonstrou a solução que criou com o conceito de "Slots", compartilhou alguns requests de features que estão abertos na Zabbix SIA e como essas funções facilitariam a resolução desses problemas, e, por fim demonstrou o script em python que ele utiliza na solução, o ec2bix.pi. Slides.

Visão de Negócio com Zabbix - Robert Silva (JLCP)

A palestra do Robert trouxe luz sobre as necessidades que enfrentamos atualmente, ambientes com cultura DevOps, CI/CD, Microserviços, exigem monitoramentos além da infra-estrutura e aplicações, ele explicou de forma clara como esse novo ambiente funciona e o que é preciso para monitorá-lo, novamente o Python apareceu. Por fim exibiu alguns exemplos de dashboards personalizadas e algumas dicas. Slides.

meduZa: Automação Residencial com Zabbix - André Déo (Comunidade Zabbix Brasil) e Guilherme L. da Silva (IoTools)

Guilherme e Eu dividimos esse projeto e a palestra, demonstramos a arquitetura da solução, o shield para Arduíno que ele criou, e as customizações que fizemos no Zabbix, basicamente temos um script em Python tem dupla função, coletar dados dos sensores e enviar para o Zabbix e ser executado pelo Zabbix para executar uma ação, como por exemplo, acender uma lâmpada, tudo isso utilizando o protocolo de Redes de Sensores Sem Fio radiuino. Depois fizemos uma demonstração prática do projeto. Slides.

Monitoramento de Facilities através do Zabbix - Gustavo Castro (SAVEIT)

A palestra do Gustavo foi inusitada, monitoramento de facilities com Zabbix, e você deve estar pensando sobre o que se trata, certo? Monitoramento de chamados de manutenção: privada entupida, máquina de café quebrada, geladeira com problemas, e afins. Utilizando o Grafana, ele criou uma série de dashboards gerenciais, depois combinando notificações do Telegram com scripts em PowerShell, desenvolveu um conjunto de notificações e envio de relatório diários que atendem as necessidades dos técnicos, dos clientes e da empresa responsável pelos técnicos. Slides.

UserParameter vs Zabbix Sender - André Déo (Comunidade Zabbix Brasil)

Por fim, chegamos a última palestra do dia, criei essa palestra pensando nos iniciantes, quando começamos a utilizar a ferramenta e lemos rapidamente sobre essas possibilidades, podemos pensar que são a mesma coisa, mas elas tem detalhes que devem ser observados e pensados ao adotar uma das duas estratégias. Depois de explicar esses pontos, exemplifiquei como utilizar o Zabbix Sender via script Python e revelamos uma surpresa: a implementação do Zabbix Sender para Android, projeto que também foi desenvolvido pelo Guilherme, de acordo com minhas especificações ;-) Slides.

Coffee Break

Como dito anteriormente, o evento foi totalmente realizado pela comunidade, mas graças a algumas ações que executamos, como por exemplo, a venda de chaveiros, temos um pequeno caixa, e com ele contratamos um belo Coffee Break.
 
Agradecimentos especiais à todos que compraram chaveiros durante o evento, e ao Hernandes, Luiz e Aécio, que além de mim, doaram algum valor, e através disso reerguermos o caixa após o evento. Comunidade é isso pessoal.

Brindes

O Luciano Alves é o CIO da Unirede, todos os anos ele participa da Zabbix Conference em Riga - Letônia, nesse ano o próprio Alexei enviou alguns brindes para a Comunidade, e o Luciano complementou com mais alguns. Além disso, a comunidade doou 2 chaveiros.

O sorteio foi realizado gerando uma sequencia de 3 números aleatórios no bash, as pessoas tinham quem encontrar essa sequencia em qualquer coisa que eles tivessem na carteira.
 
Mais fotos!
 

Agradecimentos

Agradeço a todos que participaram do evento, seja organizando, palestrando, prestigiando, divulgando, não importa, nosso MUITO OBRIGADO a todos!

Espero que esse tenha sido o primeiro de muitos Meetups organizados por membros da comunidade, se você deseja organizar um Meetup na sua cidade entre em contato, que vamos ter o maior prazer em ajudar.

segunda-feira, 10 de julho de 2017

Redes de Sensores Sem Fio com Protocolo Radiuino Emulada no Arduino

Introdução

O Radiuino pode ser definido como um protocolo de comunicação para Redes de Sensores Sem Fio, que implementa um pacote de comunicação de 52 bytes. Ele é estruturado em uma pilha de protocolos com 5 camadas: Física, MAC, Rede, Transporte e Aplicação, esta estrutura é conceitualmente equivalente à pilha TCP/IP.

Existem duas bibliotecas para serem utilizadas no Arduino, a primeira é a biblioteca Radiuino, que apresenta os Firmwares de maneira transparente, permitindo ao usuário entender todo o processo de comunicação dos protocolos em cada camada. Isso permite que o usuário construa redes de comunicação sem fio customizadas para cada situação e ambiente, além de permitir aos estudantes alterar parâmetros diversos no ambiente e acompanhar o comportamento da rede, comparando os conhecimentos teóricos, com a prática.

A segunda biblioteca é o Radiuino4App, cujo objetivo é facilitar a utilização de aplicações em redes de sensores sem fio, para os usuários que não tem interesse em entender como a rede funciona, ou precisam de um ambiente de demonstração de conceito, por exemplo, onde a uma rede básica atende a demanda. Nessa biblioteca os Firmwares apresentam apenas configurações básica, ocultando o restante das opções. Nesse cenário, é criada automaticamente uma rede estrela, onde um computador envia um pacote de 52 bytes e o nó sensor devolve um pacote de 52 bytes. É possível colocar até 255 sensores nessa rede. Permitindo aos usuários focaram na aplicação sem se aprofundarem nas questões de rede.

O que é RSSI?

A sigla RSSI significa Received Signal Strength Indicator, se traduzirmos seria algo como a indicação de força/intensidade do sinal recebido, esse valor é muito importante para quem está olhando para a rede de sensores sem fio, pois a intensidade do sinal vai interferir diretamente na perda ou não de pacotes, o que dependendo do cenário e da aplicação, pode ser um problema a curto, médio ou longo prazo. A taxa de perda de pacotes - PER (Packet Error Rate) é o primeiro parâmetro que o responsável por uma rede de sensores sem fio irá consultar.

Objetivo

O objetivo é possuir uma rede de sensor sem fio emulada, utilizando o protocolo de comunicação Radiuino.

O Conceito de Repetidor

Quando possuímos necessidades como alcançar distâncias maiores, locais sem visada direta, ou mesmo criar uma extensão da rede, e não desejamos ou não temos condições de realizar a troca de equipamentos de rádio, podemos utilizar um repetidor. A base envia o sinal ao repetidor, que recebe e processa o sinal, e, em seguida, envia os pacotes ao seu destino final.

Porque Utilizar uma Rede Emulada?

Montar e calibrar uma rede de sensores sem fio real, realizar os testes e desmontá-la, a cada nova rodada de testes pode ser uma tarefa árdua. Para muitos assuntos que estudamos em redes de comunicação de dados como, por exemplo, técnicas de roteamento, softwares de monitoramento, e etc; Não é preciso montar uma rede real, uma rede emulada atende perfeitamente a fase de desenvolvimento e testes. Uma vez validado o cenário no ambiente emulado, partimos para os testes em ambiente real.

Material Necessário

O Ambiente Emulado

Como pode ser observado na figura 01, teremos uma base que se comunica com um repetidor, que repassa os dados para o sensor de destino, o número de sensores é definido no Script Python. Em cada sensor coletaremos os dados: Temperatura, Umidade e Luminosidade. Além da RSSI de UpLink e DownLink de cada enlace.
Figura 01
A figura 02 detalha o fluxo de dados em cada etapa do processo.
Figura 02
Exemplo de Coleta dos dados no terminal
Coleta de Dados no Terminal
Exemplo de Coleta dos dados na ferramenta de Gerencia de Redes Zabbix
Mapa da Rede de Sensores sem Fio Representada no Zabbix

Arquivos Fonte

Todos os arquivos, incluindo a parte do Zabbix, estão disponíveis aqui.

Agradecimentos


Queria agradecer ao meu Orientador Prof. Dr. Omar C. Branquinho por todo o conhecimento que vem compartilhando comigo desde a nossa primeira conversa, quando eu não entendia absolutamente nada de redes de sensores sem fio.
Ao meus amigos Eng. Raphael Montali da Assumpção e Eng. Guilherme Lopes por todas as dicas, conversas e troca de idéias, e nesse post específico ao Guilherme por ter revisado o conteúdo.
Não posso esquece também do meu amigo Douglas Esteves, que me ajudou a entrar no "universo das plaquinhas", como eu sempre brinco, aprendi muita coisa com ele, as dicas dele foram essenciais no começo dessa caminhada.
E finalmente, mas não menos importante, ao meu amigo Matheus Bernardes, meu oráculo do Python, eu copio código dos projetos dele, peço ajuda, etc. E ele sempre me ajuda com a maior boa vontade!

terça-feira, 6 de junho de 2017

Personalizando o Idioma da Interface Gráfica do Zabbix

Introdução

Demonstrarei nesse post como realizar a alteração do idioma do Zabbix. Pode-se alterar apenas alguns termos ou todos os termos.

Objetivo

O objetivo desse post é ser uma Prova de Conceito, é fazer com que as pessoas pensem fora da caixa. O Zabbix é uma ferramenta fantástica, que permite coletar dados, exibi-los em forma de gráficos e mapas, reagir às métricas coletadas, seja alterando um ícone no gráfico, enviando uma notificação, executando um comando, etc.

O problema é que as pessoas pensam no Zabbix apenas para redes Ethernet e Aplicações! Há algum tempo vemos algumas iniciativas, como do Luciano Alves (Unirede) expandindo isso para uma visão de negócios, o Norberto Rozas (Syspro) que propôs a ideia de usar o Zabbix como supervisório de redes industriais, O Luiz Sales com seus monitoramentos nada convencionais, etc.

No começo do ano eu iniciei o mestrado em Engenharia Elétrica, trabalhando com Redes de Sensores Sem Fio (RSSF), e claro minha proposta foi a de utilizar o Zabbix como ferramenta para o gerenciamento dessas redes, mas conforme as ideias foram surgindo, fui lendo os artigos, conversando com meu orientador, eu fui percebendo um imenso aumento do uso de conceitos como IoT, Smart Cities, Smart Campus, etc. E com isso novos interesses foram sendo despertados.

O Zabbix pode ser usado como Interface para os usuários finais, independente da área de atuação, porém será preciso fazer algumas modificações, pois cada área possui seu conjunto de jargões, sua definição de ícones, de interface, etc. Personalizar o Zabbix para que o usuário tenha uma visão que lhe seja familiar, é essencial. O que estou propondo é utilizar o que o Zabbix tem de melhor, e adaptar o que for necessário para que o usuário se sinta motivado a utilizá-lo.

O que essa solução é

Um Hack: Tenha isso em mente, o que estou fazendo não servirá para qualquer um, em qualquer ambiente, não é suportado pela Zabbix SIA e pode nem ser interessante no seu ponto de vista.
Uma Prova de Conceito: Esse post está longe de ser a palavra final sobre o assunto, eu tinha uma necessidade, achei uma maneira de executá-la e estou compartilhando com vocês.

O que essa solução não é

Prática: A cada nova versão da ferramenta, será preciso reaplicar o hack.
Universal: Veja que essa solução é ideal para ambientes, onde um ou dois idiomas são utilizados, mas não atende uma empresa global, também não atende dezenas de segmentos ao mesmo tempo.

Entendendo como funcionam os idiomas no Zabbix

Consultando a documentação oficial descobrimos que eles utilizam o GNU/gettext e o conceito de locales, que envolve uma série de normas internacionais e vai muito além da simples tradução de textos. Por isso é muito provável que esse hack nunca seja absorvido oficialmente pela Zabbix SIA.

Entendendo os os arquivos que controlam o idioma que é exibido na Interface Gráfica

Vamos analizar o diretório com o idioma do Brasil (pt_BR):
# ls -l /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/
total 940
-rw-r--r-- 1 zabbix zabbix 309122 Mai 30 17:26 frontend.mo
-rw-r--r-- 1 zabbix zabbix 649043 Mai 30 17:20 frontend.po

Enquanto o arquivo frontend.mo é um arquivo com uma codificação especial, descrita na documentação como uma "foto". E repleto de caracteres especiais:
# head -3 /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo
▒gGl▒▒▒/▒▒9▒5F [|▒▒▒!▒▒▒▒▒%▒,
3>Z
cn


O arquivo frontend.po é descrito na documentação como um arquivo texto, editável e utilizado para a tradução.
# head -3 /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.po
msgid ""
msgstr ""
"Project-Id-Version: Zabbix 3.2\n"


Observe esse trecho do arquivo frontend.po:
   4592 #: include/actions.inc.php:660 include/actions.inc.php:1061
   4593 msgid "Disable host"
   4594 msgstr "Desativar host"
   4595
   4596 #: include/views/configuration.host.list.php:116
   4597 msgid "Disable host?"
   4598 msgstr "Desabilitar host?"
   4599
   4600 #: app/views/administration.proxy.list.php:154
   4601 #: include/views/configuration.hostgroups.list.php:150
   4602 msgid "Disable hosts"
   4603 msgstr "Desativar hosts"
   4604
   4605 #: include/views/configuration.hostgroups.list.php:151
   4606 msgid "Disable hosts in the selected host groups?"
   4607 msgstr "Desabilitar os hosts nos grupos selecionados?"


Ele contém as strings que desejamos alterar, o problema é que alterar esse arquivo não surte efeito algum na interface gráfica. Pois se observarmos o arquivo que é chamado na linha 4596, por exemplo:
# vi /var/www/html/zabbix/include/views/configuration.host.list.php +116
                $confirm_message = _('Disable host?');


Verificamos que ele busca como referência a frase original, e, então aplica a tradução.

Observe esse trecho "^@Desabilitar host^@D" da linha 523 do arquivo /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo

Veja o que acontece se eu troco a frase por outra com o mesmo número de caracteres:
"^@Desabilitar sens^@D"

E reinicio o apache:
# systemctl restart httpd
Hack 01 no arquivo frontend.mo
Agora veja o que acontece e eu troco a frase por outra com um número diferente de caracteres:
"^@Desabilitar sensor^@D"

E reinicio o apache:
# systemctl restart httpd

Hack 02 no arquivo frontend.mo
Lembra que a documentação diz que o arquivo .mo é como uma foto? É nesse sentido. A mensagem aparece correta, mas todo o resto da formatação da interface gráfica se perdeu.

Basta voltar o arquivo ao normal e reiniciar o apache, que a interface gráfica também volta ao normal.
Interface Gráfica intacta após a remoção do Hack

Conclusões Iniciais

Devemos utilizar o arquivo frontend.po para gerar um arquivo frontend.mo atualizado. Mas como?

Observando o diretório /var/www/html/zabbix/locale temos um README e três scripts:
# ls -l *.sh README
-rwxr-xr-x 1 zabbix zabbix  385 Dez 21 05:08 add_new_language.sh
-rwxr-xr-x 1 zabbix zabbix  164 Mai 30 17:29 make_mo.sh
-rw-r--r-- 1 zabbix zabbix  957 Dez 21 05:08 README
-rwxr-xr-x 1 zabbix zabbix 1434 Dez 21 05:08 update_po.sh


No arquivo README encontramos a seguinte instrução:
If you want to update po files with new strings in the sourcefile, run update_po.sh . It will gather translatable strings from all files that end with ".php"

Maravilha é exatamente o que pretendemos fazer!

Vou mover o arquivo frontend.mo para o /root:
# mv /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo /root

E editar o arquivo frontend.po:
# vi /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.po
Alteramos as linhas 4592 até 4607, alterando as ocorrências de "host" para "sensor" e  de "hosts" para "sensores", e executamos o script:
# sh update_po.sh
Generating translation template...
Merging new strings in po files...
.
.
.
pt_BR
............................................................................................................................................................................................................................................................................................................................................. feito.
.
.
.
pt_BR/LC_MESSAGES/frontend.po   3316 mensagens traduzidas, 5 mensagens não traduzidas.
.
.
.


Mas... Não gerou um novo arquivo .mo:
# ls -l  /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.*
-rw-r--r-- 1 zabbix zabbix 649043 Mai 31 09:59 /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.po


Sem ele, mesmo com o idioma setado para Português (pt_BR)
Idioma setado como pt_BR
A interface gráfica fica em Inglês.
Interface Gráfica em Inglês

Basta trazer o arquivo de volta e reiniciar o apache:
# mv /root/frontend.mo /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/
# systemctl restart httpd


Que a interface gráfica volta ao normal.
Intreface Gráfica em pt_BR

Teste 02: Vamos rodar o update_po.sh e ver se ele atualiza o arquivo frontend.mo

# ls -l /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo
-rw-r--r-- 1 zabbix zabbix 309122 Mai 31 09:53 /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo
 

# sh update_po.sh
 

# ls -l /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo
-rw-r--r-- 1 zabbix zabbix 309122 Mai 31 09:53 /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo


E nada :-(

Teste 03: Vamos ver o que esse script faz ;-)

E na última instrução temos:
        # setting output file to /dev/null so that unneeded messages.mo file
        # is not created
        msgfmt --use-fuzzy -c --statistics -o /dev/null $translation

Achei!!! Esse script realmente não cria os arquivos.mo. Agora eu vou alterar ele para gerar os arquivos:
        #msgfmt --use-fuzzy -c --statistics -o /dev/null $translation
        msgfmt --use-fuzzy -c --statistics -o /root/$translation/frontend.mo $translation


Eu fiz a menor alteração possível, apenas substituindo "/dev/null" por "/root/$translation/frontend.mo". Isso poderia ficar bem mais elegante, mas preferi ser didático.

Vou criar apenas o diretório pt_BR, que será utilizado pela variável "$translation", os outros idiomas vão dar erro, mas nesse momento não tem problema:
# mkdir -p /root/pt_BR/LC_MESSAGES/frontend.po/

Vou guardar o antigo frontend.mo no /root
# mv /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/frontend.mo /root/

E rodar o script de update novamente:
# sh update_po.sh
Generating translation template...
Merging new strings in po files...
.
.
.
pt_BR
............................................................................................................................................................................................................................................................................................................................................. feito.
.
.
.
bg/LC_MESSAGES/frontend.po      msgfmt: erro ao abrir o arquivo "/root/bg/LC_MESSAGES/frontend.po/frontend.mo" para gravação: Arquivo ou diretório não encontrado
2052 mensagens traduzidas, 56 traduções aproximadas (fuzzy), 1213 mensagens não traduzidas.
.
.
.
pt_BR/LC_MESSAGES/frontend.po   3316 mensagens traduzidas, 5 mensagens não traduzidas.
.
.
.


E agora vamos colocar o novo frontend.mo na interface gráfica do Zabbix:
# cp /root/pt_BR/LC_MESSAGES/frontend.po/frontend.mo /var/www/html/zabbix/locale/pt_BR/LC_MESSAGES/

Reiniciar o apache
# systemctl restart httpd

E Voilà:

Interface Gráfica com a mensagem alterada
Volte o arquivo que você salvou no /root e reinicie o apache. Pois agora vamos fazer o trabalho, de verdade, vamos ter o Zabbix em Português com a interface intacta, e mais 3 variações do Português aplicado à nichos específicos.

Primeiro vamos criar a estrutura de diretórios para os idiomas Italiano (it), Francês (fr) e Russo (ru):
# mkdir -p /root/{it,fr,ru}/LC_MESSAGES/frontend.po/

Abaixo uma pequena cola, das alterações que vamos fazer:
pt_br - Hosts / Itens - Administrador da Rede Ethernet
it - Sensores / Métricas - Administrador da Rede de Sensores
fr - Plantas / Características - Usuário da Rede de Sensores - Ramo Agrícola
ru - Pacientes / Sinais Vitais - Usuário da Rede de Sensores - Ramo Medicina

Vamos copiar o arquivo frontend.po de pt_BR para os idiomas que vamos alterar:
# cd /var/www/html/zabbix/locale

# cp pt_BR/LC_MESSAGES/frontend.po it/LC_MESSAGES/frontend.po
cp: sobrescrever “it/LC_MESSAGES/frontend.po”? y

# cp pt_BR/LC_MESSAGES/frontend.po fr/LC_MESSAGES/frontend.po
cp: sobrescrever “fr/LC_MESSAGES/frontend.po”? y

# cp pt_BR/LC_MESSAGES/frontend.po ru/LC_MESSAGES/frontend.po
cp: sobrescrever “ru/LC_MESSAGES/frontend.po”? y


Primeiro vamos trabalhar no idioma Italiano e trocar todas as ocorrências de hosts por sensores e depois de host por sensor:
# sed -i -e ':g;/^msgstr/s/hosts/sensores/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/host/sensor/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Hosts/Sensores/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Host/Sensor/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po


Agora vamos trocar todas as ocorrências de itens por métricas e depois de item por métrica:
# sed -i -e ':g;/^msgstr/s/itens/métricas/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/item/métrica/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Itens/Métricas/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Item/Métrica/g' /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.po


Agora vamos ao idioma Francês, vamos trocar todas as ocorrências de hosts por plantas e depois de host por planta:
# sed -i -e ':g;/^msgstr/s/hosts/plantas/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/host/planta/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Hosts/Plantas/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Host/Planta/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po


Agora vamos trocar todas as ocorrências de itens por características e depois de item por característica:
# sed -i -e ':g;/^msgstr/s/itens/características/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/item/característica/g'  /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Itens/Características/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Item/Característica/g' /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.po


E finalmente vamos ao idioma Russo, vamos trocar todas as ocorrências de hosts por pacientes e depois de host por paciente:
# sed -i -e ':g;/^msgstr/s/hosts/pacientes/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/host/paciente/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Hosts/Pacientes/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Host/Paciente/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po


Agora vamos trocar todas as ocorrências de itens por sinais vitais e depois de item por sinal vital:
# sed -i -e ':g;/^msgstr/s/itens/sinais vitais/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/item/sinal vital/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Itens/Sinais Vitais/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po

# sed -i -e ':g;/^msgstr/s/Item/Sinal Vital/g' /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.po


Eentão gerar os nossos arquivos frontend.mo atualizados:
# sh update_po.sh

E coloca-los na interface gráfica do Zabbix:
# cp /root/fr/LC_MESSAGES/frontend.po/frontend.mo /var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.mo
cp: sobrescrever “/var/www/html/zabbix/locale/fr/LC_MESSAGES/frontend.mo”? y

# cp /root/it/LC_MESSAGES/frontend.po/frontend.mo /var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.mo
cp: sobrescrever “/var/www/html/zabbix/locale/it/LC_MESSAGES/frontend.mo”? y

# cp /root/ru/LC_MESSAGES/frontend.po/frontend.mo /var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.mo
cp: sobrescrever “/var/www/html/zabbix/locale/ru/LC_MESSAGES/frontend.mo”? y


Reiniciar o Apache
# systemctl restart httpd

E pronto:
Interface Gráfica com o Hack Aplicado

Conclusão:

Esse é apenas um pequeno exemplo de que com um pouco de criatividade e algum esforço, podemos levar o Zabbix a outros nichos e ampliar a nossa área de atuação, seja ela pessoal, acadêmica ou profissional.

segunda-feira, 9 de janeiro de 2017

Configurando um IP fixo na interface eth0 do BeagleBone Black

Introdução

Ao conectar o BBB (BeagleBone Black) no computador e instalar os drivers necessários, ele automaticamente cria uma conexão usb0 com o IP 192.168.7.2. Mas ele possui uma interface de rede, a eth0, e nem sempre estamos em um ambiente com DHCP.

O Ambiente

Estou usando a imagem Debian 8.6 2016-11-06 4GB SD LXQT

O Problema

Configurar um IP para essa interface deveria ser uma tarefa simples, bastaria editar o arquivo /etc/network/interfaces e configurar de acordo com sua necessidade:
# vi /etc/network/interfaces
auto eth0
 iface eth0 inet static
    address 10.0.1.100
    netmask 255.255.255.0
    network 10.0.1.0
    gateway 10.0.1.1
    dns-nameservers 8.8.8.8



Só que isso simplesmente não funciona! Você reinicia ele e nada.

A Solução

Depois muito pesquisar achei a solução em uma lista de discussão:
Primeiro vamos descobrir o identificador da interface
# connmanctl services
*AO Wired                ethernet_d05fb8ed4f78_cable


Depois vamos usar o comando connmanctl config para configurar as opções da interface
# connmanctl config ethernet_d05fb8ed4f78_cable --ipv4 manual 10.0.1.100 255.255.255.0 10.0.1.1 --nameservers 8.8.8.8
E agora já podemos visualizar os novos parâmetros da interface através do comando ip
# ip addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,DYNAMIC,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether d0:5f:b8:ed:4f:78 brd ff:ff:ff:ff:ff:ff
    inet 10.0.1.100/24 brd 10.0.1.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::d25f:b8ff:feed:4f78/64 scope link
       valid_lft forever preferred_lft forever


E pronto você já pode executar um ping www.google.com por exemplo, para validar sua conexão com a internet.

Se você quiser reverter, e usar novamente a interface eth0 como DHCP, basta executar o comando
# connmanctl config ethernet_d05fb8ed4f78_cable --ipv4 dhcp

Fonte:

Google Groups BeagleBoard

sexta-feira, 30 de dezembro de 2016

Modelo de Script com uso de getopts para passagem de parametros

Introdução

Para fazer scripts profissionais e voltados a usuários iniciantes, temos que tomar uma série de cuidados, como por exemplo, exibir um help sobre o funcionamento do script, permitir passagem de parâmetros, checar se os parâmetros informados são válidos, se solicitarmos o uso de arquivos, verificar se o usuário possui o privilégio mínimo requerido naquele arquivo, se o script tem alguma dependência checar se essa dependência foi suprida no ambiente do usuário, e caso negativo informar como ele pode supri-la.

Junto com meu grande amigo Aécio Pires, desenvolvemos esse script base que demonstra todos os conceitos listados acima, esperamos que seja útil a todos.

Observação: Se você não conhece o getopts conheça-o aqui e sua vida será outra ;-)

segunda-feira, 19 de dezembro de 2016

Zabbix e Grafana: Disponibilizando um Dashboard por Cliente

Introdução

Uma das perguntas mais frequentes que temos nos canais de Zabbix é: "Como eu faço para disponibilizar um gráfico/tela por cliente?"
Quando essas pessoas passam a usar os gráficos do Grafana alimentados pelos dados do Zabbix, o cenário não muda, o objetivo deste post é descrever como suprir essa demanda.

Pré-Requisitos

Eu parto do princípio que você já possui o Zabbix e o Grafana integrados e funcionando perfeitamente. Não abordarei esse tema, se ainda não domina essa parte, por favor visite esse post.

Configurações no Zabbix Server

Usuários no Zabbix Server
A única configuração que precisa ser feita no Zabbix Server é a criação dos usuários, nesse caso foram criadas duas contas: "Cliente 01" e "Cliente 02", ambos do tipo "Zabbix User" e membros do grupo "Clientes". Mas isso para demonstrar o conceito, o que você precisa ter em mente é que cada cliente tem que possuir um usuário no Zabbix Server com acesso aos hosts que lhe interessa.

Configuração no Grafana

A primeira coisa que vamos fazer é desativar a opção de usuários comuns de criarem Organizações. Para ficar bem simples, entenda cada organização como um cliente, logo, não queremos nossos clientes criando novas organizações.

# vi /etc/grafana/grafana.ini

# Allow non admin users to create organizations
;allow_org_create = true
allow_org_create = false


Reinicie o serviço

# service grafana-server restart (CentOS 6.x)
# systemctl restart grafana-server (CentOS 7.x)
# sudo service grafana-server restart (Debian/Ubuntu)


Criar os usuários

Clique no logo do Grafana // Admin // Global Users
Criação de usuários

Clique no botão Add new user

Adicionar novos usuários
Preencha os dados e clique no botão Create
Propriedades do usuário
Observação: O Grafana não aceita o mesmo e-mail para usuários diferentes.

Repita o processo para o Cliente 02

Criar as organizações

Clique no logo do Grafana // Admin // New organization
Criação de Organizações

Preencha o nome da organização e clique no botão Create

Adicionar novas organizações
Você pode cadastrar informações adicionais para a organização.

Propriedades da organização
Repita o processo para o Cliente 02

Clique no logo do Grafana // Admin // Global Users

Gerenciamento de usuários
Na linha do Cliente 01, clique no botão Edit

Edição de usuários
Na seção Organizations, preencha o nome da Organização e o nível de privilégio (Role), nesse momento vamos deixar como Admin e clique no botão Add

Alterando privilégio de usuário em organização
Na linha da organização Main.org, altere o nível de privilégio (Role) para Admin

Alterando privilégio de usuário em organização

Repita o processo para o Cliente 02

Entendendo um pouco mais sobre as organizações

No começo do post foi dito para vocês entenderem cada organização como um cliente, pois naquele momento essa informação era suficiente, mas agora precisamos detalhar um pouco mais esse tópico, na realidade cada organização é uma instância do Grafana. Cada organização possui suas dashboards, data sources e configurações, e, esses dado não são compartilhados entre elas. Desse modo o que foi dito antes, não está incorreto, mas essa explicação é importante para as próximas etapas.

Outro detalhe importante é a questão da amarração das permissões, se você estiver logado como admin, e usar a opção Switch to Cliente 01 (Organização), por exemplo, e criar uma dashboard nessa organização, ela não estará disponível para o usuário cliente 01 (Proprietário da organização Cliente 01), pois ela está amarrada ao perfil do usuário admin. O usuário admin está alterando a organização Cliente 01, dentro do universo dele, que é totalmente isolado do universo do usuário Cliente 01.

Configurações para cada cliente

Clique no logo do Grafana // Admin // Sign out

Logoff de usuário

Realize o Login como Cliente 01

Login de usuário

Clique no logo do Grafana // Cliente 01 // Switch to Cliente 01
 
Alterando o perfil de organização

  • Habilite o plugin do Zabbix para essa organização;
  • Configure o Data Source para essa organização, utilizando as credenciais do Cliente 01 cadastrado no Zabbix Server;
  • Crie a Dashboard para essa organização.
Repita o processo para o Cliente 02

Configurando as permissões definitivas

Realize o Login como Admin

Clique no logo do Grafana e certifique-se que o admin está no perfil da organização Main.org, se não estiver altere para esse perfil.

Clique no logo do Grafana // Admin // Global Users

Gerenciamento de usuários
Altere o perfil da Organização Cliente 01 para Viewer e remova a organização Main.org, basta clicar no botão "X" na linha da organização.

Permissões de usuários
Repita o processo para o Cliente 02

Visualizando as Dashboards

Execute o login como Cliente 01

Clique no nome da Dashboard, nesse caso Cliente 01

Seleção da dashboard
Visualize os gráficos

Gráficos do Cliente 01

Repita o processo para o Cliente 02
Gráficos do Cliente 01

Você pode copiar o endereço do dashboard e passar para o seu cliente, nesse tutorial:
http://IP-SERVIDOR:3000/dashboard/db/cliente-01
http://IP-SERVIDOR:3000/dashboard/db/cliente-02

Referências

Grafana.org
Aécio Pires

quinta-feira, 25 de agosto de 2016

Utilização do RackTables

Introdução

No post anterior eu demonstrei como realizar a instalação do RackTables em CentOS 7, nesse eu vou demonstrar algumas das funcionalidades, não tenho a intenção de ser a referencia final e nem de cobrir tudo que o software pode fazer, mas sim, dar um norte inicial.

Diagrama da Rede

Abaixo temos um diagrama básico de uma rede que vamos documentar no RackTables.

Cadastro de VLANs

Na tela inicial clique em 802.1Q, clique na aba Manage domains e cadastre as VLANs.

Cadastro de Redes

Na tela inicial clique em IPv4 space, clique na aba Add e cadastre as redes. Nessa tela podemos associar as redes às VLANs.
Depois de cadastrar todas as redes clique na aba Browse, você verá um resumo de todas as suas redes.

Cadastro de Ativos

Na tela inicial clique em Objects, clique na aba Add more e cadastre os ativos.

Cadastro de Patch Panel

Na tela inicial clique em Objects, clique na aba Add more e cadastre os Patch Panels.

Cadastro de Patch Cables

Na tela inicial clique em Patch Cables, clique na aba Configure heaps e cadastre os Patch Cables.
Depois de cadastrados, você pode clicar na aba Consume/replenish e cadastrar a quantidade de Patch Cords disponível.

Cadastro de Tipos de Objetos

Existe um objeto do tipo Network security, mas eu quero cadastrar um objeto do tipo Firewall. Na tela inicial clique em Configuração, na lista de configurações, clique em Dictionary, na lista de dicionários, clique em ObjectType, clique na aba Edit e cadastre o tipo de objeto.
Volte no Cadastro de Ativos, e o tipo Firewall estará disponível.

Cadastro de Localizações

Na tela inicial clique em Rackspace, clique na aba Manage locations e cadastre as localizações. Observe que cadastrei a localização "Matriz Empresa" sem ser "filha" de ninguém e depois cadastrei as demais localizações como "filhas" de "Matriz Empresa". Portanto se a sua empresa possui várias filiais, ou vários prédios, não será problema documentar a infraestrutura no RackTables.
Clique na aba Manage rows e cadastre as localizações. Essa opção é útil para cadastrar a sala dentro do prédio, o andar, o anexo, etc.

Cadastro de Racks

Na tela inicial clique em Rackspace, na aba Browse clique no nome da Localização (Matriz Empresa), em Child Locations clique no Setor (Compras), em Rows clique na Localização (Sala 22 - 2º Andar), clique na aba Add new rack e cadastre o(s) Rack(s).

Visualizando a estrutura física da sua empresa

Na tela inicial clique em Rackspace. Observe à direita a opção de filtros.

Cadastro de detalhes adicionais dos Ativos

Na tela inicial clique em Objects, e depois em um dos ativos, clique na aba Properties. Podemos observar uma infinidade de detalhes que podem ser cadastrados como marca e modelo, versão do software, informações de garantia, contratos, etc.
 Clique na aba Rackspace e selecione um Rack (Rack TI), a tela muda e você pode escolher à direita a posição exata que o ativo ocupa no rack, pode manter um histórico em Comment, e depois basta salvar clicando no botão save.
Clique na aba Ports, podemos cadastrar uma ou mais portas. Inclusive cadastrar portas em lote.
Observe que antes de cadastrarmos as portas, podemos cadastrar o IP e usar a aba SNMP para detectar automáticamente as portas.
Clique na aba IP, podemos cadastrar um ou mais IPs e o tipo do IP.
E ainda temos uma aba para Log, NAT e Arquivos associados ao ativo.

Conexão dos Ativos com o Patch Panel

Para conectar os ativos no patch panel é preciso alterar a porta do patch panel para um tipo de porta compatível com o ativo.
Após salvar as alterações abra o objeto que você deseja ligar ao patch panel (Router L3) e, na linha da porta que será ligada clique no botão Link this port.
Na janela que vai surgir escolha a porta do patch panel na qual a porta do ativo se conecta, observe que podemos conectar um ativo em outro, cadastre o ID do cabo (opcional), selecione o patch cable que será utilizado e clique em Link.

Cadastro de Ambiente Virtual

Além de tudo que já foi descrito, o RackTables ainda nos permite cadastrar recursos virtuais como Clusters, Hypervisors, Switches Virtuais e Pools de Recursos.

Cadastro de Cluster

Na tela inicial clique em Objects, clique na aba Add more e cadastre o(s) Cluster(s).

Cadastro de  Hypervisor

Na tela inicial clique em Objects, clique na aba Add more e cadastre um ou mais Server(s).
Abra o Server, na aba Properties sete a opção Hypervisor como Yes e salve as alterações.

Associar o Hypervisor ao Cluster

Abra o Server, na aba Properties cliquem em Select a container.
Na janela que vai surgir escolha o container e clique em Proceed.
Você pode aproveitar e cadastrar qual é o Hypervisor na opção SW type.

Cadastro de  Outros Objetos Virtuais

Na tela inicial clique em Objects, clique na aba Add more e cadastre os demais objetos.
O processo de associação dos objetos segue o mesmo padrão descrito acima em Associar o Hypervisor ao Cluster.

Conclusão

O software RackTables é extremamente poderoso e de simples utilização, todo ambiente onde o mesmo for adotado terá ganhos, mas quanto maior e mais complexo o seu ambiente, mais necessário o mesmo se faz.
Como dito no início do  post, eu não pretendo ser a referência absoluta no assunto, mas acredito que colocando em prática o que foi demonstrado aqui, você será capaz de explorar as demais opções da ferramenta.