Spec-Zone.ru › Varnish

varnish-cli

Интерфейс командной строки Varnish

Раздел руководства:

7

ОПИСАНИЕ

Varnish имеет интерфейс командной строки (CLI), который позволяет управлять и изменять большинство операционных параметров и конфигурации Varnish без прерывания работающего сервиса.

CLI может быть использован для следующих задач:

конфигурация

Вы можете загружать, изменять и удалять файлы VCL через CLI.

параметры

Вы можете просматривать и изменять различные параметры Varnish через CLI. Индивидуальные параметры документированы в man-странице varnishd(1).

запреты

Запреты — это фильтры, применяемые для предотвращения предоставления устаревшего контента Varnish. Когда вы применяете запрет, Varnish не будет предоставлять из кэша запрещённые объекты, а вместо этого будет перевызывать их с серверов-бэкендов.

управление процессами

Вы можете останавливать и запускать процесс кэша (дочерний процесс) через CLI. Вы также можете получить последнюю трассировку стека, если дочерний процесс аварийно завершился.

Если вы вызываете varnishd(1) с -T, -M или -d, CLI будет доступен. В режиме отладки (-d) CLI будет отображаться в фоновом режиме; с -T вы можете подключиться к нему с помощью varnishadm или telnet, а с -M varnishd подключится к слушающему сервису, передавая CLI этому сервису. Подробности см. в varnishd.

Синтаксис

Varnish CLI похож на другой интерфейс командной строки — Bourne Shell. Команды обычно завершаются новой строкой и могут принимать аргументы. Команда и её аргументы разделяются перед анализом, и поэтому аргументы, содержащие пробелы, должны быть заключены в двойные кавычки.

Это означает, что синтаксический анализ команды

help banner

эквивалентен

"help" banner

, так как двойные кавычки только указывают границы токена help.

Внутри двойных кавычек вы можете экранировать символы с помощью \ (обратный слэш). \n, \r и \t переводятся в новые строки, возвраты каретки и табуляции. Двойные кавычки и сами обратные слэши могут быть экранированы как \” и \\ соответственно.

Для ввода символов в восьмеричном формате используйте синтаксис \nnn. Шестнадцатеричные символы можно вводить с помощью синтаксиса \xnn.

Команды могут не завершаться новой строкой, когда используется оболочный here document (here-document или heredoc). Формат here document:

<< word
     here document
word

слово может быть любой непрерывной строкой, выбранной для того, чтобы гарантировать, что она не появляется естественным образом в последующем here document. Традиционно используются EOF или END.

Особенности цитирования

Интеграция с Varnish CLI может быть иногда неожиданной, когда дело доходит до цитирования. Например, в Bourne Shell разделитель, используемый в here document, может или не может быть разделен пробелами от токена <<.

cat <<EOF
hello
world
EOF
hello
world

В Varnish CLI токен << и токен EOF должны быть разделены по крайней мере одним пробелом:

vcl.inline boot <<EOF
106 258
Message from VCC-compiler:
VCL version declaration missing
Update your VCL to Version 4 syntax, and add
        vcl 4.0;
on the first line of the VCL files.
('<vcl.inline>' Line 1 Pos 1)
<<EOF
##---

Running VCC-compiler failed, exited with 2
VCL compilation failed

При отсутствии пробела here document может быть добавлен, и фактический VCL может быть загружен:

vcl.inline test << EOF
vcl 4.0;

backend be {
        .host = "localhost";
}
EOF
200 14
VCL compiled.

Существенное различие с оболочковым here document заключается в обработке токена <<. Так же как имена команд могут быть цитированы, токен here document сохраняет своё значение, даже в цитированном виде:

vcl.inline test "<<" EOF
vcl 4.0;

backend be {
        .host = "localhost";
}
EOF
200 14
VCL compiled.

При использовании фронтенда для Varnish-CLI, такого как varnishadm, необходимо учитывать двойное расширение, происходящее сначала в оболочке, запускающей команду varnishadm, а затем в самом Varnish CLI. Когда параметр команды требует пробелов, необходимо убедиться, что Varnish CLI увидит двойные кавычки:

varnishadm param.set cc_command '"my alternate cc command"'

Change will take effect when VCL script is reloaded

