image1 image2 image3 image4 image5 image6 image7 image8 image9 image10

Munin - o corvo de Odin da monitoração

Já tinha feito referência anteriormente sobre o sistema de monitoração MUNIN principalmente quando escrevi sobre o ataque DDoS que sofri, mostrando os gráficos gerados por ele, mas até agora não tinha escrito nada sobre o mesmo.  Então é hora de tentar me redimir sobre isso.

Descobri o MUNIN por acaso.  Eu não sou muito fã de sistemas de monitoração pois toda vez que ouço a palavra "monitoração" já penso logo em Nagios ou algo do gênero, que tem um belo apelo visual e poder de monitoração, mas que é complicado para configurar e colocar em produção pela primeira vez, com arquivos de configuração baseados em um XML ou algo próximo disso.  Sem falar no consumo de CPU.  Eu buscava algum sistema de monitoração de mail enviados pelo mailman, para apenas visualizar a quantidade de mensagens enviadas numa lista de mail que participo e ajudo a administrar.

Buscando algum sistema que apenas apresentasse os dados de uso do mailman em forma fácil como um CSV, para importar em algum outro sistema como MRTG ou RDDTool, encontrei um link na lista de desenvolvimento desse sobre o MUNIN.  Primeiramente olhei um screenshot do mesmo e fiquei surpreso pelo belo gráfico gerado, mas não achei que o mesmo criava tudo sozinho e auto-magicamente.

A página do projeto diz que o nome Munin vem das lendas nórdicas: Munin e Hugin são os corvos que ficam nos ombros de Odin (pai de Thor) e vão de tempos em tempos à Midgard, o nosso mundo, para visualizar e lembrar de fatos, e depois reportar os mesmos à Odin.  Segundo a página do projeto o nome Munin também significa memória, , provavelmente em línguas nórdicas (leia-se vikings).

Depois que instalei, facilmente já que o mesmo existe nos repositórios Debian como munin e munin-plugins-extra, o sistema ficou praticamente pronto.  Bastou adicionar uma entrada de "/munin" no alias do Apache para utilizar o sistema, que roda via crontab, e permissão de leitura onde os gráficos são gerados, "/var/cache/munin/www" no Debian.

Alias /munin /var/cache/munin/www
<directory var="" cache="" munin="" www="">
        Order allow,deny
        Allow from all
        Options None

        # AuthUserFile /etc/munin/munin-htpasswd
        # AuthName "Munin"
        # AuthType Basic
        # require valid-user
</directory>

No caso eu deixei o sistema aberto, sem pedir senha de acesso, já que isso dificilmente traria alguma informação sigilosa ou importante para um atacante, ou algo do gênero.  Isso para mim.  

O sistema é feito em Perl, o que o torna muito fácil de ler e de alterar se necessário, algo que não precisei fazer.  Os arquivos de configuração ficam em "/etc/munin" e seus plugins, que são os scripts que monitoram diversas partes do sistemas, ficam em "/etc/munin/plugins".  Em geral basta fazer um link simbólico dos plugins desejados para ter os mesmos funcionando de imediato:

