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.