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'
