Анализ логов IIS с использованием pandas
Задача сама по себе не сложная и решается силами чистого питона плюс-минус понятно, но пытаюсь прикрутить к ее решению pandas. Раньше для подобных задач все конвертил в эксель, но в данном случае (около 6 млн строк) эксель дает дуба :) Есть логи IIS и я хочу получить из них информацию о количестве запросов к серверу, например в интервалы по 10 минут (т.е. это разбиение на временные интервалы)
из логов получил датафрейм (взял маленький кусок для примера):
df = get_dataframe(get_log_list())
date time cs-username timestamp 0
2022-05-17 01:36:55 - 2022-05-17 01:36:55 1
2022-05-17 01:36:59 test1 2022-05-17 01:36:59 2
2022-05-17 01:37:09 - 2022-05-17 01:37:09 3
2022-05-17 01:37:10 test1 2022-05-17 01:37:10 4
2022-05-17 04:51:55 - 2022-05-17 04:51:55 ...
- Никак не могу разобраться, как получить количество запросов к серверу поинтервально (с шагом в 10 минут, например): то есть получить результат, для приведенного примера, вида:
2022-05-17 01:20:00 - 0
2022-05-17 01:30:00 - 25
2022-05-17 01:40:00 - 100
2022-05-17 01:50:00 - 300
etc
- Как в целом применять условие "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому". например учитывать при подсчете только запросы без авторизации, т.е. с пустым юзернеймом или наоборот?
Ответы (1 шт):
попробуйте как-то так:
# устанавливаем timestamp как индекс и преобразуем в тип datetime
df = pd.read_excel('1.xls',index_col='timestamp',parse_dates=True)
df = df.resample('10min').size()
>>> df.head()
'''
timestamp
2022-05-18 05:00:00 4
2022-05-18 05:10:00 0
2022-05-18 05:20:00 28
2022-05-18 05:30:00 56
2022-05-18 05:40:00 16
Freq: 10T, dtype: int64
а на счет "учитывать только запросы где "cs-username равно какому-то определенному значению или пустому", вы можете использовать фильтрацию строк, например: df[df['cs-username']=='test1']