|
Το αρχείο καταγραφής πρόσβασης στο web (access_log) καταγράφει τη συμπεριφορά πρόσβασης όλων των εξωτερικών υπολογιστών-πελατών στο διακομιστή web, συμπεριλαμβανομένων σημαντικών πληροφοριών όπως η IP του υπολογιστή-πελάτη, η ημερομηνία πρόσβασης, ο πόρος URL στον οποίο έγινε πρόσβαση, ο κωδικός κατάστασης HTTP που επιστρέφεται από το διακομιστή και ούτω καθεξής. Ένα τυπικό αρχείο καταγραφής πρόσβασης στο web μοιάζει με αυτό: 112.97.37.90 - - [14/Sep/2013:14:37:39 +0800] "GET / HTTP/1.1" 301 5 "-" "Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; Lenovo A326 Build/GRK39F) AppleWebKit/533.1 (KHTML, όπως Gecko) Έκδοση/4.0 Mobile Safari/533.1 MicroMessenger/4.5.1.259" -
Σχεδιασμός: 1. Για να λύσετε το πρόβλημα: Όταν ο ιστότοπος έχει μεγάλο αριθμό επισκέψεων, θα υπάρχουν πολλά δεδομένα καταγραφής και εάν όλα είναι γραμμένα σε ένα αρχείο καταγραφής, το αρχείο θα γίνεται όλο και μεγαλύτερο. Η ταχύτητα των μεγάλων αρχείων θα επιβραδυνθεί, όπως εκατοντάδες megabyte ενός αρχείου. Κατά την εγγραφή αρχείων καταγραφής, επηρεάζει την ταχύτητα λειτουργίας. Επίσης, αν θέλω να δω τα αρχεία καταγραφής πρόσβασης, ένα αρχείο αρκετών εκατοντάδων megabit αργεί να κατεβάσει και να ανοίξει. Χρησιμοποιώντας ένα δωρεάν εργαλείο ανάλυσης αρχείων καταγραφής τρίτου μέρους - Log Treasure, μπορείτε να ανεβάσετε αρχεία καταγραφής από nginx, apache και iis, τα οποία βοηθούν στην ανάλυση πτυχών ασφάλειας ιστότοπου. Άλλωστε, η εξειδίκευση είναι πιο επαγγελματική. Το Log Bao έχει επίσης όριο μεγέθους για τα μεταφορτωμένα αρχεία, όχι περισσότερο από 50 μέτρα.
2. Το Nignx δεν διαθέτει μηχανισμό αυτόματου διαχωρισμού αρχείων και αποθήκευσης αρχείων καταγραφής. Δεδομένου ότι το nginx δεν αποθηκεύει αυτόματα αρχεία για εσάς. Επομένως, πρέπει να γράψετε το δικό σας σενάριο για να το εφαρμόσετε.
Το αρχείο σεναρίου κελύφους nginx_log_division.sh τα ακόλουθα περιεχόμενα:
# /κάδος/bash logs_path="/data/wwwlogs/" #以前的日志文件. log_name="xxx.log" pid_path="/usr/local/nginx/logs/nginx.pid"
mv ${logs_path}${log_name} ${logs_path}${log_name}_$(ημερομηνία --date="ΠΡΟΗΓΟΥΜΕΝΗ ΕΒΔΟΜΑΔΑ" +"%Y-%m-d").log
kill -USR1 'cat ${pid_path}'
Η αρχή του παραπάνω σεναρίου κελύφους είναι πρώτα να μετακινήσετε και να μετονομάσετε το προηγούμενο αρχείο καταγραφής σε ένα, ο σκοπός είναι η δημιουργία αντιγράφων ασφαλείας. Σύμφωνα με το όνομα της τελευταίας Δευτέρας, όταν το σενάριο εκτελείται στο χρονικό σημείο "2013-09-16", τότε το όνομα αρχείου που δημιουργείται είναι "xxx.log_ 20130909.log". Ακόμα κι αν η εντολή mv έχει εκτελεστεί στο αρχείο πριν από την εκτέλεση του kill -USR1 'cat ${{pid_path}'Άλλαξε το όνομα αρχείου, το Nginx θα εξακολουθεί να γράφει δεδομένα καταγραφής στο νέο αρχείο "xxx.log_20130909" ως συνήθως. Ο λόγος είναι ότι στα συστήματα Linux, ο πυρήνας αναζητά αρχεία που βασίζονται σε περιγραφείς αρχείων.
---------------- κατανόηση των περιγραφέων αρχείων Linux
Ένας περιγραφέας αρχείου είναι ένα ακέραιο αναγνωριστικό που ονομάζει ο πυρήνας του Linux για κάθε ανοιχτό αρχείο. Ο πυρήνας Linux δημιουργεί (ή διατηρεί) ένα "Πίνακας περιγραφής αρχείωνΑυτός ο πίνακας περιγραφής αρχείων καταγράφει "το αρχείο που ανοίγει με αυτήν τη διαδικασία (προσδιορίζεται)". Σε αυτό το περιβάλλον, το nginx είναι μια διεργασία που εκτελείται και έχει ήδη ανοίξει ένα αρχείο καταγραφής και καταγράφει το αρχείο στον πίνακα περιγραφής αρχείων. Ακόμα κι αν η διαδρομή του αρχείου καταγραφής έχει αλλάξει, μπορεί να βρεθεί (μπορεί να εντοπιστεί σύμφωνα με τον πίνακα περιγραφής αρχείου). ---------------------------------------------- Κατά την εκτέλεση της εντολής "kill -USR1 'cat ${pid_path}'", το αποθηκευμένο στο αρχείο nginx.pid είναι στην πραγματικότητα ένας αριθμός (μπορείτε να το ανοίξετε και να ρίξετε μια ματιά, είμαι 894 εδώ) και το nginx γράφει το pid (αριθμός διαδικασίας) της κύριας διεργασίας του στο αρχείο nginx.pid, ώστε να μπορείτε να λάβετε απευθείας τον κύριο αριθμό διεργασίας του μέσω της εντολής cat και να χειριστείτε απευθείας τον καθορισμένο αριθμό διεργασίας.
kill -USR1 'cat ${pid_path}' ισοδυναμεί με kill –USR1 894 #指定发信号 (USR1) σήμα για την αρίθμηση αυτής της διαδικασίας.
Στα συστήματα Linux, το Linux επικοινωνεί με "τρέχουσες διαδικασίες" μέσω σημάτων. Στα συστήματα Linux, υπάρχουν επίσης πολλά προκαθορισμένα σήματα, όπως το SIGHUP. Το USR1 είναι ένα σήμα που ορίζεται από το χρήστη. Μπορεί να γίνει κατανοητό ως η ίδια η διαδικασία που καθορίζει τι πρέπει να κάνει όταν λαμβάνει αυτό το σήμα (δηλαδή, ο ίδιος ο συγγραφέας της διαδικασίας αποφασίζει αν θα λάβει αυτό το σήμα ή δεν θα κάνει τίποτα και το αφήνει εξ ολοκλήρου στον προγραμματιστή να αποφασίσει). Στο nginx, γράφει τον δικό του κώδικα για να χειριστεί τον χειρισμό του nginx να ανοίξει ξανά το αρχείο καταγραφής όταν λαμβάνω σήμα USR1. Η συγκεκριμένη αρχή είναι η εξής: 1. Η κύρια διαδικασία του nginx λαμβάνει το σήμα USR1 και θα ανοίξει ξανά το αρχείο καταγραφής (που πήρε το όνομά του από το όνομα καταγραφής στο αρχείο διαμόρφωσης nginx, το οποίο είναι η τιμή που ορίζεται από το στοιχείο access_log στο αρχείο διαμόρφωσης και εάν το αρχείο δεν υπάρχει, θα δημιουργηθεί αυτόματα ένα νέο αρχείο xxx.log).
2. Στη συνέχεια, αλλάξτε τον κάτοχο του αρχείου καταγραφής σε "διεργασία εργασίας", έτσι ώστε η διεργασία να έχει δικαιώματα ανάγνωσης και εγγραφής στο αρχείο καταγραφής (ο κύριος και ο εργαζόμενος συνήθως εκτελούνται ως διαφορετικοί χρήστες, επομένως ο κάτοχος πρέπει να αλλάξει).
3. Η κύρια διαδικασία nginx θα κλείσει το διπλότυπο αρχείο καταγραφής (δηλαδή, το αρχείο που μετονομάστηκε σε xxx.log_ 20130909.log χρησιμοποιώντας την εντολή mv μόλις τώρα),και ειδοποιεί τη διεργασία να χρησιμοποιήσει το αρχείο καταγραφής που μόλις άνοιξε(xxx.log το αρχείο που άνοιξε η κύρια διαδικασία μόλις τώρα). Η συγκεκριμένη υλοποίηση είναι πιο λεπτομερής, η κύρια διαδικασία στέλνει το σήμα USR1 στον εργαζόμενο και αφού λάβει αυτό το σήμα, ο εργαζόμενος θα ανοίξει ξανά το αρχείο καταγραφής (δηλαδή, το xxx.log που συμφωνήθηκε στο αρχείο διαμόρφωσης)
=================================== Εκτελέστε σενάρια σε τακτά χρονικά διαστήματα
Ορίστε το παραπάνω αρχείο δέσμης ενεργειών κελύφους για προσθήκη στην προγραμματισμένη εργασία. Το crontab είναι μια προγραμματισμένη διαδικασία εργασιών στο Linux. Αυτή η διαδικασία θα ξεκινήσει όταν την ενεργοποιήσετε και θα πηγαίνει στη λίστα της κάθε τόσο για να δει εάν υπάρχουν εργασίες που πρέπει να εκτελεστούν.
crontab -ε
* 04 * * 1 /data/wwwlogs/nginx_log_division.sh
Θα ανοίξει ένα αρχείο με την προσθήκη του παραπάνω κώδικα Η μορφή είναι "Διαδρομή αρχείου κελύφους προς εκτέλεση". * μπορεί να γίνει κατανοητό ως «κάθε», κάθε λεπτό, κάθε ώρα, κάθε μήνας κ.λπ. Ρύθμισα ένα σενάριο για να εκτελείται nginx_log_division.sh στις 4 π.μ. τη Δευτέρα και το περιεχόμενο του σεναρίου είναι να αναδημιουργήσει ένα νέο αρχείο καταγραφής.
Επισυνάπτεται:ΕγκαθιδρύωNginxΠώς ρυθμίζονται οι παράμετροι των αρχείων καταγραφής
log_format ιστότοπος '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" $http_x_forwarded_for';
access_log ιστότοπος /data/wwwlogs/xxxx.com.log #第二个参数表示使用那个日志格式, προσδιορίζεται ένα όνομα για κάθε μορφή καταγραφής και η τοποθεσία αντιστοιχεί στο όνομα στο log_format
Τα παραπάνω περιλαμβάνουν τη χρήση του crontab scheduled task manager.
Υπάρχουν επίσης μέρη όπου δεν υπάρχει πλήρης κατανόηση και λάθη. Ελπίζω να ενημερώσω στο μέλλον.
|