(Trilha LPIC): Parte 2— Planejamento de Capacidade com Linux

De volta aqui pessoal, trazendo a parte 2 do nosso post sobre planejamento de capacidade. 😉Sendo bem breve nesse post, vamos direto aos comandos que ainda estão dentro do planejamento de capacidade mas que gerenciam mais a parte do lado das interfaces de rede e dos processos do sistema, tais como, netstat, ss, pstree, iptraf, top, htop.

Apenas recordando no post anterior, falamos sobre gerenciamento de capacidade com comandos voltados mais para a parte de uso de CPU, disco, memoria e SWAP. Utilizamos os comandos iostat, vmstat, mpstat, sar e w.

Preparou sua VM? Pronto!? Bora então… 🚀🐧

Antes de iniciar, quem não chegou a ler e praticar a parte 1, vou deixar o link aqui para que você leia e faça os testes do seu lado, assim você pode se habituar com os comandos e as opções. 👇

Vamos começar analisando os comandos que são usados para fazer a monitoração das conexões de rede, tabelas de roteamento e as estatísticas de rede. Para isso vamos iniciar com o netstat.

$ netstat (mostra muitos dados sobre conexões de rede, como estatísticas, tabelas de roteamento, interfaces de rede).

Apenas uma observação aqui, nesse ponto de estudo sobre os comandos de Linux, sempre que precisar consultar o que determinado comando faz, ou uma breve descrição dele, use sempre a manpage, whatis e o help. Isso salva, sério mesmo!

whatis command

Veja a saída usando da opção help, olha a gama enorme de opções que se pode usar sem consultar isso no Google, use o — -helpdos comandos… 😍

netstat command

Voltando ao netstat… 😄

Se executarmos o comando netstat sem argumentos e opções, temos:

$ netstat (mostra muitas informações sobre estatísticas de interfaces de redes):

netstat command

$ netstat -i (mostra todas as interfaces de rede do sistema e as estatísticas das interfaces):

netstat command

Basicamente são os mesmos dados que aparecem quando executamos o comando ifconfig, veja abaixo:

ifconfig command

Podemos ver as interfaces, o MTU das interfaces, pacotes recebidos com status ok, transmitidos ok, com erros…

$ netstat -s (mostra as estatísticas por protocolo, as informações de trafego de cada protocolo). Ideal para você analisar como esta o histórico em torno dos protocolos e gerar um relatório caso esteja analisando sua rede ou efetuando algum troubleshooting:

netstat command

$ netstat -a (mostra todos os sockets, um processo, um arquivo que esta execução no sistema).

netstat with -a option

$ ss (comando similar ao netstat, seria um novo netstat, reformulado, ele vem como padrão nas distribuições).

Basicamente a diferença entre eles, os dois comandos, netstat e ss são:

$ netstat (pega as informações do kernel, dos arquivos do /proc, o /proc é um reflexo do kernel).
$ ss (pega as informações diretamente da memória do kernel, seria mais preciso, mais confiável).

$ ss -s (mostra um resumo, mostra as estatísticas dos pacotes, mostra o que houve de trafego nas conexões).

ss -s command

$ ss -l (mostra as conexões em estado listening):

ss command

$ ss -t (mostra as conexões TCP estabelecidas, mostra os sockets TCP):

ss command

$ ss -tnl (mostra as conexões em estado de listening, aguardando conexão):

ss command

$ iptraf (esse comando faz o monitoramento da LAN do ambiente em tempo real).

Esse comando não tem instalado por padrão no CentOS, para isso prossiga com a instalação dele conforme abaixo:

$ ansible elliot01 -b -m yum -a 'name=iptraf state=latest' -i inventory.yml

Ahhh, apenas um lembrete, você usa alguma ferramenta de gerenciamento de configuração na sua infraestrutura? Ainda não? Então comece aqui com esse artigo que postei sobre o Ansible… Pô, usa sim, você só tem a ganhar…

Postei mais alguns artigos sobre Ansible no passado… se preferir você pode usar a busca do próprio perfil do Medium, digitando apenas a tecnologia que você quer aprender. Veja como é simples de tudo…

How to search for a technology inside Medium site?

Feito isso, vamos avançar… 😅

Abaixo uma screen da saída do comando iptraf executado diretamente da linha de comando. Como podemos ver ele possui muitas opções para que seja possível monitorar todo o trafego da rede no ambiente…

iptraf command

Nessa outra tela abaixo podemos algumas entradas do protoloco UDP:

iptraf command

Nessa outra tela abaixo podemos ver um resumo da interface de rede (eth0) de forma mais detalhada, isso tudo em tempo real:

iptraf command

Podemos criar filtros com o iptraf, esse recurso é bem útil para casos onde você precisa pesquisar por uma porta especifica ou por um IP especifico da rede, primeiro temos que ir em Filters conforme abaixo:

iptraf command

Depois em Define new filter:

iptraf command

Insira uma breve descrição sobre o filtro que pretende usar:

iptraf command

Agora a parte que você insere o que pretende filtrar com iptraf:

iptraf command

Uma ponto legal do iptraf é que ele é totalmente super fácil de trabalhar, suas telas são bem explicativas, todos os comandos estão na parte inferior da tela, alguns cliques e você esta capturando muitas informações. Não precisa se conectar numa interface X para usar o iptraf, remotamente você faz todo o gerenciamento da LAN.

