Quero trabalhar com Linux!


Olá,

Nesse post vou dar algumas dicas para quem pretende ingressar em uma carreira como Administrador de Sistemas Linux (Linux Sysadmin).

1. Refletir.

Primeiramente eu gostaria que você refletisse o por que você pretende entrar no mercado de Linux, por exemplo:

  1. Porque Linux da muito dinheiro
  2. Porque vejo boas oportunidades em Linux
  3. Porque gosto de Linux
  4. Porque estou insatisfeito com meu trabalho

Bem, claramente os pontos do porque trabalhar com Linux, estão bem limitados, até porque não caberiam todos os motivos possíveis, mas dos listados acima, claramente o que eu vejo que se adequaria ao perfil é o 2 e principalmente o 3, pois enxergam o Linux não apenas como cédulas de dinheiro ($$$), mas sim por enxergar o Linux como oportunidade de oferecer serviço de qualidade e por apreciar o sistema operacional, o que motiva ainda mais o profissional a se desenvolver mais do que aqueles que não tem o mínimo interesse pelo lado técnico.

Sim, gostar de Linux para trabalhar com o mesmo é F-U-N-D-A-M-E-N-T-A-L.

2. “Mas Elvis, eu odeio linha de comando”

Então desculpe, você não tem possibilidade N-E-N-H-U-M-A de trabalhar com Linux e qualquer outro sistema Unix, e não, eu não estou sendo agressivo e nem maldoso, estou sendo S-I-N-C-E-RO de todo meu coração. Você que pretende trabalhar com Linux tem que ter ciência de quê:

  • Linux não é fácil!
  • Linha de comando não é fácil
  • Necessário aprender diversos conceitos que eram mascarados para você no antigo sistema operacional (Principalmente Microsoft Windows).
  • Não pode odiar programação, pois Shell e scripts seguem lógicas iguais as usadas em algoritmos.

Tendo ciência de que esses fatores listados acima são essenciais você vai precisar mais do que sorte, mas sim o principal: FORÇA DE VONTADE!

3. Como aprender Linux?

Existem enormes possibilidades de conhecer mais o Linux, como:

  1. Instalando ele.
  2. Fazendo cursos.
  3. Lendo artigos de internet.
  4. Lendo livros e/ou e-books.
  5. etc.

O aprendizado em Linux é baseado em prática, exercer a função de administrador Linux não é apenas digitar comandos, mas sim saber analisar logs e identificar incidentes para poder diagnosticar o problema e propor soluções.

E para chegar no ponto de propor uma solução para um problema precisa pensar fora da caixa, ir além do feijão com arroz, saber implementar um servidor web não é difícil, o difícil é gerir, identificar problemas, e propor as soluções para esses problemas é o que faz do seu trabalho ser visto com qualidade.

Uma vez um professor meu da época da faculdade disse:

“Decorar comandos e digita-los qualquer um tem capacidade para isso. Um profissional Linux usa 90% do tempo seu cérebro ao invés do teclado.

Prof. Francisco Pinto – UNINOVE

4. O que você recomenda?

Eu recomendo inicialmente:

  • Procurar leituras sobre o assunto
  • Instalar o Linux em uma máquina virtual, como VirtualBox ou VMware, para poder ter contato com ele.
  • Aprender instalar e configurar alguns serviços, como Apache ou PostgreSQL, por exemplo.
  • Entender os conceitos fundamentais de administração de sistema e redes.

E conforme for evoluindo com seus aprendizados, procure ser mais ousado, tentando aprender novos serviços com maior complexidade testando sua força de vontade e capacidade atual.

5. Mas eu já sei Linux, agora quero arrumar um emprego!

Minhas dicas são:

  1. Arrisque, não fique acomodado no seu emprego, caso ele não lhe seja mais proporcional a sua vontade de crescer.
  2. Não seja tolo de achar que vai ganhar 5 mil reais ou mais com um salário como Júnior.
  3. Ninguém entra no primeiro emprego como Administrador de Sistemas Sênior.
  4. Faça um currículo coerente com suas experiências e evidencie a sua vontade em ingressar no mercado de Linux/Unix.
  5. Tente formular seus conhecimentos no currículo de forma coerente, por exemplo:
  • Conhecimentos em ambiente de servidores Linux e seus serviços:
  • Apache servindo a função de servidor web ou como balanceamento de carga para aplicações críticas
  • Conhecimento em Bacula para a execução de rotinas de Backup diários e semanais, seguindo as boas práticas de TI.

E não:

  • Conhecimento em: Linux, Apache, Nginx, Varnish, Bacula,PostgreSQL, Zabbix, Nagios,Samba,Squid,Postfix,Zimbra,etc.

6. Participe da comunidade Linux