В противном случае, если вы не цитируете кавычки, вы можете получить, казалось бы, несвязанное сообщение об ошибке:

varnishadm param.set cc_command "my alternate cc command"
Unknown request.
Type 'help' for more info.
Too many parameters

Command failed with error code 105

Если вы используете цитирование с here document, вы должны заключить его в многострочный аргумент оболочки:

varnishadm vcl.inline test '<< EOF
vcl 4.0;

backend be {
        .host = "localhost";
}
EOF'
VCL compiled.

Ещё одно отличие от оболочного here document заключается в том, что на одной командной строке может использоваться только один here document. Например, это можно сделать в скрипте оболочки:

#!/bin/sh

cat << EOF1 ; cat << EOF2
hello
EOF1
world
EOF2

Ожидаемый вывод:

hello
world

В Varnish CLI только последний параметр может использовать форму here document, что сильно ограничивает количество команд, которые могут их эффективно использовать. Попытка использовать несколько here document учитывает только последний.

Например:

command argument << EOF1 << EOF2
heredoc1
EOF1
heredoc2
EOF2

Это концептуально приводит к следующей командной строке:

  • "command"
  • "argument"
  • "<<"
  • "EOF1"
  • "heredoc1\nEOF1\nheredoc2\n"

Другие особенности включают расширение переменных оболочки, вызывающей varnishadm, но это не напрямую связано с Varnish CLI. Если вы правильно поставите цитирование, у вас всё должно быть в порядке, даже с сложными командами.

JSON

Ряд команд с информационными ответами поддерживают параметр -j для вывода в формате JSON, как указано ниже. Верхняя структура ответа JSON — массив с этими первыми тремя элементами:

  • Номер версии формата JSON (целое число)
  • Массив строк, составляющих только что полученную команду CLI
  • Время генерации ответа в виде временной метки Unix в секундах с миллисекундной точностью (с плавающей точкой)

Остальные элементы массива составляют данные, специфичные для команды CLI, и их структура и содержимое зависят от команды.

Например, ответ на status -j содержит только строку в верхнем массиве, указывающую состояние дочернего процесса ("running", "stopped" и т. д.):

[ 2, ["status", "-j"], 1538031732.632, "running"
]

Ответы JSON на другие команды могут содержать более длинные списки элементов, которые могут иметь простые типы данных или представлять структурированные объекты.

Вывод JSON возвращается только в случае успешного выполнения команды. Вывод для ответа об ошибке всегда такой же, как и для команды без параметра -j.

Команды

auth <response>

Авторизоваться.

backend.list [-j] [-p] [<backend_pattern>]

Список бэкэндов.

-p также отображает статус зондирования.

-j указывает вывод в формате JSON.

Если не указан -j для вывода в формате JSON, формат вывода — пять столбцов динамической ширины, разделенные пробелами, с полями:

  • Название бэкенда
  • Админ: Как определяется состояние работоспособности:

    • healthy: Установить healthy через backend.set_health.
    • sick: Установить sick через backend.set_health.
    • probe: Состояние работоспособности определяется зондированием или другим динамическим механизмом.
    • deleted: Бэкенд был удалён, но ещё не очищен.

    Уровень администратора имеет приоритет над уровнем работоспособности.

  • Зондирование X/Y: X из Y проверок завершились успешно

    X и Y зависят от бэкенда и могут представлять проверки зондирования, другие бэкэнды или любые другие метрики.

    Если зондирования нет или директор не предоставляет подробности о результатах проверки зондирования, выводится 0/0.

  • Работоспособность: Состояние работоспособности зондирования

    • healthy
    • sick

    Если зондирования нет, выводится healthy.

  • Последнее изменение: Отметка времени последнего изменения состояния работоспособности.

Состояние работоспособности, указанное здесь, является общим. Работоспособность бэкенда также может зависеть от контекста его использования (например, хэша объекта), поэтому фактическое состояние работоспособности, видимое из VCL (например, с использованием std.healthy()), может отличаться.

Для -j, члены объекта должны быть понятны сами по себе, соответствовать полям, описанным выше. probe_message имеет формат [X, Y, "state"], как описано выше для зондирования. Подробности зондирования в формате JSON (аргументы -j -p ) зависят от директора.

backend.set_health <backend_pattern> [auto|healthy|sick]

