Правила     Закладки     Карма    Календарь    Журналы    Помощь    Поиск    PDA    Чат   
        СМС-ки
   
Пейджер выключен!
 
Фильтр авторов:    показать 
  скрыть
  Ответ в темуСоздание новой темыСоздание опроса

> Linux PHP - отследить цепочку серверов в запросе
at0m1x  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 30843
На форуме: 4 года, 11 месяцев, 15 дней
Карма:




Всем привет. У меня есть сайт (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, или каком то другом языке?
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
at0m1x  
 ۩  Дата
Цитировать сообщение

Пользователя сейчас нет на форуме



Новичок
*

Профиль
Группа: Пользователь
Сообщений: 26
Пользователь №: 30843
На форуме: 4 года, 11 месяцев, 15 дней
Карма:




В итоге остановился на баш команде tcptraceroute

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

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

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


while [ 1 = 1 ]
do
date >> ./trace-so.log
tcptraceroute api.server.com >> ./trace-so.log
done
PMПисьмо на e-mail пользователю
    0   Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
  Быстрый ответ
Информация о Госте
Введите Ваше имя
Кнопки кодов
Для вставки цитаты, выделите нужный текст и
НАЖМИТЕ СЮДА
Введите сообщение
Смайлики
:huh:  :o  ;) 
:P  :D  :lol: 
B)  :rolleyes:  <_< 
:)  :angry:  :( 
:unsure:  :blink:  :ph34r: 
     
Показать всё

Опции сообщения  Включить смайлики?
 Включить подпись?
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:

Опции темы Ответ в темуСоздание новой темыСоздание опроса