Quanto mais você participa da comunidade, maior o seu networking e maior você é destacado dentre os profissionais que participam ativamente da comunidade.

Troque experiências, divulgue suas experiências não apenas como descrição breve,, mas sim tecnicamente para ajudar outros colegas de área, que apesar de serem concorrentes, são parceiros da comunidade e o espírito de compartilhar conhecimento é não só bem visto na comunidade FOSS (Free and Open Source Solutions) como profissionalmente, o mercado de trabalho da MUITO valor para isso.

7. Faça networking

Tenha em mente que ter networking não significa puxar saco de ninguém, mas sim formar parcerias profissionais para que possam te indiciar ou mesmo te orientar melhor através de feedbacks para que você evolua como profissional e se destacar dentro do meio profissional a qual você busca, e isso não se restringe apenas a Linux.

8. Existe servidores Linux na minha empresa, mas meu chefe disse que não posso mexer…

Mostre para seus superiores que você pretende migrar para o ambiente Unix/Linux, mostre para eles não apenas o interesse mas que você tem capacidade de gerir um ambiente Linux de forma que eles possam sentir confiança. Até porque um bom profissional não é apenas aquele que sabe digitar comandos no console, mas sim aquele que sabe diagnosticar, suportar e implantar ambientes, propor solução e etc. Além disso, questões como comunicação e seguir políticas internas da TI servem igualmente para Linux assim como qualquer outro meio, seguir boas práticas também é um fator essencial, ser nerd é algo que faz se destacar muito na comunidade Linux, mas INFELIZMENTE não é bem visto nas empresas, então você tem que saber dosar sua nerdice, seja nerd, mas seja também profissional, com postura e entenda como se comportar, com essas dicas já é o suficiente para você ao menos passar a ajudar a suportar ou mesmo identificar incidentes nos poucos servidores Linux que tem dentro da sua empresa, pois as vezes sua oportunidade não esta no mercado mas sim dentro da mesma empresa a qual você se encontra hoje.

9. Quero apenas uma chance…

É o que todos queremos, meu conselho é:

  • Busque por uma vaga de Júnior e se dedica a empresa, pois seu crescimento vai ser valioso para sua carreira.
  • Não ligue para o salário, caso você não tenha filhos e/ou dívidas grandes. Pois sua capacidade profissional vai fazer automaticamente com que seu salário cresça gradativamente até chegar ao que você busca.
  • Muitas empresas no mercado buscam profissionais “crus”, sem vícios e não muito capacitados tecnicamente pois são caros e formam profissionais com esse perfil de pouca experiência, talvez essa seja a chave para você entrar no mercado de Linux.

Conclusão.

Eu sei como é isso, quando eu quis entrar na área também foi muito complicado, sofri muito preconceito por não ter o conhecimento de um sênior e também porque não tinha a vasta bagagem que o mercado buscava, fui muito subestimado pelo mercado, recebi muitos “NÃO’s”, mas não deixei que essas respostas fizessem com que eu desisti-se.

Se eu fui capaz, você também é, não desista por mais difícil que seja a primeira oportunidade e quando a encontrar agarre com unhas e dentes, pois se é Linux que você quer seguir como carreira, encare isso como a chance da sua vida, porque se você ama a tecnologia com que trabalha e faz com qualidade, é natural que você se destaque no mercado de trabalho.

Monitorando com Nagios: Instalação dos agentes, fácil e prático!

Olá pessoal,

No capítulo anterior abordamos a instalação do servidor Nagios Core, caso você não viu, recomendo a leitura.

1. Introdução

No post anterior eu publiquei a instalação do servidor, porém só o servidor não adianta muito, afinal como iremos monitorar? Temos o servidor, mas não temos uma ideia de como monitorar os nossos ativos. Agora precisamos aprender a monitorar com o Nagios. Nesse post pretendo explicar o monitoramento de servidores Linux: RHEL e Debian.
Talvez num futuro não muito distante podemos abordar sobre o monitoramento através de ativos com suporte a SNMP, entretanto iremos monitorar através do NRPE, que é o agente do Nagios.

2. Cenário

Se você seguiu o post anterior, provavelmente seu Nagios já esta funcionando bonitinho, no entanto precisamos de um novo servidor, esse novo servidor será o host a qual iremos monitorar, podendo ser: RHEL ou Debian.

3. Instalando o NRPE (Agente)

Vamos instalar inicialmente os agentes NRPE, para prosseguir com as configurações.

No Red Hat/CentOS, é necessário a instalação do repositório EPEL, pois o repositório nativo não tem disponível os pacotes do nagios. Lembram-se?


No Red Hat, execute:

CentOS/RHEL 6, 32 Bit:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
 