Установить состояние работоспособности бэкенда(ов), соответствующего(их) <backend_pattern>.

  • При использовании auto, состояние работоспособности определяется зондированием или другим динамическим механизмом, если таковой имеется.
  • healthy устанавливает бэкенд как работоспособный.
  • sick устанавливает бэкенд как неработоспособный.
ban <field> <operator> <arg> [&& <field> <oper> <arg> …]

Отметить все объекты устаревшими, где все условия соответствуют.

Подробности см. в ban(STRING)

ban.list [-j]

Отобразить активные запреты.

Если не указан -j для вывода в формате JSON, формат вывода:

  • Время выдачи запрета.
  • Объекты, ссылающиеся на этот запрет.
  • C если запрет выполнен = дальнейшие проверки против него не производятся.
  • Если включено отладка lurker, то:

    • R для тестов req.*.
    • O для тестов obj.*.
    • Указатель на объект запрета.
  • Спецификация запрета

Длительности спецификаций запрета нормализуются, например, «7d» изменяется на «1w».

banner

Вывести приветственный баннер.

help [-j|<command>]

Показать справку по команде/протоколу.

-j указывает вывод в формате JSON.

panic.clear [-z]

Очистить последний сбой, если таковой имеется. -z очистит соответствующие счётчики varnishstat.

panic.show [-j]

Возвратить последний сбой, если таковой имеется.

-j указывает вывод в формате JSON — сообщение о сбое возвращается как неструктурированная строка JSON.

param.reset <param>

Сбросить параметр до значения по умолчанию.

param.set [-j] <param> <value>

Установить значение параметра.

Вывод в формате JSON такой же, как у param.show -j <param>, и содержит обновлённое значение, как оно было бы представлено при последующем выполнении param.show.

Это может быть полезно для последующей проверки того, что значение параметра не изменилось, и для использования значения из вывода JSON для сброса параметра до желаемого значения.

param.show [-l|-j] [<param>|changed]

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

Полная форма с -l показывает дополнительную информацию, включая документацию и минимальные, максимальные и значения по умолчанию, если они определены для параметра. Вывод в формате JSON задаётся с помощью -j, в котором содержится информация для полной формы; только один из -l или -j разрешён. Если параметр задан с <param>, отображается только этот параметр. Если указан changed, отображаются только те параметры, значения которых отличаются от значений по умолчанию.

pid [-j]

Показать PID основного процесса и процесса-работника, если он запущен.

-j указывает вывод в формате JSON.

ping [-j] [<timestamp>]

Поддерживать подключение активным.

Ответ форматируется как JSON, если указан -j.

quit

Закрыть соединение.

start

Запустить процесс кэша Varnish.

status [-j]

Проверить статус процесса кэша Varnish.

-j указывает вывод в формате JSON.

stop

Остановить процесс кэша Varnish.

storage.list [-j]

Список устройств хранения.

-j указывает вывод в формате JSON.

vcl.deps [-j]

Список всех загруженных конфигураций и их зависимостей.

Если не указан -j для вывода в формате JSON, формат вывода — до двух столбцов динамической ширины, разделённых пробелом, с полями:

  • VCL: программа VCL
  • Зависимость: другая программа VCL, от которой она зависит

Перечисляются только прямые зависимости, а VCL с несколькими зависимостями перечисляются несколько раз.

vcl.discard <name_pattern>…

Разгрузить указанные конфигурации (если это возможно).

Разгрузить указанные конфигурации и метки, соответствующие хотя бы одному шаблону имени. Все соответствующие конфигурации и метки удаляются в правильном порядке относительно потенциальных зависимостей. Если какая-либо конфигурация или метка не может быть удалена, потому что одна из её зависимостей останется, ничего не удаляется. Каждый отдельный шаблон имени должен соответствовать как минимум одной именованной конфигурации или метке.

vcl.inline <configname> <quoted_VCLstring> [auto|cold|warm]

Компилировать и загрузить данные VCL под указанным именем.

Многострочный VCL можно ввести, используя документ «здесь» Синтаксис.

vcl.label <label> <configname>

Применить метку к конфигурации.

Метка VCL — это как символическая ссылка в UNIX, имя без содержания, которое указывает на другой VCL.

Метки обязательны всякий раз, когда один VCL ссылается на другой.

