[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Linux PHP - отследить цепочку серверов в запросе
at0m1x
Всем привет. У меня есть сайт (ubuntu server, php, nginx). Он связан с другим сайтом и отправляет много POST запросов на API этого другого сайта. В день уходит примерно 10000 запросов. Из них 2000 не успешных. Отправляю запросы с помощью CURl:

$ch = curl_init('http://api.other-site.com/api');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query([
'field1' => 'value1',
'field2' => 'value2',
...
]));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);

При не успешных запросах в переменную $error ложится строка: Recv failure: Connection reset by peer

Я хочу выяснить из-за чего такая не стабильная связь. Скорее всего не стабильный интернет канал между моим сервером и сервером API.

В идеале было бы сделать скрипт, который бы отправил 10000 тестовых запросов с моего сервера на сервер API, и при этом подробно бы залогировал через какие промежуточные сервера шел запрос, и на каком оборвался в случае не успешного выполнения. Т.е. что бы лог был примерно в таком виде:

2015-10-15 10:10:12 success
Request:
URL: http://api.other-site.com/api
METHOD: POST
PARAMS: field1=value1&field2=value2&field3=value3
123.236.100.240 server1.com
123.236.99.240 server2.com
123.6.100.240 server3.com
123.6.100.20 api.other-site.com
Response:
123.6.100.20 api.other-site.com
123.6.100.240 server3.com
123.236.99.240 server2.com
123.236.100.240 server1.com

2015-10-15 10:10:12 error
Request:
URL: http://api.other-site.com/api
METHOD: POST
PARAMS: field1=value1&field2=value2&field3=value3
123.236.100.240 server1.com
123.236.99.240 server2.com
123.6.100.240 server3.com CONNECTION RESET
NO RESPONSE

Этот скрипт будет запускаться из под консоли сервера. Возможно такой написать на PHP, или каком то другом языке?
at0m1x
В итоге остановился на баш команде tcptraceroute

Эта команда как раз стучится на 80-й порт и показывает через какие промежуточные сервера проходит запрос.

Сделал баш скрипт, который переодически выполняет эту команду и логирует результаты. Запустил его на несколько часов, после чего проанализировал логи и выяснилось что запросы все таки сбрасывает API сервер к которому я обращаюсь. Т.к. через все промежуточные сервера зарос проходит стабильно, а при обрыве если посмотреть по логу он всегда происходил именно на конечном сервере. Так что команда помогла выяснить где именно обрывается запрос.

Код баш скрипта:


while [ 1 = 1 ]
do
date >> ./trace-so.log
tcptraceroute api.server.com >> ./trace-so.log
done
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.