INT 21h

Hi, I am Vladimir Smagin, SysAdmin and Kaptain. Telegram Email / GIT / RSS / GPG

Python: анализ логов nginx в специальном формате

№ 8580 В разделах: Programming Sysadmin от December 24th, 2017,
В подшивках: ,

Один из проектов, который я веду вырос довольно геморройным и требовательным к производительности. Программа должна прочитать специально разогретый и смазанный лог нгинкса, извлечь всю необходимую мне информацию и отправить полученные данные в 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

Нет комментариев »

Leave a Reply

Your email address will not be published. Required fields are marked *

*

Облачная платформа

Микроблог перейти


🇷🇺 © Vladimir Smagin, 2005-2023. Копирование материалов без разрешения запрещено. GPG *
Яндекс.Метрика

Fortune cookie: Today's spam: Real Girl gone wild