CentOS/RHEL 6, 64 Bit:
rpm -Uvh http://download.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
 
CentOS/RHEL 5, 32 Bit:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
 
CentOS/RHEL 5, 64 Bit:
# rpm -Uvh http://dl.fedoraproject.org/pub/epel/5/x86_64/epel-releas5-4.noarch.rpm

Após a instalação do repositório, basta iniciar a instalação do Nagios Core.


No Red Hat, execute somente no cliente:

# yum install nrpe nagios-plugins
# chkconfig nrpe on


No Debian, execute somente no cliente:

# apt-get install nagios-nrpe-server nagios-plugins

3. Configurando o NRPE (Agente)

Edite o arquivo nrpe.conf:


No Red Hat, execute somente no cliente:

# vim /etc/nagios/nrpe.cfg
(...)
# Endereço IP do seu Nagios Core (Server)
allowed_hosts=10.100.0.111
(...)
# Descomente as linhas abaixo
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
# Altere de hda1 para sda1
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200


No Debian, execute somente no cliente:

# vim /etc/nagios/nrpe.cfg
(...)
# Endereço IP do seu Nagios Core (Server)
allowed_hosts=10.100.0.111
(...)
# Descomente as linhas abaixo
command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
# Altere de hda1 para sda1
command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

  • allowed_hosts: Este parâmetro informa quais hosts tem permissão para executar os plugins que determinamos.
  • command[comando]: Este comando cria um “comando” que será usado chamando os plugins/scripts que trazem as coletas de dados para o Nagios.

Realizada as alterações, reinicie o serviço NRPE.


No Red Hat, execute somente no cliente:

# service nrpe restart


No Debian, execute somente no cliente:

# nagios-nrpe-server restart

4. Instalando o NRPE no Nagios Core (Servidor)

Agora precisamos instalar o NRPE no servidor Nagios, o NRPE deve ser instalado nas duas pontas. Instalamos no capítulo anterior no cliente, host a qual será monitorado, e neste iremos abordar a instalação no Nagios Core (Servidor de monitoramento).


No Red Hat, execute somente no Nagios Core (server):

# yum install nrpe


No Debian, execute somente no Nagios Core (server):

# apt-get install nagios-nrpe-server

Agora precisamos testar nossa configuração, já que o NRPE já esta instalado nas duas pontas e liberado o IP do servidor Nagios no cliente, o host que será monitorado, basta executar:


No Red Hat, execute somente no Nagios Core (server):

# /usr/lib<64>/nagios/plugins/check_nrpe -H IPDOSERVIDORQUESERAMONITORADO
NRPE v2.15


No Debian, execute somente no Nagios Core (server):

# /usr/lib/nagios/plugins/check_nrpe -H IPDOSERVIDORQUESERAMONITORADO
NRPE v2.13

5. Configurando o Nagios Core

Este procedimento deve ser executado no Nagios Core, no servidor de monitoramento, e não no host a qual será monitorado. É importante se atentar a esta questão, ok?


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/nagios.cfg
(...)
#cfg_file=/etc/nagios/objects/commands.cfg
#cfg_file=/etc/nagios/objects/contacts.cfg
#cfg_file=/etc/nagios/objects/timeperiods.cfg
#cfg_file=/etc/nagios/objects/templates.cfg
#cfg_file=/etc/nagios/objects/localhost.cfg
#cfg_file=/etc/nagios/objects/windows.cfg
#cfg_file=/etc/nagios/objects/switch.cfg
#cfg_file=/etc/nagios/objects/printer.cfg
cfg_dir=/etc/nagios/objects
cfg_dir=/etc/nagios/servers
#cfg_dir=/etc/nagios/printers
#cfg_dir=/etc/nagios/switches
#cfg_dir=/etc/nagios/routers
cfg_dir=/etc/nagios/conf.
(...)
:x!
# service nagios restart


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/nagios.cfg
(...)
#cfg_file=/etc/nagios3/objects/commands.cfg
#cfg_file=/etc/nagios3/objects/contacts.cfg
#cfg_file=/etc/nagios3/objects/timeperiods.cfg
#cfg_file=/etc/nagios3/objects/templates.cfg
#cfg_file=/etc/nagios3/objects/windows.cfg
#cfg_file=/etc/nagios3/objects/switch.cfg
#cfg_file=/etc/nagios3/objects/printer.cfg
cfg_dir=/etc/nagios3/servers
cfg_dir=/etc/nagios3/objects
#cfg_dir=/etc/nagios3/printers
#cfg_dir=/etc/nagios3/switches
#cfg_dir=/etc/nagios3/routers
(...)
# mkdir /etc/nagios3/servers
# service nagios3 restart

6. Criando o grupo de hosts

