Δοκιμή kill switch: μετρήστε το κενό, όχι μόνο την επανασύνδεση
Μια γρήγορη επανασύνδεση αποδεικνύει ότι ο πελάτης είναι γρήγορος. Καταγράψτε τι έφυγε από το μηχάνημα κατά το κενό, μαζί με το έναυσμα που χρησιμοποιήσατε, αλλιώς η δοκιμή μέτρησε μόνο το μισό.
Μια επανασύνδεση που ολοκληρώνεται σε ένα δευτερόλεπτο σας λέει ότι ο πελάτης είναι γρήγορος. Δεν σας λέει αν κάτι διέφυγε όσο η σήραγγα ήταν κάτω. Μια επανασύνδεση που παίρνει ένα λεπτό σας λέει ότι ο πελάτης είναι αργός, και πάλι δεν σας λέει αν επιτράπηκε άμεση κίνηση στο κενό. Αυτές είναι δύο μετρήσεις, και μια δοκιμή kill switch που αναφέρει μόνο την πρώτη δεν δοκίμασε τον διακόπτη.
Δύο παρατηρήσεις, δύο χωριστές ετυμηγορίες
Το ερώτημα διαθεσιμότητας είναι απλό: πότε έγινε ξανά χρησιμοποιήσιμη η σήραγγα, και χρειάστηκε η προστατευμένη εφαρμογή νέα σύνδεση για να φτάσει εκεί. Το ερώτημα επιβολής είναι διαφορετικό: ποια πακέτα έφυγαν από το μηχάνημα μεταξύ της στιγμής που έπεσε η προστασία και της στιγμής που επέστρεψε.
Απαντήστε τους με χωριστές καταγραφές. Μια γραμμή λέει ότι το κενό κράτησε έναν ορισμένο αριθμό δευτερολέπτων. Μια άλλη γραμμή λέει αν ένα μη προστατευμένο αίτημα πέτυχε κατά το κενό. Η συγχώνευσή τους σε ένα μόνο πέρασε ή απέτυχε κρύβει την περίπτωση που μετράει περισσότερο: μια γρήγορη επανασύνδεση με διαρροή.
Χτίστε έναν ανιχνευτή που μπορείτε να χρονομετρήσετε
Χρησιμοποιήστε ένα αίτημα που είναι αβλαβές, φθηνό και ανεξάρτητο από το δικό του κανάλι ελέγχου της σήραγγας. Ο βρόχος παρακάτω εκτυπώνει μια χρονική σφραγίδα, μια κατάσταση HTTP και τον χρόνο που πέρασε μία φορά το δευτερόλεπτο, και αποτυγχάνει ηχηρά αντί να κολλήσει:
while true; do
printf '%s ' "$(date +%H:%M:%S)"
curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 2 https://example.com || echo "curl-exit-$?"
sleep 1
done
Διαβάστε τους κωδικούς εξόδου του curl, όχι μόνο την κατάσταση. Το 28 σημαίνει ότι το αίτημα έληξε, έτσι φαίνεται μια φραγμένη διαδρομή. Το 6 σημαίνει ότι η επίλυση ονομάτων απέτυχε, που είναι διαφορετικό εύρημα και συχνά το πιο ενδιαφέρον. Το 200 με μικρό χρόνο που πέρασε κατά το κενό σημαίνει ότι η κίνηση αφέθηκε να βγει.
Γράψτε την έξοδο σε ένα αρχείο και κρατήστε το. Το ιστορικό του τερματικού δεν είναι απόδειξη, και το ενδιαφέρον μέρος είναι συνήθως τρεις γραμμές στη μέση.
Προκαλέστε μια πραγματική αστοχία, όχι μια τακτοποιημένη
Η αποσύνδεση από το μενού του ίδιου του πελάτη δοκιμάζει τη συνεργατική διαδρομή, όπου ο πελάτης έχει χρόνο να εγκαταστήσει τους κανόνες φραγής του. Σκοτώστε τη διεργασία αντ’ αυτού, ή κόψτε τον υποκείμενο σύνδεσμο, και δοκιμάζετε τη διαδρομή που ακολουθεί μια πραγματική αστοχία.
Κάθε έναυσμα ασκεί διαφορετική διαδρομή κώδικα. Μια διακοπή στην πλευρά του διακομιστή, μια τοπική απώλεια ζεύξης και μια κατάρρευση του πελάτη μπορούν να αφήσουν διαφορετική κατάσταση, και μία από αυτές είναι πιθανώς η περίπτωση που θα συναντήσετε τελικά. Εκτελέστε τον ανιχνευτή με τουλάχιστον δύο εναύσματα και επισημάνετε τα αποτελέσματα ανά έναυσμα.
Διαβάστε το αρχείο καταγραφής για το πώς μοιάζει η επιτρεπόμενη κίνηση
Ένα 200 ή μια γρήγορη αποτυχία σύνδεσης κατά το κενό είναι διαρροή, προς όποια κατεύθυνση κι αν δείχνει. Τα χρονικά όρια σε όλο το κενό είναι το αναμενόμενο σχήμα μιας πολιτικής φραγής. Η επιτυχής επίλυση ονομάτων ενώ οι συνδέσεις αποτυγχάνουν υποδηλώνει ότι ο επιλυτής είναι ακόμη προσβάσιμος, που είναι διαρροή άλλου είδους.
Οι υπάρχουσες υποδοχές χρειάζονται προσοχή. Ένα πρόγραμμα μπορεί να συνεχίσει να χρησιμοποιεί μια σύνδεση που άνοιξε πριν από την αποσύνδεση, οπότε η φαινομενικά ζωντανή κίνηση μπορεί να μην αποδεικνύει ότι επιτράπηκε νέα διαδρομή. Η λίστα υποδοχών δείχνει αν μια σύνδεση είναι παλαιότερη από το συμβάν:
ss -tunp | grep -E 'ESTAB|SYN-SENT' ip route get 198.51.100.7 resolvectl status | sed -n '1,20p'
Συγκρίνετε την ώρα έναρξης της υποδοχής με τη χρονική σφραγίδα της αποσύνδεσης. Μια σύνδεση παλαιότερη από τη διακοπή είναι απόδειξη επαναχρησιμοποίησης υποδοχής, όχι διαρροής, και η αναφορά της ως αστοχίας στέλνει τον επόμενο άνθρωπο να κυνηγήσει ένα σφάλμα που δεν υπάρχει.
Καταγράψτε το αποτέλεσμα σε μορφή που αντέχει μια ενημέρωση
Γράψτε το έναυσμα, το κενό σε δευτερόλεπτα, αν πέτυχε οποιοδήποτε μη φραγμένο αίτημα, αν πέτυχε η επίλυση ονομάτων, και τις εκδόσεις του πελάτη και του λειτουργικού συστήματος. Αυτό το σύνολο πέντε γεγονότων μπορεί να συγκριθεί μεταξύ εκδόσεων, κάτι που μια παράγραφος πεζού λόγου δεν μπορεί.
Επαναλάβετε την ίδια δοκιμή μετά από ενημέρωση του πελάτη ή αλλαγή προφίλ, επειδή η συμπεριφορά φραγής είναι λεπτομέρεια υλοποίησης και μετακινείται. Το νόημα της καταγραφής είναι να προσέξετε τη μετακίνηση πριν γίνει περιστατικό, όχι να πιστοποιήσετε τον πελάτη μία φορά.