Микроязык OpQL


Сделал микроязык запросов для oProxy. Служит, собственно, для управления ею. Что умеет:

  1. Показать всякую текущую статистику (устаревшее show_workers, show_nodes и т.д.)
  2. Управлять списками наблюдения.

Второй пункт интереснее. Немного предыстории. Часто бывает, что у клиентов на 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% при проксировании.

, , , ,

  1. No comments yet.
(will not be published)

  1. No trackbacks yet.