Agora precisamos criar o arquivo host_groups.cfg, a qual contém os membros que vão pertencer a esse grupo. No caso, o nosso servidor que será monitorado em nosso laboratório:


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/host_groups.cfg
define hostgroup{
        hostgroup_name  laboratorio ; Nome do grupo de hosts.
        alias           Laboratorio Linux SysAdmin ; Apelido do grupo de hosts.
        members         srvlab01     ; O nome do membro do grupo que estamos criando.
        # members         srvlab01,srvlab02,srvlab03,... caso pretenda futuramente adicionar novos servidores no grupo.
        }
:x!


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/host_groups.cfg
define hostgroup{
        hostgroup_name  laboratorio ; Nome do grupo de hosts.
        alias           Laboratorio Linux SysAdmin ; Apelido do grupo de hosts.
        members         srvlab01     ; O nome do membro do grupo que estamos criando.
        # members         srvlab01,srvlab02,srvlab03,... caso pretenda futuramente adicionar novos servidores no grupo.
        }
:x!

7. Criando um template para o nosso host e para nossos serviços.

7.1 Criando o host template.

Agora precisamos criar um modelo de Host, que servira de exemplo para uso no host que iremos monitorar e em futuros servidores que queiram utilizar. Esses templates no Nagios funcionam basicamente para definir questões básicas sobre o monitoramento desse ativo, por exemplo:

  • Habilitar notificação
  • Retenção de dados
  • Período de notificação
  • Opções de notificações
  • Entre outros detalhes


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/templates.cfg
define host{
        name                            lab-template    ; Nome do nosso template de Hosts
        notifications_enabled           1       ; Habilitar/desabilitar Notificações
        flap_detection_enabled          1
                check_command                   check-host-alive ; Comando que será utilizado para checar a disponibilidade do ativo.
                max_check_attempts              3 ; Número de tentativas antes de o Nagios notificar.
                notification_interval           0 ; Desabilita o intervalo de notificação, ou seja, será notificado apenas uma vez, ao inves de ficar re-enviando.
                notification_period             24x7x365 ; Período de notificação.
                notification_options            d,u,r ; Os tipos de notificação que será enviados: d = Down (indisponível), r = Recovery (Disponível, ou seja status OK) e por ultimo u = Unknown (Desconhecido, ou seja, o status não é reconhecido como falha e nem estabilidade)
                contact_groups                  nagios-linuxsysadmin ; Qual grupo de contatos será notificado.
        register
        }
:x!


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/templates.cfg
define host{
        name                            lab-template    ; Nome do nosso template de Hosts
        notifications_enabled           1       ; Habilitar/desabilitar Notificações
        flap_detection_enabled          1
                check_command                   check-host-alive ; Comando que será utilizado para checar a disponibilidade do ativo.
                max_check_attempts              3 ; Número de tentativas antes de o Nagios notificar.
                notification_interval           0 ; Desabilita o intervalo de notificação, ou seja, será notificado apenas uma vez, ao inves de ficar re-enviando.
                notification_period             24x7x365 ; Período de notificação.
                notification_options            d,u,r ; Os tipos de notificação que serão enviados: d = Down (indisponível), r = Recovery (Disponível, ou seja status OK) e por ultimo u = Unknown (Desconhecido, ou seja, o status não é reconhecido como falha e nem estabilidade)
                contact_groups                  nagios-linuxsysadmin ; Qual grupo de contatos será notificado.
        register
        }
:x!

7.2 Criando o service template.

Agora precisamos criar um modelo de serviço, pois o nagios segmenta o que é um ativo e o que é um item, ou seja:

  • Monitorar espaço em disco
  • Monitorar memória
  • Monitorar processos ativos
  • Monitorar tráfego de rede
  • Monitorar portas de rede: 80 (HTTP), 22 (SSH), 21 (FTP), etc.