Destaco também as configurações que você pode fazer:

iptraf command

Basicamente seria isso, não pretendo entrar em muitos detalhes sobre esse comando, mas em outros posts podemos entender melhor e fazer um teste na pratica com o iptraf.

Agora vamos ver alguns comandos que ajudam na verificação do lado dos processos em Linux, ainda muito utilizados para o planejamento de capacidade.

Um comando muito bom para analisar os processos do sistema é o comando pstree:

$ pstree (mostra os processos em forma de árvore)

pstree command

Esse comando mostra muitas informações sobre todos os processos que estão em execução no sistema.

$ pstree -p (mostra toda a arvore de processos juntamente com os PIDs):

pstree -p command

Através de comando eu posso acompanhar todo o histórico do processo pai ate o ultimo que esta em execução, bem útil para analise de aplicações, sockets.

$ lsof (mostra o arquivo relacionado a cada processo):

lsof command

Vamos fazer um exemplo onde mostrarei que arquivos um determinado processo esta abrindo.

Primeiro temos que criar um arquivo com o editor VIM como teste:

$ vim test_lsof.txt

Vamos listar o processo com o comando ps:

ps command

Agora vamos verificar que arquivos esse processo esta gerando:

lsof command

Veja acima que executei o comando e peguei o PID dele, e logo depois executei um lsof para verificar que arquivos esse processo estava consumindo, podemos ver que abrem muitos arquivos quando executamos um simples editor VIM.

$ top (mostra os processos do sistema em tempo real, os processos que estão consumido mais recursos, você pode ordenar os processos, e mais informações).

Abaixo uma saída curta do comando top:

top command

Resumo básico das informações no topo:

top command

- Mostra quanto tempo o sistema está up.
- Número de usuários conectados
- Load average: média dos últimos 1, 5 e 15 minutos.
- Número de tasks
- A 3 linha é bem útil pois é um modelo do comando iostat, que estudamos no último post:

top command (CPU usage)

Sendo:

- 0.0 us (%user)
- 0.3 sy (%system)
- 0.0 ni (%nice)
- 99.7 id (%idle)

Podemos verificar que processos estão consumindo mais CPU apenas usando o comando top. Veja, nesse momento a lista dos top processos que estão consumindo mais CPU:

top command

Bacana de saber também que podemos usar o comando top para listar alguns campos que queremos verificar. Basta executar o comando top e com ele em execução, digitar Shift + F (field de campo).

Abaixo você terá a seguinte saída:

top command

Veja que podemos ordenar também por campos e nesse momento esta ordenado por %CPU:

top command

Agora vamos usar o comando dd para que possamos ver realmente o valor da CPU se alterar, eu deixei ordenado por CPU para que possamos testar:

$ dd if=/dev/zero of=test.iso

Veja a saída do comando top mostrando o dd em execução, consumindo quase 28% (apenas o processo do dd), para saber o total, temos que verificar a linha abaixo, %user apenas com 7,8% de CPU em uso a nível de aplicações de usuário:

top command
top command

$ htop (comando semelhante ao top mas com mais mais detalhes específicos).

htop command

Podemos ver abaixo que ele mostra o consumo por CPU, no meu caso como estou usando uma instancia EC2 (t2.micro) mostra apenas uma CPU:

htop command

Lembrando que esse comando também não vem instalado por padrão, vou fazer instalação com Ansible:

$ ansible elliot01 -b -m yum -a 'name=htop state=latest' -i inventory.yml
elliot01 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/libexec/platform-python"
},
"changed": false,
"msg": "Nothing to do",
"rc": 0,
"results": []
}

Com o htop também podemos listar os arquivos de cada processo que estão em execução:

htop command

Eu selecionei o processo do auditd, agora apertando a letra L, você pode verificar os arquivos abertos para esse processo, veja:

htop command

Agora se você preferir verificar apenas o que um processo esta consumindo de recursos o comando htop pode ser útil, veja:

ps command

Eu rodei primeiramente um comando, no caso o comando dd, assim ele pode gerar maiores taxas dos recursos e claro, fica melhor para visualizar, e depois eu rodei um ps para checar o processo, agora vou listar esse processo no htop e ver os recursos (CPU, MEM)sendo consumidos:

htop command

Veja acima que ele mostra em tempo real os recursos sendo utilizados pelo processo do comando dd. Muito bom, fala sério!? Novamente… 😅

htop command

Basicamente isso seria uma breve introdução sobre o comando htop. Vale a pena olhar a manpage desse comando, assim você pode praticar do seu lado e usar na sua infraestrutura… 🚀

Eu acredito que ficou meio extenso o artigo mas aprendemos MUITOS comandos sobre processos e verificação de rede/conexões do Linux.
Deixo aqui o meu MUITO obrigado por ter chegado ate o fim e feito seus testes. Agradeço também aos professores Ricardo e Bruno Odon por todo o ensinamento.

Ficou com alguma dúvida? Posta aqui que a gente conversa e troca as experiências juntos!

#VAIIII 🚀🐧

Senior Linux Administrator at IBM

Senior Linux Administrator at IBM