Μετρητές κίνησης OpenVPN έναντι I/O δίσκου: τρεις διαφορετικοί αριθμοί
Τα byte της διεπαφής, οι μετρητές χαρακτήρων της διεργασίας και οι εγγραφές στον δίσκο μετρούν διαφορετική εργασία. Συγκρίνετέ τα πριν διαστασιολογήσετε δίσκους από τον όγκο της σήραγγας.
Περάστε ένα μεγάλο αρχείο μέσα από μια σήραγγα και ο μετρητής της διεπαφής ανεβαίνει κατά το μέγεθος του αρχείου. Τίποτα σε αυτόν τον αριθμό δεν υπονοεί ότι ο ίδιος όγκος έφτασε σε δίσκο. Σε αυτές τις συζητήσεις συγκρίνονται τρεις διαφορετικές μετρήσεις, και απαντούν σε τρία διαφορετικά ερωτήματα: πόση κίνηση διέσχισε ένα επίπεδο δικτύου, πόσα byte διάβασε και έγραψε μια διεργασία μέσω κλήσεων συστήματος, και πόση εργασία έφτασε στο επίπεδο αποθήκευσης.
Η σύγκριση του πρώτου με το τρίτο είναι το συνηθισμένο λάθος, και παράγει είτε ένα φάντασμα προβλήματος δίσκου είτε ένα σχέδιο χωρητικότητας που αγνοεί τις εγγραφές που πραγματικά συμβαίνουν. Τα τρία είναι διαχωρίσιμα, και το καθένα έχει σωστή χρήση.
Τρεις αριθμοί που συγχέονται
Οι μετρητές διεπαφής περιγράφουν κίνηση που διαχειρίζεται σε επίπεδο δικτύου. Είναι ο σωστός αριθμός για το εύρος ζώνης, για το μέγεθος μιας σήραγγας και για μοντέλα χρέωσης που τιμολογούν τη διέλευση.
Οι μετρητές χαρακτήρων της διεργασίας περιγράφουν byte που μεταφέρθηκαν μέσω κλήσεων ανάγνωσης και εγγραφής σε οποιονδήποτε περιγραφέα, συμπεριλαμβανομένων σωληνώσεων, τερματικών και συσκευών χαρακτήρων. Είναι ο σωστός αριθμός για να ρωτήσετε πόσο απασχολημένη είναι μια διεργασία στο όριο της κλήσης συστήματος, και δεν είναι λογαριασμός αποθήκευσης.
Οι μετρητές αποθήκευσης περιγράφουν byte που ο πυρήνας προσπάθησε να μεταφέρει προς ή από μια συσκευή μπλοκ. Είναι ο σωστός αριθμός για τον σχεδιασμό χωρητικότητας, με την επιφύλαξη ότι ο πυρήνας τεκμηριώνει τα δικά του όρια λογιστικής: οι αναγνώσεις από την κρυφή μνήμη δεν γίνονται αναγνώσεις αποθήκευσης, και μια εγγραφή που ακυρώνεται αργότερα δεν γίνεται ολοκληρωμένη εγγραφή συσκευής.
| Measurement | Question it answers |
|---|---|
| Interface bytes | How much traffic crossed this layer |
rchar and wchar | How much data the process moved through system calls |
read_bytes and write_bytes | How much work reached the storage layer |
Γιατί ένας περιγραφέας αρχείου δεν είναι εγγραφή στον δίσκο
Ένα VPN χώρου χρήστη ανταλλάσσει πακέτα με τον πυρήνα μέσω μιας συσκευής TUN, η οποία είναι συσκευή χαρακτήρων και όχι κανονικό αρχείο. Η ανάγνωση από αυτήν παραδίδει ένα πακέτο· η εγγραφή σε αυτήν εγχέει ένα. Δεν υπάρχει σελίδα περιεχομένου αρχείου που προετοιμάζεται για αποθήκευση, ούτε διαδρομή συστήματος αρχείων που εμπλέκεται.
Γι’ αυτό μια πολυάσχολη σήραγγα μπορεί να δείχνει τεράστιους μετρητές χαρακτήρων με σχεδόν καθόλου μετρητές αποθήκευσης. Η διεργασία πραγματικά μετακίνησε αυτά τα byte, και ο πυρήνας πραγματικά δεν χρειάστηκε δίσκο για να το κάνει.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Διαβάστε την πρώτη έξοδο ως αθροιστική από την εκκίνηση της διεργασίας, όχι ως ρυθμό. Η δεύτερη δίνει την όψη της διεπαφής για την ίδια κίνηση. Ένα μεγάλο χάσμα μεταξύ τους είναι αναμενόμενο και δεν υποδηλώνει διαρροή, ουρά ή λανθασμένη ρύθμιση.
Από πού πραγματικά προέρχονται τα byte
Η επίμονη έξοδος έχει τον δικό της προϋπολογισμό, και τον κινούν οι λειτουργίες και όχι το ωφέλιμο φορτίο. Ένα αναλυτικό επίπεδο καταγραφής, μια λίστα πελατών που αλλάζει συχνά ή ένα σφάλμα που επαναλαμβάνεται σε σφιχτό βρόχο μπορούν να παράγουν σημαντικές εγγραφές ενώ η σήραγγα μεταφέρει ελάχιστα.
Ένα αρχείο κατάστασης είναι ένα στιγμιότυπο που ξαναγράφεται σε ένα διάστημα, οπότε το κόστος του εξαρτάται από το διάστημα και από το πόσες εγγραφές περιέχει. Δεν είναι ένα τρέχον αντίγραφο της κίνησης κάθε πελάτη, και η συντόμευση του διαστήματος αλλάζει τον όγκο εγγραφής χωρίς να αλλάζει τον όγκο κίνησης.
Η ιδιοκτησία μετράει όταν ψάχνετε αυτές τις εγγραφές. Αν η υπηρεσία παραδίδει μηνύματα σε έναν δαίμονα καταγραφής, το ημερολόγιο ή το αρχείο καταγραφής γράφεται από εκείνον τον δαίμονα, και τα byte εμφανίζονται στη λογιστική του δαίμονα και όχι στους δικούς της μετρητές της διεργασίας VPN. Το να κοιτάτε μόνο τη διεργασία VPN δεν εξηγεί ούτε τη δραστηριότητα του δίσκου ούτε την απουσία της.
Άλλοι συντελεστές παραβλέπονται εύκολα: αναγνώσεις πιστοποιητικών και διαμόρφωσης κατά την εκκίνηση, άγκιστρα που γράφουν τις δικές τους εγγραφές, πρόσθετα λογιστικής, απορρίψεις κατάρρευσης και άσχετα φορτία εργασίας στον ίδιο κεντρικό υπολογιστή. Κανένα από αυτά δεν πρέπει να εκτιμάται εξισώνοντας την κίνηση της σήραγγας με τα γραμμένα byte.
Διαβάζοντας κάθε μετρητή σωστά
Τρεις λεπτομέρειες καθορίζουν αν μια σύγκριση σημαίνει κάτι. Η ταυτότητα της διεργασίας μετράει, γιατί μια υπηρεσία που επανεκκινήθηκε μηδενίζει τους μετρητές της. Το χρονικό διάστημα μετράει, γιατί ένα αθροιστικό νούμερο και ένα γράφημα ανά δευτερόλεπτο είναι διαφορετικές μετρήσεις. Και η μονάδα μετράει, γιατί το τρέχον μέγεθος ενός αρχείου καταγραφής δεν είναι ούτε αυτό ρυθμός.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Αν υποψιάζεστε πραγματικές εγγραφές ωφέλιμου φορτίου, αναζητήστε ένα στοιχείο του οποίου η δουλειά είναι να αποθηκεύει ωφέλιμο φορτίο: ένα εργαλείο σύλληψης πακέτων, έναν μεσολαβητή που κρύβει σώματα, ένα πρόσθετο που αρχειοθετεί. Αυτά παράγουν κίνηση αποθήκευσης που κλιμακώνεται με το τι τους ζητείται να καταγράψουν, και ανήκουν σε ξεχωριστή πολιτική απόφαση για διατήρηση και πρόσβαση.
Σχεδιασμός χωρητικότητας με τον σωστό αριθμό
Διαστασιολογήστε τη διαδρομή πακέτων με αριθμούς δικτύου: ρυθμαπόδοση, κρυπτογραφική επεξεργασία και κίνηση μνήμης. Διαστασιολογήστε την αποθήκευση με τις επιλογές παρατηρησιμότητας που πραγματικά κάνατε: επίπεδο καταγραφής, διατήρηση, διάστημα κατάστασης και οποιαδήποτε σύλληψη είναι σκόπιμα ενεργοποιημένη.
Το να κρατάτε αυτούς τους δύο προϋπολογισμούς χωριστούς κάνει επίσης τα περιστατικά πιο ευανάγνωστα. Ένας γεμάτος δίσκος με μέτρια κίνηση σήραγγας δείχνει σε καταγραφές, συλλήψεις ή κάτι άσχετο, και ο μετρητής διεπαφής δεν θα το εξηγήσει ποτέ. Ένας κορεσμένος σύνδεσμος με ήσυχη καταγραφή δείχνει προς την άλλη κατεύθυνση.
Η σύγκριση που αξίζει είναι ανάμεσα σε μετρήσεις του ίδιου είδους. Byte διεπαφής έναντι byte διεπαφής με τον χρόνο σας λένε για τη διαδρομή. Εγγραφές αποθήκευσης έναντι χωρητικότητας αποθήκευσης σας λένε για τη διατήρηση. Η διασταυρούμενη σύγκριση, κίνηση έναντι δίσκου, μόνο σημαντική φαίνεται και ποτέ δεν είναι.