Esses itens são serviços para o Nagios, por isso o host e serviços são tratados de formas distintas.
Bem, agora que vocês entenderam o que é um serviço, vamos criar o nosso modelo de serviço.


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/templates.cfg
(...)
define service{
        name                            service-lablinuxsysadmin ; O nome do template de serviço
        active_checks_enabled           1       ; Habilitar/desabilitar checagens ativas.
        passive_checks_enabled          1       ; Habilitar/desabilitar checagens passivas.
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Habilitar/desabilitar notificação de indisponibilidade de serviço
        event_handler_enabled           1       ; Habilitar/desabilitar notificação de manipulador de eventos.
        flap_detection_enabled          1       ; Habilitar/desabilitar detecção de falsos-positivos
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
                notification_interval           0  ; Desabilita o intervalo de notificação, ou seja, será notificado apenas uma vez, ao inves de ficar re-enviando.
                check_period                    24x7x365 ; Período de checagem dos itens (serviços)
                normal_check_interval           5       ; Intervalo de checagem é de 5 minutos. (Se o parâmetro interval_length, estiver setado como 60 segundos, conforme no modelo a seguir: 60 * 5 = 300 [5 minutos] )
                retry_check_interval            1       ;  Minutos a aguardar antes de agendar uma nova verificação quando o serviço foi alterado para qualquer estado que não seja OK.
                max_check_attempts              4       ; Número de tentativas antes de o Nagios notificar.
                notification_period             24x7x365 ; Período de notificação
                notification_options            w,u,c,r ; Todas as opção de notificações, conforme o resultado de status d
e um serviço, UP, Down, etc.
                contact_groups                  nagios-linuxsysadmin ; O Grupo que sera acionado (Notificado) pelo Nagios.
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }
(...)
:x!
# service nagios restart


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/templates.cfg
(...)
define service{
        name                            service-lablinuxsysadmin ; O nome do template de serviço
        active_checks_enabled           1       ; Habilitar/desabilitar checagens ativas.
        passive_checks_enabled          1       ; Habilitar/desabilitar checagens passivas.
        obsess_over_service             1       ; We should obsess over this service (if necessary)
        check_freshness                 0       ; Default is to NOT check service 'freshness'
        notifications_enabled           1       ; Habilitar/desabilitar notificação de indisponibilidade de serviço
        event_handler_enabled           1       ; Habilitar/desabilitar notificação de manipulador de eventos.
        flap_detection_enabled          1       ; Habilitar/desabilitar detecção de falsos-positivos
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
                notification_interval           0  ; Desabilita o intervalo de notificação, ou seja, será notificado apenas uma vez, ao inves de ficar re-enviando.
                check_period                    24x7x365 ; Período de checagem dos itens (serviços)
                normal_check_interval           5       ; Intervalo de checagem é de 5 minutos. (Se o parâmetro interval_length, estiver setado como 60 segundos, conforme no modelo a seguir: 60 * 5 = 300 [5 minutos] )
                retry_check_interval            1       ;  Minutos a aguardar antes de agendar uma nova verificação quando o serviço foi alterado para qualquer estado que não seja OK.
                max_check_attempts              4       ; Número de tentativas antes de o Nagios notificar.
                notification_period             24x7x365 ; Período de notificação
                notification_options            w,u,c,r ; Todas as opção de notificações, conforme o resultado de status d
e um serviço, UP, Down, etc.
                contact_groups                  nagios-linuxsysadmin ; O Grupo que sera acionado (Notificado) pelo Nagios.
        register                        0       ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL SERVICE, JUST A TEMPLATE!
        }
:x!
(...)
# service nagios3 restart

8. Período de notificações.

Qual é o período que o Nagios notifica em caso de falha nos meus ativos? Essa pergunta é curiosa, porque se vocês notarem que o arquivo templates.cfg, criamos nosso template definindo o parâmetro notification_period com o seguinte valor: 24x7x365

  • Mas o que é o 24x7x365? 24x7x365 é apenas um nome, nada mais do que isso.
  • Ok Elvis, mas nome do que? Do timeperiod, o nagios possui o recurso chamado timeperiod, que são a definição de períodos em que um host é monitorado. Podendo ser definidos de acordo com quem administra a ferramenta, isso torna o Nagios muito flexível.

Certo, agora entenderam o conceito de como funciona e para que serve um timeperiod, vamos fazer o nosso timeperiod, chamado 24x7x365.


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/timeperiods.cfg
define timeperiod{
        timeperiod_name 24x7x365
        alias           24x7x365 full monitoring
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }
:x!


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/timeperiods.cfg
define timeperiod{
        timeperiod_name 24x7x365
        alias           24x7x365 full monitoring
        sunday          00:00-24:00
        monday          00:00-24:00
        tuesday         00:00-24:00
        wednesday       00:00-24:00
        thursday        00:00-24:00
        friday          00:00-24:00
        saturday        00:00-24:00
        }
:x!

9. Fatores importantes.

9.1 Check de disponibilidade

Como é feito a checagem de disponibilidade de um ativo no Nagios? Através do ping. Mas para ser preciso, através do comando check-host-alive, que na verdade é apenas um nome, pois o real comando que o executa, é um plugin do nagios, o check_ping.
Apenas para título de curiosidade, eu peço a gentileza para conferir. Mas apenas olhar, NÃO MODIFIQUE!


No Red Hat, execute somente no Nagios Core (server):

# grep check-host-alive /etc/nagios/objects/commands.cfg -A 2
# 'check-host-alive' command definition
define command {
        command_name    check-host-alive
        command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
        }

