Processo di monitoraggio

4

Ho alcuni post precedenti che parlano di come usare python per "fare qualcosa" quando un record viene inserito o cancellato in un database postgres. Alla fine ho deciso di andare con una coda di messaggi per gestire i "lavori" (beanstalkd). Ho tutto configurato e in esecuzione con un altro processo Python che guarda la coda e "fa cose". Non sono davvero un "sistemista" quindi non sono sicuro di quale sia un buon modo per monitorare il processo per assicurarci che non funzioni o che si riavvii e invii una notifica. Google ha dato alcune buone idee, ma ho pensato di chiedere qui potrei ottenere alcuni suggerimenti da persone che sono sicuro che hanno dovuto fare qualcosa di simile.

Il processo è fondamentale per il sistema e deve solo funzionare sempre e, se non funziona, deve essere indirizzato e altre parti del sistema "sono messe in pausa" fino a quando il problema non viene risolto.

I miei pensieri erano di avere solo un cronscript eseguito ogni minuto o due che controlla se il processo è in esecuzione. Se no, lo riavvia. Un altro script (o forse solo un'altra funzione del primo) sarebbe il monitoraggio dei lavori e se i lavori in attesa di essere elaborati colpiscono una soglia specifica per segnalare anche che c'è un problema grave.

Specifiche sul processo ... Il processo aggiorna gli ordini in un sistema legacy con il numero di articoli che vengono spediti o ritirati dal nostro magazzino. Quindi, se queste cose non vengono fatte, quando l'ordine è fatturato avrà qty scorretti e le persone coinvolte non avrebbero un buon modo per individuare questo a meno che non stiano controllando ogni riga. Ho pensato che potrei anche avere una bandiera sull'ordine che dice "sì sono stato toccato" e se non deve semplicemente notificare l'agente di fatturazione.

Questo stesso metodo verrà utilizzato per aggiornare gli ordini con le informazioni di spedizione in base a quando gli ordini vengono spediti da UPS Worldship.

Non lo so, penso di avere una mano su questo, ma si sente semplicemente "kludgy".

    
posta Ominus 06.11.2011 - 04:25
fonte

1 risposta

2

Puoi wait() per il pid di beanstalkd; se esce (pulito o in altro modo), wait() ti restituirà il codice di uscita e sarai in grado di riavviare il processo immediatamente.

Beanstalkd persiste nella sua coda (se si specifica -b ), quindi il processo di beanstalkd si blocca di tanto in tanto (se mai) probabilmente non è un problema. Ma il trigger postgress non sarà in grado di inviare i dati alla coda di beanstalkd in quel momento. Per questo motivo, utilizzerei una tabella di coda separata in Postgres. Le transazioni aggiungono i record a questa tabella. Un processo periodico (ad esempio, una volta al secondo) controlla questa tabella, trasferisce i dati in beanstalkd e li rimuove dalla tabella della coda solo se beanstalkd ha accettato i dati in modo affidabile.

Con questa configurazione, il caso peggiore che avrai sarà che i dati non verranno inviati interamente al sistema che beanstalkd gli fornisce. Altre parti del sistema non avranno bisogno di fermarsi realmente, perché una volta che tutto è di nuovo in vigore, l'arretrato dei messaggi sarà cancellato alla fine.

    
risposta data 06.11.2011 - 20:00
fonte

Leggi altre domande sui tag