Attualmente sto sviluppando un nuovo dispositivo, che produce file di testo (di testo). Ci saranno molti dispositivi di questo tipo e voglio analizzare i file di log (per il rilevamento degli errori e le statistiche).
Fino ad ora, l'analisi del log era un prodotto secondario, i file di log di altri dispositivi erano fondamentali per le persone che tentavano di eseguire il debug, quindi le informazioni erano leggibili dall'uomo ("fulltext"). Con il mio strumento di loganalisi automatico, ho analizzato questi file di log cercando più parole chiave, che indicavano linee interessanti del file di registro. Quindi l'analisi è stata molto intensa, perché ho dovuto controllare una riga per più parole chiave ed è possibile che alla fine una riga sia irrilevante per la mia analisi. Nel caso in cui la linea sia rilevante per me, a volte devo analizzare la linea in modo costoso tagliando le informazioni in diverse posizioni nella linea. Complessivamente, l'analisi di questi file di log è molto lenta.
Con il nuovo dispositivo, mi piace implementare più file di log leggibili dalla macchina (ma ancora leggibili dall'uomo), ciò che consente un'analisi più rapida e semplice, anche durante l'implementazione / l'estensione del mio strumento di analisi dei log. Mi sto solo chiedendo, qual è la migliore pratica? La mia prima idea è di usare un "trigger char" in un messaggio di log. Siamo in Germania, quindi ho scelto il simbolo del dollaro, perché non lo usiamo regolarmente. Quando trovo questo trigger-char, so che devo analizzare questa riga (ed evito di cercare più parole chiave). Inoltre, ho pensato che il caso più comune fosse una coppia chiave-valore, che può contenere le informazioni più importanti di un messaggio di registro. Nel caso in cui io abbia più valori (ad esempio un elenco), ho bisogno anche di una versione leggibile da una macchina di questo. Quindi la mia prossima idea era di combinare il trigger-char con un oggetto JSON. Nel caso standard, questo include solo una coppia chiave-valore e lo strumento loganalysis analizzerà questo per motivi di prestazioni con semplici operazioni con le stringhe e non utilizzare una libreria JSON-parser. Ma nel caso che ci sia una lista, creerò un messaggio di log con una JSON-Array e analizzerò questo con un JSON-lib (nel mio caso json-simple). Sugli eventi, inserirò un booleano (il "vero" non è necessario, solo per rimanere conforme a JSON).
Quindi al momento, una linea assomiglia a questa:
05.01.2018 11:11:23: No new APN needed. ${"currentAPN":"m2m-net.sa.t-mobile"}
05.01.2018 11:11:51: can't open gpio 969. ${"openGPIO969failed":true}
Posso migliorare il mio concetto in qualsiasi modo?
Nota a margine: sto utilizzando un parser Java auto-scritto per analizzare i file di log dei vecchi dispositivi, che estenderei per il nuovo progetto. A causa dei log-message "formati" molto speciali (che sono cresciuti nel tempo), qualcosa come Logstash non ha funzionato. Tuttavia, con ElasticSearch e Kibana uso il resto dello stack ELK per le mie analisi log e -visualizzazione.
Nota a margine 2: il nuovo dispositivo è un dispositivo kiosk con Android, quindi è in esecuzione una sola app. Abbiamo il pieno controllo del sistema (proprietario del dispositivo) e anche della maggior parte dell'hardware.
/ modifica: esteso per messaggio evento come menzionato nel primo commento / modifica 2: nuova nota a margine