Enquanto no Debian, apesar de existir o check-host-alive, ele não fica no arquivo commands.cfg. Ele é definido pelo pacote de plugins do nagios, ou seja, foi alterado para o arquivo

No Debian, execute somente no Nagios Core (server):

# grep heck-host-alive /etc/nagios3/commands.cfg -A 2
# On Debian, check-host-alive is being defined from within the
# nagios-plugins-basic package
grep check-host-alive /etc/nagios-plugins/config/ping.cfg -A 2
# 'check-host-alive' command definition
define command{
	command_name	check-host-alive
	command_line	/usr/lib/nagios/plugins/check_ping -H '$HOSTADDRESS$' -w 5000,100% -c 5000,100% -p 1
	}

9.2 Contatos e Notificações

Como o Nagios sabe para quem deve ser alertado em caso de indisponibilidade de um ativo ou de um serviço? Também é uma pergunta interessante.
O Nagios possui dois recursos chamados contact e contact_group, que nada mais é do que:

  • contato
  • grupo de contato

Portanto vamos criar nosso contato e nosso grupo de contato!


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/contacts.cfg
(...)
define contact{
        contact_name                    elvis             ; Nome do contato
        use                             template-contato         ; Template usado pelo contato (Iremos cria-lo logo abaixo)
        alias                           Elvis Suffi Pompeu            ; Apelido do Usuário
 
        email                           elvis.suffipompeu@meudominio.com.br        ; Endereço do destinatário
        }
 
define contactgroup{
        contactgroup_name       nagios-linuxsysadmin
        alias                   Grupo de contatos do Linux Sysadmin
        members                 elvis ; Caso queira adicionar novos contatos, apenas colocar vírgula, e adiciona-los ao lado direito. Como no exemplo de hosts.
        }
(...)
:x!

Enquanto no Debian, o contacts.cfg esta com outro nome, porém como vamos criar um novo contato, vamos criar um arquivo do zero, como abaixo.

No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/contacts.cfg
(...)
define contact{
        contact_name                    elvis             ; Nome do contato
        use                             template-contato         ; Template usado pelo contato (Iremos cria-lo logo abaixo)
        alias                           Elvis Suffi Pompeu            ; Apelido do Usuário
 
        email                           elvis.suffipompeu@meudominio.com.br        ; Endereço do destinatário
        }
 
define contactgroup{
        contactgroup_name       nagios-linuxsysadmin
        alias                   Grupo de contatos do Linux Sysadmin
        members                 elvis ; Caso queira adicionar novos contatos, apenas colocar vírgula, e adiciona-los ao lado. Como no exemplo de hosts.
        }
(...)
:x

Agora precisamos configurar novamente o templates, para criar um template de contatos, ou seja, um modelo a ser utilizados por um ou mais contatos.


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/objects/templates.cfg
(...)
define contact{
        name                            template-contato         ; Nome do template de contato
        service_notification_period     24x7x365                        ; Período de notificação para indisponibilidade de serviços
        host_notification_period        24x7x365                        ; Período de notificação para indisponibilidade de ativos
        service_notification_options    w,u,c,r,f,s             ; Envia notificações em todas as situações e estados em serviços
        host_notification_options       d,u,r,f,s               ; Envia notificações em todas as situações e estados em ativos
        service_notification_commands   notify-service-by-email ; Envia notificação de indisponibilidade de serviços via email
        host_notification_commands      notify-host-by-email    ; Envia notificação de indisponibilidade de ativos via email
        register                        0                       
        }
(...)
:x!
# service nagios restart

Enquanto no Debian, o contacts.cfg esta com outro nome, porém como vamos criar um novo contato, vamos criar um arquivo do zero, como abaixo.

No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/objects/templates.cfg
(...)
define contact{
        name                            template-contato         ; Nome do template de contato
        service_notification_period     24x7x365                        ; Período de notificação para indisponibilidade de serviços
        host_notification_period        24x7x365                        ; Período de notificação para indisponibilidade de ativos
        service_notification_options    w,u,c,r,f,s             ; Envia notificações em todas as situações e estados em serviços
        host_notification_options       d,u,r,f,s               ; Envia notificações em todas as situações e estados em ativos
        service_notification_commands   notify-service-by-email ; Envia notificação de indisponibilidade de serviços via email
        host_notification_commands      notify-host-by-email    ; Envia notificação de indisponibilidade de ativos via email
        register                        0                       
        }
(...)
:x!
# service nagios3 restart

A título de curiosidade é bom sabermos quem envia os e-mails no Nagios. Pois bem, esses carinhas que envia os e-mail sãos os seguintes “comandos”:

  • notify-host-by-email
  • notify-service-by-email

Que na verdade não são comandos propriamente ditos, mas sim apelidos para o Nagios saber quais ou qual comando executar a nível de sistema operacional. Basicamente esses carinhas usam o comando “mail” do próprio sistema operacional.

