[abandoned] Monit process ujrainditas program status alapjan

Fórumok

A kérdés: monit konfigban meg lehet-e oldani, hogy egy script kimenet / program status alapján egy adott process újrainduljon? Keresgéltem, de sehol nem találtam összekötési lehetőséget a `depends on` konfigon kívül.

A probléma: adott egy alfa állapotú db engine, ami szereti megenni a memóriát, és nem szabadítja fel. Amíg ezt remélhetőleg javítják, addig kellene egy olyan process, ami az alábbi módon működik:
ha a foglalt memória X% fölött van ÉS nincs nyitott db kapcsolat, akkor restart db process. Továbbá későbbi terv, hogy ezek HAProxy mögött futnak, és mondjuk ~70% used memory körül bebillentenék magukat DRAIN-be, megvárnák, hogy elfogyjanak a nyitott connecionök, restart, és visszaállítják magukat READY-be.

Ami eddig megvan:

db-kapcsolat count (check-db-connections.sh):

#!/bin/bash
COUNT=`ss -Htn src :3306 | wc -l`
exit $COUNT

monit konfig, amiben külön külön működnek a dolgok:

check process dolt-sql-server with pidfile /data/dolt/dolt.pid
   start program = "/bin/systemctl start dolt-sql-server.service"
   stop program = "/bin/systemctl stop dolt-sql-server.service"
   if failed host localhost port 3306 protocol mysql with timeout 15 seconds for 3 times within 4 cycles then restart
   if memory usage > 75% then alert

check program dolt-connection-count with path "/etc/monit/scripts/check-db-connections.sh"
   depends on dolt-sql-server
   if status = 0 then alert

Ebben a monit konfigban szeretnék egy olyasmi szabályt, hogy:

IF FAILED dolt-connection-count and memory usage > 75% then RESTART

Az a kérdésem, hogy ezt bárhogy meg lehet-e oldani?

Ha nem, akkor marad a custom bash script, csak jó lett volna valami monitoring toolra is rákötni.

Ha esetleg van más rendszer/megoldás, amivel ezt meg lehet oldani, az is érdekel.

 

Szerk: Mivel sehol nem találtam megoldást a check program és check process összekapcsolásásra, és kb ugyanannyit kellene hozzá scriptelni, így marad a custom script monit nélkül.

Hozzászólások

Szerkesztve: 2021. 11. 23., k – 13:34

Amugy ha esetleg valakit erdekel, az alabbi programrol van szo: https://www.dolthub.com/

Es a custom script, ami viszont meg fejlesztve lesz (haproxy set server status, es backend figyeles, hogy ne menjen egymas utan mindegyik drain-be, stb.):

#!/bin/bash

MEMORY=(`free | grep '^Mem:' | tr ' ' '\n' | grep -ve '^$' -e 'Mem:'`)
USED_PERCENTAGE=$((${MEMORY[1]}*100/${MEMORY[0]}))

CONNECTIONS=`ss -Htn src :3306 | wc -l`

echo "Memory used (%): $USED_PERCENTAGE"
echo "Database connections: $CONNECTIONS"

if [[ $CONNECTIONS -eq 0 && $USED_PERCENTAGE -ge 20 ]]
then
    echo "restarting dolt-sql-server"
    `systemctl restart dolt-sql-server.service`
    exit 0
fi
Szerkesztve: 2021. 11. 23., k – 15:25

exit $COUNT

a $COUNT erteke lehet 255 felett is. Oda echo kellene szerintem, maskent akkor is jonak fog minosulni, amikor semmi nem megy ( $COUNT == 0 ) illetve a monit minden latszolagos ok nelkul unmonitored -re rakhatja.

Error: nmcli terminated by signal Félbeszakítás (2)