sexta-feira, 17 de maio de 2013

Criando um Planet

Introdução:
Um planet é um concentrador de artigos relacionados a determinado assunto, no mundo do Software Livre, existem muitos Planets famosos: Planet Apache, Planet Debian, Planet Gnome, Planet KDE e etc.

Como funciona?

Basicamente você configura seu planet para ler os feed rss de determinados sites/blogs, na maioria das vezes essa configuração é feita para pegar apenas o rss de determinadas categorias/tags. Com isso os usuários fazem os posts em seus sites/blogs e automaticamente isso é publicado no planet, a vantagem para os que acessam o planet é que todas as informações estão concentradas em um único lugar.

Configuração nos sites/blogs que irão alimentar o Planet:
A única coisa que o site/blog precisa fazer é habilitar o rss das notícias, porém duas ações são fortemente recomendadas:
  • Utilizar categorias/tags nas postagens;
  • Alterar o feed do rss para mostrar apenas o resumo (sinopse).
Suprindo as dependências de instalação:
A única dependência é a instalação do Python 2.2 (ou superior) no sistema.

Instalação do Planet:
Baixe a última versão estável do pacote no site Planet Planet. Por exemplo, para a versão no momento em que escrevo esse post, usei os comandos:
# cd /var/www/html
# wget http://www.planetplanet.org/download/planet-2.0.zip


Descompacte o pacote e renomeie o diretório:
# unzip planet-2.0.zip
# mv planet-2.0 planetzabbixbrasil


Torne o script executável, acesse o diretório de exemplos, e copie o diretório fancy para o nome que você quer dar ao planet, vou usar como exemplo o zabbix:
# cd planetzabbixbrasil
# chmod 755 planet.py
# cd examples
# cp -rv fancy zabbix


Configurando o planet:
As configurações são bem simples e com exemplos, vou comentar apenas alguns trechos, uma versão traduzida do arquivo pode ser encontrada no Viva o Linux
# cd zabbix/
# vi config.ini
[Planet]
name = Planet Zabbix Brasil
link = http://planet.zabbixbrasil.org
owner_name = Zabbix Brasil
owner_email = zabbixbr@zabbixbrasil.org

cache_directory = examples/cache
new_feed_items = 2
log_level = DEBUG
feed_timeout = 20

template_files = examples/fancy/index.html.tmpl examples/atom.xml.tmpl examples/rss20.xml.tmpl examples/rss10.xml.tmpl examples/opml.xml.tmpl examples/foafroll.xml.tmpl

output_dir = examples/output
items_per_page = 60
date_format = %d de %B de %Y, %H:%M
new_date_format = %d de %B de %Y
encoding = utf-8
locale = pt_BR.UTF-8

days_per_page = 7

activity_threshold = 0

[DEFAULT]
facewidth = 65
faceheight = 85

