The Twelve-Factor App

XI. Αρχεία συμβάντων

Τα αρχεία συμβάντων ως ροές συμβάντων

Τα αρχεία συμβάντων (logs) παρέχουν ορατότητα στη συμπεριφορά της εκτελούμενης εφαρμογής. Σε περιβάλλοντα εξυπηρετητή (server-based environments) συνήθως γράφονται σε ένα αρχείο στο δίσκο (ένα “logfile”), αλλά αυτό είναι μόνο μια μορφή εξόδου (output format).

Τα αρχεία συμβάντων είναι η ροή (stream) των συσσωρευμένων, χρονικά διατεταγμένων συμβάντων που συλλέγονται από τις ροές εξόδου (output streams) όλων των εκτελούμενων διεργασιών και υπηρεσιών υποστήριξης. Τα αρχεία συμβάντων στην ακατέργαστη μορφή τους είναι τυπικά μια μορφή κειμένου με ένα συμβάν ανά γραμμή (ωστόσο τα ίχνη εκτέλεσης ή backtraces από σφάλματα μπορεί να επεκτείνονται σε πολλαπλές γραμμές). Τα αρχεία συμβάντων δεν έχουν δεδομένη αρχή ή τέλος, αλλά ρέουν συνεχόμενα όσο η εφαρμογή λειτουργεί.

Μια εφαρμογή δώδεκα παραγόντων ποτέ δεν ασχολείται με τη δρομολόγηση ή την αποθήκευση της ροής εξόδου (output stream) της. Δεν πρέπει να επιχειρεί να γράψει ή να διαχειριστεί logfiles. Αντίθετα, κάθε εκτέλούμενη διεργασία γράφει τη ροή συμβάντων της , χωρίς προσωρινή αποθήκευση και συσσώρευση (unbuffered), στο stdout (τυπική έξοδο). Κατά την υλοποίηση τοπικά, ο προγραμματιστής θα δεί αυτή τη ροή στο προσκήνιο του τερματικού του για να παρατηρήσει την συμπεριφορά της εφαρμογής.

Στις αναπτύξεις ελέγχου ή παραγωγής (staging or production deploys), η ροή κάθε διεργασίας θα συλλεγεί από το περιβάλλον εκτέλεσης, θα συνδεθεί μαζί με όλες τις άλλες ροές από την εφαρμογή, και θα δρομολογηθεί σε ένα ή περισσότερους τελικούς προορισμούς για εξέταση και αποθήκευση μακράς διάρκειας. Αυτοί οι προορισμοί δεν είναι ούτε ορατοί ούτε παραμετροποιήσιμοι από την εφαρμογή, και αντιθέτως είναι τελείως διαχειριζόμενοι από το περιβάλλον εκτέλεσης. Δρομολογητές συμβάντων ανοικτού κώδικα (όπως το Logplex και το Fluentd) είναι διαθέσιμοι για αυτό το σκοπό.

Η ροή συμβάντων μιας εφαρμογής μπορεί να δρομολογηθεί σε ένα αρχείο, ή να παρακολουθηθεί σε πραγματικό χρόνο μέσω tail σε ένα τερματικό. Το σημαντικότερο, η ροή μπορεί να σταλθεί σε ένα σύστημα ανάλυσης και αρχειοθέτησης συμβάντων (log indexing and analysis system) όπως το Splunk, ή σε ένα γενικού σκοπού σύστημα ανάλυσης δεδομένων (data warehousing system) όπως το Hadoop/Hive. Αυτά τα συστήματα επιτρέπουν μεγαλή ισχύ και ευελιξία στην ενδοσκόπηση της συμπεριφοράς της εφαρμογής σε σχέση με το χρόνο, συμπεριλαμβανομένων: