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.
- 159 megtekintés
Hozzászólások
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
- A hozzászóláshoz be kell jelentkezni
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)
- A hozzászóláshoz be kell jelentkezni
Az a kisebbik baj, a nagyobbik, hogy a check program allapotat sehogy sem tudtam felhasznalni a check processben.
Also: a connection count perf miatt korlatozva lett 12-ben.
- A hozzászóláshoz be kell jelentkezni