- Анализ нагрузки на веб-сервер Linux
- Нагрузка на сервер
- Нагрузка по процессам
- Оперативная память
- Нагрузка на диск
- Сетевая активность
- Что грузит систему
- Использование lsof
- Анализ error-логов
- Статистика веб-сервера
- Apache
- NGINX + PHP-FPM
- Долгие запросы
- MySQL / MariDB
- PHP-FPM
- Мониторинг http и https трафика в linux. Установка и настройка mitmproxy в ubuntu
- Установка mitmproxy в ubuntu
- Настройка mitmproxy в ubuntu
- Мониторинг http трафика
- Мониторинг https трафика с помощью mitmproxy
- Как проверить исходящие HTTP-запросы одного приложения?
Анализ нагрузки на веб-сервер Linux
В данной статье пойдет речь о мониторинге нагрузки, именно, в контексте веб-сервера. Мы не будем особо заострять внимание на проверке производительности системы, как, например, командами top, htop, free и так далее.
Нагрузка на сервер
Анализ нагрузки стоит начать с общих метрик — потребление процессорного времени, памяти, нагрузки на сеть и дисковую систему.
Нагрузка по процессам
Проверить, нагружен ли сервер, а также понять, какой именно процесс больше всего потребляет ресурсов можно с помощью команд:
* по сути, все 3 вышеперечисленные команды выдают одну и туже информацию в разном виде. Какой-то из них может оказаться удобнее пользоваться. Утилита top встроена в систему, для использования остальных необходимо установить одноименные пакеты.
Оперативная память
Для определения объема свободной и занимаемой памяти можно воспользоваться командой:
* предыдущие команды тоже показывали утилизацию памяти, но кому-то команда free может показаться нагляднее.
Нагрузка на диск
Для определения нагрузки на дисковую систему, используем утилиту iotop. Сначала ее нужно установить.
а) На системы Debian / Ubuntu:
apt-get install iotop
б) На системы Red Hat / CentOS:
yum install iotop
После выполняем следующую команду:
Сетевая активность
Для измерения нагрузки на сеть необходимо установить утилиту nload.
а) В CentOS / Red Hat:
yum install nload
б) В Ubuntu / Debian:
apt-get install nload
После установки, запускаем утилиту командой:
* в данном примере будет запущена статистика для использования сетевого интерфейса eth0.
Что грузит систему
Даже, если мы увидим, что на веб-сервере заканчивается оперативная память или загружен процессор, мы не сможем найти источник проблемы, которым, чаще всего, является некорректно работающий скрипт. Поэтому, определяем, какой файл на сервере вызывает нагрузку.
Использование lsof
lsof — утилита командной строки, которая отображает какие файлы используются процессами. Она позволит определить, к каким скриптам идет обращение со стороны веб-сервера. Для начала, необходимо установить lsof.
а) В CentOS / Red Hat:
yum install lsof
б) В Ubuntu / Debian:
apt-get install lsof
Теперь можно выполнить следующие команды:
* первая команда покажет, к каким файлам обращается apache, вторая — php-fpm (часто можно увидеть в связке с nginx).
Анализ error-логов
Анализ логов ошибок позволит не только обнаружить проблемы в работе сайта, но и найти причину его медленной работы. По умолчанию, логи находятся в каталоге /var/log. Если мы не меняли расположение логов, запускаем следующие команды:
tail -f /var/log/nginx/error.log
* лог ошибок nginx.
tail -f /var/log/php-fpm/error.log
* лог ошибок php-fpm.
tail -f /var/log/httpd/error_log
* лог ошибок apache в CentOS.
tail -f /var/log/apache2/error_log
* лог ошибок apache в Ubuntu.
В первую очередь, нужно обратить внимание на повторяющиеся ошибки — они могут быть причиной проблем. Лучше всего, добиться полного отсутствия ошибок, внеся исправления в работу сайта. Возможно, это устранит проблемы производительности.
Статистика веб-сервера
Для веб-серверов можно воспользоваться служебной страницей просмотра статуса. Она может показать статистику запросов к веб-серверу.
Apache
Для Apache необходим модуль mod_status, который идет в комплекте с данным веб-сервером. Проверить подключение модуля можно в конфигурационном файле httpd.conf (в разных Linux системах может находится в различных каталогах).
По умолчанию, server-status не активен. Создаем конфигурационный файл.
Для CentOS / Red Hat:
Для Ubuntu / Debian:
* где 2 — используемая версия apache.
В открытый конфигурационный файл добавим:
servername 111.111.111.111
Sethandler server-status
* где 111.111.111.111 — IP-адрес нашего веб-сервера; 80 — порт, на котором слушает apache.
* в данном примере мы прописали два варианта просмотра статистики: первый — обращение в браузере к серверу по IP-адресу + /server-status; второй — обращение к любому сайту + /server-status. Разные способы оправданы для разных настроек самих сайтов и используемых CMS.
Проверим корректность внесенных данных и перезапустим веб-сервер apache:
systemctl restart httpd || systemctl restart apache2
Теперь открываем браузер и вводим название сайта + /server-status, например, http://www.dmosk.ru/server-status. Или обращаемся к серверу по IP-адресу, например, http://111.111.111.111/server-status.
NGINX + PHP-FPM
Открываем конфигурационный файл nginx:
В секцию http добавляем:
.
server <
listen 80;
server_name 111.111.111.111;
location /server-status <
stub_status on;
>
>
.
* где 111.111.111.111 — IP-адрес нашего веб-сервера.
Проверяем корректность настройки и перезапускаем nginx:
systemctl restart nginx
Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:
Теперь настроим статистику для php-fpm. В конфигурационном файле nginx в нашу директиву server добавим:
.
server <
listen 80;
server_name 78.110.63.31;
location /server-status <
stub_status on;
>
location /status <
access_log off;
include fastcgi_params;
#fastcgi_pass unix:/var/run/php-fpm/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
>
>
.
* обратите внимание на закомментированную строку и строку под ней. В зависимости от того, как настроен php-fpm (слушает на порту или через сокетный файл) необходимо настроить nginx. В данном примере подразумевается, что php-fpm слушает на 9000 порту.
Открываем конфигурационный файл php-fpm:
Снимаем комментарий со следующей строки:
Проверяем настройку nginx, перезапускаем его и php-fpm:
systemctl restart nginx
systemctl restart php-fpm
Открываем браузер и заходим на страницу 111.111.111.111/server-status. Мы должны увидеть статистику использования сервера:
Долгие запросы
С помощью длительных запросов к веб-серверу или СУБД можно сделать выводы о том, что является узким местом в работе сервиса.
MySQL / MariDB
Для начала, воспользуемся инструкцией, чтобы настроить ведение лога медленных запросов (для MySQL или MariaDB).
После, воспользовавшись статистикой, находим неоптимальные запросы. В одних случаях необходимо будет переписать сам запрос, в других — создать индексы базы данных.
PHP-FPM
Открываем конфигурационный файл:
Редактируем следующие параметры:
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/www-slow.log
* request_slowlog_timeout определяет время, в течение которого должен выполняться запрос, чтобы он считался медленным; slowlog — путь до лога, куда будет сохранена информация о медленных запросах.
systemctl restart php-fpm
Непрерывный просмотр лога можно запустить командой:
Источник
Мониторинг http и https трафика в linux. Установка и настройка mitmproxy в ubuntu
Привет! Не так давно мне понадобилось прослушать http трафик одного
ресурса в linux. Сначала я хотел использовать tcpdump, но трафик передавался через https. Мне нужно было что то простое, легкое в установке, но в тоже время подходящее под мои задачи. Перерыв интернет в поиске доступного решения я наконец нашел то что мне нужно — это mitmproxy. Аббревиатура «mitm» означает «человек посередине» — это вид атаки, когда все запросы между клиентом и сервером проходят через стороннее ПО, которое встраивается между клиентом и сервером и прослушивает весь проходящий трафик. Mitmproxy умеет прослушивать http и https трафик в linux, а так же обладает различными полезными функциями.
Установка mitmproxy в ubuntu
Настройка mitmproxy в ubuntu
Перед запуском mitmproxy необходимо настроить браузер, или систему, указав в их настройках порт mitmproxy. Объяснять как это сделать в этой статье считаю лишним, но по браузеру chromium кое что поясню, когда я зашел в настройки прокси в браузере, я увидел это:
Пришлось править конфиг файл chromium. Для этого пришлось отредактировать файл /etc/chromium-browser/default, добавив туда параметр:
и после перезапустить браузер.
В моем случае mitmproxy установлен на локальный компьютер, то есть в поле «адрес» нужно будет прописать адрес локального хоста 127.0.0.1.
Как указать прокси сервер для некоторых других приложений в ubuntu, описано здесь.
Всё, можно приступать к запуску mitmproxy. Запускается он из терминала:
По умолчанию mitmproxy запускается на 8080 порту. Для запуска на другом порту нужно указать параметр -p:
Мониторинг http трафика
После запуска mitmproxy попробуйте открыть какой нибудь сайт в браузере, например webistore.ru. Если вы все правильно настроили, то в терминале вы должны увидеть это:
После запроса к сайту, в mitmproxy отобразится список всех загруженных с сайта данных, т. е. html код страницы сайта, картинки, java скрипты и другое. Для перемещения между элементами списка используйте стрелки на клавиатуре вверх и вниз. Например, на скриншоте выше выбран первый элемент списка, это видно по желтой стрелке слева от элемента. Каждый элемент списка — это отдельный http поток. У каждого http потока отображается его url, код статуса и тип контента, по которому можно определить его содержимое, например у первого http потока тип контента text/html, это означает, что он отображает html код страницы. Каждый http поток можно просматривать подробно. Для этого нужно нажать enter.
Давайте на примере просмотрим подробные сведения о первом http потоке — главной странице сайта webistore.ru. Нажав enter мы увидим данные об http запросе:
В этом окне отображены http заголовки запроса, а так же тело запроса, если оно есть. Для того, чтобы посмотреть данные http ответа, нужно нажать клавишу tab. Отобразится все содержимое http ответа — http заголовки и тело ответа.
Все данные об http потоке (http заголовки, тело запроса/ответа) прямо оттуда можно сохранить в файл, нажав комбинацию shift+w, но есть один ньюанс — если http ответ пришел в gzip, то он и сохраниться в gzip. Чтобы сохранить http поток как обычный текст, во вкладке http ответа — response, нажмите клавишу z, тогда строка content-encoding исчезнет из списка http заголовков ответа, и поток можно будет сохранить в обычном текстовом формате:
При сохранении, в файл записываются все данные об http потоке, то есть заголовки http запроса, заголовки http ответа, тело запроса и тело ответа. Если путь к файлу не указан явно, по умолчанию файл сохраняется в домашний каталог пользователя. Чтобы вернуться обратно к списку всех http потоков, нужно нажать клавишу q, для очистки списка http потоков нужно нажать комбинацию клавиш shift+c. Для просмотра других горячих клавиш в mitmproxy нажмите клавишу «?».
Мониторинг https трафика с помощью mitmproxy
С мониторингом http трафика через mitmproxy мы разобрались, но как быть с https трафиком, ведь для того чтобы прослушать https трафик, mitmproxy использует свой https сертификат. Плохо это тем, что при обращении к сайту по https, браузер будет выдавать предупреждение безопасности, и при этом не все сайты можно будет открыть. Это можно исправить, добавив сертификат mitmproxy в список доверенных сертификатов браузера. Сертификат mitmproxy находится в папке .mitmproxy в домашнем каталоге.
Я расскажу, как добавить сертификат mitmproxy в браузер chromium. Открываем настройки, дополнительные настройки, настроить сертификаты:
Далее открываем вкладку «Центры сертификации»:
Внизу в этой же вкладке нажимаем кнопку «импорт»:
Во вновь открывшемся окне выбираем домашний каталог, в нем открываем папку .mitmproxy и выбираем файл «mitmproxy-ca.pem»:
Папка .mitmproxy по умолчанию не видна, если вы не можете ее найти в домашнем каталоге, нажмите комбинацию клавиш ctrl h для отображения всех скрытых файлов и папок.
После выбора сертификата должно появиться окно, поставьте галочку напротив фразы «доверять этому сертификату при идентификации сайтов» и нажмите «ОК»:
Теперь попробуйте зайти на https сайт, предупреждение должно исчезнуть. Все, на этом настройка mitmproxy для https завершена.
В заключение хочу сказать, что mitmproxy может не только мониторить http и https трафик, но и модифицировать http запросы, посылать их серверу и получать ответы. Подробнее об этой и других функциях вы можете узнать нажав на клавишу «?» в главном окне программы, либо в окне подробной информации о http потоке.
Источник
Как проверить исходящие HTTP-запросы одного приложения?
Мое приложение отправляет HTTP-запросы на какой-либо сервер, и я хочу видеть фактические данные, которые оно отправляет. Некоторые особенности, которые я хотел бы увидеть:
- Метод запроса (GET / POST / PUT и т. Д.)
- Тип содержимого
- тело
Какой самый лучший и простой способ сделать это?
Ну, для всех тех поклонников tcpdump =)
ВЫПОЛНЯЙТЕ ВСЕ ЭТИ КОМАНДЫ КАК КОРНИ .
Получить root в терминале с
Для захвата пакетов RAW .
Это будет захватывать все необработанные пакеты на всех портах, на всех интерфейсах и записывать их в файл /tmp/http.log .
Запустите ваше приложение. Очевидно, это помогает, если вы не запускаете никаких других приложений, которые используют HTTP (веб-браузеры).
Чтобы прочитать журнал, используйте -A флаг и направьте вывод в less :
В -A флаг распечатывает «полезной нагрузки» или ASCII текста в пакетах. Это отправит вывод на less , вы можете пролистать страницы вверх и вниз. Для выхода less наберите Q .
Когда я иду в Google, я вижу (в сырых пакетах):
tcpdump имеет длинный набор опций для уточнения сбора данных, от указания сетевых интерфейсов до портов на IP-адреса источника и назначения. Он не может расшифровать (поэтому он не будет работать с HTTPS).
Как только вы знаете, что вас интересует, вы можете использовать ряд опций tcpdump для записи только данных, представляющих интерес. Общая стратегия состоит в том, чтобы сначала записать все пакеты, просмотреть необработанные данные, а затем захватить только пакеты, представляющие интерес.
Некоторые полезные флаги (опции):
Существует кривая обучения как использованию, так tcpdump и обучению анализу собираемых вами данных. Для дальнейшего чтения я настоятельно рекомендую учебник Дэниэла Мисслера tcpdump с примерами .
Источник