[helio@server /etc/munin/plugins]> ls -l
total 0
lrwxrwxrwx 1 root root 40 Jun 15  2011 apache_accesses -> /usr/share/munin/plugins/apache_accesses
lrwxrwxrwx 1 root root 41 Jun 15  2011 apache_processes -> /usr/share/munin/plugins/apache_processes
lrwxrwxrwx 1 root root 38 Jun 15  2011 apache_volume -> /usr/share/munin/plugins/apache_volume
lrwxrwxrwx 1 root root 28 Jul  3  2011 apt -> /usr/share/munin/plugins/apt
lrwxrwxrwx 1 root root 32 Jul  3  2011 apt_all -> /usr/share/munin/plugins/apt_all
lrwxrwxrwx 1 root root 28 Jun 15  2011 cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27 Jun 15  2011 df -> /usr/share/munin/plugins/df
lrwxrwxrwx 1 root root 33 Jun 15  2011 df_inode -> /usr/share/munin/plugins/df_inode
lrwxrwxrwx 1 root root 34 Jun 15  2011 diskstats -> /usr/share/munin/plugins/diskstats
lrwxrwxrwx 1 root root 32 Jun 15  2011 entropy -> /usr/share/munin/plugins/entropy
lrwxrwxrwx 1 root root 30 Jun 15  2011 forks -> /usr/share/munin/plugins/forks
lrwxrwxrwx 1 root root 37 Jun 15  2011 fw_conntrack -> /usr/share/munin/plugins/fw_conntrack
lrwxrwxrwx 1 root root 43 Jun 15  2011 fw_forwarded_local -> /usr/share/munin/plugins/fw_forwarded_local
lrwxrwxrwx 1 root root 35 Jun 15  2011 fw_packets -> /usr/share/munin/plugins/fw_packets
lrwxrwxrwx 1 root root 38 Jun 15  2011 http_loadtime -> /usr/share/munin/plugins/http_loadtime
lrwxrwxrwx 1 root root 32 Jun 15  2011 if_err_eth0 -> /usr/share/munin/plugins/if_err_
lrwxrwxrwx 1 root root 28 Jun 15  2011 if_eth0 -> /usr/share/munin/plugins/if_
lrwxrwxrwx 1 root root 35 Jun 15  2011 interrupts -> /usr/share/munin/plugins/interrupts
lrwxrwxrwx 1 root root 31 Jun 15  2011 iostat -> /usr/share/munin/plugins/iostat
lrwxrwxrwx 1 root root 35 Jun 15  2011 iostat_ios -> /usr/share/munin/plugins/iostat_ios
lrwxrwxrwx 1 root root 33 Jun 15  2011 irqstats -> /usr/share/munin/plugins/irqstats
lrwxrwxrwx 1 root root 29 Jun 15  2011 load -> /usr/share/munin/plugins/load
lrwxrwxrwx 1 root root 32 Jun 15  2011 mailman -> /usr/share/munin/plugins/mailman
lrwxrwxrwx 1 root root 31 Jun 15  2011 memory -> /usr/share/munin/plugins/memory
lrwxrwxrwx 1 root root 36 Jun 15  2011 munin_stats -> /usr/share/munin/plugins/munin_stats
lrwxrwxrwx 1 root root 31 Jun 15  2011 mysql_ -> /usr/share/munin/plugins/mysql_
lrwxrwxrwx 1 root root 36 Jun 15  2011 mysql_bytes -> /usr/share/munin/plugins/mysql_bytes
lrwxrwxrwx 1 root root 38 Jun 15  2011 mysql_queries -> /usr/share/munin/plugins/mysql_queries
lrwxrwxrwx 1 root root 42 Jun 15  2011 mysql_slowqueries -> /usr/share/munin/plugins/mysql_slowqueries
lrwxrwxrwx 1 root root 38 Jun 15  2011 mysql_threads -> /usr/share/munin/plugins/mysql_threads
lrwxrwxrwx 1 root root 30 Jun 15  2011 named -> /usr/share/munin/plugins/named
lrwxrwxrwx 1 root root 39 Jun 20  2011 ntp_kernel_err -> /usr/share/munin/plugins/ntp_kernel_err
lrwxrwxrwx 1 root root 44 Jun 20  2011 ntp_kernel_pll_freq -> /usr/share/munin/plugins/ntp_kernel_pll_freq
lrwxrwxrwx 1 root root 43 Jun 20  2011 ntp_kernel_pll_off -> /usr/share/munin/plugins/ntp_kernel_pll_off
lrwxrwxrwx 1 root root 29 Jun 20  2011 ntp_localhost -> /usr/share/munin/plugins/ntp_
lrwxrwxrwx 1 root root 35 Jun 20  2011 ntp_offset -> /usr/share/munin/plugins/ntp_offset
lrwxrwxrwx 1 root root 35 Jun 20  2011 ntp_states -> /usr/share/munin/plugins/ntp_states
lrwxrwxrwx 1 root root 35 Jun 15  2011 open_files -> /usr/share/munin/plugins/open_files
lrwxrwxrwx 1 root root 36 Jun 15  2011 open_inodes -> /usr/share/munin/plugins/open_inodes
lrwxrwxrwx 1 root root 34 Jul  3  2011 pop_stats -> /usr/share/munin/plugins/pop_stats
lrwxrwxrwx 1 root root 42 Jun 15  2011 postfix_mailqueue -> /usr/share/munin/plugins/postfix_mailqueue
lrwxrwxrwx 1 root root 43 Jun 15  2011 postfix_mailvolume -> /usr/share/munin/plugins/postfix_mailvolume
lrwxrwxrwx 1 root root 42 Jun 16  2011 postgres_bgwriter -> /usr/share/munin/plugins/postgres_bgwriter
lrwxrwxrwx 1 root root 40 Jun 16  2011 postgres_cache_ALL -> /usr/share/munin/plugins/postgres_cache_
lrwxrwxrwx 1 root root 45 Jun 16  2011 postgres_checkpoints -> /usr/share/munin/plugins/postgres_checkpoints
lrwxrwxrwx 1 root root 48 Jun 16  2011 postgres_connections_db -> /usr/share/munin/plugins/postgres_connections_db
lrwxrwxrwx 1 root root 39 Jun 16  2011 postgres_users -> /usr/share/munin/plugins/postgres_users
lrwxrwxrwx 1 root root 38 Jun 16  2011 postgres_xlog -> /usr/share/munin/plugins/postgres_xlog
lrwxrwxrwx 1 root root 34 Jun 15  2011 processes -> /usr/share/munin/plugins/processes
lrwxrwxrwx 1 root root 33 Jun 15  2011 proc_pri -> /usr/share/munin/plugins/proc_pri
lrwxrwxrwx 1 root root 29 Jun 15  2011 swap -> /usr/share/munin/plugins/swap
lrwxrwxrwx 1 root root 28 Jun 16  2011 tcp -> /usr/share/munin/plugins/tcp
lrwxrwxrwx 1 root root 32 Jun 15  2011 threads -> /usr/share/munin/plugins/threads
lrwxrwxrwx 1 root root 31 Jun 15  2011 uptime -> /usr/share/munin/plugins/uptime
lrwxrwxrwx 1 root root 30 Jun 15  2011 users -> /usr/share/munin/plugins/users
lrwxrwxrwx 1 root root 31 Jun 15  2011 vmstat -> /usr/share/munin/plugins/vmstat