Lembrando que é apenas para título de curiosidade, eu peço a gentileza para NÃO (N-Ã-O) alterarem, mexerem, modificarem, etc.


No Red Hat, execute somente no Nagios Core (server):

# grep notify /etc/nagios/objects/commands.cfg -A2
# 'notify-host-by-email' command definition
define command{
	command_name	notify-host-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
	}
--
# 'notify-service-by-email' command definition
define command{
	command_name	notify-service-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
	}


No Debian, execute somente no Nagios Core (server):

# grep notify /etc/nagios3/commands.cfg -A2
# 'notify-host-by-email' command definition
define command{
	command_name	notify-host-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
	}
--
# 'notify-service-by-email' command definition
define command{
	command_name	notify-service-by-email
	command_line	/usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
	}

10. Configurando o arquivo do ativo a ser monitorado (srvlab01)

10.1 Criando o “hosts.cfg”

Agora precisamos criar o arquivo de configuração do servidor srvlab01, a qual estamos querendo monitorar em nosso ambiente de laboratório. Para isso é preciso criar o arquivo de configuração contendo o nome do host, qual template esse host utilizará como referência, quais os serviços serão monitorados neste host, etc.


No Red Hat, execute somente no Nagios Core (server):

# vim /etc/nagios/servers/srvlab01.cfg
define host{
        use                     lab-template            ; Nome do template de host que criamos.
        host_name               srvlab01                ; Nome do nosso host (ativo).
        alias                   Servidor do Laboratório ; Descrição do nosso host.
        address                 10.100.0.52             ; Endereço IP do nosso host.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo).
        service_description             Monitoramento do PING           ; Descrição do nosso serviço.
        check_command                   check_ping!100.0,20%!500.0,60%  ; Este plugin usa o comando ping no host especificado para analisar a perda de pacotes (%) (porcentagem) e média em (milissegundos)
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo).
        service_description             Monitoramento da partição sda1  ; Descrição do nosso serviço.
        check_command                   check_nrpe!check_sda1           ; Este plugin checa o espaço livre na partição sda1
        }
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                         ; Nome do nosso host (ativo)
        service_description             Usuários on-line                ; Descrição do nosso serviço.
        check_command                   check_nrpe!check_users          ; Este plugin checa a quantidade de usuários on-line no servidor.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Total de processos              ; Descrição do nosso serviço
        check_command                   check_nrpe!check_total_proc     ; Este plugin checa a quantidade de processos no servidor.
        }
 
define service{
        use                             service-lablinuxsysadmin        ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento de Load Average do Servidor Linux ; Descrição do nosso serviço
        check_command                   check_nrpe!check_load           ; Este plugin checa a carga do servidor (load average)
        }
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento SSH               ; Descrição do nosso serviço
        check_command                   check_ssh                       ; Este plugin checa a disponibilidade do servidor SSH. Por padrão, porta 22.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento HTTP              ; Descrição do nosso serviç
        check_command                   check_http                      ; Este plugin checa a disponibilidade do servidor  HTTP. Por padrão, porta 80.
        }
:x!
# service nagios restart


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios3/servers/srvlab01.cfg
define host{
        use                     lab-template            ; Nome do template de host que criamos.
        host_name               srvlab01                ; Nome do nosso host (ativo).
        alias                   Servidor do Laboratório ; Descrição do nosso host.
        address                 10.100.0.52             ; Endereço IP do nosso host.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo).
        service_description             Monitoramento do PING           ; Descrição do nosso serviço.
        check_command                   check_ping!100.0,20%!500.0,60%  ; Este plugin usa o comando ping no host especificado para analisar a perda de pacotes (%) (porcentagem) e média em (milissegundos)
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo).
        service_description             Monitoramento da partição sda1  ; Descrição do nosso serviço.
        check_command                   check_nrpe_1arg!check_sda1           ; Este plugin checa o espaço livre na partição sda1
        }
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                         ; Nome do nosso host (ativo)
        service_description             Usuários on-line                ; Descrição do nosso serviço.
        check_command                   check_nrpe_1arg!check_users          ; Este plugin checa a quantidade de usuários on-line no servidor.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Total de processos              ; Descrição do nosso serviço
        check_command                   check_nrpe_1arg!check_total_proc     ; Este plugin checa a quantidade de processos no servidor.
        }
 
define service{
        use                             service-lablinuxsysadmin        ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento de Load Average do Servidor Linux ; Descrição do nosso serviço
        check_command                   check_nrpe_1arg!check_load           ; Este plugin checa a carga do servidor (load average)
        }
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento SSH               ; Descrição do nosso serviço
        check_command                   check_ssh                       ; Este plugin checa a disponibilidade do servidor SSH. Por padrão, porta 22.
        }
 
