Monitor server log files with the new way

1 minute read

Published:

Problem

Vào một ngày nọ, sau khi phát triển xong tính năng và build lên môi trường test được một thời gian, bạn được tester log lên một quả bug ly kì thông báo đã có lỗi 500: Internal Server Error đã xảy ra. Bạn tự nhủ rằng: Oh, shit và xắn tay áo lên bắt đầu quá trình truy tìm thủ phạm thông qua những file logs trên server… nhưng bạn chợt nhân ra việc đầu tiên cần làm là phải access vào server đã…ah..um.

ssh fruitful@192.168.5.21

Tiếp đến là di chuyển vào thư mực chứa file log mà bạn muốn tìm hoặc xem luôn file log theo thời gian thực:

cd eko/app/test/logs
tail -fn500 eko-portal-test.log

OR

tail -fn500 eko/app/test/logs/eko-portal-test.log

Bình thường mình cũng làm tương tự như trên, nhưng đến một ngày mà mình cảm thấy việc monitor log kiểu này tốn nhiều thao tác và tương đối nhàm chán khi mỗi lần muốn monitor log thì mình phải lặp đi lặp lại mỗi chuối thao tác y hệt nhau, thế nên sau hàng giờ tìm kiếm sự giúp đỡ của chú Google thì cuối cùng cũng mò ra được một giải pháp tương đối ưng ý.

Solution

Ý tưởng ban đầu là bạn cần bỏ đi bước trung gian chính là ssh trực tiếp vào server, bạn cần phải tìm cách nào đó để chỉ với duy nhất một câu lệnh là có thể monitor được file log nằm trên server theo thời gian thực. Tuy nhiên thông thường bạn không chỉ monitor log một file trên một server mà là nhiều file logs trên nhiều servers khác nhau cùng lúc cho nên bạn cũng cần phải làm động câu lệnh của mình và khiến nó dùng lại được. Sau khi quá trình chuẩn bị hoàn tất thì chỉ việc gán alias cho câu lệnh là xong.

Bashscript

#!/bin/bash
config=.$(echo $0)rc
echo "eko(){" >> $config
echo "   ssh -t fruitful@192.168.5.21 "tail -fn500 eko/app/\$1/logs/eko-\$2-\$1.log"" >> $config
echo "}" >> $config
echo "alias etp='eko test portal'" >> $config
source $config

Mở terminal gõ etp và cảm nhận.


Thank for reading.