Сделал микроязык запросов для oProxy. Служит, собственно, для управления ею. Что умеет:
- Показать всякую текущую статистику (устаревшее show_workers, show_nodes и т.д.)
- Управлять списками наблюдения.
Второй пункт интереснее. Немного предыстории. Часто бывает, что у клиентов на shared-хостинге случился перерасход ресурсов и они хотят знать, откуда эта нагрузка растёт. Резонное желание. Но беда в том, что ни я, “заведующий всем” © на хостинге, ни тем более техподдержка не может точно ответить на такой вопрос. Просто неоткуда брать данные. Чтобы разрешить эту проблему и были созданы списки наблюдения. Допустим, по MySQL-пользователю evlampiy случилось превышение нагрузки на MySQL. Пишем:
start save time, sent, query from mysql where user = “evlampiy” into file “/home/evlampiy/mysql_load.txt”
Всё, с этого момента прокся начнёт сохранять в указанный файлик все запросы к MySQL, пришедшие от пользователя evlampiy. Будет записано время выполнения запроса, количество посланных клиенту байт и сам запрос. Как только выяснили происхождение нагрузок, пишем:
stop save time, sent, query from mysql where user = “evlampiy” into file “/home/evlampiy/mysql_load.txt”
Запись прекратилась. Можно и понавороченней:
start save current_time, time/60, sent/1024/1024, host, uri from http where host = “john.5070.info” and ((uri = “/” and time < 0.5) or (uri = “/news/” and time > 0.01)) into file “/tmp/crazy_requests.txt”; stop save host from http into file “/tmp/all_http.txt”
Разумеется, можно посмотреть текущий список наблюдения:
show queries
На моей машине оверхед на один запрос со списком наблюдения длиной 5 получился 70 микросекунд, что примерно соответствует 2.3% на одно наблюдение при отдаче напрямую и 1.7% при проксировании.