OpQL

Материал из ISPWiki

Перейти к: навигация, поиск

Содержание

Назначение

OpQL является микроязыком для управления oProxy. Синтаксис схож с SQL.

Синтаксис программы

Программа состоит из запросов, разделённых точкой с запятой. После последнего запроса точка с запятой не обязательна.

Команды

stop daemon

Запрос stop daemon останавливает работающий процесс oProxy. В списке запросов он не обязательно должен быть последним.

show workers

Данный запрос выводит статус всех рабочих процессов.

show nodes http

Запрос служит для получения статуса узлов-бэкендов HTTP.

show nodes mysql

Запрос служит для получения статуса узлов-бэкендов MySQL.

show traffic http

Получить трафик по HTTP-хостам, который ещё не был сброшен в логи.

show traffic mysql

Получить трафик по MySQL-пользователям, который ещё не был сброшен в логи.

reset traffic

Обнулить счётчики трафика.

set param "value"

Выставить значение конфигурационного файла "Param" в значение "value" без перезагрузки прокси-сервера. Например, чтобы поменять значение таймаута KeepAlive в HTTP:

set keepalive_http "1.5"

show param <name>

Показать значение определенного параметра, где <name> - это имя запрашиваемого параметра.

show params

Показать значения всех параметров.

start SAVE_QUERY

Начать запись информации об определённых запросах к HTTP/MySQL в указанный лог-файл (см. ниже синтаксис SAVE_QUERY).

Все попадающие под условие запросы будут писаться в указанный лог-файл. Это полезно для отладки нагрузки на определённый сайт или от определённого MySQL-пользователя.

stop SAVE_QUERY

Остановить запись информации об определённых запросах (см. ниже синтаксис SAVE_QUERY). Указанный запрос будет удалён из очереди.

show queries

Запрос выводит список активных запросов SAVE_QUERY.

start reset RESET_RULE

Начать отклонять запросы, попадающие под указанные условия. Условие задаётся через RESET_RULE. Синтаксис см. ниже.

stop reset RESET_RULE

Закончить отклонение запросов, попадающих под указанные условия.

show resets

Запрос выводит список активных правил сброса соединений.

dump into file "path"

Сохранить в файл все текущие правила 'reset' и 'query', где "path" - это путь к файлу дампа.

load from file "path"

Восстановить сохраненные ранее правила 'reset' и 'query' из файла "path".

Синтаксис SAVE_QUERY

SAVE_QUERY := СПИСОК_ПОЛЕЙ from <http|mysql> [where УСЛОВИЕ] into file ИМЯ_ФАЙЛА

СПИСОК_ПОЛЕЙ := ВЫРАЖЕНИЕ [, СПИСОК_ПОЛЕЙ]

ВЫРАЖЕНИЕ :=
    ВЫРАЖЕНИЕ ОПЕРАНД ВЫРАЖЕНИЕ
    | ( ВЫРАЖЕНИЕ )
    | ФУНКЦИЯ ( СПИСОК_АРГУМЕНТОВ )
    | ПОЛЕ
    | ЧИСЛО
    | СТРОКА

ОПЕРАНД := + | - | * | /

ПОЛЕ := current_time | time | received | sent | host | uri | client_ip | user | query | header "Имя-Заголовка"

УСЛОВИЕ :=
    УСЛОВИЕ ЛОГИЧЕСКИЙ_ОПЕРАНД УСЛОВИЕ
    | ( УСЛОВИЕ )
    | not УСЛОВИЕ
    | ВЫРАЖЕНИЕ

ЛОГИЧЕСКИЙ_ОПЕРАНД := > | < | = | >= | <= | <> | !=

ИМЯ_ФАЙЛА := СТРОКА

СТРОКА := " строка " | ' строка '

ЧИСЛО :=
    цифры
    | цифры . цифры
    | . цифры
    | цифры .

ФУНКЦИЯ := строка

СПИСОК_АРГУМЕНТОВ := ВЫРАЖЕНИЕ [, ВЫРАЖЕНИЕ]

Подробнее про ПОЛЕ

ПОЛЕ является данным, которое oProxy получит из запроса.

current_time
Текущее локальное время, когда запрос окончил своё выполнение
time
Время в секундах, прошедшее между отправкой запроса бэкенду и началом получения данных (время обработки запроса)
received
Сколько байт было получено от клиента
sent
Сколько байт было отправлено клиенту
host
Имя запрошенного сайта. Применимо только для запросов "from http"
uri
Запрошенный URI. Применимо только для запросов "from http"
client_ip
IP-адрес клиента
user
Имя авторизованного MySQL-пользователя. В режиме проксирования HTTP в данном поле сохраняется владелец обрабатываемого сайта.
backend
IP-адрес обрабатывающего бэкенда
query
Первые N байт MySQL-запроса (N не больше значения конфига max_mysql_query_length_save). Применимо только для запросов "from mysql"
header "Имя-Заголовка"
Значение HTTP-заголовка. Значением не найденного заголовка является пустая строка.

Доступные функции

concat (разделитель, аргумент1, аргумент2, ...)

Объединяет в одну строку все аргументы, вставляя между ними <разделитель>.

replace (регэксп, замена, строка)

Заменяет на <замена> все подстроки строки <строка>, совпадающие с регулярным выражением <регэксп>

Синтаксис RESET_RULE

RESET_RULE := http [where УСЛОВИЕ]

Условие сброса имеет тот же синтаксис, что и в SAVE_QUERY.

Примеры запросов

  • Получить информацию о рабочих:
show workers
  • Получить информацию о рабочих, а затем остановить oProxy:
show workers; stop daemon
  • Начать запись в файл /tmp/test.com запрошенного URI и времени реакции сервера:
start save uri, time from http into file '/tmp/test.com'
  • Начать запись в файл /tmp/test.com запрошенного URI и времени реакции сервера в минутах:
start save uri, time/60 from http into file '/tmp/test.com'
  • Начать запись в файл /tmp/root текущее время, количество посланных байт и MySQL-запрос, но только если время реакции было больше 1 секунды:
start save current_time, sent, query from mysql where time > 1 into file "/tmp/root"
  • Начать запись в файл /tmp/not_root MySQL-запросы, которые выполнялись более 10 часов и имя MySQL-пользователя было не root, либо если послали меньше 100 байт:
start save query from mysql where (time > 10*3600 and user!="root") or sent<100 into file '/tmp/not_root'
  • Добавить запрос "save uri, time from http into file '/tmp/test.com'" и удалить "save uri, time/60 from http into file '/tmp/test.com'":
start save uri, time from http into file '/tmp/test.com'; stop save uri, time/60 from http into file '/tmp/test.com'
Источник — «http://ru.ispdoc.com/index.php/OpQL»
Была ли эта информация полезной? Да | Нет
Личные инструменты