vcl.list [-j]

Список всех загруженных конфигураций.

Если не указан -j для вывода в формате JSON, формат вывода — пять или семь столбцов динамической ширины, разделённых пробелом, с полями:

  • состояние: активный, доступный или удалённый
  • состояние: метка, холодный, тёплый или автоматический
  • температура: начальная, холодная, тёплая, занятая или охлаждаемая
  • занятость: количество ссылок на этот VCL (целое число)
  • имя: имя, данное этому VCL или метке
  • [ <- | -> ] и информация о метке, последние два поля

    • -> <vcl> : метка «указывает на» указанный <vcl>
    • <- (<n> метки[и]): VCL имеет <n> меток
vcl.load <configname> <filename> [auto|cold|warm]

Компилировать и загрузить файл VCL под указанным именем.

vcl.show [-v] [<configname>]

Отобразить исходный код указанной конфигурации.

vcl.state <configname> auto|cold|warm

Принудительно установить состояние указанной конфигурации.

vcl.symtab

Вывести таблицы символов VCL.

vcl.use <configname|label>

Немедленно переключиться на указанную конфигурацию.

Шаблон бэкенда

Шаблон бэкенда может быть именем бэкенда или комбинацией имени VCL и имени бэкенда в формате «VCL.бэкенд». Если имя VCL опущено, предполагается активный VCL. Поддерживается частичное соответствие имён бэкенда и VCL с использованием символов подстановки в стиле оболочки, например, звёздочка (*).

Примеры:

backend.list def*
backend.list b*.def*
backend.set_health default sick
backend.set_health def* healthy
backend.set_health * auto

Выражения запрета

Выражение запрета состоит из одного или нескольких условий. Условие состоит из поля, оператора и аргумента. Условия могут быть объединены по принципу «И» с помощью «&&».

Поле может быть любой переменной из VCL, например, req.url, req.http.host или obj.http.set-cookie.

Операторы — «==» для прямого сравнения, «~» для соответствия регулярному выражению и «>» или «<» для сравнения размеров. Добавление оператора «!» перед оператором инвертирует выражение.

Аргументом может быть строка в кавычках, регулярное выражение или целое число. Целые числа могут иметь «KB», «MB», «GB» или «TB», добавленные к ним для полей, связанных с размером.

Температура VCL

Программа VCL проходит через несколько состояний, связанных с различными командами: она может загружаться, использоваться и впоследствии отбрасываться. Вы можете загрузить несколько программ VCL и в любое время переключаться между ними. Существует только один активный VCL, но предыдущий активный VCL будет поддерживаться активным до тех пор, пока не будут завершены все его транзакции.

Со временем, если вы часто обновляете свой VCL и сохраняете предыдущие версии, потребление ресурсов увеличится, этому не избежать. Однако в большинстве случаев вы хотите платить цену только за активный VCL и хранить более старые VCL на случай, если вам потребуется откатиться к предыдущей версии.

Температура VCL позволяет минимизировать следствие неактивных VCL. Как только VCL становится холодным, Varnish освобождает все ресурсы, которые впоследствии могут быть повторно получены. Вы можете вручную установить температуру VCL или позволить Varnish автоматически обрабатывать её.

ПРИМЕРЫ

Загрузка многострочного VCL с использованием документа здесь в стиле оболочки:

vcl.inline example << EOF
vcl 4.0;

backend www {
    .host = "127.0.0.1";
    .port = "8080";
}
EOF

Запретить все запросы, где req.url точно соответствует строке /news:

ban req.url == "/news"

Запретить все документы, где хост сервера — «example.com» или «www.example.com», и где заголовок Set-Cookie, полученный от бэкенда, содержит «USERID=1663»:

ban req.http.host ~ "^(?i)(www\\.)?example\\.com$" && obj.http.set-cookie ~ "USERID=1663"

АВТОРЫ

Эта страница руководства была первоначально написана Пером Бюром, а затем была изменена Федерико Г. Швиндомтом, Дриди Букельмуном, Лассе Карстенсеном и Поулом-Хеннингом Кампом.

СМОТРИТЕ ТАКЖЕ

  • varnishadm
  • varnishd
  • VCL
  • Для использования CLI в API: Справочник.

Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/varnish-cli.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API