Nenhum dos plugins precisa ser editado.  Em geral basta apenas criar o link simbólico (ou mesmo copiar) o plugin e, em alguns casos, apenas renomear o arquivo para identificar o dispositivo monitorado.  Por exemplo a linha que mostra "if_eth0 -> /usr/share/munin/plugins/if_".  É possível ver que é monitorada qualquer interface de rede (if_).  Para designar qual se deseja monitorar, basta fazer o link para "if_eth0" ou qualquer outra que se deseja.  Mais de uma interface?  Basta somente criar links simbólicos com os nomes respectivos das interfaces como if_wlan0, if_eth0, if_eth1 e assim por diante.

Após copiar (ou linkar) o plugin desejado para dentro do diretório de plugins, basta reiniciar o serviço /etc/init.d/munin-node.  Em questão de minutos os gráficos começarão a ser criados.

Eu não experimentei, mas o MUNIN suporta uma arquitetura cliente-servidor.  Ou seja, pode-se criar um servidor somente para mostrar os dados via web, e instalar plugins como clientes em outras máquinas, enviando apenas os dados.  É interessante para uma rede pequena.  Em redes maiores, Nagios com certeza.

Abaixo alguns gráficos caputurados pelo sistema que monitoro:

A versatilidade de monitoração é muito grande.  Até mesmo um disco defeituoso eu encontrei com ajuda do MUNIN, já que pude ver que as interrupções do mesmo estavam muito acima que do restante do sistema.

Esse gráficos são os mostrados na página principal do MUNIN.  Clicando em qualquer um deles, tem-se acesso aos dados diário, semanal, mensal e anual.

Os dados são armazenados em format RRD, do RRDTool, então provavelmente é portável.  Mas eu sinceramente não sei se isso é tão necessário já que a maior força do sistema é a simplicidade.

E por conta dessa simplicidade que instalei o MUNIN em vários desktops, inclusive até mesmo em meu notebook.  Nada mais fácil que visualizar o uso de CPU e memória junto com os tráfego de rede de seus computadores que não são servidores.


2017  helio.loureiro.eng.br   globbersthemes joomla templates