№ 8580 В разделах: Programming
Sysadmin
от December 24th, 2017,
В подшивках: Nginx, Python
Один из проектов, который я веду вырос довольно геморройным и требовательным к производительности. Программа должна прочитать специально разогретый и смазанный лог нгинкса, извлечь всю необходимую мне информацию и отправить полученные данные в zabbix чтобы было видно здоровье фермы. В эту же программу вкорячил и вывод полной статистики по логу, а не только по конкретным кодам + добавил с какого времени начинать и заканчивать обработку. Больше всего боли приносят конвертации даты и времени при чтении лога. 6 секунд без указания времени против 40 секунд с точкой отсчета.
Пример обрабатываемого лога:
"172.31.30.163","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script.php HTTP/1.1"; "172.31.30.163","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script.php HTTP/1.1"; "172.31.30.163","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script-min.js HTTP/1.1"; "172.31.30.163","23/Dec/2017:15:38:08 +0000","302","GET /grabit/pixel.php HTTP/1.1"; "172.31.30.163","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script.php HTTP/1.1"; "172.31.9.241","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script.php HTTP/1.1"; "172.31.9.241","23/Dec/2017:15:38:08 +0000","200","GET /grabit/script-min.js HTTP/1.1";
Пример вывода:
$ python ./nginx-analyzer.py -h usage: nginx-analyzer.py [-h] --log logfile [--code HTTP_CODE] [--time] [--totime] [--summ] Get statistics from nginx special format log file optional arguments: -h, --help show this help message and exit --log logfile Of course, you need to parse something --code HTTP_CODE Show only response code --time Start counting from timestamp DD-MM-YYYY HH:MM:SS --totime Stop counting from timestamp DD-MM-YYYY HH:MM:SS --summ Display fancy summary $ time python ./nginx-analyzer.py --log nginx/http.access.log --summ --time "23-12-2017 15:37:00" HTTP codes | Type | Count ------------+---------------+----------- All | | 3,593,692 20x | Success | 3,188,176 30x | Redirection | 395,021 40x | Client errors | 86 500 | Server errors | 5,855 502 | Server errors | 56 50x | Server errors | 5,911 real 0m39,535s user 0m39,398s sys 0m0,136s $ time python ./nginx-analyzer.py --log nginx/http.access.log --code 404 83 real 0m5,790s user 0m5,702s sys 0m0,088s
Fortune cookie: Today's spam: Real Girl gone wild
Leave a Reply