Eu decidi compartilhar minha história. Talvez até alguém ache útil essa solução de orçamento para um problema conhecido.
Quando eu era jovem e quente e não sabia onde colocar minha energia, decidi trabalhar um pouco como freelancer. Consegui obter rapidamente uma classificação e encontrei alguns clientes regulares que me pediam para manter o servidor em uma base contínua.
A primeira coisa que pensei foi na necessidade de monitoramento. Decidi fazê-lo como pessoas inteligentes, não para reinventar a roda, mas para olhar para opções prontas, como Munin ou Zabbix. Mas foi imediatamente descoberto que a versão da Web requer uma boa conexão com a Internet, especialmente se você a abrir pelo telefone. Se você relaxar na natureza, longe da cidade, é difícil obter uma conexão estável. Portanto, uma opção de monitoramento de console foi escolhida.
Em cima e em cima do leitor de log atopsar me ajudou muito como monitoramento de console. Eles já foram mencionados no habr, o
topo foi desmontado , mas quase nada foi dito sobre o atopsar.
Instalação
Instalação muito simples, apenas três equipes.
#Centos
yum install atop
# Debian / Ubuntu
apt-get install atop
Em seguida, você pode configurar a operação de monitoramento por conta própria ou usar as configurações padrão.
# Debian / Ubuntu / Centos
/etc/default/atop
Arquivo padrão:
#cat /etc/default/atop INTERVAL=60 #, , 10 LOGPATH="/var/log/atop" # OUTFILE="$LOGPATH/daily.log" #
Adicionar à execução automática
# Debian / Ubuntu / Centos
systemctl enable atop
Executar no topo como um daemon
# Debian / Ubuntu / Centos
systemctl start atop
Para preguiçoso reunidos em uma equipe
#Centos
yum install atop && systemctl enable atop && systemctl start atop
# Debian / Ubuntu
apt-get install atop && systemctl enable atop && systemctl start atop
Atopsar
Juntamente com o atop, o atopsar também é instalado, que é um analisador de console conveniente de logs binários executados pelo daemon do atop. Obviamente, você pode ler os logs sobre si mesmo, mas isso não é tão conveniente se você deseja capturar um grande intervalo de tempo.
Um pequeno programa educacional sobre o trabalho do atopsar.
Quando o atopsar inicia sem chaves, o log de hoje é aberto e a carga em cada núcleo separadamente e a sequência idl de todos os kernels é exibida.
As chaves que eu uso são:
-A = imprime todas as informações do log
-c = exibe informações sobre a carga nos núcleos do processador, a chave padrão
-m = RAM e carga de troca
-d = atividade do disco
-O = 3 principais processos de carregamento da CPU
-G = os 3 principais processos de carregamento de RAM
-D = 3 principais processos de carregamento de disco
-N = 3 principais processos de carregamento de rede
-r = especifique o caminho para o log que você deseja ler, se precisar ver a carga nos últimos dias
-b = hora de iniciar a saída
-e = hora de terminar a saída
-M = cria uma coluna adicional no final, na qual a criticidade da linha é marcada (+ há uma carga, * - carga crítica)
Graças ao monitoramento, podemos entender a causa do comportamento incorreto do servidor a qualquer momento.
Notificações
Portanto, há monitoramento da carga, mas ainda não permite encontrar e resolver problemas rapidamente. Precisamos de notificações sobre o problema.
Eu sou o único que segue os servidores, por isso preciso notificar onde sempre posso vê-lo e pelo menos de alguma forma reagir a ele.
No começo, havia SMS - rápido, confiável, gratuito. Mas as operadoras de telefonia móvel encobriram uma distribuição gratuita de SMS através de seus gateways.
Correio - por muito tempo, pode haver problemas com a entrega.
Mensageiros - deve ser colocado no telefone, você deve criar bots.
Como resultado da pesquisa, o Telegram messenger foi selecionado por sua simplicidade e aplicação conveniente no telefone e na área de trabalho.
Criou seu bot usando
botfather .
Depois de colocar vários scripts no servidor que rastreiam a carga no servidor (IDL, smartct, etc.), a presença de erros como "oom killer", erros ao criar um backup e outras operações que precisam ser controladas.
Os scripts são bem simples escritos no bash, por exemplo, verificando LA e notificando que o Load Averadge excedeu o número de núcleos no servidor.
if [ ${LA[0]} -gt 2000 ] || [ ${LA[1]} -gt 3000 ] || [ ${LA[2]} -gt 4000 ] then wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text= $ip LA $LAd" wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text=`top -b -n 1 | grep Cpu`" wget -O /dev/null "https://api.telegram.org/$bot_id:$bot_key/sendMessage?chat_id=$chat_id&text= 5 `top -b -n 1 | grep -A 5 'PID USER' | tail -5`" fi
A simplicidade da sintaxe fornece muitos casos de uso (e qualquer pessoa que conheça pelo menos um pouco de linguagem de programação pode escrever / adicionar).
A única ressalva - se o servidor estiver localizado na Rússia (e você não tiver IPv6 no servidor), será necessário usar um proxy. Para fazer isso, no início do script, você deve registrar a cadeia de conexão no proxy:
export https_proxy=http://:@IP.:
Este não é o fim
Você anda calmamente pelas montanhas com uma mochila atrás de você, faz uma pausa na civilização e, em seguida, o telefone, acidentalmente capturando a conexão, lança uma notificação sobre um problema que surgiu no seu servidor. O que fazer Um clima sereno foi deslumbrado pelo vento. Ligar para minha esposa e ditar comandos? Haha
Era urgente encontrar uma maneira de resolver os problemas rapidamente e sem a disponibilidade de uma boa Internet. Aqui fui novamente salvo pelo mensageiro (# telegrammivi). Ensinei meu bot a se comunicar apenas comigo, ignorando todos os outros. Agora, junto com a notificação do problema, obtenho um pouco mais de dados, segundo os quais entendo quem é a origem do problema e posso tentar resolvê-lo remotamente. Basta escrever uma mensagem para o bot, lançar o telefone mais alto para que essa mensagem desapareça e pronto - o bot foi fazer o seu trabalho. Assim, eu posso, por exemplo, matar algum processo indesejado, reiniciar o daemon, bloquear IP e assim por diante.
Aqui também transferi futuras solicitações necessárias de clientes, por exemplo, redefinição urgente de senhas para usuários (porque "Ahhh, não conseguimos acessar o servidor, perdemos milhões!"), Procure um usuário que tenha acesso à pasta desejada, ligue e desligue o site e outros . Claro, eu constantemente modifico a funcionalidade do bot, pois a imaginação dos clientes às vezes aparece inesperadamente e não é fornecida por mim. Mas os básicos estão satisfeitos.
Existe também uma versão para o VK, mas de alguma forma ela não se enraizou.
Agora, viajo com calma e exploro este mundo, sem medo de que algo aconteça ali e não poderei descobrir ou consertar isso.