Hôm nay Server hết đĩa!

Chuyện là hôm nay chúng tôi đang vẫn làm việc như một con ong chăm chỉ theo lời của một cô gái trong khu tự trị - ITC (Information Technology Center).

Bỗng nhiên đâu đó trên tất cả mặt trận channel bao gồm Skype, Telegram, GG Chat,... xuất hiện chung một nội dung: "Trang web không vào được". Vậy là thay vì làm việc chăm chỉ thì chúng tôi lại fix bugs sấp mặt như bao lần những sự cố khác.


Ảnh mô tả lỗi

Lần này đặc biệt hơn là có sự tham gia của leader tôi. Người từng mắng tôi là "Code như mấy đứa sinh viên ấy hả". Nhưng lần này mọi thứ đã thay đổi tôi đã tốt nghiệp lấy bằng Đại học, không còn là thanh niên sinh viên chưa tốt nghiệp mà đi code nữa.

Trở về chuyện cái WEB không vào được. Chúng tôi mở trang web trên trình duyệt Chrome thì thấy trắng trơn, cũng không thể inspect ngay trên trang đó được. Ngược đời thay nó lại mở được trên Firefox <= WTF.
Những trình duyệt khác thì chưa thử vì thời gian đâu mà thử nữa.
Trên Firefox thì hiện nội dung nhưng mọi liên kết href đều không nhảy qua trang được.

Web viết bằng Ruby build ra thành file HTML tĩnh nên chỉ cần 1 con load balancer đứng bên ngoài là chạy được. Bình thường nó có vấn đề gì đâu. Nãy vừa còn xem được giờ thì không. What the hell - tôi lại chửi thề.

Thế là tôi phải kiểm tra thử có commit nào lên master hay không rồi lịch sử build của con Jenkins để xem thử có ai build bản mới nào không.
Không có gì xảy ra cả. Lần cuối cùng build các đây cả chục tiếng, lúc đó không có lỗi gì hết.

Sau khi check xong về application đều không có vấn đề gì, tôi hoàn toàn chịu thua nên đành nhờ vả, năn nỉ, ỷ ôi tới BOSS của mình là Team Leader để tìm cách giải quyết.
Vậy là ảnh bắt đầu tìm hiểu nguyên nhân xem log từ load balancer tới log application. debug từ trình duyệt này tới trình duyệt kia.

Ánh sáng lóe lên khi debug network Chrome xuất hiện dòng: Nginx INCOMPLETE_CHUNKED_ENCODING.
Thuật lại theo lời của các Gosu trên StackOverFlow. Nguyên nhân có thể là do con Nginx load file web quá nặng, nên nó sẽ viết nội dung xuống thư mục tạm trước khi trả nội dung của browser. Nếu trong quá trình ghi file xuống thư mục tạm bị lỗi, Nginx sẽ throw ra lỗi INCOMPLETE_CHUNKED_ENCODING.
Phần này phải tham khảo thêm con nginx.
Link: https://stackoverflow.com/questions/29789268/neterr-incomplete-chunked-encoding-nginx


Ảnh không liên quan lắm tại vì server bên mình dùng Linux không dùng Windows

Trong lúc tôi đọc search StackOverFlow thì BOSS tôi nói rằng: "SEVER hết ĐĨA".
Chính xác là như vậy các bác ạ, hết đĩa nên NGINX không ghi thêm dữ liệu xuống đĩa nữa. :(

Palladino-conf2016-slide18_API-Gateways-and-Kong-Can-Help-23-52-1024x573

KONG API GATEWAY

Bên tôi dùng Kong API để làm API Gateway lẫn Load Balancer. Kong API dùng Postgres để lưu trữ dữ liệu. Hết ĐĨA con Postgres cũng down.
Vậy là down 1 loạt không chỉ con web.

Câu hỏi nhiều người đặt ra sao hết đĩa lại không có alert? Thật ra là con server này là con server test để anh em chúng tôi vọc phá, quậy nát, thử nghiệm tính năng mới cũng như phục vụ công tác nghiên cứu khoa học của cả team.

Trở lại việc hết đĩa. Nói là chuyện buồn nhưng thật ra anh em bọn tôi lại có cơ hội thực hành lại vài câu lệnh thần thánh như rm -rf * để delete files, học thêm vài lệnh linux như check dung lượng thư mục: https://www.ostechnix.com/find-size-directory-linux cũng như quan tâm tới DC Test nhiều hơn, không được ghẻ lạnh với nó.
Bớt yêu thương Production đi một chút.

Sau khi clear hết đống file, folder chủ yếu là logs thì giảm hết 50% disks. Mọi thứ hoạt động lại bình thường nhưng chưa từng có INCIDENT xảy ra.

Chuyện là tới đây, làm tách trà, nghiên cứu thêm về Nginx và chuẩn bị nội dung ngày cuối tuần làm INCIDENT report. :)