#Entrada dos blogs:
[http://andredeo.blogspot.com.br/feeds/posts/default/-/Zabbix?alt=rss]
name = André Déo
face = deo.png

O parâmetro face serve para mostrar uma miniatura do logo do blog/site ou rosto do autor, ele é opcional e a imagem deve estar dentro da pasta examples/output/images.

Colocando o endereço dos rss:

Wordpress:
[http://nome-do-blog.wordpress.com/categoria/nome-da-categoria/feed/]
[http://spinola.net.br/blog/?cat=3/zabbix/feed/]
[http://gutocarvalho.net/octopress/categories/zabbix/atom.xml]
[http://www.helviojunior.com.br/category/it/monitoramento/zabbix/feed/]

Blogger:
[http://nome-usuario-blog.blogspot.com/feeds/posts/default/-/nome-da-categoria]
[http://andredeo.blogspot.com.br/feeds/posts/default/-/Zabbix?alt=rss]

Serendipity:
[http://url-principal-blog/index.php?/feeds/categorias/numerocategoria-nomecategoria]
[http://www.jacksonheraldtoday.com/index.php?/feeds/categories/9-Education-Stories]
[https://www.globalways.net/blog/index.php?/feeds/categories/2-Linux]

Populando o planet com as informações dos blogs:
# cd /var/www/html/planetzabbix
# ./planet.py examples/zabbix/config.ini


Configure o apache para apontar para o diretório:
/var/www/html/planetzabbix/examples/output/

Automatizando o processo de coleta dos dados:
# crontab -e
# Roda a atualização do Planet Zabbix Brasil a cada 10 minutos
*/10    *       *       *       *       /var/www/html/planetzabbix/planet.py /var/www/html/planetzabbix/examples/zabbix/config.ini

Referências:
http://teachingopensource.org/index.php/Planet_Feed_List
https://library.linode.com/web-applications/social-networking/planet/ubuntu-12.04-precise-pangolin
https://github.com/GNOME/planet-web/blob/master/config/gnome-br/config.ini

terça-feira, 7 de maio de 2013

Utilizando o Yum para instalar módulos Perl

Introdução:
Para quem utiliza os descendentes do Red Hat, o yum é velho conhecido, mas para instalar módulos perl eu sempre utilizei o CPAN, achava isso o máximo, até que descobri que posso usar o próprio yum para fazer esse trabalho.

Instalando módulos perl da maneira clássica:
# perl -MCPAN -e shell

cpan> install IO::Socket::SSL
cpan> install Net::SSLeay

Instalando módulos perl via yum:
# yum install 'perl(IO::Socket::SSL)'
# yum install 'perl(Net::SSLeay)'

Como disse o autor do texto original "Agora me sinto como se eu tivesse vivido na idade das trevas".

Referência:
Installing Perl Packages on CentOS - The magic of YUM

Zabbix e passagem de parâmetros

Introdução:
O objetivo deste tutorial é demostrar que através de um único script podemos ter coletas diversas, dinâmicas e sem a necessidade de alteração do script original e reinicialização de serviços (zabbix_agentd e/ou zabbix_proxy).

Entendendo a passagem de parâmetros:
Primeiro uma pequena aula de Shell Script para demonstrar o uso de parâmetros.

Nossos scripts aceitam um numero "ilimitado" de paramentros, basta executar o $*, para comprovarmos esse detalhe:
# cd /usr/local/etc/

# vi zabbix_parametros.sh
#!/bin/bash

echo $*


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20

Na execução acima foram passados 20 parametros e foram exibidos os 20 parametros.

Neste segundo exemplo, demonstro que podemos referenciar apenas 9 parametros por vez:
# vi zabbix_parametros.sh
#!/bin/bash

echo $1 $2 $3 $4 $5 $6 $7 $8 $9
echo $10


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09
010


Na execução acima ao passar o parametro $10, ele reconheceu $1 seguido de 0, por isso o resultado foi 010, que é o primeiro parâmetro (01), seguido de 0, ou seja 010.

Mas usando o shift para eliminar um número X de parâmetros da memória podemos referenciar todos.
# vi zabbix_parametros.sh
#!/bin/bash

echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 9
echo $1 $2 $3 $4 $5 $6 $7 $8 $9
shift 9
echo $1 $2


# ./zabbix_parametros.sh 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20
01 02 03 04 05 06 07 08 09
10 11 12 13 14 15 16 17 18
19 20

Como pode ser observado na execução acima, exibi os 9 primeiros parâmetros, eliminei os 9 primeiros parametros da memória (shift 9), exibi os nove primeiros parametros dos que restam na memória, eliminei os 9 primeiros parametros da memoria (shift 9) e exibi os dois primeiros parametros que restam na memória.

Script versão final:
Após essa pequena "aula" de Shell e compreendido como trabalhar com parametros, vamos entender o quanto essa abordagem pode ser produtiva no Zabbix. Vamos a versão final do nosso script:
# vi zabbix_parametros.sh

#!/bin/bash

case $1 in

quant_arq)cd $2
ls -la | grep ^- | wc -l;;

tam_dir)cd $2
du -khs | tr "\t" " " | cut -d" " -f1;;

tam_arq)ls -lh $2 | cut -d " " -f5;;

esac


Primeiramente vamos testar a execução das opções do script:
# ./zabbix_parametros.sh quant_arq /etc
137

# ./zabbix_parametros.sh quant_arq /var/log
51

# ./zabbix_parametros.sh tam_dir /var
24G

# ./zabbix_parametros.sh tam_dir /etc
30M
# ./zabbix_parametros.sh tam_arq /etc/passwd
1.9K

# ./zabbix_parametros.sh tam_arq /var/log/messages
2.0K

Alguns detalhes importantes que temos que observar:
Possuo um único script com 3 funções (quant_arq, tam_dir e tam_arq), mas poderiam ser inumeras funções, de acordo com a necessidade.
Como podemos observar nas funções, graças a passagem de parametros, elas se tornam dinâmicas, podendo retornar a quantidade de arquivos, tamanho de diretório e o tamanho de arquivo, de qualquer arquivo/diretório que nos interesse.

Colocando o Script no Zabbix:
O primeiro passo é alterar o proprietário e grupo do script:
#chown zabbix:zabbix /usr/local/etc/zabbix_parametros.sh

Para utilizar o script no Zabbix, vamos utilizar o UserParamenter:
# cat /usr/local/etc/zabbix_agentd.conf
UserParameter=parametros[*],/usr/local/etc/zabbix_parametros.sh $1 $2 $3 $4 $5 $6 $7 $8 $9

Reinicie o serviço do agente:
# service zabbix_agentd restart
Shutting down zabbix agent:               [  OK  ]
Starting zabbix agent:
                    [  OK  ]

Testando a leitura das informações:
# zabbix_get -s IP -k parametros[quant_arq,/etc]
137

# zabbix_get -s IP -k parametros[quant_arq,/var/log]
51

# zabbix_get -s IP -k parametros[tam_dir,/var]
24G

# zabbix_get -s IP -k parametros[tam_dir,/etc]
20M

# zabbix_get -s IP -k parametros[tam_arq,/etc/passwd]
1.9K

# zabbix_get -s IP -k parametros[tam_arq,/var/log/messages]
2.0K

Conclusão:
Além da vantagem óbvia que é o fato do script se tornar dinâmico,  a outra vantagem, como dito no início, é que eu preciso criar o UserParameter uma única vez, pois o nome do script não muda, apenas o seu conteúdo, logo não preciso reiniciar o agente ou o proxy toda vez que alterar o script.

Basta criar os itens no Zabbix utilizando como chave o que foi passado no comando zabbix_get na opção -k (de Key - Chave em inglês).

Para saber mais:
Passagem de parâmetros em Shell Script;
Case em Shell Script;
UserParameter.