Рейтинг:0

Почему этот сценарий bash вызывает так много ложных срабатываний для мониторинга использования памяти?

флаг fi

Я отслеживаю сотни серверов, как выделенных, так и виртуальных, используя следующий скрипт:

#!/бин/баш

PATH=/usr/lib64/ccache:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin

порог=90

serverip=$($(какой ifconfig) | grep -Eo 'inet (addr:)?([0-9]*\.){3}[0-9]*' | grep -Eo '([0-9 ]*\.){3}[0-9]*' | grep -v '127.0.0.1' | голова -1)
memused=$(free | awk '/Mem/{printf("Использование ОЗУ: %.2f%\n"), $3/$2*100}' | awk '{print $3}' | cut -d"." - f1)

если [ "$ memused" -gt "$ порог" ]
тогда
    CTIME=$(дата +%Y-%m-%d-%H%M%S)
    ps aux > /root/.example/logs/lowmem-"${CTIME}"-ps.log
    top -n 1 -o %MEM -c > /root/.example/logs/lowmem-"${CTIME}"-top.log
    бесплатно -m > /root/.example/logs/lowmem-"${CTIME}"-free.log
    mysqladmin proc -v статус > /root/.example/logs/lowmem-"${CTIME}"-mysqlproc.log
    bash /example/general/slack.sh "#server-alerts" ":warning: $(hostname) - ${serverip} - Использование памяти достигло 90% - Проверьте журналы /root/.example/logs/lowmem-${ CTIME} \n \`\`\`$(head -1 /root/.example/logs/lowmem-"${CTIME}"-free.log) \n $(head -2 /root/.example/logs /lowmem-"${CTIME}"-free.log | tail -1) \n $(tail -1 /root/.example/logs/lowmem-"${CTIME}"-free.log)\`\` \`"
    кронтаб -л | grep -v '/пример/mon_mem.sh' | кронтаб -
    спать 900
    кронтаб -л | { кот; echo "* * * * * bash /example/mon_mem.sh"; } | кронтаб -
фи

Хотя в большинстве случаев это работает, мы случайным образом получаем ложные срабатывания, это совершенно случайные серверы и они не согласуются с каждым сервером, поэтому один сервер может срабатывать, но затем не срабатывать снова (ложно)

Пример ложного срабатывания:

общее количество использованных бесплатных общих баффов/доступных кешей 
Мем: 2048 345 1580 27 122 1674 
Обмен: 2048 0 2048

С этого сервера пришло предупреждение, но вы видите, что используется только 345 МБ.

anx avatar
флаг fr
anx
Небольшой объем "свободной" памяти - это *хорошо*. Если вы хотите предупредить о нехватке памяти, вместо этого проверьте «доступный» номер. Кроме того, используйте тот же вывод, что и для *активации* предупреждения, чтобы включить его в текст *предупреждения* для более полезного объяснения (вы вызываете free дважды, с вероятными разными результатами).
Рейтинг:1
флаг fr
anx

3 проблемы:

  1. Ты звонишь бесплатно дважды: один раз для запуск предупреждение, один раз за отправку отчета. Цифры между ними изменятся. Сохраните вывод (в переменной) и дважды извлеките одни и те же данные.

  2. "Используемая" память должен приблизиться к общему объему памяти, а «свободный» всегда должен приближаться к нулю. Если у вас есть неиспользованный память, это означает, что вы потратили впустую ресурсы, которые должны, хотя и не выделены, по крайней мере служить кэшами.

    Я рекомендую вам изменить задумчивый строка, которая в настоящее время сравнивает второй столбец с третьим ($3/$2), чтобы вместо этого сравнить первый столбец с последним.

  3. Ваш метод доставки сообщений, похоже, теряет форматирование. Возможно, вы захотите проверить свой метод доставки (slack.sh), чтобы отображать ввод в моноширине, или заменить табуляцию и пробелы соответствующими разделителями.

    Вот как должна выглядеть таблица:

    общее количество использовал бесплатно общий баф/кеш имеется в наличии
    Мем: 2048 345 1580 27 122 1674
    Менять: 2048 0 2048

    пять цифры начинаются с "общей" памяти, и если что, прошлой номер тот, о котором вы должны заботиться.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.