PRTG: правильная проверка памяти
На работе частенько приходится работать с системами мониторинга серверов и сетевых устройств. И вот однажды случился один странный случай. Пробовал подключать к мониторингу машину и внезапно по его данным начала стремительно заканчиваться память.
Машина была подключена к мониторингу не так давно, но график памяти показывал, что она стремительно заканчивалась. В сенсоре SNMP Linux meminfo стояло 3% свободной памяти. При этом CPU был почти на нуле. Очень странно. Когда я зашел на машину то удивился, а опотом всё понял.
1 2 3 4 |
> free -m total used free shared buff/cache available Mem: 5967 <strong>923</strong> 553 121 4490 4576 Swap: 6140 30 6110 |
Надо сказать, что для Linux машин это нормально, когда free physical memory очень маленький, а buffers/cache большой. В качестве мониторинга используется сервер PRTG, память считывается стандартными SNMP-шными пробами. И считает он количество свободной памяти исключительно по этому free. Но при необходимости ядро спокойно может освободить занятую под буферы память, поэтому нам надо в качестве free memory считывать не значение free, a free = total – used.
Для этого встроенных сенсоров нет, поэтому будем писать свой.
Подготовка
Мы будем использовать Advanced SSH Sensor. В начале он у меня никак не добавлялся. В /var/log/auth.log на машине-источнике данных проскакивали сообщения такого вида:
1 |
client blowfish-cbc,cast128-cbc,aes128-cbc,3des-cbc server aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com |
А в самом PRTG отображалось вот такое сообщение:
1 |
The negotiation of encryption algorithm is failed |
Чтобы это пофиксить – добавляем в конец /etc/ssh/sshd_conf на целевой машине один (или все) алгоритмы шифрования.
1 |
Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,blowfish-cbc,aes128-cbc,3des-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc |
Потом перезагружаем сервис.
1 |
sudo service sshd restart |
Добавляем сенсор памяти
После этого на целевой машине создаём файл /var/prtg/scriptsxml/freemem.sh со следующим содержанием
Скрипт: freemem.sh
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
#!/bin/bash # Put this file to /var/prtg/scriptsxml/freemem.sh to target machine # chmod +x /var/prtg/scriptsxml/freemem.sh # Add line: Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com,blowfish-cbc,aes128-cbc,3des-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc # to end of /etc/ssh/sshd_conf and restart ssh # Add advanced SSH sensor meminfo="/usr/bin/free" xmlresult=`cat < EOF ` if [ -f $meminfo ]; then result=`free -b | grep 'Mem\|Swap'` while read line; do if [[ $line == Mem* ]]; then total=`echo $line | awk '{print $2}'` used=`echo $line | awk '{print $3}'` free=`echo $line | awk '{print $4}'` shared=`echo $line | awk '{print $5}'` buffers=`echo $line | awk '{print $6}'` cache=`echo $line | awk '{print $7}'` else swtotal=`echo $line | awk '{print $2}'` swused=`echo $line | awk '{print $3}'` swfree=`echo $line | awk '{print $4}'` fi done <<< "$result" physicalusedperc=`echo $used $buffers $cache $total | \ awk '{printf("%.3f", 100-(($1)*100/$4))}'` xmlresult+=`cat < Physical Free Percent 1 Percent $physicalusedperc 1 1 1 15 8 EOF ` physicalfreebytes=`echo $used $buffers $cache $total | \ awk '{printf("%i", $4-$1)}'` xmlresult+=`cat < Physical Free 0 BytesMemory $physicalfreebytes EOF ` xmlresult+=`cat <OK EOF ` else xmlresult+=`cat <1 This sensor is not supported by your system, missing $proc EOF ` fi echo "$xmlresult" exit 0 |
Файл делаем исполняемым:
1 |
chmod +x ./freemem.sh |
Дальше можно добавлять сенсор к устройству (Advanced SSH sensor).
Что получилось
Теперь сенсор памяти выдаёт адекватные данные для анализа и предупреждений.
Ссылки
http://steronius.blogspot.ru/2014/10/ssh-no-matching-cipher-found.html
http://prtg.instasite.ru/help/ssh_monitoring.htm
http://gnu.su/news.php?extend.1218
http://steronius.blogspot.ru/2014/10/ssh-no-matching-cipher-found.html