Senario: Anda mengendalikan Nginx sebagai gerbang API dalam persekitaran Kubernetes. Lama kelamaan, anda perasan peningkatan latensi dan ralat 502 sekali-sekala. Perkhidmatan API itu sendiri sihat. Isu ini merujuk kepada lapisan middleware.
Gejala: Masa respons P95 meningkat daripada 200ms kepada 2s, ralat 502 Bad Gateway berselang-seli, dan log ralat Nginx menunjukkan mesej "upstream timed out" atau "connect() failed".
Diagnosis:
1. Periksa log ralat Nginx: tail -f /var/log/nginx/error.log
2. Periksa log akses dengan masa respons hulu: tail -f /var/log/nginx/access.log | awk '{print $NF}' (medan terakhir ialah masa respons hulu)
3. Periksa sambungan pekerja Nginx: curl http://localhost/nginx_status (memerlukan modul stub_status)
4. Lihat penggunaan sumber sistem: top, vmstat, netstat.
5. Analisis konfigurasi: periksa tetapan proxy_connect_timeout, proxy_read_timeout, worker_connections, keepalive.
Arahan untuk diagnosis:
- nginx -T untuk mencetak konfigurasi penuh.
- ab -n 1000 -c 100 http://your-api-gateway/ untuk ujian beban.
- curl -w "@curl-format.txt" -o /dev/null -s http://your-api-gateway/endpoint (dengan fail masa).
Kawalan Risiko:
- Sebelum membuat perubahan, buat sandaran fail konfigurasi: cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
- Gunakan persekitaran pementasan untuk menguji perubahan.
- Jika perubahan melibatkan muat semula, gunakan nginx -s reload dan bukannya mulakan semula.
- Untuk Kubernetes, kemas kini ConfigMap dan pelancaran semula secara beransur-ansur.
Pengoptimuman khusus:
- Tingkatkan worker_connections (cth., daripada 1024 kepada 4096) jika banyak sambungan serentak.
- Laraskan keepalive untuk hulu: proxy_http_version 1.1; proxy_set_header Connection "";
- Tingkatkan penimbal proksi: proxy_buffer_size 4k; proxy_buffers 8 4k;
- Pertimbangkan untuk menggunakan upstream dengan least_conn atau ip_hash untuk pengimbangan beban.
- Dayakan cache atau mampatan jika berkenaan.
Balik:
- Jika prestasi merosot selepas perubahan, kembalikan konfigurasi kepada sandaran: cp /etc/nginx/nginx.conf.bak /etc/nginx/nginx.conf && nginx -s reload
- Dalam Kubernetes, kembalikan ConfigMap dan gunakan versi sebelumnya.
Pengesahan: - Pantau masa respons menggunakan alat pemantauan sintetik (cth., Prometheus/Grafana) atau jalankan curl berulang. - Periksa log ralat untuk pengurangan ralat tamat masa. - Bandingkan kependaman P95 sebelum dan selepas.
Bila hendak menghantar tiket OpsGlobal: - Jika penalaan tidak menyelesaikan isu. - Jika anda mengesyaki masalah peringkat rangkaian di luar Nginx (cth., kependaman perkhidmatan hulu, isu DNS). - Jika anda memerlukan semakan pakar seni bina atau penalaan lanjutan (cth., penamatan SSL, sokongan WebSocket, pengehadan kadar). - Jika isu berselang-seli dan memerlukan pemeriksaan paket mendalam atau korelasi merentas pelbagai metrik.
Senario Penggunaan
Sesuai untuk pasukan yang menyelesaikan isu Performance dan memerlukan aliran kerja yang jelas.
Latar Belakang Masalah
Panduan praktikal untuk SRE dalam mendiagnosis dan menyelesaikan isu prestasi Nginx apabila digunakan sebagai middleware gerbang API, dengan langkah-langkah yang boleh diambil dan langkah berjaga-jaga keselamatan.
Langkah Penyelesaian
Sahkan impak dan perubahan terkini, kumpul log, konfigurasi dan metrik, kemudian baiki mengikut risiko.
Contoh Arahan
Gantikan contoh dengan nama sumber sebenar dan simpan kata laluan, token atau kunci dalam pembolehubah persekitaran.
Risiko
Sebelum operasi produksi, semak sandaran, akses, tetingkap perubahan dan pelan rollback.
Pelan Rollback
Simpan konfigurasi dan versi asal; rollback konfigurasi, imej atau perubahan pangkalan data jika metrik tidak normal.
Senarai Serahan
Rekod punca isu, arahan penting, langkah pembaikan, hasil pengesahan dan cadangan susulan.
Perlu bantuan isu teknikal serupa?
Jika pelayan, Kubernetes, Docker, CI/CD, pangkalan data atau pemantauan anda bermasalah, hantar log dan konfigurasi untuk diagnosis jauh.