define service{
        use                             service-lablinuxsysadmin         ; Nome do template de serviços que criamos.
        host_name                       srvlab01                        ; Nome do nosso host (ativo)
        service_description             Monitoramento HTTP              ; Descrição do nosso serviç
        check_command                   check_http                      ; Este plugin checa a disponibilidade do servidor  HTTP. Por padrão, porta 80.
        }
:x!
# service nagios3 restart


Nota: É importante notar que no Debian, o check_nrpe, esta diferente, colocamos como check_nrpe_1arg. Mas por que fizemos isso? Porque o pacote nagios-plugins quando instalado ele não cria o comando check_nrpe no arquivo commands.cfg, que deveria ser o padrão, porém no próprio commands.cfg ele indica que o comando foi criado no seguinte arquivo:

/etc/nagios-plugins/config/check_nrpe.cfg

E dentro do arquivo existem dois commands que apontam para o plugin check_nrpe.


No Debian, execute somente no Nagios Core (server):

# vim /etc/nagios-plugins/config/check_nrpe.cfg
# this command runs a program $ARG1$ with arguments $ARG2$
define command {
        command_name    check_nrpe
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ -a $ARG2$
}
 
# this command runs a program $ARG1$ with no arguments
define command {
        command_name    check_nrpe_1arg
        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Nota-se que o check_nrpe_1arg não pede argumento, enquanto o check_nrpe pede argumentos. Essa é a única diferença entre as distribuições, mas que na verdade não implica o seu modo de uso. Procuro abordar essa diferença para que você não fique confuso, pois muitos administradores se prendem a uma única distribuição e ficam “perdidos” quando tem que implementar um ambiente desse tipo fora da sua “zona de conforto”.

10.2 Entendendo melhor o check_command

Para entendimento é necessário que saibamos que o check_command vai chamar os comandos que nada mais são do que os plugins do nagios, por exemplo:

O plugin check_http, ele tem a finalidade de identificar se o serviço HTTP (porta 80) esta disponível ou indisponível em um determinado host.

No caso do nrpe, por exemplo, instalamos o nrpe no servidor e no ativo que será monitorado, correto? Lá no servidor que será monitorado, existe o daemon (serviço) nrpe, a qual permite a execução de plugins remotos.

A sintaxe do NRPE é seguinte:

check_commaand check_nrpe!COMANDO_QUE_SERÀ_EXECUTADO_NO_HOST_MONITORADO!ARGUMENTO1!ARGUMENTO2

Ou seja o servidor nagios vai executar o NRPE no host que estamos monitorando e chamando o “COMANDO_QUE_SERÀ_EXECUTADO_NO_HOST_MONITORADO”, quanto ao ARGUMENTO1 e ARGUMENTO2 não SÃO OBRIGADOS, DESDE QUÊ os arquivos nrpe.cfg estejam já com os thresholds.

Mas o que são os Thresholds? São as condições que definem um alerta como crítico, aviso, etc. No caso do Nagios os Thresholds são chamados de “State types”, e são enquadrados em 4 tipos, sendo:

  • OK
  • WARNING
  • CRITICAL
  • UNKNOWN

No caso do exemplo, eu passei o valor dos Thresholds diretamente no define service que criamos para o nosso host neste laboratório, mas não é obrigatório, desde que o plugin já esteja com ele definido no arquivo commands.cfg ou no nrpe.cfg, no caso de monitoramentos via NRPE, como fizemos aqui no exemplo, para confirmar, veja o arquivo nrpe.cfg.

  • command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10
  • command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20
  • command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1
  • command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z
  • command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200

NOTE: Que não precisamos informar argumentos no check_commands, porque os thresholds já estão definidos dentro do arquivo nrpe.cfg do host a qual pretendemos monitorar. Assim podemos omiti-los. O Nagios é bem intuito, veja que os parâmetros:

  • -w: Threshold para considerar o estado como WARNING
  • -c: Threshold para considerar o estado como CRITICAL

11. Visualizando o monitoramento do nosso host.

Bem, como preparamos já todo o ambiente, podemos aguardar alguns minutos e o Nagios já vai iniciar o monitoramento em nosso host. Acesse o seu nagios:


http://SEUSERVIDORNAGIOS/nagios


http://SEUSERVIDORNAGIOS/nagios3

Click em services no canto esquerdo superior.

E visualize o estado de monitoramento do nosso host.

12. Conclusões

Seja feliz e desfrute do seu Monitoramento!
Sinta-se a vontade para responder e até mesmo corrigir possíveis erros que possam ter surgido durante a escrita do material. Espero que tenham gostado!
Grato pela atenção!