Документация по lnav
Релиз 0.10.0
Тим Стек
07 июля 2021 г.
перевод В.Айсин
Log File Navigator (lnav) - это расширенный просмотрщик файлов журнала для консоли.
Глава один
Вступление
Log File Navigator, lnav, представляет собой расширенный просмотрщик файлов журналов для терминала. Он предоставляет простой в использовании интерфейс для мониторинга и анализа файлов журналов практически без настройки. Просто откройте в lnav свои файлы журналов, и он автоматически определит Форматы журналов, проиндексирует их содержимое и отобразит комбинированное представление всех сообщений журналов. Вы можете перемещаться по журналам с помощью различных горячих клавиш. Команды дают вам дополнительный контроль над поведением lnav для таких вещей, как применение фильтров, тегирование сообщений и многое другое. Затем вы можете анализировать сообщения журнала с помощью интерфейса SQLite.
1.1 Зависимости
При компиляции из исходников требуются следующие зависимости:
- NCurses
- PCRE – версии выше 8.20 обеспечивают лучшую производительность, поскольку будет использоваться PCRE JIT.
- SQLite
- ZLib
- Bzip2
- Readline
- libcurl
- libarchive
1.2 Установка
Проверьте страницу загрузок, чтобы узнать, есть ли пакеты для вашей операционной системы. Для компиляции из исходного кода используйте следующие команды:
$ ./configure
$ make
$ sudo make install
1.3 Просмотр журналов
Аргументы для lnav - это файлы журналов, каталоги или URL-адреса для просмотра. Например, чтобы просмотреть все журналы CUPS в вашей системе:
$ lnav /var/log/cups
Форматы журналов определяются автоматически и индексируются на лету. См. раздел Форматы журналов для получения списка предопределенных форматов и того, как определить свои собственные.
Если аргументы не указаны, lnav попытается открыть файл системного журнала в вашей системе:
$ lnav
1.4 Настройка
После запуска lnav вы можете захотеть установить параметры конфигурации, упомянутые ниже. Конфигурация в lnav выполняется с помощью команды :config
. Чтобы изменить параметр конфигурации, начните с нажатия :
для входа в командную строку. Затем введите config
, а затем имя и значение параметра.
Примечание: Для этих параметров конфигурации, а в некоторых случаях и для их значений, доступно дополнение табуляцией.
1.4.1 Раскладка клавиатуры
Раскладка клавиатуры определяет соответствие горячих клавиш командам для выполнения. Сопоставление по умолчанию предназначено для клавиатур US
. Для изменения раскладки клавиатуры можно использовать следующую команду:
:config /ui/keymap <keymap-name>
Встроенные раскладки клавиатуры:
- de - Немецкая
- fr - Французская
- uk - Английская (Великобритания)
- us - Английская (США)
Чтобы создать или настроить раскладку клавиатуры, обратитесь к разделу Определений раскладки.
1.4.2 Темы
Визуальный стиль lnav можно настроить с помощью темы. Для изменения темы можно использовать следующую команду:
:config /ui/theme <theme-name>
Встроенные темы: default, eldar, grayscale, monocai, night-owl, solarized-dark и solarized-light.
Чтобы создать или настроить тему, обратитесь к разделу Определения тем.
1.4.3 Форматы журналов
Чтобы lnav мог понять ваши файлы журналов, ему необходимо знать, как анализировать сообщения журнала, используя определение формата журнала. Существует множество встроенных форматов журналов, и lnav автоматически определит оптимальный формат для использования. В случае, если ваш файл журнала не распознан, обратитесь к разделу Форматы журналов для получения информации о том, как создать формат.
Глава вторая
Использование
В этой главе содержится обзор использования lnav.
2.1 Основные элементы управления
Как и в большинстве программ просмотра файлов, прокрутка файлов может выполняться с помощью обычных горячих клавиш. Для нетривиальных операций вы можете войти в режим командной строки, нажав :
. Чтобы проанализировать данные в файле журнала, вы можете ввести запрос SQL, нажав ;
.
Совет: Проверьте правый нижний угол экрана на наличие подсказок по горячим клавишам, которые могут быть полезны в текущем контексте.
Рис. 1. При первом открытии lnav предлагается использовать
e
иShift+e
для перехода к сообщениям об ошибках.
2.2 Просмотр файлов
Файлы для просмотра в lnav можно указать в командной строке или передать команде :open
. Для отслеживания файлов с общим именем может быть задан шаблон поиска. Если путь - это каталог, все файлы в каталоге будут открыты, и каталог будет отслеживаться на предмет добавления или удаления файлов из представления. Если путь - это архив или сжатый файл (а lnav был создан с помощью libarchive), архив будет извлечен во временное расположение и файлы внутри будут загружены. Найденные файлы будут просканированы для определения их формата. Файлы, соответствующие формату журнала, будут отсортированы по времени и отображены в представлении журнала. Неформатированные текстовые файлы можно просмотреть в текстовом представлении, доступ к которому можно получить нажав t
.
2.2.1 Поддержка архивов
Если lnav скомпилирован с помощью libarchive, любые открываемые файлы будут проверены на предмет того, являются ли они поддерживаемым типом архива. В этом случае содержимое архива будет извлечено в каталог $TMPDIR/lnav-user-${UID}-work/archives/
. После извлечения файлы внутри будут загружены в lnav. Чтобы ускорить открытие большого количества файлов, любой файл, отвечающий следующим условиям, будет автоматически скрыт и не проиндексирован:
- Двоичные файлы
- Неформатированные текстовые файлы размером более 128kb
- Дубликаты файлов журналов
Распакованные файлы останутся во временном каталоге после выхода из lnav, так что повторное открытие того же архива будет быстрее. Распакованные архивы, к которым не обращались в течение последних двух дней, будут автоматически удалены при следующем запуске lnav.
2.2.2 Файлы на удаленных хостах
Файлы на удаленных машинах можно просматривать и отслеживать, если у вас есть доступ к машинам через SSH. Во-первых, убедитесь, что вы можете подключиться к удаленному компьютеру по SSH без какого-либо взаимодействия: 1) приняв ключ хоста как известный и 2) скопировав ваш открытый ключ в файл .ssh/authorized_keys
на удаленном компьютере. После завершения настройки вы можете открыть файл на удаленном хосте, используя тот же синтаксис, что и scp(1), где указываются имя пользователя и хост, за которыми следует двоеточие, а затем путь к файлам, например:
[user@]host:/path/to/logs
Например, чтобы открыть /var/log/syslog.log
на «host1.example.com» от имени пользователя «dean», вы должны ввести:
$ lnav dean@host1.example.com:/var/log/syslog.log
Файлы на удаленных хостах также можно открыть с помощью команды :open. Открытие удаленного файла в TUI имеет то преимущество, что путь к файлу может быть заполнен клавишей TAB
и отображается предварительный просмотр первых нескольких строк файла.
Примечание: Если lnav устанавливается из snap, вам необходимо подключить его к ssh-keys plug, используя следующую команду:
$ sudo snap connect lnav:ssh-keys
Примечание: Удаленный доступ к файлам реализуется путем передачи αcτµαlly pδrταblε εxεcµταblε адресату и его вызова. Бинарный файл APE может работать практически на любой машине x86_64 и ОС (например, MacOS, Linux, FreeBSD, Windows). Бинарный файл встроен в сам исполняемый файл lnav, поэтому на удаленном компьютере не требуется дополнительных настроек.
2.3 Поиск
Любые сообщения журнала, загружаемые в lnav, индексируются по времени и уровню журнала (например, error, warning), чтобы сделать поиск быстрым и легким с помощью горячих клавиш. Например, нажатие e
приведет к переходу к следующей ошибке в файле, а нажатие Shift+e
приведет к переходу к предыдущей ошибке. Поиск в неформатированном тексте можно выполнить, нажав /
для входа в строку поиска. В приглашение можно ввести регулярное выражение, чтобы начать поиск в текущем представлении.
2.4 Фильтрация
Чтобы уменьшить количество шума в файле журнала, lnav может скрывать сообщения журнала, соответствующие определенным критериям. Следующие подразделы объясняют, как это сделать.
2.4.1 Соответствие регулярному выражению
Если есть сообщения журнала, которые вас не интересуют, вы можете выполнить «фильтрацию» (filter out), чтобы скрыть сообщения, соответствующие шаблону. Фильтр можно создать с помощью интерактивного редактора, команды :filter-out или путем выполнения INSERT
для таблицы lnav_view_filters.
2.4.2 Выражение SQLite
Сложную фильтрацию можно выполнить, передав выражения SQLite команде :filter-expr. Выражение будет выполняться для каждого сообщения журнала, и если оно вернет истину, строка будет показана в представлении журнала.
2.4.3 Время
Чтобы ограничить сообщения журнала заданным временным интервалом, можно использовать команды :hide-lines-before и :hide-lines-after, чтобы указать начало и конец временного интервала.
2.4.4 Уровень журнала
Чтобы скрыть сообщения ниже определенного уровня журнала, вы можете использовать :set-min-log-level.
2.5 Таблицы поиска
TBD
2.6 Ведение заметок
Некоторые столбцы в таблицах журнала можно обновлять построчно, чтобы вы могли делать заметки. Большинство столбцов в таблице журнала доступны только для чтения, поскольку они поддерживаются самими файлами журнала. Однако с помощью оператора UPDATE
можно изменить следующие столбцы:
- log_part - «Раздел», которому принадлежит сообщение журнала. Этот столбец также можно изменить с помощью команды :partition-name.
- log_mark - указывает, добавлена ли строка в закладки.
- log_comment - текстовое поле произвольной формы для хранения комментария. Этот столбец также можно изменить с помощью команды :comment.
- log_tags - список тегов JSON, связанных с сообщением журнала. Этот столбец также можно изменить с помощью команды :tag.
Хотя эти столбцы можно обновлять другими способами, использование интерфейса SQL позволяет вносить изменения автоматически и массово. Например, чтобы добавить в закладки все строки с текстом «something interesting» в теле сообщения журнала, вы можете выполнить:
;UPDATE all_logs SET log_mark = 1 WHERE log_body LIKE '%something interesting%'
В качестве более сложного примера возможностей виртуальных таблиц SQL и lnav мы помечаем сообщения журнала, в которых изменился IP-адрес, связанный с dhclient. Например, если dhclient сначала сообщает «bound to 10.0.0.1», а затем сообщает «bound to 10.0.0.2», мы хотим пометить только те сообщения, IP-адрес которых отличался от предыдущего сообщения. Хотя это можно сделать с помощью одного оператора SQL[1], в этом примере мы разделим все на несколько шагов. Сначала мы воспользуемся командой :create-search-table, чтобы сопоставить сообщение dhclient и извлечь IP-адрес:
:create-search-table dhclient_ip bound to (?<ip>[^ ]+)
Приведенная выше команда создаст новую таблицу с именем dhclient_ip
со стандартными столбцами журнала и столбцом ip
, содержащим IP-адрес. Затем мы создадим представление таблицы dhclient_ip
, которое возвращает номер строки сообщения журнала, IP-адрес из текущей строки и IP-адрес из предыдущей строки:
;CREATE VIEW IF NOT EXISTS dhclient_ip_changes AS SELECT log_line, ip, lag(ip) OVER (ORDER BY log_line) AS prev_ip FROM dhclient_ip
Наконец, следующий оператор UPDATE
присоединит тег «#ipchanged» к столбцу log_tags
для любых строк в представлении, где текущий IP-адрес отличается от предыдущего IP-адреса:
;UPDATE syslog_log SET log_tags = json_concat(log_tags, '#ipchanged') WHERE log_line IN (SELECT log_line FROM dhclient_ip_changes WHERE ip != prev_ip)
Поскольку приведенное выше строки могут быть слишком длинными для интерактивного ввода, вы можете поместить эти команды в скрипт и выполнить этот сценарий с помощью горячей клавиши |
.
-
Выражение
regexp_match('bound to ([^ ]+)', log_body) as ip
может использоваться для извлечения IP-адреса из тела сообщения журнала.
Глава третья
Cookbook
В этой главе содержатся рецепты для общих задач, которые могут быть выполнены в lnav. Эти рецепты можно использовать в качестве отправной точки для ваших собственных нужд после некоторой адаптации.
3.1 Форматы журналов
TBD
3.1.1 Определение нового формата
TBD
3.2 Аннотирование журналов
Журналы сообщений можно аннотировать несколькими способами в lnav, чтобы помочь вам организовать работу.
3.2.1 Создание разделов для загрузки Linux
При копании в журналах, которые можно разбить на несколько разделов, можно использовать функцию разделения lnav, чтобы отслеживать, в каком разделе вы находитесь. Например, если коллекция журналов Linux охватывает несколько загрузок, следующий сценарий может использоваться для создания разделов для каждой загрузки. После того, как имя раздела будет установлено для сообщений журнала, текущее имя будет отображаться в верхней строке состояния рядом с текущим временем.
Листинг 1: partition-by-boot.lnav
#
# DO NOT EDIT THIS FILE, IT WILL BE OVERWRITTEN!
#
# @synopsis: partition-by-boot
# @description: Partition the log view based on boot messages from the Linux kernel.
#
;UPDATE syslog_log
SET log_part = 'Boot: ' || log_time
WHERE log_text LIKE '%kernel:%Linux version%';
;SELECT 'Created ' || changes() || ' partitions(s)';
3.2.2 Добавление тегов к сообщениям журнала SSH
Сообщения журнала могут быть помечены тегами интерактивно с помощью команды :tag или программно с использованием интерфейса SQLite. В этом примере используется сценарий для поиска интересных сообщений SSH и автоматически добавляется соответствующий тег.
Листинг 2: tag-ssh-msgs.lnav
#
# @synopsis: tag-ssh-msgs
# @description: Tag interesting SSH log messages
#
;UPDATE all_logs
SET log_tags = json_concat(log_tags, '#ssh.invalid-user')
WHERE log_text LIKE '%Invalid user from%'
;SELECT 'Tagged ' || changes() || ' messages';
3.3 Анализ журнала
Большая часть анализа журналов в lnav выполняется через интерфейс SQLite. Следующие примеры должны дать вам некоторые идеи, чтобы начать использовать эту функциональность. Следует иметь в виду, что если запрос становится слишком большим или требуется выполнить несколько операторов, вы можете создать сценарий .lnav
, содержащий эти операторы, и выполнить его в командной строке с помощью |
.
3.3.1 Подсчет IP-адресов клиентов в журналах веб-доступа
Чтобы подсчитать количество вхождений IP-адреса в журналы веб-доступа и упорядочить результаты от наибольшего к наименьшему:
;SELECT c_ip, count(*) as hits FROM access_log GROUP BY c_ip ORDER BY hits DESC
3.3.2 Показывать только строки, в которых числовое поле находится в диапазоне
Команду :filter-expr можно использовать для фильтрации журналов веб-доступа, чтобы отображались только строки, в которых количество байтов, переданных клиенту, составляет от 10 000 до 40 000 байт, например:
:filter-expr :sc_bytes BETWEEN 10000 AND 40000
3.3.3 Создание отчета
Отчеты могут быть созданы путем написания скрипта lnav, который использует запросы и команды SQL для форматирования документа. Базовый сценарий может просто выполнить SQL-запрос, отображаемый в представлении БД. Более сложные сценарии могут использовать следующие команды для создания настраиваемого вывода для отчета:
- Команда :echo для написания неформатированного текста
- Запросы SQL, за которыми следует команда «write», например :write-table-to.
Листинг 3: report-demo.lnav
#
# @synopsis: report-demo [<output-path>]
# @description: Generate a report for requests in access_log files
#
# Figure out the file path where the report should be written to, default is
# stdout
;SELECT CASE
WHEN $1 IS NULL THEN '-'
ELSE $1
END AS out_path
# Redirect output from commands to $out_path
:redirect-to $out_path
# Print an introductory message
;SELECT printf('\n%d total requests', count(1)) AS msg FROM access_log
:echo $msg
;WITH top_paths AS (
SELECT
cs_uri_stem,
count(1) AS total_hits,
sum(sc_bytes) as bytes,
count(distinct c_ip) as visitors
FROM access_log
WHERE sc_status BETWEEN 200 AND 300
GROUP BY cs_uri_stem
ORDER BY total_hits DESC
LIMIT 50),
weekly_hits_with_gaps AS (
SELECT timeslice(log_time_msecs, '1w') AS week,
cs_uri_stem,
count(1) AS weekly_hits
FROM access_log
WHERE cs_uri_stem IN (SELECT cs_uri_stem FROM top_paths) AND
sc_status BETWEEN 200 AND 300
GROUP BY week, cs_uri_stem),
all_weeks AS (
SELECT week
FROM weekly_hits_with_gaps
GROUP BY week
ORDER BY week ASC),
weekly_hits AS (
SELECT all_weeks.week,
top_paths.cs_uri_stem,
ifnull(weekly_hits, 0) AS hits
FROM all_weeks
CROSS JOIN top_paths
LEFT JOIN weekly_hits_with_gaps
ON all_weeks.week = weekly_hits_with_gaps.week AND
top_paths.cs_uri_stem = weekly_hits_with_gaps.cs_uri_stem)
SELECT weekly_hits.cs_uri_stem AS Path,
printf('%,9d', total_hits) AS Hits,
printf('%,9d', visitors) AS Visitors,
printf('%9s', humanize_file_size(bytes)) as Amount,
sparkline(hits) AS Weeks
FROM weekly_hits
LEFT JOIN top_paths ON top_paths.cs_uri_stem = weekly_hits.cs_uri_stem
GROUP BY weekly_hits.cs_uri_stem
ORDER BY Hits DESC
LIMIT 10
:write-table-to -
:echo
:echo Failed Requests
:echo
;SELECT printf('%,9d', count(1)) AS Hits,
printf('%,9d', count(distinct c_ip)) AS Visitors,
sc_status AS Status,
cs_method AS Method,
group_concat(distinct cs_version) AS Versions,
cs_uri_stem AS Path,
replicate('|', (cast(count(1) AS REAL) / $total_requests) * 100.0) AS "% of Requests"
FROM access_log
WHERE sc_status >= 400
GROUP BY cs_method, cs_uri_stem
ORDER BY Hits DESC
LIMIT 10
:write-table-to -
Глава четвертая
Как это работает
4.1 Внутренняя архитектура
Файл ARCHITECTURE.md в дереве исходных текстов содержит некоторую информацию о внутреннем устройстве lnav.
Глава пятая
Конфигурация
Конфигурация для lnav хранится в следующих файлах JSON в ~/.lnav
:
config.json
- содержит локальные настройки, которые выполняются с помощью команды:config
.configs/default/*.json
- файлы конфигурации по умолчанию, встроенные в lnav, записываются в этот каталог с добавлением.sample
. Удаление расширения.sample
и редактирование файла позволит вам выполнить базовую настройку.configs/installed/*.json
- содержит файлы конфигурации, установленные с использованием флага-i
(например,$ lnav -i /path/to/config.json
).configs/*/*.json
- другие каталоги, содержащие файлы*.json
, будут загружены при запуске. Эта структура удобна для установки конфигураций lnav, например, из репозитория git.
Допустимый файл конфигурации lnav должен содержать объект со свойством $schema
, например:
{
"$schema": "https://lnav.org/schemas/config-v1.schema.json"
}
Примечание: Определения формата журнала хранятся отдельно в файлах
~/.lnav/formats
. См. главу Форматы журналов для получения дополнительной информации.
5.1 Опции
Следующие параметры конфигурации можно использовать для настройки lnav по своему вкусу. Параметры можно изменить с помощью команды :config.
5.1.1 /ui/keymap
Имя используемой раскладки клавиатуры | |
---|---|
тип | string |
5.1.2 /ui/theme
Имя используемой темы | |
---|---|
тип | string |
5.1.3 /ui/clock-format
Формат часов, отображаемых в верхнем левом углу с использованием преобразований strftime(3) | |
---|---|
тип | string |
пример | %a %b %d %H:%M:%S %Z |
5.1.4 /ui/dim-text
Уменьшить яркость текста (полезно для xterms). Этот параметр может быть полезен при работе в xterm, где белый цвет очень яркий. | |
---|---|
тип | boolean |
5.1.5 /ui/default-colors
Использовать цвета фона и переднего плана терминала по умолчанию вместо черного и белого для всех цветов текста. Этот параметр может быть полезен при использовании прозрачного фона или терминала с альтернативной цветовой темой. | |
---|---|
тип | boolean |
5.2 Определения тем
Темы пользовательского интерфейса определены в файле конфигурации JSON. Тема состоит из определений стилей для разных типов текста в пользовательском интерфейсе. Определение может включать цвета переднего плана/фона и атрибуты шрифта жирного/подчеркивания. Определения стилей разбиты на несколько категорий в целях организации. Чтобы упростить написание определения, тема может определять переменные, на которые можно ссылаться как на значения цвета.
5.2.1 Переменные
Объект vars
в определении темы содержит отображение имен переменных в значения цвета. На эти переменные можно ссылаться в определениях стилей, поставив перед ними знак доллара (например, $black
). Следующие переменные также могут быть определены для управления значениями цветов ANSI, которые являются сообщениями журнала или неформатированным текстом:
Таблица 1: Цвета ANSI
Имя переменной | ANSI Escape |
---|---|
black | ESC[30m |
red | ESC[31m |
green | ESC[32m |
yellow | ESC[33m |
blue | ESC[34m |
magenta | ESC[35m |
cyan | ESC[36m |
white | ESC[37m |
5.2.2 Указание цветов
Цвета можно указать в шестнадцатеричной системе счисления, начав с хеша (например, #aabbcc
) или используя название цвета, которое можно найти на http://jonasjacek.github.io/colors/. Если цвета для стиля не указаны, значения берутся из определения styles/text
.
Примечание: При указании цветов в шестнадцатеричной системе счисления нет необходимости иметь точное совпадение в цветовой палитре XTerm 256. Наилучшее приближение будет выбрано на основе алгоритма цветопередачи CIEDE2000.
5.2.3 Пример
В следующем примере черный/фоновый цвет текста устанавливается в темно-серый с помощью переменной, а для переднего плана устанавливается не совсем белый цвет. Эта тема неполная, но она работает достаточно, чтобы дать вам представление о том, как определяется тема. Вы можете скопировать блок кода, сохранить его в файл в ~/.lnav/configs/installed/
, а затем активировать его, выполнив :config /ui/theme example
в lnav. Для более полного определения темы см. одно из определений, встроенных в lnav, например monocai.
{
"$schema": "https://lnav.org/schemas/config-v1.schema.json",
"ui": {
"theme-defs": {
"example1": {
"vars": {
"black": "#2d2a2e"
},
"styles": {
"text": {
"color": "#f6f6f6",
"background-color": "$black"
}
}
}
}
}
}
5.2.4 Справочник
/ui/theme-defs/<theme_name>/vars
Определения переменных, которые используются в этой теме. | ||
---|---|---|
тип | object | |
patternProperties | ||
(\w+) | /ui/theme-defs/<theme_name>/vars/<var_name> | |
Определение переменной темы | ||
тип | string | |
additionalProperties | False |
/ui/theme-defs/<theme_name>/styles
Стили сообщений журнала. | |
---|---|
тип | object |
характеристики | |
identifier | /ui/theme-defs/<theme_name>/styles/identifier |
Стили для идентификаторов в журналах | |
style | |
text | /ui/theme-defs/<theme_name>/styles/text |
Стили для неформатированного текста | |
style | |
alt-text | /ui/theme-defs/<theme_name>/styles/alt-text |
Стили для неформатированного текста при чередовании | |
style | |
error | /ui/theme-defs/<theme_name>/styles/error |
Стили для сообщений об ошибках | |
style | |
ok | /ui/theme-defs/<theme_name>/styles/ok |
Стили для сообщений об успехе | |
style | |
warning | /ui/theme-defs/<theme_name>/styles/warning |
Стили для сообщений о предупреждениях | |
style | |
hidden | /ui/theme-defs/<theme_name>/styles/hidden |
Стили для скрытых полей в журналах | |
style | |
adjusted-time | /ui/theme-defs/<theme_name>/styles/adjusted-time |
Стили для временных меток, которые были скорректированы | |
style | |
skewed-time | /ui/theme-defs/<theme_name>/styles/skewed-time |
Стили для временных меток, отличающихся от полученного времени | |
style | |
invalid-msg | /ui/theme-defs/<theme_name>/styles/invalid-msg |
Стили для недопустимых сообщений журнала | |
style | |
popup | /ui/theme-defs/<theme_name>/styles/popup |
Стили для всплывающих окон | |
style | |
focused | /ui/theme-defs/<theme_name>/styles/focused |
Стили для сфокусированной строки в представлении списка | |
style | |
disabled-focused | /ui/theme-defs/<theme_name>/styles/disabled-focused |
Стили для отключенной сфокусированной строки в представлении списка | |
style | |
scrollbar | /ui/theme-defs/<theme_name>/styles/scrollbar |
Стили для полос прокрутки | |
style | |
additionalProperties | False |
/ui/theme-defs/<theme_name>/syntax-styles
Стили для подсветки синтаксиса в текстовых файлах. | |
---|---|
тип | object |
характеристики | |
keyword | /ui/theme-defs/<theme_name>/syntax-styles/keyword |
Стили ключевых слов в исходных файлах | |
style | |
string | /ui/theme-defs/<theme_name>/syntax-styles/string |
Стили для строк с одинарными/двойными кавычками в тексте | |
style | |
comment | /ui/theme-defs/<theme_name>/syntax-styles/comment |
Стили для комментариев в исходных файлах | |
style | |
doc-directive | /ui/theme-defs/<theme_name>/syntax-styles/doc-directive |
Стили директив документации в исходных файлах | |
style | |
variable | /ui/theme-defs/<theme_name>/syntax-styles/variable |
Стили для переменных в тексте | |
style | |
re-special | /ui/theme-defs/<theme_name>/syntax-styles/re-special |
Стили для специальных символов в регулярных выражениях | |
style | |
re-repeat | /ui/theme-defs/<theme_name>/syntax-styles/re-repeat |
Стили для повторов в регулярных выражениях | |
style | |
diff-delete | /ui/theme-defs/<theme_name>/syntax-styles/diff-delete |
Стили для удаленных строк в различиях | |
style | |
diff-add | /ui/theme-defs/<theme_name>/syntax-styles/diff-add |
Стили для добавленных линий в различиях | |
style | |
diff-section | /ui/theme-defs/<theme_name>/syntax-styles/diff-section |
Стили для различий | |
style | |
file | /ui/theme-defs/<theme_name>/syntax-styles/file |
Стили имен файлов в исходных файлах | |
style | |
additionalProperties | False |
/ui/theme-defs/<theme_name>/status-styles
Стили для компонентов пользовательского интерфейса. | |
---|---|
тип | object |
характеристики | |
text | /ui/theme-defs/<theme_name>/status-styles/text |
Стили для строк состояния | |
style | |
warn | /ui/theme-defs/<theme_name>/status-styles/warn |
Стили для предупреждений (warnings) в строках состояния | |
style | |
alert | /ui/theme-defs/<theme_name>/status-styles/alert |
Стили для предупреждений (alerts) в строках состояния | |
style | |
inactive | /ui/theme-defs/<theme_name>/status-styles/inactive |
Стили для неактивных строк состояния | |
style | |
title-hotkey | /ui/theme-defs/<theme_name>/status-styles/title-hotkey |
Стили для выделения горячих клавиш в заголовках | |
style | |
title | /ui/theme-defs/<theme_name>/status-styles/title |
Стили для разделов заголовка строк состояния | |
style | |
disabled-title | /ui/theme-defs/<theme_name>/status-styles/disabled-title |
Стили для отключенных разделов заголовка строк состояния | |
style | |
subtitle | /ui/theme-defs/<theme_name>/status-styles/subtitle |
Стили для разделов субтитров в строках состояния | |
style | |
hotkey | /ui/theme-defs/<theme_name>/status-styles/hotkey |
Стили для выделения горячих клавиш в строках состояния | |
style | |
additionalProperties | False |
/ui/theme-defs/<theme_name>/log-level-styles
Стили для каждого уровня сообщений журнала. | |
---|---|
тип | object |
patternProperties | |
(trace | debug5 | debug4 | debug3 | debug2 | debug | info | stats | notice | warning | error | critical | fatal | invalid) | /ui/theme-defs/<theme_name>/log-level-styles/<level> |
style | |
additionalProperties | False |
style
тип | object | |
properties | ||
color | /color | |
Значение цвета переднего плана для этого стиля. Значением может быть имя цвета xterm, шестнадцатеричное значение или ссылка на переменную темы. | ||
тип | string | |
примеры | #fff | |
Green | ||
$black | ||
background-color | /background-color | |
Значение цвета фона для этого стиля. Значением может быть имя цвета xterm, шестнадцатеричное значение или ссылка на переменную темы. | ||
тип | string | |
примеры | #2d2a2e | |
Green | ||
underline | /underline | |
Указывает, что текст должен быть подчеркнут. | ||
тип | boolean | |
bold | /bold | |
Указывает, что текст должен быть выделен жирным шрифтом. | ||
тип | boolean | |
additionalProperties | False |
5.3 Определения раскладки клавиатуры
Раскладки в lnav сопоставляют последовательность клавиш выполняемой команде. Когда клавиша нажата, она преобразуется в закодированную в шестнадцатеричном формате строку, которая просматривается в раскладке клавиатуры. Затем выполняется значение command
, связанное с записью в таблице клавиш. Обратите внимание, что «команда» может быть командой lnav, оператором/запросом SQL или скриптом lnav. Если значение alt-msg
включено в запись, нижний правый раздел пользовательского интерфейса будет обновлен с помощью текста справки.
Примечание: В настоящее время не все функции доступны с помощью команд или SQL. Кроме того, некоторые горячие клавиши не реализованы через раскладки клавиатуры.
5.3.1 Кодирование последовательности клавиш
Нажатие клавиш преобразуется в строку с шестнадцатеричной кодировкой, которая используется для поиска записи в раскладке. Каждый байт значения нажатия клавиши форматируется как x
, за которым следует шестнадцатеричное кодирование в нижнем регистре. Например, кодировка для ключа £
будет xc2xa3
. Чтобы упростить определение кодировки неназначенных клавиш, lnav напечатает в командной строке команду :config
и JSON-указатель для назначения команды клавише.
Рис. 1: Снимок экрана командной строки при нажатии неназначенной клавиши.
Примечание: Поскольку lnav является консольным приложением, он может принимать только нажатия клавиш, которые могут быть представлены как символы или escape-последовательности. Например, он не может обрабатывать нажатие клавиши-модификатора.
5.3.2 Справочник
ui/keymap-defs/<keymap_name>
тип | object | ||
patternProperties | |||
((?:x[0-9a-f]{2})+) | /ui/keymap-defs/<keymap_name>/<key_seq> | ||
Карта кодов клавиш для выполнения команд. Имена полей - это ключи, которые должны быть сопоставлены с использованием шестнадцатеричного представления кодировки UTF-8. Каждый байт UTF-8 должен начинаться с буквы "x", за которой следует шестнадцатеричное представление байта. | |||
тип | object | ||
properties | |||
command | /ui/keymap-defs/<keymap_name>/<key_seq>/command | ||
Команда, выполняемая для заданной последовательности клавиш. Используйте скрипт для выполнения более сложных операций. | |||
тип | string | ||
примеры | :goto next hour | ||
шаблон | [:|;].* | ||
alt-msg | /ui/keymap-defs/<keymap_name>/<key_seq>/alt-msg | ||
Сообщение справки, отображаемое после нажатия клавиши. | |||
тип | string | ||
additionalProperties | False | ||
additionalProperties | False |
5.4 Настройка
Следующие параметры конфигурации можно использовать для настройки внутреннего устройства lnav по своему вкусу. Параметры можно изменить с помощью команды :config
.
5.4.1 /tuning/archive-manager
Настройки, связанные с открытием архивных файлов | ||
---|---|---|
тип | object | |
характеристики | ||
min-free-space | /tuning/archive-manager/min-free-space | |
Минимальное свободное пространство в байтах для сохранения при распаковке архивов | ||
тип | integer | |
minimum | 0 | |
cache-ttl | /tuning/archive-manager/cache-ttl | |
Время жизни для распакованных архивов, выраженное в виде продолжительности (например, 3d в течение трех дней) | ||
тип | string | |
примеры | 3d | |
12h | ||
additionalProperties | False |
5.4.2 /tuning/file-vtab
Настройки, связанные с виртуальной таблицей lnav_file | ||
---|---|---|
тип | object | |
характеристики | ||
max-content-size | /tuning/file-vtab/max-content-size | |
Максимально допустимый размер файла для столбца содержимого | ||
тип | integer | |
minimum | 0 | |
additionalProperties | False |
5.4.3 /tuning/logfile
Настройки, связанные с файлами журналов | ||
---|---|---|
тип | object | |
характеристики | ||
max-unrecognized-lines | /tuning/logfile/max-unrecognized-lines | |
Максимальное количество строк в файле, которое будет использоваться при определении формата | ||
тип | integer | |
minimum | 1 | |
additionalProperties | False |
5.4.4 /tuning/remote/ssh
Настройки, связанные с командой ssh, используемой для связи с удаленными машинами | |||
---|---|---|---|
тип | object | ||
характеристики | |||
command | /tuning/remote/ssh/command | ||
Команда SSH для выполнения | |||
тип | string | ||
transfer-command | /tuning/remote/ssh/transfer-command | ||
Команда, выполняемая на удаленном хосте при передаче файла | |||
тип | string | ||
start-command | /tuning/remote/ssh/start-command | ||
Команда, выполняемая на удаленном хосте для запуска тайлера | |||
тип | string | ||
flags | /tuning/remote/ssh/flags | ||
Флаги для передачи команде SSH | |||
тип | string | ||
options | /tuning/remote/ssh/options | ||
Параметры для передачи в команду SSH | |||
тип | object | ||
patternProperties | |||
(\w+) | /tuning/remote/ssh/options/<option_name> | ||
Установка параметра, который будет передан команде SSH | |||
тип | string | ||
additionalProperties | False | ||
config | /tuning/remote/ssh/config | ||
Опции ssh_config для передачи в SSH с параметром -o | |||
тип | object | ||
patternProperties | |||
(\w+) | /tuning/remote/ssh/config/<config_name> | ||
Установка значения конфигурации SSH | |||
тип | string | ||
additionalProperties | False | ||
additionalProperties | False |
Глава шестая
Интерфейс командной строки
При запуске lnav можно использовать следующие параметры. Флагов не так много, поскольку доступ к большинству функций осуществляется с помощью параметра -c
для выполнения команд или SQL-запросов.
6.1 Опции
- -h
- Распечатать эти параметры командной строки и выйти.
- -H
- Запустить lnav и переключиться на просмотр справки.
- -C
- Сравнить указанные файлы с конфигурацией, сообщить об ошибках и выйти. Этот параметр может быть полезен для проверки правильности формата журнала.
- -c <command>
- Выполнить указанную команду lnav, запрос SQL или сценарий lnav. Аргумент должен начинаться с символа, используемого для ввода подсказки, чтобы различать разные типы (например,
:
,;
,|
). Этот вариант можно давать несколько раз. - -f <path>
- Выполнить указанный командный файл. Этот вариант можно давать несколько раз.
- -I <path>
- Добавить каталог конфигурации.
- -i
- Установить файлы формата в каталог
.lnav/formats/
. Отдельные файлы будут установлены в каталогinstalled
, а репозитории git будут клонированы с именем каталога на основе их URI репозитория. - -u
- Обновить форматы, установленные из репозиториев git.
- -d <path>
- Записывать отладочные сообщения в указанный файл.
- -n
- Запуск без интерфейса curses (безголовый режим).
- -N
- Не открывать файл системного журнала по умолчанию, если файлы не указаны.
- -r
- Рекурсивно загружать файлы из указанных базовых каталогов.
- -t
- Добавлять временные метки к строкам данных, считываемых на стандартный ввод.
- -w <path>
- Записывать в этот файл содержимое стандартного ввода.
- -V
- Напечатать версию lnav.
- -q
- Не печатать сообщения журнала после выполнения всех команд.
6.2 Переменные среды
- XDG_CONFIG_HOME
- Если эта переменная установлена, lnav будет использовать этот каталог для хранения своей конфигурации в подкаталоге с именем
lnav
. - HOME
- Если
XDG_CONFIG_HOME
не установлен, lnav будет использовать этот каталог для хранения своей конфигурации в подкаталоге с именем.lnav
. - TZ
- Настройка часового пояса используется в некоторых форматах журналов для преобразования меток времени UTC в местный часовой пояс.
6.3 Примеры
Чтобы загрузить файл системного журнала и следить за ним:
$ lnav
Чтобы загрузить все файлы в /var/log
:
$ lnav /var/log
Чтобы посмотреть вывод make с добавленными отметками времени:
$ make 2>&1 | lnav -t
Глава седьмая
Пользовательский интерфейс
Основная часть дисплея показывает сообщения журнала из всех файлов, отсортированных по времени сообщения. Строки состояния вверху и внизу экрана могут дать вам представление о том, где вы находитесь в журналах. И последняя строка используется для ввода команд. Навигация управляется серией горячих клавиш, дополнительную информацию см. в Справочнике горячих клавиш.
Рис. 1: Снимок экрана lnav, просматривающего сообщения системного журнала.
На цветных дисплеях сообщения журнала будут выделены следующим образом:
- ошибки будут окрашены в красный цвет;
- предупреждения будут желтыми;
- поисковые запросы - инвертированный цвет;
- различные цвета будут применены к: IP-адресам, ключевым словам SQL, тегам XML, номерам файлов и строк в трассировках Java и строкам в кавычках;
- «идентификаторам» в сообщениях будут случайным образом назначаться цвета в зависимости от их содержимого (лучше всего работает на терминалах «xterm-256color»).
В правой части дисплея есть «полоса прокрутки» пропорционального размера, которая показывает:
- вашу текущую позицию в файле;
- расположение ошибок/предупреждений в файлах журнала с использованием красного или желтого цвета;
- местоположения совпадений при поиске с помощью отметки, указывающей влево;
- расположение закладок с помощью отметки, указывающей вправо.
Выше и ниже основного текста находятся строки состояния, в которых отображаются:
- текущее время;
- имя файла, из которого была извлечена верхняя строка;
- формат журнала для верхней строки;
- текущий вид;
- номер строки в верхней строке дисплея;
- текущее совпадение поиска, общее количество совпадений и поисковый запрос;
Если представление поддерживает фильтрацию, в строке состояния будет отображаться следующее:
- количество включенных фильтров и общее количество фильтров;
- количество строк, которые не отображаются из-за фильтрации.
Чтобы отредактировать фильтры, вы можете нажать клавишу TAB, чтобы переключить фокус с главного экрана на редактор фильтров. Редактор позволяет легко создавать, включать/отключать и удалять фильтры.
Наконец, последняя строка на дисплее - это место, где вы можете вводить шаблоны поиска и выполнять внутренние команды, такие как преобразование отметки времени unix в удобочитаемую дату. Командная строка использует библиотеку readline, поэтому можно применять обычный набор сочетаний клавиш.
Дисплей также используется для отображения другого содержимого, такого как: файл справки, гистограммы сообщений журнала с течением времени и результаты SQL. Представления организованы в стек, поэтому каждый раз, когда вы активируете новое представление нажатием клавиши или командой, новое представление помещается в стек. Повторное нажатие той же клавиши вытолкнет представление из стека и вернет вас к предыдущему представлению. Обратите внимание, что вы всегда можете использовать «q», чтобы вывести из стека предыдущий вид.
Глава восьмая
Справочник горячих клавиш
В этом справочнике описаны клавиши, используемые для управления lnav. Обратитесь к встроенной справке в lnav для более подробного объяснения каждой клавиши.
8.1 Пространственная навигация
Нажатия | Команда | ||
---|---|---|---|
Пробел | PgDn | На страницу вниз. | |
b | Backspace | PgUp | На страницу вверх. |
j | Return | 🠗 | На строку вниз. |
k | 🠕 | На строку вверх. | |
h | 🠔 | Левая половина страницы. В представлении журнала нажатие влево в начале текста сообщения покажет имя исходного файла для каждой строки. Повторное нажатие покажет полный путь. | |
Shift+h | Shift+🠔 | Десять столбцов влево. | |
l | 🠖 | Правая половина страницы. | |
Shift+l | Shift+🠖 | Десять столбцов вправо. | |
Home | g | Верхняя часть представления. | |
End | G | Нижняя часть представления. | |
e | Shift+e | Следующая/предыдущая ошибка. | |
w | Shift+w | Следующее/предыдущее предупреждение. | |
n | Shift+n | Следующее/предыдущее поисковое совпадение. | |
> | < | Следующее/предыдущее поисковое совпадение (по горизонтали). | |
f | Shift+f | Следующий/предыдущий файл. | |
u | Shift+u | Следующая/предыдущая закладка. | |
o | Shift+o | Вперед/назад через сообщения журнала с соответствующим полем opid . |
|
y | Shift+y | Следующий/предыдущий результат SQL-запроса. | |
s | Shift+s | Следующее/предыдущее замедление скорости сообщений журнала. | |
{ | } | Предыдущее/следующее местоположение в истории. |
8.2 Хронологическая навигация
Нажатия | Команда | |
---|---|---|
d | Shift+d | Вперед/назад на 24 часа. |
1-6 | Shift+1-6 | Следующая/предыдущая n * 10 минута часа. |
7 | 8 | Предыдущая/следующая минута. |
0 | Shift+0 | Следующий/предыдущий день. |
r | Shift+r | Вперед/назад на относительное время, которое последний раз использовалось с командой goto. |
8.3 Закладки
Нажатия | Команда |
---|---|
m | Отметить/снять отметку с верхней строки. |
Shift+m | Отметить/снять отметку с диапазона строк от последней отмеченной до верхней. |
Shift+j | Отметить/снять отметку со следующей строки после ранее отмеченной. |
Shift+k | Отметить/снять отметку с предыдущей строки. |
c | Копировать отмеченные строки в буфер обмена. |
Shift+c | Очистить выделенные строки. |
8.4 Дисплей
Нажатия | Команда |
---|---|
? | Просмотр/выход из встроенной справки. |
q | Возврат к предыдущему виду/выход. |
Shift+q | Возврат к предыдущему представлению/выход, пока совпадает верхнее время двух представлений. |
a | Восстановить вид, который ранее был отображен с помощью q/Q . |
Shift+a | Восстановить вид, который ранее был отображен с помощью q/Q и соответствовал верхнему времени представлений. |
Shift+p | Переключение в/из красивого печатного вида отображаемого журнала или текстовых файлов. |
Shift+t | Отображение прошедшего времени между строками. |
t | Переключиться в/из представления текстового файла. |
i | Переключиться в/из представления гистограммы. |
Shift+i | Переключиться в/из представления гистограммы. |
v | Переключиться в/из представления результатов SQL. |
Shift+v | Переключиться в/из представления результатов SQL и перейти к соответствующему полю в столбец log_line. |
p | Переключить отображение результатов парсера журнала. |
Tab | В представлениях журнала/текста, сфокусироваться на панели конфигурации для редактирования фильтров и просмотра списка загруженных файлов. В представлении результатов SQL циклически перемещаться по столбцам для отображения в виде гистограмм. |
Ctrl+l | Переключиться в режим lo-fi. Отображаемые строки журнала будут выгружены в терминал без каких-либо украшений, чтобы их можно было легко скопировать. |
Ctrl+w | Включить перенос слов. |
Ctrl+p | Показать/скрыть панель предварительного просмотра данных, которая может открываться при вводе команд или SQL-запросов. |
Ctrl+f | Переключить состояние включения/выключения всех фильтров в текущем представлении. |
x | Переключить скрытие полей сообщений журнала. Скрытые поля будут заменены тремя маркерами и выделены желтым цветом. |
= | Приостановить/возобновить загрузку данных нового файла. |
8.5 Сессия
Нажатия | Команда |
---|---|
Ctrl+R | Сброс текущего состояния сессии. |
8.6 Запросы на запросы
Нажатия | Команда |
---|---|
/ | Поиск строк, соответствующих регулярному выражению. |
; | Открыть интерфейс SQLite для выполнения операторов/запросов SQL. |
: | Выполнить внутреннюю команду, дополнительную информацию см. в разделе Команды |
| | Выполнить скрипт lnav, расположенный в каталоге формата. |
Ctrl+] | Отменить запрос. |
8.7 Настройка
Вы можете настроить поведение горячих клавиш, определив свои собственные раскладки. Обратитесь к разделу Определений раскладки клавиатуры для получения дополнительной информации.
Глава девятая
Форматы журналов
Файлы журнала, загруженные в lnav, анализируются на основе форматов, определенных в файлах конфигурации. Многие форматы уже встроены в двоичный файл lnav, и вы можете определить свои собственные, используя файл JSON. При загрузке файлов каждый формат проверяется, чтобы увидеть, может ли он проанализировать первые несколько строк в файле. Как только совпадение будет найдено, этот формат будет считаться форматом этого файла и использоваться для анализа оставшихся строк в файле. Если совпадений не найдено, файл по формату считается неформатированным текстом и его можно просмотреть в «текстовом» представлении, доступ к которому осуществляется с помощью клавиши t
.
В lnav встроены следующие форматы журналов:
Имя | Имя таблицы | Описание |
---|---|---|
Common Access Log | access_log | Формат журнала веб-доступа по умолчанию для таких серверов, как Apache. |
Amazon ALB log | alb_log | Формат журнала для балансировщиков нагрузки приложений Amazon. |
VMware vSphere Auto Deploy log format | autodeploy_log | Формат журнала для службы автоматического развертывания VMware. |
Generic Block | block_log | Общий формат для журналов, таких как cron, которые имеют дату в начале блока. |
Candlepin log format | candlepin_log | Формат журнала, используемый системой регистрации Candlepin. |
Yum choose_repo Log | choose_repo_log | Формат журнала для инструмента yum choose_repo. |
CUPS log format | cups_log | Формат журнала, используемый общей системой печати Unix. |
Dpkg Log | dpkg_log | Журнал dpkg debian. |
Amazon ELB log | elb_log | Формат журнала для Amazon Elastic Load Balancers. |
engine log | engine_log | Формат журнала для файлов engine.log из RHEV/oVirt. |
Common Error Log | error_log | Формат журнала веб-ошибок по умолчанию для таких серверов, как Apache. |
Fsck_hfs Log | fsck_hfs_log | Формат журнала для инструмента fsck_hfs на Mac OS X. |
Glog | glog_log | Формат Google glog. |
HAProxy HTTP Log Format | haproxy_log | Формат журнала HAProxy. |
Java log format | java_log | Формат журнала, используемый log4j и выводимый большинством программ Java. |
journalctl JSON log format | journald_json_log | Формат журнала, созданный systemd journalctl -o json. |
Katello log format | katello_log | Формат журнала, используемый katello и foreman как и в Satellite 6. |
OpenAM Log | openam_log | Поставщик удостоверений OpenAM. |
OpenAM Debug Log | openamdb_log | Журналы отладки для поставщика удостоверений OpenAM. |
OpenStack log format | openstack_log | Формат журнала для файлов журнала OpenStack. |
CUPS Page Log | page_log | Журнал печатных страниц сервера CUPS. |
Papertrail Service | papertrail_log | Формат журнала для службы управления журналами papertrail. |
S3 Access Log | s3_log | Формат журнала доступа к серверу S3. |
SnapLogic Server Log | snaplogic_log | Формат журнала сервера SnapLogic. |
SSSD log format | sssd_log | Формат журнала, используемый демоном Служб безопасности системы. |
Strace | strace_log | Формат вывода строки. |
sudo | sudo_log | Инструмент управления привилегиями sudo. |
Syslog | syslog_log | Формат системного регистратора, используемый в большинстве систем posix. |
TCF Log | tcf_log | Журнал Target Communication Framework. |
TCSH History | tcsh_history | Формат файла истории tcsh. |
Uwsgi Log | uwsgi_log | Формат журнала uwsgi. |
Vdsm Logs | vdsm_log | Формат журнала Vdsm. |
VMKernel Logs | vmk_log | Формат журнала VMkernel. |
VMware Logs | vmw_log | Один из форматов журналов, используемых в программном обеспечении ESXi и vCenter VMware. |
RHN server XMLRPC log format | xmlrpc_log | Генерируется компонентом Satellite’s XMLRPC. |
В дополнение к указанным выше форматам поддерживаются следующие форматы с самоописанием:
- Формат журнала Bro Network Security Monitor TSV поддерживается в версиях lnav v0.8.3+. Формат журнала Bro является самоописывающим, поэтому lnav прочитает заголовок, чтобы определить форму файла.
- Формат файла W3C Extend Log File Format поддерживается в версиях lnav v0.10.0+. Формат журнала W3C является самоописывающим, поэтому lnav будет читать заголовок, чтобы определить форму файла.
9.1 Определение нового формата
Новые форматы журналов можно определить, поместив файлы конфигурации JSON в подкаталоги каталога ~/.lnav/formats/
. Каталоги и файлы можно называть как угодно, но файлы должны иметь суффикс .json
. Образец файла, содержащий встроенную конфигурацию, будет записан в этот каталог при запуске lnav. Вы можете обращаться к этому файлу при написании собственных форматов или если вам нужно изменить существующие. Каталоги форматирования также могут содержать файлы сценариев .sql
и .lnav
, которые можно использовать для автоматического анализа файлов журнала.
Файл формата lnav должен содержать один объект JSON, желательно со свойством $schema
, которое относится к format-v1.schema, например:
{
"$schema": "https://lnav.org/schemas/format-v1.schema.json"
}
Каждый формат, который должен быть определен в файле, должен быть отдельным полем в объекте верхнего уровня. Имя поля должно быть символьным именем формата. Это значение также будет использоваться в качестве имени таблицы SQL для журнала. Значением для каждого поля должен быть другой объект со следующими полями:
- title
- Краткое и удобочитаемое название формата.
- description
- Более подробное описание формата.
- url
- URL-адрес определения формата.
- file-pattern
- Регулярное выражение, используемое для сопоставления путей к файлам журнала. Обычно в процессе обнаружения проверяется каждый формат файла. Это поле можно использовать для ограничения того, к каким файлам применяется формат, в случае потенциального конфликта.
- regex
-
Этот объект содержит подобъекты, которые описывают форматы сообщений, которые должны соответствовать в простом файле журнала. В файлах журнала, содержащих сообщения JSON, не следует указывать это поле.
- pattern
- Регулярное выражение, которое следует использовать для сопоставления сообщений журнала. Библиотека PCRE используется lnav для сопоставления всех регулярных выражений.
- module-format
- Если true, это регулярное выражение будет использоваться только для синтаксического анализа тел сообщений для форматов, которые могут действовать как контейнеры, например syslog. По умолчанию: false.
- json
- Истинно, если каждая строка журнала закодирована в формате JSON.
- line-format
-
Массив, определяющий текстовый формат для сообщений журнала в формате JSON. В файлах журнала с кодировкой JSON каждое сообщение будет преобразовано из необработанной кодировки JSON в этот формат. Каждый элемент является либо объектом, определяющим, какие поля должны быть вставлены в окончательную строку сообщения, либо строковой константой, которая должна быть вставлена. Например, следующая конфигурация преобразует каждый объект сообщения журнала в строку, содержащую метку времени, за которой следует пробел, а затем тело сообщения:
[ { "field": "ts" }, " ", { "field": "msg" } ]
- field
-
Имя или JSON-указатель поля сообщения, которое должно быть вставлено в этот момент в сообщении. Специальное имя поля
__timestamp__
может использоваться для вставки удобочитаемой метки времени. Поле__level__
может использоваться для вставки имени уровня, как определено lnav.Совет: используйте JSON-указатель для ссылки на вложенные поля. Например, чтобы включить свойство «procname», вложенное в объект «details», вы должны написать ссылку на поле как
/details/procname
. - min-width
- Минимальная ширина поля. Если значение поля в данном сообщении журнала короче, при необходимости будет добавлено заполнение, чтобы удовлетворить требованиям минимальной ширины. (v0.8.2+)
- max-width
- Максимальная ширина поля. Если значение поля в данном сообщении журнала длиннее, будет применен алгоритм переполнения, чтобы попытаться сократить поле. (v0.8.2+)
- align
- Задает выравнивание поля: «left» или «right». Если «left», отступ для соответствия минимальной ширине будет добавлен справа. Если «right», отступ будет добавлен слева. (v0.8.2 +)
- overflow
-
Алгоритм, используемый для сокращения поля, длина которого превышает «max-width». Поддерживаются следующие алгоритмы:
- abbrev
- Удаляет все, кроме первой буквы в тексте с точками. Например, «com.example.foo» будет сокращен до «c.e.foo».
- truncate
- Обрезает любой текст, превышающий максимальную ширину.
- dot-dot
- Вырезает середину текста и заменяет ее двумя точками (например, "..").
(v0.8.2 +)
- timestamp-format
- Формат отметки времени, используемый при отображении времени для этого сообщения журнала. (v0.8.2 +)
- default-value
- Значение по умолчанию, которое следует использовать, если поле не может быть найдено в текущем сообщении журнала. Встроенное значение по умолчанию - «-».
- text-transform
- Преобразует текст в поле. Поддерживаемые варианты: none, uppercase, lowercase, capitalize.
- timestamp-field
- Имя поля, содержащего временную метку сообщения журнала. По умолчанию - «timestamp».
- timestamp-format
-
Массив форматов временных меток, использующий подмножество спецификации преобразования strftime. Поддерживаются следующие преобразования: %a, %b, %L, %M, %H, %I, %d, %e, %k, %l, %m, %p, %y, %Y, %S , %s, %Z, %z. Кроме того, вы также можете использовать следующее:
- %L
- Миллисекунды в виде десятичного числа (от 000 до 999).
- %f
- Микросекунды в виде десятичного числа (от 000000 до 999999).
- %N
- Наносекунд в виде десятичного числа (диапазон от 000000000 до 999999999).
- %q
- Секунды от начала эпохи UNIX в виде шестнадцатеричного числа.
- %i
- Миллисекунды от начала эпохи UNIX.
- %6
- Микросекунды от начала эпохи UNIX.
- timestamp-divisor
- Для журналов JSON с числовыми отметками времени это значение используется для деления отметки времени на количество секунд и доли секунд.
- ordered-by-time
- (v0.8.3+) Указывает, что порядок сообщений в файле основан на времени. Файлы, которые не упорядочены по времени, будут отсортированы для отображения в правильном порядке. Обратите внимание, что такая сортировка может снизить производительность при отслеживании журналов.
- level-field
- Имя группы захвата регулярных выражений, которая содержит уровень сообщения журнала. По умолчанию «level».
- body-field
- Имя поля, содержащего основную часть сообщения. По умолчанию - «body».
- opid-field
- Имя поля, содержащего «идентификатор операции» сообщения. «ID операции» устанавливает цепочку сообщений, которая может соответствовать конкретной операции/запросу/транзакции. Пользователь может нажимать горячие клавиши «o» или «Shift + O» для перемещения вперед/назад по списку сообщений с одинаковым идентификатором операции. Примечание. Для журналов, закодированных в JSON, поле opid может быть путем (например, “foo/bar/opid”), если поле вложено в объект и ДОЛЖНО быть включено в “формат строки” для работы горячих клавиш "o".
- module-field
- Имя поля, содержащего идентификатор модуля, который отличает сообщения из одного источника журнала от другого. Это поле следует использовать, если этот формат сообщения может выступать в качестве контейнера для других типов сообщений журнала. Например, журнал доступа Apache можно отправить в системный журнал вместо записи в файл. В этом случае lnav проанализирует сообщение системного журнала, а затем отдельно проанализирует тело сообщения, чтобы определить «вспомогательный» формат. Этот идентификатор модуля используется, чтобы помочь lnav быстро определить формат для использования при синтаксическом анализе тела сообщения.
- hide-extra
- Логическое значение для журналов JSON, которое указывает, должны ли поля, не представленные в строчном формате, отображаться в отдельных строках.
- level
- Отображение уровней ошибок в регулярные выражения. Во время сканирования содержимое группы захвата, заданной полем уровня, будет проверяться на соответствие каждому из этих регулярных выражений. Как только совпадение будет найдено, уровень сообщений журнала будет установлен на соответствующий уровень. Доступные уровни в порядке серьезности: fatal, critical, error, warning, stats, info, debug, debug2-5, trace. Для журналов JSON с точными числовыми уровнями можно указать номер соответствующего уровня. Если в формате журнала JSON используются числовые диапазоны вместо точных чисел, вы можете указать шаблон, и число, найденное в журнале, будет преобразовано в строку для сопоставления с шаблоном.
- multiline
- Если false, lnav будет считать любые строки журнала, которые не соответствуют одному из шаблонов сообщений, ошибочными при проверке файлов с помощью опции
-C
. Этот флаг не влияет на нормальный просмотр. По умолчанию: true. - value
-
Этот объект содержит определения значений, захваченных регулярными выражениями.
- kind
- Тип данных, которые были захвачены: string, integer, float, json, quoted.
- collate
- Имя функции сортировки SQLite для этого значения. Могут использоваться стандартные функции сопоставления SQLite, а также функции, определенные lnav, как описано в Collators.
- identifier
- Логическое значение, которое указывает, представляет ли это поле идентификатор, и должно ли быть окрашено синтаксисом.
- external-key
- Логическое значение, указывающее, что это поле является ключом и не должно отображаться в графическом виде. Это должно быть установлено только для целочисленных полей.
- hidden
- Логическое значение для полей журнала, указывающее, должны ли они отображаться. Поведение журналов JSON и текстовых журналов немного отличается. Для журнала JSON это свойство определяет, будет ли добавлена дополнительная строка с парой ключ/значение. Для текстовых журналов это свойство определяет, должно ли значение отображаться по умолчанию или заменяться многоточием.
- rewriter
-
Команда для перезаписи этого поля при печати сообщений журнала, содержащих это значение. Команда должна начинаться с
:
,;
или|
, чтобы указать, является ли она обычной командой, SQL-запросом или выполняемым сценарием. Другие поля в строке доступны в SQL с помощью префикса:
. Текстовое значение этого поля будет затем заменено результатом выполнения команды при печати в формате. Например, формат журнала доступа HTTP перепишет поле кода состояния, чтобы включить текстовую версию (например, 200 (ОК)), используя следующий SQL-запрос:;SELECT :sc_status || ' (' || ( SELECT message FROM http_status_codes WHERE status = :sc_status) || ') '
- sample
-
Список объектов, содержащих образцы сообщений журнала. Все форматы должны включать хотя бы один образец, и ему должно соответствовать одно из включенных регулярных выражений. Каждый объект должен содержать следующее поле:
- line
- Пример сообщения.
- level
- Ожидаемый уровень ошибки. Ошибка будет вызвана, если этот уровень не соответствует уровню, проанализированному lnav для этого примера сообщения.
- highlights
-
Этот объект содержит определения шаблонов, которые должны быть выделены в сообщении журнала. Каждая запись должна иметь имя и определение со следующими полями:
- pattern
- Регулярное выражение, которое должно совпадать в теле сообщения журнала.
- color
- Цвет переднего плана, который следует использовать при выделении части сообщения, соответствующей шаблону. Если цвет не указан, он будет выбран автоматически. Цвета можно указать в шестнадцатеричной системе счисления, начав с хеша (например, #aabbcc) или используя название цвета, которое можно найти на http://jonasjacek.github.io/colors/.
- background-color
- Цвет фона, используемый при выделении части сообщения, соответствующей шаблону. Если цвет фона не указан, будет использован черный цвет. Цвет фона учитывается, только если указан цвет переднего плана.
- underline
- Если true, подчеркивает ту часть сообщения, которая соответствует шаблону.
- blink
- Если true, мигает та часть сообщения, которая соответствует шаблону.
Пример формата:
{
"$schema": "https://lnav.org/schemas/format-v1.schema.json",
"example_log" : {
"title" : "Example Log Format",
"description" : "Log format used in the documentation example.",
"url" : "http://example.com/log-format.html",
"regex" : {
"basic" : {
"pattern" : "^(?<timestamp>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)>>(?<level>\\w+)>>(?<component>\\w+)>>(?<body>.*)$"
}
},
"level-field" : "level",
"level" : {
"error" : "ERROR",
"warning" : "WARNING"
},
"value" : {
"component" : {
"kind" : "string",
"identifier" : true
}
},
"sample" : [
{
"line" : "2011-04-01T15:14:34.203Z>>ERROR>>core>>Shit's on fire yo!"
}
]
}
}
9.2 Изменение существующего формата
При загрузке форматов журналов из файлов lnav накладывает любые новые данные поверх ранее загруженных данных. Эта функция позволяет вам переопределить существующее значение или добавить новые в конфигурации формата. Например, вы можете отдельно добавить новое регулярное выражение в приведенный выше пример формата журнала, создав другой файл со следующим содержимым:
{
"$schema": "https://lnav.org/schemas/format-v1.schema.json",
"example_log" : {
"regex" : {
"custom1" : {
"pattern" : "^(?<timestamp>\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z)<<(?<level>\\w+)--(?<component>\\w+)>>(?<body>.*)$"
}
},
"sample" : [
{
"line" : "2011-04-01T15:14:34.203Z<<ERROR--core>>Shit's on fire yo!"
}
]
}
}
9.3 Скрипты
Каталоги формата могут также содержать файлы .sql и .lnav, чтобы помочь автоматизировать анализ файлов журнала. Файлы SQL выполняются при запуске для создания любых вспомогательных таблиц или представлений, а файлы сценария .lnav
могут быть выполнены с помощью горячей клавиши конвейера (|). Например, lnav включает сценарий «разбиения по загрузке», который разбивает представление журнала на разделы на основе загрузочных сообщений от ядра Linux. Сценарий может содержать сочетание команд SQL и lnav, а также включать другие сценарии. Тип оператора для выполнения определяется ведущим символом в строке: точка с запятой запускает оператор SQL; двоеточие запускает команду lnav; а вертикальная черта (|) обозначает другой сценарий, который должен быть выполнен. Строки, начинающиеся с хеша, рассматриваются как комментарии. В скрипте определены следующие переменные:
- #
- Количество аргументов, переданных скрипту.
- __all__
- Строка, содержащая все аргументы, разделенные одиночными пробелами.
- 0
- Путь к исполняемому скрипту.
- 1-N
- Аргументы передаются скрипту.
Помните, что вам нужно использовать команду :eval при обращении к переменным в большинстве команд lnav. Сценарии могут предоставлять текст справки, отображаемый во время интерактивного использования, путем добавления следующих тегов в заголовок комментария:
- @synopsis
Синопсис должен содержать имя сценария и любые параметры, которые необходимо передать. Например:
# @synopsis: hello-world
[ ... ] - @description
Однострочное описание того, что делает сценарий. Например:
# @description: Say hello to the given names.
Совет: Команду :eval можно использовать для подстановки переменных для команд, которые изначально не поддерживают ее. Например, чтобы заменить переменную
pattern
в команде :filter-out::eval :filter-out ${pattern}
9.4 Установка форматов
Форматы файлов загружаются из подкаталогов /etc/lnav/formats
и ~/.lnav/formats/
. Вы можете вручную создать эти подкаталоги и скопировать туда файлы форматирования. Или вы можете передать lnav параметр -i
для автоматической установки форматов из командной строки. Например:
$ lnav -i myformat.json
info: installed: /home/example/.lnav/formats/installed/myformat_log.json
Файлы формата, установленные с помощью этого метода, будут помещены в подкаталог installed
и названы на основе имени первого формата, найденного в файле.
Вы также можете установить форматы из репозиториев git, передав URL-адрес клона репозитория. Стандартный набор репозиториев поддерживается по адресу https://github.com/tstack/lnav-config и может быть установлен путем передачи «extra» в командной строке, например:
$ lnav -i extra
Эти репозитории можно обновить, запустив lnav с флагом -u.
Файлы форматирования также можно сделать исполняемыми, добавив строку shebang (#!) В начало файла, например:
#! /usr/bin/env lnav -i
{
"myformat_log" : ...
}
Запуск файла формата должен затем установить его автоматически:
$ chmod ugo+rx myformat.json
$ ./myformat.json
info: installed: /home/example/.lnav/formats/installed/myformat_log.json
9.5 Порядок форматирования при сканировании файла
Когда lnav загружает файл, он пробует каждый формат журнала по первым 15000 строкам[1] файла, пытаясь найти совпадение. Когда совпадение найдено, этот формат журнала будет заблокирован и будет использоваться для остальных строк в этом файле. Поскольку между форматами может быть перекрытие, lnav выполняет тест при запуске, чтобы определить, какие форматы соответствуют друг другу строкам выборки. Используя эту информацию, он упорядочит форматы так, чтобы более конкретные форматы были опробованы перед более общими. Например, формат, который соответствует определенным сообщениям системного журнала, будет соответствовать его собственным строкам выборки, но не строкам в примерах системного журнала. С другой стороны, формат системного журнала будет соответствовать его собственным образцам и образцам в более конкретном формате. Вы можете увидеть порядок форматирования, включив отладку и проверив файл журнала lnav на наличие сообщения «Format order»:
$ lnav -d /tmp/lnav.log
-
Можно настроить максимальное количество проверяемых строк. См. Раздел Настройка для получения более подробной информации.
Глава десятая
Сессии
Информация о сеансе сохраняется автоматически для набора файлов, которые были переданы в командной строке и перезагружены при следующем запуске lnav. В настоящее время сохраняется следующая информация:
- Положение в просматриваемых файлах.
- Активный поиск для каждого просмотра.
- Фильтры журнала.
- Подсветка.
- Скрытые файлы.
- Скрытые поля.
Закладки и настройки времени ведения журнала хранятся отдельно для каждого файла. Обратите внимание, что закладки связаны с файлами на основе содержимого первой строки файла, поэтому они сохраняются, даже если файл был перемещен из своего текущего местоположения.
Данные сеанса хранятся в каталоге ~/.lnav
.
Глава одиннадцатая
Команды
Команды обеспечивают доступ к некоторым более продвинутым функциям lnav, таким как filtering и search tables. Вы можете активировать командную строку, нажав клавишу :
. В командной строке вы можете начать вводить нужную команду и/или дважды нажать TAB
, чтобы активировать автозаполнение и показать доступные команды. Чтобы помочь вам в использовании команд, над командной строкой появится окно справки с объяснением команды и ее параметров (если они есть). Например, на снимке экрана ниже показана справка для команды :open
:
Рис. 1: Снимок экрана онлайн-справки для команды :open
.
Помимо интерактивной справки, многие команды позволяют предварительно просмотреть эффекты, которые будет иметь команда. Этот предварительный просмотр активируется вскоре после того, как вы закончите вводить текст, но до того, как вы нажали Enter
для выполнения команды. Например, команда :open
покажет предварительный просмотр первых нескольких строк файла, заданного в качестве аргумента:
Рис. 2: Снимок экрана предварительного просмотра, показанного для команды :open
.
Команда :filter-out pattern
- еще один пример, в котором поведение предварительного просмотра может помочь вам создать правильную командную строку. Эта команда принимает регулярное выражение PCRE, которое определяет сообщения журнала, которые должны быть отфильтрованы из представления. В предварительном просмотре для этой команды красным цветом будет выделена часть сообщений журнала, соответствующих выражению. Таким образом, вы можете быть уверены, что регулярное выражение соответствует интересующим вас сообщениям журнала, прежде чем применять фильтр. На следующем снимке экрана показан пример такого поведения предварительного просмотра для строки «launchd»:
Рис. 3: Снимок экрана, показывающий предварительный просмотр команды :filter-out launchd
.
Любые ошибки, обнаруженные во время предварительного просмотра, будут отображаться в строке состояния прямо над командной строкой. Например, при попытке открыть неизвестный файл в строке состояния будет отображаться сообщение об ошибке, например:
Рис. 4: Скриншот ошибки при попытке открыть несуществующий файл.
Совет: обратите внимание, что почти все команды поддерживают завершение по TAB для своих аргументов. Итак, если вы сомневаетесь, что вводить для аргумента, вы можете дважды нажать клавишу
TAB
, чтобы получить предложения. Например, завершение TAB для командыfilter-in
предложит слова, которые в данный момент отображаются в представлении.
Примечание: Следующие команды можно отключить, установив переменную среды
LNAVSECURE
перед запуском lnav::open
:pipe-to
:pipe-line-to
:write-*-to
Это упрощает запуск lnav в ограниченных средах без риска повышения привилегий.
11.1 Справочник
11.1.1 :adjust-log-time timestamp
Изменить временные метки верхнего файла, чтобы они были относительно заданной даты.
- Параметры
- timestamp* - новая временная метка для верхней строки в представлении
- Примеры
-
Чтобы установить верхнюю временную метку на заданную дату:
:adjust-log-time 2017-01-02T05:33:00
Чтобы установить верхнюю временную метку на час назад:
:adjust-log-time -1h
11.1.2 :alt-msg msg
Отобразить сообщения в альтернативной командной позиции
- Параметры
- msg* - сообщение для отображения
- Примеры
-
Чтобы отобразить «Press t to switch to the text view» в правом нижнем углу:
:alt-msg Press t to switch to the text view
- См. также
- :echo msg, :eval command, :redirect-to [path], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-to path, :write-view-to path
11.1.3 :append-to path
Добавить отмеченные строки в текущем представлении к данному файлу
- Параметры
- path* - путь к файлу, к которому нужно добавить
- Примеры
-
Чтобы добавить отмеченные строки в файл /tmp/interesting-lines.txt:
:append-to /tmp/interesting-lines.txt
- См. также
- :echo msg, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-to path, :write-view-to path
11.1.4 :clear-comment
Очистить комментарий, прикрепленный к верхней строке журнала
- См. также
- :comment text, :tag tag
11.1.5 :clear-filter-expr
Очистить выражение фильтра
- См. также
- :filter-expr expr, :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.6 :clear-highlight pattern
Удалить ранее установленное регулярное выражение для выделения
- Параметры
- pattern* - регулярное выражение, ранее использовавшееся с: highlight
- Примеры
-
Чтобы убрать выделение с помощью шаблона
foobar
::clear-highlight foobar
- См. также
- :enable-word-wrap, :hide-fields field-name, :highlight pattern
11.1.7 :clear-mark-expr
Очистить выражение отметки
- См. также
- :hide-unmarked-lines, :mark-expr expr, :mark, :next-mark type, :prev-mark type
11.1.8 :clear-partition
Очистить перегородку, в которую входит верхняя строка.
11.1.9 :close
Закрыть верхний файл в представлении
11.1.10 :comment text
Прикрепить комментарий к верхней строке журнала
- Параметры
- text* - текст комментария
- Примеры
-
Чтобы добавить комментарий «This is where it all went wrong» в верхнюю строку:
:comment This is where it all went wrong
- См. также
- :clear-comment, :tag tag
11.1.11 :config option [value]
Прочтитать или записать вариант конфигурации
- Параметры
-
option* — путь к опции для чтения или записи
value - значение для записи. Если не указано, возвращается текущее значение.
- Примеры
-
Чтобы прочитать конфигурацию параметра
/ui/clock-format
::config /ui/clock-format
Чтобы установить для параметра
/ui/dim-text
значениеfalse
::config /ui/dim-text false
- См. также
- :reset-config option
11.1.12 :create-logline-table table-name
Создать таблицу SQL, используя верхнюю строку представления журнала в качестве шаблона
- Параметры
- table-name* - имя новой таблицы
- Примеры
-
Чтобы создать таблицу в стиле logline с именем
task_durations
::create-logline-table task_durations
- См. также
- :create-search-table table-name [pattern], :create-search-table table-name [pattern], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-view-to path
11.1.13 :create-search-table table-name [pattern]
Создайть таблицу SQL на основе поиска по регулярному выражению
- Параметры
-
table-name* - имя создаваемой таблицы
pattern - регулярное выражение, используемое для захвата столбцов таблицы. Если не указано, используется текущий шаблон поиска.
- Примеры
-
Чтобы создать таблицу с именем
task_durations
, которая сопоставляет сообщения журнала с шаблономduration=(?<duration>d+)
::create-search-table task_durations duration=(?<duration>\d+)
- См. также
- :create-logline-table table-name, :create-logline-table table-name, :delete-search-table table-name, :delete-search-table table-name, :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-view-to path
11.1.14 :current-time
Вывести текущее время в удобочитаемой форме и в секундах с эпохи UNIX
11.1.15 :delete-filter pattern
Удалить фильтр, созданный с помощью filter-in или filter-out
- Параметры
- pattern* - регулярное выражение для сопоставления
- Примеры
-
Чтобы удалить фильтр с шаблоном
last message repeated
::delete-filter last message repeated
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.16 :delete-logline-table table-name
Удалить таблицу, созданную с помощью create-logline-table
- Параметры
- table-name* - имя удаляемой таблицы
- Примеры
-
Чтобы удалить таблицу в стиле logline с именем
task_durations
::delete-logline-table task_durations
- См. также
- :create-logline-table table-name, :create-logline-table table-name, :create-search-table table-name [pattern], :create-search-table table-name [pattern], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-view-to path
11.1.17 :delete-search-table table-name
Удалить таблицу SQL на основе поиска по регулярному выражению
- Параметры
- table-name* - имя удаляемой таблицы
- Примеры
-
Чтобы удалить таблицу поиска с именем
task_durations
::delete-search-table task_durations
- См. также
- :create-logline-table table-name, :create-logline-table table-name, :create-search-table table-name [pattern], :create-search-table table-name [pattern], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-view-to path
11.1.18 :delete-tags tag
Удалить указанные теги из всех строк журнала
- Параметры
- tag - теги для удаления
- Примеры
-
Чтобы удалить теги "#BUG123" и "#needs-review" из всех строк журнала:
:delete-tags #BUG123 #needs-review
- См. также
- :comment text, :tag tag
11.1.19 :disable-filter pattern
Отключить фильтр, созданный с помощью filter-in/filter-out
- Параметры
- pattern* - регулярное выражение, используемое в команде фильтра.
- Примеры
-
Чтобы отключить фильтр с шаблоном «last message repeated»:
:disable-filter last message repeated
- См. также
- :enable-filter pattern, :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.20 :disable-word-wrap
Отключить перенос слов для текущего представления
- См. также
- :enable-word-wrap, :hide-fields field-name, :highlight pattern
11.1.21 :echo msg
Вывести данное сообщение на экран или, если был вызван: redirect-to, в выходной файл, указанный в перенаправлении. В сообщении выполняется подстановка переменных. Используйте обратную косую черту, чтобы экранировать любые специальные символы, например $
.
- Параметры
- msg* - сообщение для отображения
- Примеры
-
Чтобы вывести «Hello, World!»:
:echo Hello, World!
- См. также
- :alt-msg msg, :append-to path, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path
11.1.22 :enable-filter pattern
Включить ранее созданный и отключенный фильтр
- Параметры
- pattern* - регулярное выражение, используемое в команде фильтра
- Примеры
-
Чтобы включить отключенный фильтр с шаблоном
last message repeated
::enable-filter last message repeated
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.23 :enable-word-wrap
Включить перенос слов для текущего представления
- См. также
- :disable-word-wrap, :hide-fields field-name, :highlight pattern
11.1.24 :eval command
Оценить данную команду/запрос после выполнения подстановки переменных среды.
- Параметры
- command* - команда или запрос для выполнения подстановки.
- Примеры
-
Чтобы заменить имя таблицы из переменной:
:eval ;SELECT * FROM ${table}
- См. также
- :alt-msg msg, :echo msg, :redirect-to [path], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-to path, :write-view-to path
11.1.25 :filter-expr expr
Установить выражение фильтра
- Параметры
- expr* - выражение SQL, оцениваемое для каждого сообщения журнала. Доступ к значениям сообщений можно получить, используя имена столбцов с префиксом двоеточие.
- Примеры
-
Чтобы установить выражение фильтра, которое соответствует сообщениям системного журнала от
syslogd
::filter-expr :log_procname = 'syslogd'
Чтобы установить выражение фильтра, которое соответствует сообщениям журнала, где после
id
следует число и содержит строкуfoo
::filter-expr :log_body REGEXP 'id\d+' AND :log_body REGEXP 'foo'
- См. также
- :clear-filter-expr, :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.26 :filter-in pattern
Показать только строки, соответствующие заданному регулярному выражению в текущем представлении
- Параметры
- pattern* - регулярное выражение для сопоставления
- Примеры
-
Чтобы отфильтровать сообщения журнала, в которых нет строки
dhclient
::filter-in dhclient
- См. также
- :delete-filter pattern, :disable-filter pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.27 :filter-out pattern
Удалить строки, соответствующие заданному регулярному выражению в текущем представлении
- Параметры
- pattern* - регулярное выражение для сопоставления
- Примеры
-
Чтобы отфильтровать сообщения журнала, содержащие строку «last message repeated»:
:filter-out last message repeated
- См. также
- :delete-filter pattern, :disable-filter pattern, :filter-in pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.28 :goto line#|N%|date
Перейти в указанное место на виде сверху
- Параметры
- line#|N%|date* - номер строки, процент в файле или отметка времени.
- Примеры
-
Для перехода к строке 22:
:goto 22
Чтобы перейти к строке на 75% пути в представлении:
:goto 75%
Чтобы перейти к первому сообщению первого дня 2017 года:
:goto 2017-01-01
- См. также
- :next-location, :next-mark type, :prev-location, :prev-mark type, :relative-goto line-count|N%
11.1.29 :help
Открыть текстовую справку
11.1.30 :hide-fields field-name
Скрыть поля сообщений журнала, заменив их многоточием
- Параметры
- field-name - имя поля, которое нужно скрыть, в формате для верхней строки журнала. Полное имя может использоваться, если имя поля предваряется именем формата и точкой, чтобы скрыть любое поле.
- Примеры
-
Чтобы скрыть поля log_procname во всех форматах:
:hide-fields log_procname
Чтобы скрыть только поле log_procname в формате системного журнала:
:hide-fields syslog_log.log_procname
- См. также
- :enable-word-wrap, :highlight pattern, :show-fields field-name
11.1.31 :hide-file path
Скрыть данный файл(ы) и пропустить индексацию, пока он не появится снова. Если путь не указан, текущий файл в представлении скрыт
- Параметры
- path - путь или шаблон поиска, который указывает файлы, которые нужно скрыть.
11.1.32 :hide-lines-after date
Скрыть строки, которые идут после указанной даты
- Параметры
- date* - абсолютная или относительная дата.
- Примеры
-
Чтобы скрыть строки после верхней строки в представлении:
:hide-lines-after here
Чтобы скрыть строки после 6 утра сегодня:
:hide-lines-after 6am
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-before date, :hide-unmarked-lines, :show-lines-before-and-after, :toggle-filtering
11.1.33 :hide-lines-before date
Скрыть строки, предшествующие указанной дате
- Параметры
- date* - абсолютная или относительная дата.
- Примеры
-
Чтобы скрыть строки перед верхней строкой в представлении:
:hide-lines-before here
Чтобы скрыть сообщения журнала до 6 утра сегодня:
:hide-lines-before 6am
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-unmarked-lines, :show-lines-before-and-after, :toggle-filtering
11.1.34 :hide-unmarked-lines
Скрыть строки, которые не были добавлены в закладки
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :mark, :next-mark type, :prev-mark type, :toggle-filtering
11.1.35 :highlight pattern
Добавить раскраску к фрагментам сообщений журнала, которые соответствуют заданным параметрам регулярного выражения.
- Параметры
- pattern* - регулярное выражение для сопоставления
- Примеры
-
Чтобы выделить числа из трех или более цифр:
:highlight \d{3,}
- См. также
- :clear-highlight pattern, :enable-word-wrap, :hide-fields field-name
11.1.36 :load-session
Загрузить последнее состояние сеанса
11.1.37 :mark
Переключить состояние закладки для верхней строки в текущем представлении
- См. также
- :hide-unmarked-lines, :next-mark type, :prev-mark type
11.1.38 :mark-expr expr
Установить выражение закладки
- Параметры
- expr* - выражение SQL, оцениваемое для каждого сообщения журнала. Доступ к значениям сообщений можно получить, используя имена столбцов с префиксом двоеточие.
- Примеры
-
Чтобы отметить строки из
dhclient
, в которых упоминаетсяeth0
::mark-expr :log_procname = 'dhclient' AND :log_body LIKE '%eth0%'
- См. также
- :clear-mark-expr, :hide-unmarked-lines, :mark, :next-mark type, :prev-mark type
11.1.39 :next-location
Перейти к следующей позиции в истории местоположений
- См. также
- :goto line#|N%|date, :next-mark type, :prev-location, :prev-mark type, :relative-goto line-count|N%
11.1.40 :next-mark type
Перейти к следующей закладке данного типа в текущем представлении
- Параметры
- type - Тип закладки: error, warning, search, user, file, meta.
- Примеры
-
Для перехода к следующей ошибке:
:next-mark error
- См. также
- :goto line#|N%|date, :hide-unmarked-lines, :mark, :next-location, :prev-location, :prev-mark type, :prev-mark type, :relative-goto line-count|N%
11.1.41 :open path
Открыть указанный файл(ы) в lnav. Открытие файлов на машинах, доступных через SSH, может быть выполнено с использованием синтаксиса: [user@]host:/path/to/logs
- Параметры
- path - путь к открываемому файлу
- Примеры
-
Чтобы открыть файл
/path/to/file
::open /path/to/file
Чтобы открыть удаленный файл
/var/log/syslog.log
::open dean@host1.example.com:/var/log/syslog.log
11.1.42 :partition-name name
Отметить верхнюю строку в представлении журнала как начало нового раздела с заданным именем
- Параметры
- name* - Имя нового раздела
- Примеры
-
Чтобы пометить верхнюю строку как начало раздела с именем
boot #1
::partition-name boot #1
11.1.43 :pipe-line-to shell-cmd
Подключить верхнюю строку к заданной команде оболочки
- Параметры
- shell-cmd* - командная строка оболочки для выполнения
- Примеры
-
Чтобы записать верхнюю строку в
sed
для обработки::pipe-line-to sed -e 's/foo/bar/g'
- См. также
- :append-to path, :echo msg, :pipe-to shell-cmd, :redirect-to [path], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-to path, :write-view-to path
11.1.44 :pipe-to shell-cmd
Подключить отмеченные строки к заданной команде оболочки
- Параметры
- shell-cmd* - командная строка оболочки для выполнения
- Примеры
-
Чтобы записать отмеченные строки в sed для обработки:
:pipe-to sed -e s/foo/bar/g
- См. также
- :append-to path, :echo msg, :pipe-line-to shell-cmd, :redirect-to [path], :write-csv-to path, :write-json-to path, :write-jsonlines-to path, :write-raw-to path, :write-screen-to path, :write-table-to path, :write-to path, :write-view-to path
11.1.45 :prev-location
Перейти на предыдущую позицию в истории местоположений
- См. также
- :goto line#|N%|date, :next-location, :next-mark type, :prev-mark type, :relative-goto line-count|N%
11.1.46 :prev-mark type
Перейти к предыдущей закладке данного типа в текущем представлении
- Параметры
- type - Тип закладки: error, warning, search, user, file, meta.
- Примеры
-
Чтобы перейти к предыдущей ошибке:
:prev-mark error
- См. также
- :goto line#|N%|date, :hide-unmarked-lines, :mark, :next-location, :next-mark type, :next-mark type, :prev-location, :relative-goto line-count|N%
11.1.47 :prompt type [–alt] [prompt] [initial-value]
Открыть данную подсказку
- Параметры
-
type* - Тип приглашения: command, script, search, sql, user
–alt - Выполнить альтернативное действие для этого запроса по умолчанию
prompt - Приглашение для отображения
initial-value - Начальное значение для заполнения для подсказки
- Примеры
-
Чтобы открыть командную строку с уже заполненным
filter-in
::prompt command : 'filter-in '
Чтобы задать вопрос пользователю:
:prompt user 'Are you sure? '
11.1.48 :pt-max-time
(null)
11.1.49 :pt-min-time
(null)
11.1.50 :quit
Выйти из lnav
11.1.51 :redirect-to [path]
Перенаправить вывод команд, которые пишут на стандартный вывод, в указанный файл
- Параметры
- path - путь к файлу для записи. Если не указано иное, текущее перенаправление будет очищено.
- Примеры
-
Чтобы записать вывод команд lnav в файл /tmp/script-output.txt:
:redirect-to /tmp/script-output.txt
- См. также
- :alt-msg msg, :append-to path, :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path
11.1.52 :redraw
Сделать полную перерисовку экрана
11.1.53 :relative-goto line-count|N%
Переместить текущий вид вверх или вниз на заданную величину
- Параметры
- line-count|N%* - количество, на которое перемещается представление.
- Примеры
-
Чтобы переместиться на 22 строки вниз в представлении:
:relative-goto +22
Чтобы переместиться на 10 процентов назад в представлении:
:relative-goto -10%
- См. также
- :goto line#|N%|date, :next-location, :next-mark type, :prev-location, :prev-mark type
11.1.54 :reset-config option
Сбросить параметр конфигурации до значения по умолчанию
- Параметры
- option* - путь к опции для сброса
- Примеры
-
Чтобы сбросить параметр
/ui/clock-format
обратно на встроенное значение по умолчанию::reset-config /ui/clock-format
- См. также
- :config option [value]
11.1.55 :reset-session
Сбросить состояние сеанса, очистить все фильтры, выделения и закладки
11.1.56 :save-session
Сохранить текущее состояние как сеанс
11.1.57 :session lnav-command
Добавить данную команду в файл сеанса (~/.lnav/session)
- Параметры
- lnav-command* - команда lnav для сохранения.
- Примеры
-
Чтобы добавить команду
:highlight foobar
в файл сеанса::session :highlight foobar
11.1.58 :set-min-log-level log-level
Установить минимальный уровень журнала для отображения в представлении журнала
- Параметры
- log-level* - новый минимальный уровень журнала
- Примеры
-
Чтобы установить минимальный отображаемый уровень журнала в error:
:set-min-log-level error
11.1.59 :show-fields field-name
Показывать ранее скрытые поля сообщений журнала
- Параметры
- field-name - Имя поля для отображения
- Примеры
-
Чтобы показать все поля log_procname во всех форматах:
:show-fields log_procname
- См. также
- :enable-word-wrap, :hide-fields field-name, :highlight pattern
11.1.60 :show-file path
Показать указанный файл(ы) и возобновить индексацию.
- Параметры
- path - Путь или шаблон поиска, который указывает файлы для отображения.
11.1.61: show-lines-before-and-after
Показать строки, которые были скрыты командами hide-lines
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :toggle-filtering
11.1.62 :show-unmarked-lines
Показать строки, которые не были добавлены в закладки
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines, :hide-unmarked-lines, :mark, :next-mark type, :prev-mark type, :toggle-filtering
11.1.63 :spectrogram field-name
Визуализировать данное поле сообщения с помощью спектрограммы
- Параметры
- field-name* - имя числового поля для визуализации
- Примеры
-
Для визуализации поля sc_bytes в формате access_log:
:spectrogram sc_bytes
11.1.64 :summarize column-name
Выполнить SQL-запрос, который вычисляет характеристики значений в заданном столбце
- Параметры
- column-name* - имя столбца для анализа
- Примеры
-
Чтобы получить сводку столбца sc_bytes в таблице access_log:
:summarize sc_bytes
11.1.65 :switch-to-view view-name
Перейти к данному виду
- Параметры
- view-name* - имя представления, на которое нужно переключиться
- Примеры
-
Чтобы переключиться в режим просмотра схемы:
:switch-to-view schema
11.1.66 :tag tag
Прикрепить теги к верхней строке журнала
- Параметры
- tag - теги, которые нужно прикрепить
- Примеры
-
Чтобы добавить теги
#BUG123
и#needs-review
в верхнюю строку::tag #BUG123 #needs-review
- См. также
- :comment text, :delete-tags tag, :untag tag
11.1.67 :toggle-filtering
Переключить флаг фильтрации для текущего представления
- См. также
- :filter-in pattern, :filter-out pattern, :hide-lines-after date, :hide-lines-before date, :hide-unmarked-lines
11.1.68 :toggle-view view-name
Переключиться на данное представление или, если оно уже отображается, переключиться на предыдущее представление
- Параметры
- view-name* - имя представления, отображение которого нужно переключить
- Примеры
-
Чтобы переключиться на представление схемы, если оно не отображается, или вернуться к предыдущему представлению:
:toggle-view schema
11.1.69 :unix-time seconds
Преобразование времени в формате эпохи UNIX в удобочитаемую форму
- Параметры
- seconds* - временная метка эпохи UNIX для преобразования.
- Примеры
-
Чтобы преобразовать время эпохи UNIX 1490191111:
:unix-time 1490191111
11.1.70 :untag tag
Отсоединить теги от верхней строки журнала
- Параметры
- tag - теги, которые нужно отсоединить
- Примеры
-
Чтобы удалить теги "#BUG123" и "#needs-review" из верхней строки:
:untag #BUG123 #needs-review
- См. также
- :comment text, :tag tag
11.1.71 :write-table-to path
Записать результаты SQL в указанный файл в табличном формате
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать результаты SQL в виде текста в /tmp/table.txt:
:write-table-to /tmp/table.txt
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.72 :write-csv-to path
Записать результаты SQL в указанный файл в формате CSV
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать результаты SQL в виде CSV в /tmp/table.csv:
:write-csv-to /tmp/table.csv
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-json-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.73 :write-json-to path
Записать результаты SQL в указанный файл в формате JSON
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать результаты SQL в виде JSON в /tmp/table.json:
:write-json-to /tmp/table.json
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.74 :write-jsonlines-to path
Записать результаты SQL в указанный файл в формате JSON Lines
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать результаты SQL в виде строк JSON в /tmp/table.json:
:write-jsonlines-to /tmp/table.json
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-json-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.75 :write-raw-to path
В представлении журнала записать исходное содержимое файла журнала отмеченных сообщений в файл. В представлении БД содержимое ячеек записать в выходной файл.
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать отмеченные строки в представлении журнала в /tmp/table.txt:
:write-raw-to /tmp/table.txt
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.76 :write-screen-to path
Записать отображаемый текст или результаты SQL в указанный файл без каких-либо параметров форматирования
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать в /tmp/table.txt только отображаемый текст:
:write-screen-to /tmp/table.txt
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path, :write-view-to path, :write-view-to path, :write-view-to path
11.1.77 :write-to path
Заменить указанный файл любыми отмеченными строками в текущем представлении
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать отмеченные строки в файл /tmp/interesting-lines.txt:
:write-to /tmp/interesting-lines.txt
- См. также
- :alt-msg msg, :append-to path, :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-view-to path, :write-view-to path
11.1.78 :write-view-to path
Записать текст из вида сверху в данный файл без каких-либо параметров форматирования
- Параметры
- path* - путь к файлу для записи
- Примеры
-
Чтобы записать вид сверху в /tmp/table.txt:
:write-view-to /tmp/table.txt
- См. также
- :alt-msg msg, :append-to path, :create-logline-table table-name, :create-search-table table-name [pattern], :echo msg, :echo msg, :eval command, :pipe-line-to shell-cmd, :pipe-to shell-cmd, :redirect-to [path], :redirect-to [path], :write-csv-to path, :write-csv-to path, :write-csv-to path, :write-json-to path, :write-json-to path, :write-json-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-jsonlines-to path, :write-raw-to path, :write-raw-to path, :write-raw-to path, :write-screen-to path, :write-screen-to path, :write-screen-to path, :write-table-to path, :write-table-to path, :write-table-to path, :write-to path, :write-to path
11.1.79 :zoom-to zoom-level
Увеличить масштаб гистограммы до заданного уровня
- Параметры
- zoom-level* - уровень масштабирования
- Примеры
-
Чтобы установить уровень масштабирования
1-week
::zoom-to 1-week
Глава двенадцатая
SQLite интерфейс
Анализ журнала в lnav можно выполнить с помощью интерфейса SQLite. Доступ к сообщениям журнала можно получить через виртуальные таблицы, созданные для каждого формата файла. Таблицы имеют то же имя, что и формат журнала, и каждое сообщение представляет собой отдельную строку в таблице. Например, учитывая следующее сообщение журнала из журнала доступа Apache:
127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326
Эти столбцы будут доступен для своей строки в таблице access_log:
log_line | 0 |
log_part | <NULL> |
log_time | 2000-10-10 13:55:36.000 |
log_idle_msecs | 0 |
log_level | info |
log_mark | 1 |
log_comment | <NULL> |
log_tags | <NULL> |
log_filters | <NULL> |
c_ip | 127.0.0.1 |
cs_method | GET |
cs_referer | <NULL> |
cs_uri_query | <NULL> |
cs_uri_stem | /apache_pb.gif |
cs_user_agent | <NULL> |
cs_username | frank |
cs_version | HTTP/1.0 |
sc_bytes | 2326 |
sc_status | 200 |
Примечание: Некоторые столбцы по умолчанию скрыты для уменьшения шума в результатах, но при явном использовании к ним по-прежнему можно получить доступ. Скрытые столбцы:
log_path
,log_text
,log_body
иlog_raw_text
.
Вы можете активировать запрос SQL, нажав клавишу ;
ключ. В командной строке вы можете начать вводить желаемый оператор SQL и/или дважды нажать TAB
, чтобы активировать автозаполнение. Над подсказкой появится окно справки, которое поможет вам использовать ключевые слова и функции SQL.
Рис. 1: Снимок экрана интерактивной справки для запроса SQL.
Рис. 2: Скриншот интерактивной справки для функции group_concat().
Простой запрос для выполнения в журнале доступа Apache может заключаться в получении среднего и максимального количества байтов, возвращаемых сервером, сгруппированных по IP-адресу:
;SELECT c_ip, avg(sc_bytes), max(sc_bytes) FROM access_log GROUP BY c_ip
После нажатия Enter
SQLite выполнит запрос, используя реализацию виртуальной таблицы lnav, чтобы извлечь данные непосредственно из файлов журнала. После завершения запроса главное окно переключится на представление БД для отображения результатов. Нажмите q
, чтобы вернуться к просмотру журнала, и нажмите v
, чтобы вернуться к просмотру журнала. Если результаты SQL содержат столбец log_line
, вы можете нажать Shift+v
для переключения между представлением базы данных и журналом.
Рис. 3: Снимок экрана представления результатов SQL.
Представление БД имеет следующие особенности отображения:
- Заголовки столбцов при прокрутке остаются в верхней части представления.
- Гистограмма с накоплением значений числового столбца отображается под строками. Нажатие
TAB
будет циклически отображать отсутствие столбцов, каждый отдельный столбец или все столбцы. - Столбцы JSON в верхней строке можно красиво распечатать, нажав
p
. На дисплее отобразится значение и путь JSON-указателя, которые можно передать функции jget.
12.1 Таблицы журналов
Каждый формат журнала имеет свою собственную таблицу базы данных, которую можно использовать для доступа к сообщениям журнала, соответствующим этому формату. Имя таблицы совпадает с именем формата, например, в формате syslog_log
будет таблица с именем syslog_log
. Также есть таблица all_logs
, которая обеспечивает доступ ко всем сообщениям всех форматов.
Примечание: В интерфейсе SQLite отражаются только отображаемые сообщения журнала. Отфильтрованные сообщения журнала недоступны.
Столбцы в таблицах журнала состоят из нескольких встроенных функций вместе со значениями, зафиксированными спецификацией формата журнала. Используйте команду .schema
в приглашении SQL, чтобы проверить дамп текущей схемы базы данных.
Следующие столбцы являются встроенными и включаются в SELECT *
:
- log_line
- Номер строки для сообщения в представлении журнала.
- log_part
- Раздел, в котором находится сообщение. Этот столбец можно изменить с помощью
UPDATE
или команды :parition-name. - log_time
- Скорректированная отметка времени для сообщения журнала. Это время может отличаться от отметки времени сообщения журнала, если оно пришло не по порядку и формат журнала предполагает, что файлы журнала будут упорядочены по времени.
- log_actual_time
- Исходная временная метка сообщений журнала в файле.
- log_idle_msecs
- Разница во времени между этим и предыдущим сообщениями. Единица времени - миллисекунды.
- log_level
- Уровень сообщения журнала.
- log_mark
- Истина, если сообщение журнала было отмечено пользователем.
- log_comment
- Комментарий к сообщению. Этот столбец можно изменить с помощью команды
UPDATE
или :comment. - log_tags
- Список тегов сообщения в формате JSON. Этот столбец можно изменить с помощью команды
UPDATE
или :tag. - log_filters
- Список идентификаторов фильтров в формате JSON, соответствующих этому сообщению.
Следующие столбцы являются встроенными и скрыты, поэтому они не будут включены в SELECT *
:
- log_time_msecs
- Скорректированная временная метка для сообщения журнала в виде количества миллисекунд от эпохи UNIX. Этот столбец можно более эффективно использовать для операций, связанных со временем, таких как timeslice().
- log_path
- Путь к файлу журнала, в котором находится это сообщение.
- log_text
- Полный текст сообщения журнала.
- log_body
- Тело сообщения журнала.
- log_raw_text
- Необработанный текст этого сообщения из файла журнала. В случае журналов JSON и CSV это будет точная строка текста JSON-Line и CSV из файла.
12.2 Расширения
Чтобы упростить анализ данных журнала из lnav, существует несколько встроенных расширений, которые предоставляют дополнительные функции и средства сортировки помимо тех, что предоставляются SQLite. Большинство функций взяты из файла extensions-functions.c, доступного на веб-сайте sqlite.org.
Совет: вы можете включить файл базы данных SQLite в командную строку и использовать интерфейс lnav для выполнения запросов. База данных будет прикреплена с именем, основанным на имени файла базы данных.
12.3 Команды
Команда SQL - это внутренний макрос, реализованный lnav.
- .schema
- Открывает представление схемы. Это представление содержит дамп схемы для внутренних таблиц и любых таблиц в подключенных базах данных.
- .msgformats
- Выполняет шаблонный запрос, который группирует и подсчитывает сообщения журнала по формату их тела сообщения. Эта команда может быть полезна для быстрого определения типов сообщений, наиболее часто встречающихся в файле журнала.
12.4 Переменные
В операторах SQL доступны следующие переменные:
- $LINES
- Количество строк в окне терминала.
- $COLS
- Количество столбцов в окне терминала.
12.5 Окружение
Доступ к переменным среды можно получить в запросах с использованием обычного синтаксиса $VAR_NAME
. Например, чтобы прочитать значение переменной «USER», вы можете написать:
;SELECT $USER
12.6 Сортировщики
- naturalcase
- Сравнивать строки «естественным образом», чтобы числовые значения в строке сравнивались на основе их числовых значений, а не их символьных значений. Например, «foo10» будет считаться большим, чем «foo2».
- naturalnocase
- То же, что и naturalcase, но без учета регистра.
- ipaddress
- Сравнение адресов IPv4/IPv6.
12.7 Справочник
Ниже приводится справочник по синтаксису и доступным функциям SQL:
12.7.1 expr [NOT] BETWEEN low AND hi
Проверить, находится ли выражение между двумя значениями.
- Параметры
-
low* - нижняя точка
hi* - верхняя точка
- Примеры
-
Чтобы проверить, находится ли 3 между 5 до 10:
;SELECT 3 BETWEEN 5 AND 10 0
Чтобы проверить, находится ли 10 между 5 до 10:
;SELECT 10 BETWEEN 5 AND 10 1
12.7.2 ATTACH DATABASE filename AS schema-name
Прикрепить файл базы данных к текущему соединению.
- Параметры
-
filename* - путь к файлу базы данных.
schema-name* - префикс для таблиц в этой базе данных.
- Примеры
-
Чтобы прикрепить файл базы данных
/tmp/customers.db
с именем customers:;ATTACH DATABASE '/tmp/customers.db' AS customers
12.7.3 CREATE [TEMP] VIEW [IF NOT EXISTS] [schema-name.] view-name AS select-stmt
Присвоить имя оператору SELECT
- Параметры
-
IF NOT EXISTS - не создавать представление, если оно уже существует.
schema-name. - База данных для создания представления в ней.
view-name* - имя представления
select-stmt* - оператор SELECT, который отображает представление
12.7.4 CREATE [TEMP] TABLE [IF NOT EXISTS] [schema-name.] table-name AS select-stmt
Создать таблицу
12.7.5 WITH RECURSIVE cte-table-name AS select-stmt
Создать временное представление, которое существует только на время выполнения оператора SQL.
- Параметры
-
cte-table-name* - имя временной таблицы.
select-stmt* - оператор SELECT, используемый для заполнения временной таблицы.
12.7.6 CAST(expr AS type-name)
Преобразовать значение данного выражения в другой класс хранения, указанный в type-name.
- Параметры
-
expr* - значение для преобразования.
type-name* - имя типа, в который нужно преобразовать.
- Примеры
-
Чтобы преобразовать значение 1.23 в целое число:
;SELECT CAST(1.23 AS INTEGER) 1
12.7.7 CASE [base-expr] WHEN cmp-expr ELSE [else-expr] END
Оценить последовательность выражений по порядку, пока одно из них не станет истинным, а затем вернуть его результат. Подобно конструкции IF-THEN-ELSE в других языках.
- Параметры
-
base-expr - базовое выражение, которое используется для сравнения в ветвях.
cmp-expr - выражение для проверки, следует ли использовать эту ветвь.
else-expr - результат этого CASE, если ни одна ветвь не найдена.
- Примеры
-
Чтобы вычислить число один и вернуть строку
one
:;SELECT CASE 1 WHEN 0 THEN 'zero' WHEN 1 THEN 'one' END one
12.7.8 expr COLLATE collation-name
Присвоить выражению последовательность сортировки.
- Параметры
- collation-name* - имя сортировщика.
- Примеры
-
Чтобы изменить метод сопоставления для сравнения строк:
;SELECT ('a2' < 'a10'), ('a2' < 'a10' COLLATE naturalnocase) ('a2' < 'a10') ('a2' < 'a10' COLLATE naturalnocase) 0 1
12.7.9 DETACH DATABASE schema-name
Отключить базу данных от текущего соединения.
- Параметры
- schema-name* - префикс для таблиц в этой базе данных.
- Примеры
-
Чтобы отсоединить базу данных с именем
customers
:;DETACH DATABASE customers
12.7.10 DELETE FROM table-name WHERE [cond]
Удалить строки из таблицы
- Параметры
-
table-name* - имя таблицы
cond - условия, используемые для удаления строк.
12.7.11 DROP INDEX [IF EXISTS] [schema-name.] index-name
Удалить индекс
12.7.12 DROP TABLE [IF EXISTS] [schema-name.] table-name
Удалить таблицу
12.7.13 DROP VIEW [IF EXISTS] [schema-name.] view-name
Удалить представление
12.7.14 DROP TRIGGER [IF EXISTS] [schema-name.] trigger-name
Удалить триггер
12.7.15 expr [NOT] GLOB pattern
Сопоставить выражение с шаблоном поиска.
- Параметры
- pattern* - шаблон поиска для сопоставления.
- Примеры
-
Чтобы проверить, соответствует ли значение шаблону
*.log
:;SELECT 'foobar.log' GLOB '*.log' 1
12.7.16 expr [NOT] LIKE pattern
Сопоставить выражение с текстовым шаблоном.
- Параметры
- pattern* - образец для сопоставления.
- Примеры
-
Чтобы проверить, соответствует ли значение шаблону
Hello,%!
:;SELECT 'Hello, World!' LIKE 'Hello, %!' 1
12.7.17 expr [NOT] REGEXP pattern
Сопоставить выражение с регулярным выражением.
- Параметры
- pattern* - регулярное выражение для сравнения.
- Примеры
-
Чтобы проверить, соответствует ли значение шаблону
file-d+
:;SELECT 'file-23' REGEXP 'file-\d+' 1
12.7.18 SELECT result-column FROM table WHERE [cond] GROUP BY grouping-expr ORDER BY ordering-term LIMIT limit-expr
Выполнить запрос к базе данных и вернуть ноль или более строк данных.
- Параметры
-
table - таблицы для запроса данных
cond - условия, используемые для выбора возвращаемых строк.
grouping-expr - выражение, используемое при группировке строк.
ordering-term - значения, используемые при упорядочивании набора результатов.
limit-expr - Максимальное количество возвращаемых строк
- Примеры
-
Чтобы выбрать все столбцы из таблицы
syslog_log
:;SELECT * FROM syslog_log
12.7.19 INSERT INTO [schema-name.] table-name column-name VALUES expr
Вставить строки в таблицу.
- Примеры
-
Чтобы вставить пару, содержащую
MSG
иHELLO, WORLD!
в таблицуenvironment
:;INSERT INTO environ VALUES ('MSG', 'HELLO, WORLD!')
12.7.20 OVER([base-window-name] PARTITION BY expr ORDER BY expr, [frame-spec])
Выполняет предыдущую функцию над окном
- Параметры
-
base-window-name - имя определения окна.
expr - значения, используемые для разделения
expr - значения, используемые для упорядочивания строк в окне.
frame-spec - определяет, какие выходные строки читаются агрегированной оконной функцией.
12.7.21 OVER window-name
Выполняет предыдущую функцию над окном
- Параметры
- window-name* - имя определения окна
12.7.22 UPDATE table SET column-name WHERE [cond]
Изменить подмножество значений в ноль или более строках данной таблицы
- Параметры
-
table* - таблица для обновления
column-name - столбцы в таблице, которые необходимо обновить.
cond - условие, используемое для определения необходимости обновления строки.
- Примеры
-
Чтобы пометить сообщение системного журнала в строке 40:
;UPDATE syslog_log SET log_mark = 1 WHERE log_line = 40
12.7.23 abs(x)
Возвращает абсолютное значение аргумента
- Параметры
- x* - число для преобразования
- Примеры
-
Чтобы получить абсолютное значение -1:
;SELECT abs(-1) 1
- См. также
- acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.24 acos(num)
Возвращает арккосинус числа в радианах.
- Параметры
- num* - значение косинуса от -1 до 1.
- Примеры
-
Чтобы получить арккосинус 0.2:
;SELECT acos(0.2) 1.36943840600457
- См. также
- abs(x), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.25 acosh(num)
Возвращает гиперболический арккосинус числа.
- Параметры
- num* - число, которое равно одному или нескольким
- Примеры
-
Чтобы получить гиперболический арккосинус 1,2:
;SELECT acosh(1.2) 0.622362503714779
- См. также
- abs(x), acos(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.26 asin(num)
Возвращает арксинус числа в радианах.
- Параметры
- num* - значение синуса от -1 до 1
- Примеры
-
Чтобы получить арксинус 0.2:
;SELECT asin(0.2) 0.201357920790331
- См. также
- abs(x), acos(num), acosh(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.27 asinh(num)
Возвращает гиперболический арксинус числа.
- Параметры
- num* - число
- Примеры
-
Чтобы получить гиперболический арксинус 0.2:
;SELECT asinh(0.2) 0.198690110349241
- См. также
- abs(x), acos(num), acosh(num), asin(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.28 atan(num)
Возвращает арктангенс числа в радианах.
- Параметры
- num* - число
- Примеры
-
Чтобы получить арктангенс 0.2:
;SELECT asinh(0.2) 0.198690110349241
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.29 atan2(y, x)
Возвращает угол в плоскости между положительной осью X и лучом от (0, 0) до точки (x, y).
- Параметры
-
y* - координата y точки
x* - координата x точки
- Примеры
-
Чтобы получить угол в градусах для точки в (5, 5):
;SELECT degrees(atan2(5, 5)) 45.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.30 atanh(num)
Возвращает гиперболический арктангенс числа.
- Параметры
- num* - число
- Примеры
-
Чтобы получить гиперболический арктангенс 0.2:
;SELECT atanh(0.2) 0.202732554054082
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.31 atn2(y, x)
Возвращает угол в плоскости между положительной осью X и лучом от (0, 0) до точки (x, y).
- Параметры
-
y* - координата y точки
x* - координата x точки
- Примеры
-
Чтобы получить угол в градусах для точки в (5, 5):
;SELECT degrees(atn2(5, 5)) 45.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.32 avg(X)
Возвращает среднее значение всех ненулевых чисел в группе.
- Параметры
- X* - значение, для которого требуется вычислить среднее значение.
- Примеры
-
Чтобы получить среднее значение столбца
ex_duration
из таблицыlnav_example_log
:;SELECT avg(ex_duration) FROM lnav_example_log 4.25
Чтобы получить среднее значение столбца
ex_duration
из таблицыlnav_example_log
при группировке поex_procname
:;SELECT ex_procname, avg(ex_duration) FROM lnav_example_log GROUP BY ex_procname ex_procname avg(ex_duration) gw 5.0 hw 2.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.33 basename(path)
Извлечь базовую часть имени пути
- Параметры
- path* - путь
- Примеры
-
Чтобы получить базу для простого имени файла:
;SELECT basename('foobar') foobar
Чтобы получить базу пути:
;SELECT basename('foo/bar') bar
Чтобы получить базу каталога:
;SELECT basename('foo/bar/') bar
Чтобы получить базу пустой строки:
;SELECT basename('') .
Чтобы получить базу пути Windows:
;SELECT basename('foo\bar') bar
Чтобы получить базу корневого каталога:
;SELECT basename('/') /
- См. также
- dirname(path), joinpath(path), readlink(path), realpath(path)
12.7.34 ceil(num)
Возвращает наименьшее целое число, которое не меньше аргумента.
- Параметры
- num* - число, которое нужно поднять до верхнего предела.
- Примеры
-
Чтобы получить потолок 1.23:
;SELECT ceil(1.23) 2
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.35 changes()
Количество строк базы данных, которые были изменены, вставлены или удалены самым последним оператором.
12.7.36 char(X)
Возвращает строку, состоящую из символов, имеющих заданные значения кодовой точки Unicode.
- Параметры
- X - значения кодовой точки Юникода.
- Примеры
-
Чтобы получить строку с кодовыми точками 0x48 и 0x49:
;SELECT char(0x48, 0x49) HI
- См. также
- charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.37 charindex(needle, haystack, [start])
Находит первое вхождение подстроки needle в строке haystack и возвращает количество предшествующих символов плюс 1 или 0, если Y нигде не найдено в X
- Параметры
-
needle* - подстрока, которую нужно искать в строке haystack
haystack* - строка для поиска
start - отсчитываемый от единицы индекс в строке haystack для начала поиска
- Примеры
-
Для поиска строки
abc
вabcabc
и начиная с позиции 2:;SELECT charindex('abc', 'abcabc', 2) 4
Для поиска строки
abc
вabcdef
и начиная с позиции 2:;SELECT charindex('abc', 'abcdef', 2) 0
- См. также
- char(X), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.38 coalesce(X, Y)
Возвращает копию своего первого аргумента, отличного от NULL, или NULL, если все аргументы имеют значение NULL.
- Параметры
-
X* - значение для проверки на NULL
Y - значение для проверки на NULL
- Примеры
-
Чтобы получить первое ненулевое значение из трех параметров:
;SELECT coalesce(null, 0, null) 0
12.7.39 count(X)
Если аргумент - *
, возвращается общее количество строк в группе. В противном случае, сколько раз аргумент не равен NULL.
- Параметры
- X* - значение для подсчета.
- Примеры
-
Чтобы получить количество строк, отличных от NULL в
lnav_example_log
:;SELECT count(*) FROM lnav_example_log 4
Чтобы получить количество ненулевых значений
log_part
изlnav_example_log
:;SELECT count(log_part) FROM lnav_example_log 2
12.7.40 cume_dist()
Возвращает кумулятивное распределение значения в наборе данных.
- См. также
- dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.41 date(timestring, modifier)
Возвращает дату в следующем формате: YYYY-MM-DD.
- Параметры
-
timestring* - строка для преобразования в дату.
modifier - преобразование, применяемое к значению слева.
- Примеры
-
Чтобы получить часть даты метки времени
2017-01-02T03:04:05
:;SELECT date('2017-01-02T03:04:05') 2017-01-02
Чтобы получить часть даты метки времени
2017-01-02T03:04:05
плюс один день:;SELECT date('2017-01-02T03:04:05', '+1 day') 2017-01-03
Чтобы получить часть даты метки времени эпохи UNIX 1491341842:
;SELECT date(1491341842, 'unixepoch') 2017-04-04
- См. также
- datetime(timestring, modifier), julianday(timestring, modifier), strftime(format, timestring, modifier), time(timestring, modifier), timediff(time1, time2), timeslice(time, slice)
12.7.42 datetime(timestring, modifier)
Возвращает дату и время в следующем формате: YYYY-MM-DD HH:MM:SS.
- Параметры
-
timestring* - строка для преобразования в дату со временем.
modifier - преобразование, применяемое к значению слева.
- Примеры
-
Чтобы получить часть даты и времени метки времени
2017-01-02T03:04:05
:;SELECT datetime('2017-01-02T03:04:05') 2017-01-02 03:04:05
Чтобы получить часть даты и времени отметки времени
2017-01-02T03:04:05
плюс одна минута:;SELECT datetime('2017-01-02T03:04:05', '+1 minute') 2017-01-02 03:05:05
Чтобы получить часть даты и времени метки времени эпохи UNIX 1491341842:
;SELECT datetime(1491341842, 'unixepoch') 2017-04-04 21:37:22
- См. также
- date(timestring, modifier), julianday(timestring, modifier), strftime(format, timestring, modifier), time(timestring, modifier), timediff(time1, time2), timeslice(time, slice)
12.7.43 degrees(radians)
Преобразует радианы в градусы
- Параметры
- radians* - значение радиан, которое нужно преобразовать в градусы.
- Примеры
-
Чтобы преобразовать PI в градусы:
;SELECT degrees(pi()) 180.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.44 dense_rank()
Возвращает row_number() первого однорангового узла в каждой группе без пробелов.
- См. также
- cume_dist(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.45 dirname(path)
Извлечь директорию из пути.
- Параметры
- path* - путь
- Примеры
-
Чтобы получить каталог относительного пути к файлу:
;SELECT dirname('foo/bar') foo
Чтобы получить каталог с абсолютным путем к файлу:
;SELECT dirname('/foo/bar') /foo
Чтобы получить каталог файла в корневом каталоге:
;SELECT dirname('/bar') /
Чтобы получить каталог пути Windows:
;SELECT dirname('foo\bar') foo
Чтобы получить каталог по пустому пути:
;SELECT dirname('') .
- См. также
- basename(path), joinpath(path), readlink(path), realpath(path)
12.7.46 endswith(str, suffix)
Проверить, заканчивается ли строка заданным суффиксом
- Параметры
-
str* - строка для проверки
suffix* - суффикс для проверки в строке
- Примеры
-
Чтобы проверить, заканчивается ли строка
notbad.jpg
на.jpg
:;SELECT endswith('notbad.jpg', '.jpg') 1
Чтобы проверить, начинается ли строка
notbad.png
с.jpg
:;SELECT endswith('notbad.png', '.jpg') 0
- См. также
- char(X), charindex(needle, haystack, [start]), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.47 exp(x)
Возвращает значение e в степени x.
- Параметры
- x* - показатель степени
- Примеры
-
Чтобы возвести e в 2:
;SELECT exp(2) 7.38905609893065
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.48 extract(str)
Автоматический синтаксический анализ и извлечение данных из строки
- Параметры
- str* - строка для синтаксического анализа
- Примеры
-
Чтобы извлечь пары ключ/значение из строки:
;SELECT extract('foo=1 bar=2 name="Rolo Tomassi"') {"foo":1,"bar":2,"name":"Rolo Tomassi"}
Чтобы извлечь столбчатые данные из строки:
;SELECT extract('1.0 abc 2.0') {"col_0":1.0,"col_1":2.0}
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.49 first_value(expr)
Возвращает результат вычисления выражения относительно первой строки во фрейме окна.
- Параметры
- expr* - выражение, выполняемое над первой строкой.
- См. также
- cume_dist(), dense_rank(), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.50 floor(num)
Возвращает наибольшее целое число, которое не больше аргумента.
- Параметры
- num* - число, которое нужно опустить до нижнего предела
- Примеры
-
Чтобы получить нижний предел 1.23:
;SELECT floor(1.23) 1
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.51 generate_series(start, stop, [step])
Возвращает табличное значение функция, которая возвращает целые числа между нижней и верхней границей, включая параметры.
- Параметры
-
start* - начальная точка серии
stop* - точка остановки серии
step - шаг между каждым значением
- Примеры
-
Чтобы сгенерировать числа в диапазоне [10, 14]:
;SELECT value FROM generate_series(10, 14) value 10 11 12 13 14
Чтобы сгенерировать любое другое число в диапазоне [10, 14]:
;SELECT value FROM generate_series(10, 14, 2) value 10 12 14
Чтобы отсчитать от пяти до 1:
;SELECT value FROM generate_series(1, 5, -1) value 5 4 3 2 1
12.7.52 gethostbyaddr(hostname)
Получить имя хоста для данного IP-адреса
- Параметры
- hostname* - IP-адрес для поиска.
- Примеры
-
Чтобы получить имя хоста для IP
127.0.0.1
:;SELECT gethostbyaddr('127.0.0.1') localhost
- См. также
- gethostbyname(hostname)
12.7.53 gethostbyname(hostname)
Получить IP-адрес для данного имени хоста
- Параметры
- hostname* - имя хоста DNS для поиска.
- Примеры
-
Чтобы получить IP-адрес для
localhost
:;SELECT gethostbyname('localhost') 127.0.0.1
- См. также
- gethostbyaddr(hostname)
12.7.54 glob(pattern, str)
Сопоставить строку с шаблоном поиска Unix
- Параметры
-
pattern* - шаблон поиска
str* - строка для сопоставления
- Примеры
-
Чтобы проверить, соответствует ли строка
abc
шаблонуa*
:;SELECT glob('a*', 'abc') 1
12.7.55 group_concat(X, [sep])
Возвращает строку, которая представляет собой объединение всех ненулевых значений X, разделенных запятой или заданным разделителем.
- Параметры
-
X* - значение для объединения.
sep - разделитель между значениями.
- Примеры
-
Чтобы объединить значения столбца
ex_procname
из таблицыlnav_example_log
:;SELECT group_concat(ex_procname) FROM lnav_example_log hw,gw,gw,gw
Чтобы объединить значения столбца
ex_procname
с помощью строки,
:;SELECT group_concat(ex_procname, ', ') FROM lnav_example_log hw, gw, gw, gw
Чтобы объединить отдельные значения столбца
ex_procname
из таблицыlnav_example_log
:;SELECT group_concat(DISTINCT ex_procname) FROM lnav_example_log hw,gw
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.56 group_spooky_hash(str)
Вычислить хеш-значение для заданных аргументов
- Параметры
- str - строка для хеширования
- Примеры
-
Чтобы создать хэш всех значений
column1
:;SELECT group_spooky_hash(column1) FROM (VALUES ('abc'), ('123')) 4e7a190aead058cb123c94290f29c34a
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.57 hex(X)
Возвращает строку, которая является шестнадцатеричным отображением в верхнем регистре содержимого своего аргумента.
- Параметры
- X* - большой двоичный объект для преобразования в шестнадцатеричный формат.
- Примеры
-
Чтобы получить шестнадцатеричный рендеринг строки
abc
:;SELECT hex('abc') 616263
12.7.58 humanize_file_size(value)
Отформатировать заданный размер файла в понятную для человека строку
- Параметры
- value* - размер файла для форматирования
- Примеры
-
Чтобы отформатировать сумму:
;SELECT humanize_file_size(10 * 1024 * 1024) 10.0MB
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.59 ifnull(X, Y)
Возвращает копию своего первого аргумента, отличного от NULL, или NULL, если оба аргумента имеют значение NULL.
- Параметры
-
X* - значение для проверки на NULL
Y* - значение для проверки на NULL
- Примеры
-
Чтобы получить первое ненулевое значение между нулем и нулем:
;SELECT ifnull(null, 0) 0
12.7.60 instr(haystack, needle)
Находит первое появление подстроки needle в строке haystack и возвращает количество предшествующих символов плюс 1 или 0, если needle не был найден.
- Параметры
-
haystack* - строка для поиска
Need* - строка, которую нужно искать в haystack.
- Примеры
-
Чтобы проверить, получите позицию
b
в строкеabc
:;SELECT instr('abc', 'b') 2
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.61 jget(json, ptr, [default])
Получите значение из объекта JSON с помощью указателя JSON.
- Параметры
-
json* - объект JSON для запроса.
ptr* - JSON-указатель для поиска в объекте.
default - значение по умолчанию, если значение не было найдено.
- Примеры
-
Чтобы получить корень значения JSON:
;SELECT jget('1', '') 1
Чтобы получить свойство с именем
b
в объекте JSON:;SELECT jget('{ "a": 1, "b": 2 }', '/b') 2
Чтобы получить свойство
msg
и вернуть значение по умолчанию, если оно не существует:;SELECT jget(null, '/msg', 'Hello') Hello
- См. также
- json_concat(json, value), json_contains(json, value), json_group_array(value), json_group_object(name, value)
12.7.62 joinpath(path)
Соединить компоненты пути вместе.
- Параметры
- path - один или несколько компонентов пути, которые необходимо объединить. Если аргумент начинается с прямой или обратной косой черты, он будет считаться абсолютным путем, и любые предыдущие элементы будут проигнорированы.
- Примеры
-
Чтобы объединить каталог и имя файла в относительный путь:
;SELECT joinpath('foo', 'bar') foo/bar
Чтобы объединить пустой компонент с другими именами в относительный путь:
;SELECT joinpath('', 'foo', 'bar') foo/bar
Чтобы создать абсолютный путь с двумя компонентами пути:
;SELECT joinpath('/', 'foo', 'bar') /foo/bar
Чтобы создать абсолютный путь из компонента пути, который начинается с косой черты:
;SELECT joinpath('/', 'foo', '/bar') /bar
- См. также
- basename(path), dirname(path), readlink(path), realpath(path)
12.7.63 json_concat(json, value)
Возвращает массив с заданными значениями, присоединенными к концу. Если начальное значение равно нулю, результатом будет массив с заданными элементами. Если начальное значение представляет собой массив, результатом будет массив с заданными значениями в конце. Если начальное значение не является нулем или массивом, результатом будет массив с двумя элементами: начальным значением и заданным значением.
- Параметры
-
json* - начальное значение JSON.
value - значения, добавляемые в конец массива.
- Примеры
-
Чтобы добавить число 4 к нулю:
;SELECT json_concat(NULL, 4) [4]
Чтобы добавить 4 и 5 в массив [1, 2, 3]:
;SELECT json_concat('[1, 2, 3]', 4, 5) [1,2,3,4,5]
Чтобы объединить два массива вместе:
;SELECT json_concat('[1, 2, 3]', json('[4, 5]')) [1,2,3,4,5]
- См. также
- jget(json, ptr, [default]), json_contains(json, value), json_group_array(value), json_group_object(name, value)
12.7.64 json_contains(json, value)
Проверить, содержит ли значение JSON данный элемент.
- Параметры
-
json* - значение JSON для запроса.
value* - значение, которое нужно искать в первом аргументе
- Примеры
-
Чтобы проверить, содержит ли массив JSON число 4:
;SELECT json_contains('[1, 2, 3]', 4) 0
Чтобы проверить, содержит ли массив JSON строку
def
:;SELECT json_contains('["abc", "def"]', 'def') 1
- См. также
- jget(json, ptr, [default]), json_concat(json, value), json_group_array(value), json_group_object(name, value)
12.7.65 json_group_array(value)
Собрать заданные значения из запроса в массив JSON
- Параметры
- value - значения, добавляемые в массив
- Примеры
-
Чтобы создать массив из аргументов:
;SELECT json_group_array('one', 2, 3.4) ["one",2,3.3999999999999999112]
Чтобы создать массив из столбца значений:
;SELECT json_group_array(column1) FROM (VALUES (1), (2), (3)) [1,2,3]
- См. также
- jget(json, ptr, [default]), json_concat(json, value), json_contains(json, value), json_group_object(name, value)
12.7.66 json_group_object(name, value)
Собрать заданные значения из запроса в объект JSON
- Параметры
-
name* - имя свойства для значения
value - значение, добавляемое к объекту.
- Примеры
-
Чтобы создать объект из аргументов:
;SELECT json_group_object('a', 1, 'b', 2) {"a":1,"b":2}
Чтобы создать объект из пары столбцов:
;SELECT json_group_object(column1, column2) FROM (VALUES ('a', 1), ('b', 2)) {"a":1,"b":2}
- См. также
- jget(json, ptr, [default]), json_concat(json, value), json_contains(json, value), json_group_array(value)
12.7.67 julianday(timestring, modifier)
Возвращает количество дней, прошедших с полудня по Гринвичу 24 ноября 4714 г. до н.э.
- Параметры
-
timestring* - строка для преобразования в дату со временем.
modifier - преобразование, применяемое к значению слева.
- Примеры
-
Чтобы получить юлианский день из метки времени
2017-01-02T03:04:05
:;SELECT julianday('2017-01-02T03:04:05') 2457755.62783565
Чтобы получить юлианский день из отметки времени
2017-01-02T03:04:05
плюс одна минута:;SELECT julianday('2017-01-02T03:04:05', '+1 minute') 2457755.62853009
Чтобы получить юлианский день из метки времени UNIX 1491341842:
;SELECT julianday(1491341842, 'unixepoch') 2457848.40094907
- См. также
- date(timestring, modifier), datetime(timestring, modifier), strftime(format, timestring, modifier), time(timestring, modifier), timediff(time1, time2), timeslice(time, slice)
12.7.68 lag(expr, [offset], [default])
Возвращает результат оценки выражения по сравнению с предыдущей строкой в разделе.
- Параметры
-
expr* - выражение, выполняемое над предыдущей строкой.
offset - смещение от текущей строки в разделе.
default - значение по умолчанию, если предыдущая строка не существует вместо NULL.
- См. также
- cume_dist(), dense_rank(), first_value(expr), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.69 last_insert_rowid()
Возвращает ROWID последней вставки строки из соединения с базой данных, которое вызвало функцию.
12.7.70 last_value(expr)
Возвращает результат вычисления выражения относительно последней строки во фрейме окна.
- Параметры
- expr* - выражение, выполняемое над последней строкой.
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.71 lead(expr, [offset], [default])
Возвращает результат вычисления выражения для следующей строки в разделе.
- Параметры
-
expr* - выражение для выполнения в следующей строке.
offset - смещение от текущей строки в разделе.
default - значение по умолчанию, если следующая строка не существует вместо NULL.
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), nth_value(expr, N), ntile(groups), percent_rank(), rank(), row_number()
12.7.72 leftstr(str, N)
Возвращает N крайних левых символов (UTF-8) в заданной строке.
- Параметры
-
str* - строка для возврата подмножества.
N* - количество возвращаемых символов с левой стороны строки.
- Примеры
-
Чтобы получить первый символ строки
abc
:;SELECT leftstr('abc', 1) a
Чтобы получить первые десять символов строки независимо от размера:
;SELECT leftstr('abc', 10) abc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.73 length(str)
Возвращает количество символов (не байтов) в заданной строке до первого символа NUL.
- Параметры
- str* - строка для определения длины.
- Примеры
-
Чтобы получить длину строки
abc
:;SELECT length('abc') 3
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.74 like(pattern, str, [escape])
Сопоставить строку с шаблоном.
- Параметры
-
pattern* - образец для сопоставления. Символ процента (%) соответствует нулю или более символам, а подчеркивание (_) соответствует одному символу.
str* - строка для сопоставления
escape - escape-символ, который можно использовать для добавления буквального символа процента или подчеркивания в шаблоне.
- Примеры
-
Чтобы проверить, содержит ли строка
aabcc
буквуb
:;SELECT like('%b%', 'aabcc') 1
Чтобы проверить, заканчивается ли строка
aab%
' на 'b%':;SELECT like('%b:%', 'aab%', ':') 1
12.7.75 likelihood(value, probability)
Предоставляет планировщику запросов подсказку о том, что первый аргумент является логическим значением, которое является истинным с заданной вероятностью
- Параметры
-
value* - возвращаемое логическое значение
probability* - константа с плавающей запятой от 0.0 до 1.0
12.7.76 likely(value)
Сокращение вероятности (X, 0,9375)
- Параметры
- value* - возвращаемое логическое значение
12.7.77 lnav_top_file()
Возвращает имя файла, из которого взялась верхняя строка в текущем представлении.
12.7.78 load_extension(path, [entry-point])
Загружает расширения SQLite из указанного файла общей библиотеки, используя заданную точку входа.
- Параметры
- path* - путь к общей библиотеке, содержащей расширение.
12.7.79 log(x)
Возвращает натуральный логарифм x.
- Параметры
- x* - число
- Примеры
-
Чтобы получить натуральный логарифм 8:
;SELECT log(8) 2.07944154167984
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.80 log10(x)
Возвращает десятичный логарифм X.
- Параметры
- x* - число
- Примеры
-
Чтобы получить логарифм 100:
;SELECT log10(100) 2.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.81 log_top_datetime()
Возвращает отметку времени строки в верхней части представления журнала.
12.7.82 log_top_line()
Возвращает номер строки в верхней части представления журнала.
12.7.83 lower(str)
Возвращает копию данной строки со всеми символами ASCII, преобразованными в нижний регистр.
- Параметры
- str* - строка для преобразования.
- Примеры
-
Чтобы строчная строка
AbC
:;SELECT lower('AbC') abc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.84 ltrim(str, [chars])
Возвращает строку, образованную удалением всех без исключения символов, которые появляются во втором аргументе, слева от первого.
- Параметры
-
str* - строка для обрезки символов с левой стороны
chars - символы, которые нужно обрезать. По умолчанию пробелы.
- Примеры
-
Чтобы удалить начальные пробелы в строке
abc
:;SELECT ltrim(' abc
Чтобы обрезать символы
a
илиb
с левой стороны строкиaaaabbbc
:;SELECT ltrim('aaaabbbc', 'ab') c
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.85 max(X)
Возвращает аргумент с максимальным значением или NULL, если какой-либо аргумент равен NULL.
- Параметры
- X - числа, для которых требуется найти максимум. Если указан только один аргумент, эта функция работает как агрегат.
- Примеры
-
Чтобы получить наибольшее значение из параметров:
;SELECT max(2, 1, 3) 3
Чтобы получить наибольшее значение из агрегата:
;SELECT max(status) FROM http_status_codes 511
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.86 min(X)
Возвращает аргумент с минимальным значением или NULL, если какой-либо аргумент равен NULL.
- Параметры
- X - числа, для которых требуется найти минимум. Если указан только один аргумент, эта функция работает как агрегат.
- Примеры
-
Чтобы получить наименьшее значение из параметров:
;SELECT min(2, 1, 3) 1
Чтобы получить наименьшее значение из агрегата:
;SELECT min(status) FROM http_status_codes 100
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.87 nth_value(expr, N)
Возвращает результат вычисления выражения для n-й строки во фрейме окна.
- Параметры
-
expr* - выражение для n-й строки
N* - номер строки
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), ntile(groups), percent_rank(), rank(), row_number()
12.7.88 ntile(groups)
Возвращает номер группы, в которой текущая строка является частью параметров.
- Параметры
- groups* - количество групп.
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), percent_rank(), rank(), row_number()
12.7.89 nullif(X, Y)
Возвращает свой первый аргумент, если аргументы разные, и NULL, если аргументы совпадают.
- Параметры
-
X* - первый аргумент для сравнения.
Y* - аргумент для сравнения с первым.
- Примеры
-
Чтобы проверить, отличается ли 1 от 1:
;SELECT nullif(1, 1) <NULL>
Чтобы проверить, отличается ли 1 от 2:
;SELECT nullif(1, 2) 1
12.7.90 padc(str, len)
Заполнить данную строку достаточным количеством пробелов, чтобы выровнять ее по центру в пределах заданной длины.
- Параметры
-
str* - строка для дополнения
len* - минимальная желаемая длина выходной строки
- Примеры
-
Чтобы дополнить строку
abc
длиной до шести символов:;SELECT padc('abc', 6) || 'def' abc def
Чтобы дополнить строку
abcdef
до восьми символов:;SELECT padc('abcdef', 8) || 'ghi' abcdef ghi
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.91 padl(str, len)
Заполнить данную строку ведущими пробелами, пока она не достигнет желаемой длины.
- Параметры
-
str* - строка для дополнения
len* - минимальная желаемая длина выходной строки
- Примеры
-
Чтобы дополнить строку
abc
длиной до шести символов:;SELECT padl('abc', 6) abc
Чтобы дополнить строку
abcdef
до четырех символов:;SELECT padl('abcdef', 4) abcdef
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.92 padr(str, len)
Заполнить данную строку завершающими пробелами, пока она не достигнет желаемой длины.
- Параметры
-
str* - строка для дополнения
len* - минимальная желаемая длина выходной строки
- Примеры
-
Чтобы дополнить строку
abc
длиной до шести символов:;SELECT padr('abc', 6) || 'def' abc def
Чтобы дополнить строку
abcdef
до четырех символов:;SELECT padr('abcdef', 4) || 'ghi' abcdefghi
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.93 percent_rank()
Возвращает (rank - 1) / (partition-rows - 1)
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), rank(), row_number()
12.7.94 pi()
Возвращает значение PI.
- Примеры
-
Чтобы получить значение PI:
;SELECT pi() 3.14159265358979
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.95 power(base, exp)
Возвращает основание для данной экспоненты
- Параметры
-
base* - базовое число
exp* - показатель степени
- Примеры
-
Чтобы возвести два в степень трех:
;SELECT power(2, 3) 8.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.96 printf(format, X)
Возвращает строку с аргументами этой функции, подставленными в заданный формат. Точки замещения указываются с использованием опций процента (%), как и в стандартной функции printf() в Си.
- Параметры
-
format* - формат возвращаемой строки.
X* - аргумент для замены в данной позиции в формате.
- Примеры
-
Чтобы заменить
World
строкойHello, %s!
:;SELECT printf('Hello, %s!', 'World') Hello, World!
Чтобы выровнять по правому краю строку
small
в строкеalign:
с шириной столбца 10:;SELECT printf('align: % 10s', 'small') align: small
Чтобы отформатировать 11 с шириной в пять символов и начальными нулями:
;SELECT printf('value: %05d', 11) value: 00011
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.97 proper(str)
Использовать заглавные буквы в первом символе слов в данной строке.
- Параметры
- str* - строка для заглавной буквы.
- Примеры
-
Использование заглавных букв в словах в строке
hello, world!
:;SELECT proper('hello, world!') Hello, World!
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.98 quote(X)
Возвращает текст литерала SQL, который является значением его аргумента, подходящим для включения в оператор SQL.
- Параметры
- X* - строка для цитирования.
- Примеры
-
Чтобы процитировать строку
abc
:;SELECT quote('abc') 'abc'
Чтобы процитировать строку
abc'123
:;SELECT quote('abc''123') 'abc''123'
12.7.99 radians(degrees)
Преобразует градусы в радианы.
- Параметры
- degrees* - значение градусов, которое нужно преобразовать в радианы.
- Примеры
-
Чтобы преобразовать 180 градусов в радианы:
;SELECT radians(180) 3.14159265358979
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), round(num, [digits]), sign(num), square(num), sum(X), total(X)
12.7.100 raise_error(msg)
Вызывает ошибку с данным сообщением при выполнении
- Параметры
- msg* - сообщение об ошибке.
12.7.101 random()
Возвращает псевдослучайное целое число от -9223372036854775808 до +9223372036854775807.
12.7.102 randomblob(N)
Возвращает N-байтовый BLOB-объект, содержащий псевдослучайные байты.
- Параметры
- N* - размер большого двоичного объекта в байтах.
12.7.103 rank()
Возвращает row_number() первого однорангового узла в каждой группе с пробелами.
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), row_number()
12.7.104 readlink(path)
Возвращает целевой объект символической ссылки.
- Параметры
- path* - путь к символической ссылке.
- См. также
- basename(path), dirname(path), joinpath(path), realpath(path)
12.7.105 realpath(path)
Возвращает разрешенную версию данного пути, расширяя символические ссылки и разрешая ссылки .
и ..
.
- Параметры
- path* - путь для разрешения.
- См. также
- basename(path), dirname(path), joinpath(path), readlink(path)
12.7.106 regexp(re, str)
Проверяет, соответствует ли строка регулярному выражению
- Параметры
-
re* - используемое регулярное выражение
str* - строка для проверки на соответствие регулярному выражению.
12.7.107 regexp_capture(string, pattern)
Возвращающая табличное значение функция, которая выполняет регулярное выражение над строкой и возвращает захваченные значения. Если регулярное выражение соответствует только подмножеству входной строки, оно будет повторно выполнено для оставшихся частей строки, пока больше совпадений не будет найдено.
- Параметры
-
string* - строка, соответствующая заданному шаблону.
pattern* - регулярное выражение для сопоставления.
- Примеры
-
Чтобы извлечь пары ключ/значение
a
/1 иb
/2 из строкиa=1; b=2
:;SELECT * FROM regexp_capture('a=1; b=2', '(\w+)=(\d+)') match_index capture_index capture_name capture_count range_start range_stop content 0 0 <NULL> 3 1 4 a=1 0 1 3 1 2 a 0 2 3 3 4 1 1 0 <NULL> 3 6 9 b=2 1 1 3 6 7 b 1 2 3 8 9 2
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.108 regexp_match(re, str)
Сопоставляет строку с регулярным выражением и возвращает группы захвата как JSON.
- Параметры
-
re* - используемое регулярное выражение
str* - строка для проверки на соответствие регулярному выражению.
- Примеры
-
Чтобы записать цифры из строки
123
:;SELECT regexp_match('(\d+)', '123') 123
Чтобы записать число и слово в объект JSON со свойствами
col_0
иcol_1
:;SELECT regexp_match('(\d+) (\w+)', '123 four') {"col_0":123,"col_1":"four"}
Чтобы записать число и слово в объект JSON с именованными свойствами
num
иstr
:;SELECT regexp_match('(?
\d+) (? \w+)', '123 four') {"num":123,"str":"four"} - См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_replace(str, re, repl), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.109 regexp_replace(str, re, repl)
Заменяет части строки, соответствующие регулярному выражению.
- Параметры
-
str* - строка для выполнения замен
re* - регулярное выражение для сопоставления
repl* - строка замены. Вы можете ссылаться на группы захвата с помощью обратной косой черты, за которой следует номер группы, начиная с 1.
- Примеры
-
Чтобы заменить слово в начале строки
Hello, World!
наGoodbye
:;SELECT regexp_replace('Hello, World!', '^(\w+)', 'Goodbye') Goodbye, World!
Чтобы заключить буквенно-цифровые слова в угловые скобки:
;SELECT regexp_replace('123 abc', '(\w+)', '<\1>') <123> <abc>
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_match(re, str), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.110 replace(str, old, replacement)
Возвращает строку, образованную заменой строки replacement для каждого вхождения строки old в данной строке.
- Параметры
-
str* - строка для выполнения подстановок.
old* - заменяемая строка.
replacement* - строка для замены любых вхождений старой строки.
- Примеры
-
Чтобы заменить строку
x
наz
вabc
:;SELECT replace('abc', 'x', 'z') abc
Чтобы заменить строку
a
наz
вabc
:;SELECT replace('abc', 'a', 'z') zbc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.111 replicate(str, N)
Возвращает заданную строку, объединенную N раз.
- Параметры
-
str* - строка для репликации.
N* - количество репликаций строки.
- Примеры
-
Чтобы повторить строку
abc
три раза:;SELECT replicate('abc', 3) abcabcabc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.112 reverse(str)
Возвращает перевернутую строку.
- Параметры
- str* - строка, которую нужно перевернуть.
- Примеры
-
Чтобы перевернуть строку «abc»:
;SELECT reverse('abc') cba
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.113 rightstr(str, N)
Возвращает N крайних правых (UTF-8) символов в заданной строке.
- Параметры
-
str* - строка для возврата подмножества.
N* - количество возвращаемых символов с правой стороны строки.
- Примеры
-
Чтобы получить последний символ строки
abc
:;SELECT rightstr('abc', 1) c
Чтобы получить последние десять символов строки независимо от размера:
;SELECT rightstr('abc', 10) abc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.114 round(num, [digits])
Возвращает значение с плавающей запятой, округленное до заданного количества цифр справа от десятичной запятой.
- Параметры
-
num* - округляемое значение.
digits - количество цифр справа от десятичной дроби, до которой нужно округлить.
- Примеры
-
Чтобы округлить число 123,456 до целого:
;SELECT round(123.456) 123.0
Чтобы округлить число 123,456 до 1:
;SELECT round(123.456, 1) 123.5
Чтобы округлить число 123,456 до 5:
;SELECT round(123.456, 5) 123.456
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), sign(num), square(num), sum(X), total(X)
12.7.115 row_number()
Возвращает номер строки в текущем разделе, начиная с 1.
- Примеры
-
Чтобы пронумеровать сообщения от процесса:
;SELECT row_number() OVER (PARTITION BY ex_procname ORDER BY log_line) AS msg_num, ex_procname, log_body FROM lnav_example_log msg_num ex_procname log_body 1 gw Goodbye, World! 2 gw Goodbye, World! 3 gw Goodbye, World! 1 hw Hello, World!
- См. также
- cume_dist(), dense_rank(), first_value(expr), lag(expr, [offset], [default]), last_value(expr), lead(expr, [offset], [default]), nth_value(expr, N), ntile(groups), percent_rank(), rank()
12.7.116 rtrim(str, [chars])
Возвращает строку, образованную удалением всех без исключения символов, которые появляются во втором аргументе, с правой стороны от первого.
- Параметры
-
str* - строка для обрезки символов с правой стороны
chars - символы, которые нужно обрезать. По умолчанию пробелы.
- Примеры
-
Чтобы обрезать пробелы в конце строки
abc
:;SELECT rtrim('abc ') abc
Чтобы вырезать символы
b
иc
из строкиabbbbcccc
:;SELECT rtrim('abbbbcccc', 'bc') a
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.117 sign(num)
Возвращает знак данного числа как -1, 0 или 1
- Параметры
- num* - число
- Примеры
-
Чтобы получить знак 10:
;SELECT sign(10) 1
Чтобы получить знак 0:
;SELECT sign(0) 0
Чтобы получить знак -10:
;SELECT sign(-10) -1
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), square(num), sum(X), total(X)
12.7.118 sparkline(value, [upper])
Функция, используемая для создания гистограммы спарклайнов. В неагрегированной версии одно числовое значение диапазона преобразуется в символ гистограммы. Агрегированная версия возвращает строку с символом полосы для каждого числового ввода.
- Параметры
-
value* - числовое значение для преобразования
upper - верхняя граница числового диапазона. По умолчанию для неагрегированной версии установлено значение 100. Для агрегированной версии используется наибольшее значение входных данных.
- Примеры
-
Чтобы получить элемент блока Unicode для значения 32 в диапазоне 0–128:
;SELECT sparkline(32, 128) ▂
Чтобы отобразить значения в массиве JSON:
;SELECT sparkline(value) FROM json_each('[0, 1, 2, 3, 4, 5, 6, 7, 8]') ▁▂▃▄▅▆▇█
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.119 spooky_hash(str)
Вычислить хеш-значение для заданных аргументов.
- Параметры
- str - строка для хеширования
- Примеры
-
Чтобы создать хэш для строки
Hello, World!
:;SELECT spooky_hash('Hello, World!') 0b1d52cc5427db4c6a9eed9d3e5700f4
Чтобы создать хэш для параметров, где один равен NULL:
;SELECT spooky_hash('Hello, World!', NULL) c96ee75d48e6ea444fee8af948f6da25
Чтобы создать хэш для параметров, где одна пустая строка:
;SELECT spooky_hash('Hello, World!', '') c96ee75d48e6ea444fee8af948f6da25
Чтобы создать хеш для параметров, где единица является числом:
;SELECT spooky_hash('Hello, World!', 123) f96b3d9c1a19f4394c97a1b79b1880df
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.120 sqlite_compileoption_get(N)
Возвращает N-й параметр времени компиляции, используемый для построения SQLite, или NULL, если N вне допустимого диапазона.
- Параметры
- N* - номер опции для получения
12.7.121 sqlite_compileoption_used(option)
Возвращает истину (1) или ложь (0) в зависимости от того, использовалась ли эта опция времени компиляции во время сборки.
- Параметры
- option* - имя параметра времени компиляции.
- Примеры
-
Чтобы проверить, была ли библиотека SQLite скомпилирована с помощью ENABLE_FTS3:
;SELECT sqlite_compileoption_used('ENABLE_FTS3') 1
12.7.122 sqlite_source_id()
Возвращает строку, определяющую конкретную версию исходного кода, которая использовалась для создания библиотеки SQLite.
12.7.123 sqlite_version()
Возвращает строку версии для запущенной библиотеки SQLite.
12.7.124 square(num)
Возвращает квадрат аргумента.
- Параметры
- num* - число, которое нужно возвести в квадрат.
- Примеры
-
Чтобы получить квадрат двух:
;SELECT square(2) 4
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), sum(X), total(X)
12.7.125 startswith(str, prefix)
Проверить, начинается ли строка с данного префикса
- Параметры
-
str* - строка для проверки
prefix* - префикс для проверки в строке
- Примеры
-
Чтобы проверить, начинается ли строка
foobar
сfoo
:;SELECT startswith('foobar', 'foo') 1
Чтобы проверить, начинается ли строка
foobar
сbar
:;SELECT startswith('foobar', 'bar') 0
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.126 strfilter(source, include)
Возвращает исходную строку, содержащую только символы, указанные во втором параметре.
- Параметры
-
source* - строка для фильтрации
include* - символы для включения в результат
- Примеры
-
Чтобы получить символы
b
,c
иd
из строкиabcabc
:;SELECT strfilter('abcabc', 'bcd') bcbc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.127 strftime(format, timestring, modifier)
Возвращает дату, отформатированную в соответствии со строкой формата, указанной в качестве первого аргумента.
- Параметры
-
format* - строка формата с заменами, аналогичными подстановкам в стандартной библиотеке C strftime().
timestring* - строка для преобразования в дату со временем.
modifier - преобразование, применяемое к значению слева.
- Примеры
-
Чтобы получить год из метки времени
2017-01-02T03:04:05
:;SELECT strftime('%Y', '2017-01-02T03:04:05') 2017
Чтобы создать строку со временем из метки времени
2017-01-02T03:04:05
плюс одна минута:;SELECT strftime('The time is: %H:%M:%S', '2017-01-02T03:04:05', '+1 minute') The time is: 03:05:05
Чтобы создать строку с юлианским днем из метки времени эпохи UNIX 1491341842:
;SELECT strftime('Julian day: %J', 1491341842, 'unixepoch') Julian day: 2457848.400949074
- См. также
- date(timestring, modifier), datetime(timestring, modifier), julianday(timestring, modifier), time(timestring, modifier), timediff(time1, time2), timeslice(time, slice)
12.7.128 substr(str, start, [size])
Возвращает подстроку входной строки X, которая начинается с Y-го символа и имеет длину Z символов.
- Параметры
-
str* - строка, из которой нужно извлечь подстроку.
start* - индекс в строке
str
, который является началом подстроки. Индексы начинаются с 1. Отрицательное значение означает, что подстрока найдена путем отсчета справа, а не слева.size - размер подстроки. Если не указан, то возвращаются все символы до конца строки. Если значение отрицательное, то возвращаются символы до начала.
- Примеры
-
Чтобы получить подстроку, начинающуюся со второго символа до конца строки
abc
:;SELECT substr('abc', 2) bc
Чтобы получить подстроку первого размера, начиная со второго символа строки
abc
:;SELECT substr('abc', 2, 1) b
Чтобы подстрока начиналась с последнего символа до конца строки abc:
;SELECT substr('abc', -1) c
Чтобы получить подстроку, начинающуюся с последнего символа и возвращающуюся на один шаг строки
abc
:;SELECT substr('abc', -1, -1) b
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), trim(str, [chars]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.129 sum(X)
Возвращает сумму значений в группе в виде целого числа.
- Параметры
- X* - добавляемые значения.
- Примеры
-
Суммирование всех значений в столбце
ex_duration
из таблицыlnav_example_log
:;SELECT sum(ex_duration) FROM lnav_example_log 17
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), total(X)
12.7.130 time(timestring, modifier)
Возвращает время в следующем формате: HH:MM:SS.
- Параметры
-
timestring* - строка для преобразования во время.
modifier - преобразование, применяемое к значению слева.
- Примеры
-
Чтобы получить временную часть метки времени
2017-01-02T03:04:05
:;SELECT time('2017-01-02T03:04:05') 03:04:05
Чтобы получить временную часть метки времени
2017-01-02T03:04:05
плюс одна минута:;SELECT time('2017-01-02T03:04:05', '+1 minute') 03:05:05
Чтобы получить временную часть временной метки эпохи UNIX 1491341842:
;SELECT time(1491341842, 'unixepoch') 21:37:22
- См. также
- date(timestring, modifier), datetime(timestring, modifier), julianday(timestring, modifier), strftime(format, timestring, modifier), timediff(time1, time2), timeslice(time, slice)
12.7.131 timediff(time1, time2)
Вычислить разницу между двумя отметками времени в секундах
- Параметры
-
time1* - первая отметка времени
time2* - отметка времени, которую нужно вычесть из первого
- Примеры
-
Чтобы узнать разницу между двумя отметками времени:
;SELECT timediff('2017-02-03T04:05:06', '2017-02-03T04:05:00') 6.0
Чтобы узнать разницу между относительными отметками времени:
;SELECT timediff('today', 'yesterday') 86400.0
- См. также
- date(timestring, modifier), datetime(timestring, modifier), julianday(timestring, modifier), strftime(format, timestring, modifier), time(timestring, modifier), timeslice(time, slice)
12.7.132 timeslice(time, slice)
Возвращает начало отрезка времени, в который попадает данная временная метка. Если время выходит за пределы отрезка, возвращается NULL.
- Параметры
-
time* - метка времени, для которой требуется получить временной интервал.
slice* - размер временных интервалов
- Примеры
-
Чтобы округлить метку времени в меньшую сторону до начала десятиминутного отрезка:
;SELECT timeslice('2017-01-01T05:05:00', '10m') 2017-01-01 05:00:00.000
Чтобы сгруппировать сообщения журнала в пятиминутные сегменты и подсчитать их:
;SELECT timeslice(log_time_msecs, '5m') AS slice, count(1) FROM lnav_example_log GROUP BY slice slice count(1) 2017-02-03 04:05:00.000 2 2017-02-03 04:25:00.000 1 2017-02-03 04:55:00.000 1
Чтобы сгруппировать сообщения журнала по сообщениям до 4:30 и после:
;SELECT timeslice(log_time_msecs, 'before 4:30am') AS slice, count(1) FROM lnav_example_log GROUP BY slice slice count(1) <NULL> 1 2017-02-03 00:00:00.000 3
- См. также
- date(timestring, modifier), datetime(timestring, modifier), julianday(timestring, modifier), strftime(format, timestring, modifier), time(timestring, modifier), timediff(time1, time2)
12.7.133 total(X)
Возвращает сумму значений в группе в виде числа с плавающей запятой.
- Параметры
- X* - добавляемые значения.
- Примеры
-
Чтобы суммировать все значения в столбце
ex_duration
из таблицыlnav_example_log
:;SELECT total(ex_duration) FROM lnav_example_log 17.0
- См. также
- abs(x), acos(num), acosh(num), asin(num), asinh(num), atan2(y, x), atan(num), atanh(num), atn2(y, x), avg(X), ceil(num), degrees(radians), exp(x), floor(num), log10(x), log(x), max(X), min(X), pi(), power(base, exp), radians(degrees), round(num, [digits]), sign(num), square(num), sum(X)
12.7.134 total_changes()
Возвращает количество изменений строки, вызванных операторами INSERT, UPDATE или DELETE с момента открытия текущего соединения с базой данных.
12.7.135 trim(str, [chars])
Возвращает строку, образованную удалением всех без исключения символов, которые появляются во втором аргументе, слева и справа от первого.
- Параметры
-
str* - строка для обрезки символов слева и справа.
chars - символы, которые нужно обрезать. По умолчанию пробелы.
- Примеры
-
Чтобы удалить пробелы в начале и конце строки
abc
:;SELECT trim(' abc ') abc
Чтобы вырезать символы
-
и+
из строки-+abc+-
:;SELECT trim('-+abc+-', '-+') abc
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), unicode(X), upper(str), xpath(xpath, xmldoc)
12.7.136 typeof(X)
Возвращает строку, которая указывает тип данных выражения X: «null», «integer», «real», «text» или «blob».
- Параметры
- X* - выражение для проверки.
- Примеры
-
Чтобы получить тип числа 1:
;SELECT typeof(1) integer
Чтобы получить тип строки
abc
:;SELECT typeof('abc') text
12.7.137 unicode(X)
Возвращает числовую кодовую точку Юникода, соответствующую первому символу строки X.
- Параметры
- X* - строка для проверки.
- Примеры
-
Чтобы получить кодовую точку Unicode для первого символа
abc
:;SELECT unicode('abc') 97
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), upper(str), xpath(xpath, xmldoc)
12.7.138 unlikely(value)
Сокращение вероятности (X, 0,0625)
- Параметры
- value* - возвращаемое логическое значение
12.7.139 upper(str)
Возвращает копию заданной строки со всеми символами ASCII, преобразованными в верхний регистр.
- Параметры
- str* - строка для преобразования.
- Примеры
-
Чтобы ввести строку
aBc
в верхний регистр:;SELECT upper('aBc') ABC
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), xpath(xpath, xmldoc)
12.7.140 xpath(xpath, xmldoc)
Возвращающая табличное значение функция, которая выполняет выражение xpath в строке XML и возвращает выбранные значения.
- Параметры
-
xpath* - выражение XPATH для оценки в XML-документе.
xmldoc* - XML-документ в виде строки.
- Примеры
-
Чтобы выбрать узлы XML на пути
/abc/def
:;SELECT * FROM xpath('/abc/def', '<abc><def a="b">Hello</def><def>Bye</def></abc>') result node_path node_attr node_text <def a="b">Hello</def>␊ /abc/def[1] {"a":"b"} Hello <def>Bye</def>␊ /abc/def[2] {} Bye
Чтобы выбрать все атрибуты
a
на пути/abc/def
:;SELECT * FROM xpath('/abc/def/@a', '<abc><def a="b">Hello</def><def>Bye</def></abc>') result node_path node_attr node_text b /abc/def[1]/@a {"a":"b"} Hello
Чтобы выбрать текстовые узлы на пути
/abc/def
:;SELECT * FROM xpath('/abc/def/text()', '<abc><def a="b">Hello ★</def></abc>') result node_path node_attr node_text Hello ★ /abc/def/text() {} Hello ★
- См. также
- char(X), charindex(needle, haystack, [start]), endswith(str, suffix), extract(str), group_concat(X, [sep]), group_spooky_hash(str), humanize_file_size(value), instr(haystack, needle), leftstr(str, N), length(str), lower(str), ltrim(str, [chars]), padc(str, len), padl(str, len), padr(str, len), printf(format, X), proper(str), regexp_capture(string, pattern), regexp_match(re, str), regexp_replace(str, re, repl), replace(str, old, replacement), replicate(str, N), reverse(str), rightstr(str, N), rtrim(str, [chars]), sparkline(value, [upper]), spooky_hash(str), startswith(str, prefix), strfilter(source, include), substr(str, start, [size]), trim(str, [chars]), unicode(X), upper(str)
12.7.141 zeroblob(N)
Возвращает большой двоичный объект, состоящий из N байтов размером 0x00.
- Параметры
- N* - размер большого двоичного объекта.
Глава тринадцатая
Справочник по таблицам SQLite
В дополнение к таблицам, созданным для каждого формата журнала, lnav включает следующие таблицы/представления:
- environment
- lnav_file
- lnav_views
- lnav_view_stack
- lnav_view_filters
- lnav_view_filter_stats
- lnav_view_filters_and_stats
- all_logs
- http_status_codes
- regexp_capture(<string>, <regex>)
Эти дополнительные таблицы предоставляют полезную информацию и позволяют управлять внутренним состоянием lnav. Вы можете получить дамп всей схемы базы данных, выполнив команду SQL .schema
, например:
;.schema
13.1 environ
Таблица environ дает вам доступ к переменным окружения процесса lnav. Вы можете использовать переменные среды SELECT, INSERT и UPDATE, например:
;SELECT * FROM environ WHERE name = 'SHELL'
name value
SHELL /bin/tcsh
;UPDATE environ SET value = '/bin/sh' WHERE name = 'SHELL'
Переменные среды могут использоваться для хранения простых значений или передачи значений из среды SQL lnav командам lnav. Например, команда «open» выполнит замену переменной, поэтому вы можете вставить переменную с именем «FILENAME», а затем открыть ее в lnav, указав на нее «$FILENAME»:
;INSERT INTO environ VALUES ('FILENAME', '/path/to/file')
:open $FILENAME
13.2 lnav_file
Таблица lnav_file позволяет вам исследовать и выполнять ограниченные обновления метаданных для файлов, которые в настоящее время загружены в lnav. В этой таблице доступны следующие столбцы:
- device
- Устройство, на котором хранится файл.
- inode
- Индекс файла на устройстве.
- filepath
- Если это настоящий файл, это будет абсолютный путь. В противном случае это символическое имя. Если это символическое имя, его можно обновить (UPDATE), чтобы этот файл учитывался при сохранении и загрузке информации о сеансе.
- format
- Формат файла журнала для файла.
- lines
- Количество строк в файле.
- time_offset
- Смещение в миллисекундах для отметок времени timestamp. Этот столбец можно обновить (UPDATE), чтобы изменить смещение отметок времени в файле.
13.3 lnav_views
Таблица lnav_views позволяет вам сделать SELECT и UPDATE для информации, относящейся к «views» в lnav (например, log, text и т.д.). В этой таблице доступны следующие столбцы:
- name
- Имя представления.
- top
- Номер строки в верхней части представления. Это значение можно обновить (UPDATE), чтобы переместить представление в данную строку.
- left
- Номер самого левого столбца для отображения. Это значение можно обновить (UPDATE) для перемещения представления влево или вправо.
- height
- Количество строк, отображаемых на экране.
- inner_height
- Количество отображаемых строк содержимого.
- top_time
- Отметка времени верхней строки в представлении или NULL, если представление не основано на времени. Это значение можно обновить (UPDATE), чтобы переместить представление на заданное время.
- paused
- Указывает, что просмотр приостановлен и не загружает новые данные.
- search
- Строка поиска для этого представления. Это значение можно обновить (UPDATE), чтобы начать текстовый поиск в этом представлении.
13.4 lnav_view_stack
Таблица lnav_view_stack позволяет вам выполнить SELECT и DELETE из стека lnav «представлений» (например, log, text и т.д.). В этой таблице доступны следующие столбцы:
- name
- Имя представления.
13.5 lnav_view_filters
Таблица lnav_view_filters позволяет вам управлять фильтрами в представлениях lnav. В этой таблице доступны следующие столбцы:
- view_name
- Имя представления, к которому применяется фильтр.
- filter_id
- Идентификатор фильтра. Он будет назначен при вставке.
- enabled
- Указывает, включен или отключен этот фильтр.
- type
- Тип фильтра: входящий или выходной.
- pattern
- Регулярное выражение для фильтрации.
Эта таблица поддерживает SELECT, INSERT, UPDATE и DELETE в строках таблицы для чтения, создания, обновления и удаления фильтров для представлений.
13.6 lnav_view_filter_stats
Таблица lnav_view_filter_stats позволяет получить информацию о том, сколько строк соответствует заданному фильтру. В этой таблице доступны следующие столбцы:
- view_name
- Имя представления.
- filter_id
- Идентификатор фильтра.
- hits
- Количество строк, соответствующих этому фильтру.
Эта таблица доступна только для чтения.
13.7 lnav_view_filters_and_stats
Представление lnav_view_filters_and_stats объединяет таблицу lnav_view_filters с таблицей lnav_view_filter_stats в единое представление для простоты использования.
13.8 all_logs
Таблица all_logs позволяет вам запрашивать формат, полученный из анализатора сообщений журнала lnav, который используется для автоматического извлечения данных, см. Извлечение данных для более подробной информации.
13.9 http_status_codes
Таблица http_status_codes - это удобный справочник, который можно использовать для преобразования кодов состояния HTTP в удобочитаемые сообщения.
13.10 regexp_capture(<string>, <regex>)
Возвращающая табличное значение функция regexp_capture() применяет регулярное выражение к заданной строке и возвращает подробные результаты для захваченных частей строки.
Глава четнадцатая
Извлечение данных
Примечание: эта функция все еще находится в бета-версии, вы должны ожидать ошибок и несовместимых изменений в будущем.
Сообщения журнала содержат много полезных данных, но их не всегда легко найти. Анализатор журнала, встроенный в lnav, может извлекать данные, как описано в Log Formats, а также обнаруживать данные в текстовых сообщениях. Затем эти данные можно запросить и обработать с помощью внешнего интерфейса SQLite, который также включен в lnav. Например, следующее сообщение системного журнала от sudo
может быть обработано для извлечения нескольких пар ключ/значение:
Jul 31 11:42:26 Example-MacBook-Pro.local sudo[87024]: testuser : TTY=ttys004 ; PWD=/Users/testuser/github/lbuild ; USER=root ; COMMAND=/usr/bin/make install
Данные, которые может извлечь анализатор, можно просмотреть непосредственно в lnav, нажав клавишу p
. Результаты будут отображаться в виде наложения, как показано ниже:
Current Time: 2013-07-31T11:42:26.000 Original Time: 2013-07-31T11:42:26.000 Offset: +0.000
Known message fields:
├ log_hostname = Example-MacBook-Pro.local
├ log_procname = sudo
├ log_pid = 87024
Discovered message fields:
├ col_0 = testuser
├ TTY = ttys004
├ PWD = /Users/testuser/github/lbuild
├ USER = root
└ COMMAND = /usr/bin/make install
Обратите внимание, что синтаксический анализатор обнаружил пары вида <key>=<value>
. Анализатор данных также будет искать пары, разделенные двоеточием. Если нет четко разграниченных пар, то синтаксический анализатор извлечет все, что выглядит как значения данных, и назначит им ключи формы col_N
. Например, два значения данных, IPv4-адрес и имя интерфейса, будут извлечены из следующего сообщения журнала:
Apr 29 08:13:43 sample-centos5 avahi-daemon[2467]: Registering new address record for 10.1.10.62 on eth0.
Поскольку в сообщении нет ключей для значений, синтаксический анализатор назначит col_0
для IP-адреса и col_1
для имени интерфейса, как показано здесь:
Current Time: 2013-04-29T08:13:43.000 Original Time: 2013-04-29T08:13:43.000 Offset: +0.000
Known message fields:
├ log_hostname = sample-centos5
├ log_procname = avahi-daemon
├ log_pid = 2467
Discovered message fields:
├ col_0 = 10.1.10.62
└ col_1 = eth0
Теперь, когда у вас есть представление о том, как работает синтаксический анализатор, вы можете приступить к выполнению запросов к извлекаемым данным. Механизм базы данных SQLite встроен в lnav, а его механизм Виртуальных таблиц используется для обеспечения средств обработки этих данных журнала. Каждый формат журнала имеет свою собственную таблицу, которая может использоваться для доступа ко всем загруженным сообщениям в этом формате. Для доступа к содержимому сообщения журнала, которое имеет более свободный формат, как в приведенных здесь примерах, можно использовать таблицу logline. Таблица logline воссоздается для каждого запроса и основана на формате и парах, обнаруженных в сообщении журнала в верхней части дисплея.
Запросы можно выполнить, нажав клавишу с запятой (;) в lnav. После нажатия клавиши отобразится наложение, показывающее все известные или обнаруженные поля, чтобы дать вам представление о том, какие данные доступны. Запрос может быть любым SQL-запросом, поддерживаемым SQLite. Чтобы упростить анализ, lnav включает множество дополнительных функций для обработки строк, путей и IP-адресов. См. Интерфейс SQLite для получения дополнительной информации.
Например, самый простой запрос для первоначального выполнения - это «select all», например:
SELECT * FROM logline
Когда этот запрос выполняется для второго примера сообщения журнала, приведенного выше, будут получены следующие результаты:
log_line log_part log_time log_idle_msecs log_level log_hostname log_procname log_pid col_0 col_1
292 p.0 2013-04-11T16:42:51.000 0 info localhost avahi-daemon 2480 fe80::a00:27ff:fe98:7f6e eth0
293 p.0 2013-04-11T16:42:51.000 0 info localhost avahi-daemon 2480 10.0.2.15 eth0
330 p.0 2013-04-11T16:47:02.000 0 info localhost avahi-daemon 2480 fe80::a00:27ff:fe98:7f6e eth0
336 p.0 2013-04-11T16:47:02.000 0 info localhost avahi-daemon 2480 10.1.10.75 eth0
343 p.0 2013-04-11T16:47:02.000 0 info localhost avahi-daemon 2480 10.1.10.75 eth0
370 p.0 2013-04-11T16:59:39.000 0 info localhost avahi-daemon 2480 10.1.10.75 eth0
377 p.0 2013-04-11T16:59:39.000 0 info localhost avahi-daemon 2480 10.1.10.75 eth0
382 p.0 2013-04-11T16:59:41.000 0 info localhost avahi-daemon 2480 fe80::a00:27ff:fe98:7f6e eth0
401 p.0 2013-04-11T17:20:45.000 0 info localhost avahi-daemon 4247 fe80::a00:27ff:fe98:7f6e eth0
402 p.0 2013-04-11T17:20:45.000 0 info localhost avahi-daemon 4247 10.1.10.75 eth0
735 p.0 2013-04-11T17:41:46.000 0 info sample-centos5 avahi-daemon 2465 fe80::a00:27ff:fe98:7f6e eth0
736 p.0 2013-04-11T17:41:46.000 0 info sample-centos5 avahi-daemon 2465 10.1.10.75 eth0
781 p.0 2013-04-12T03:32:30.000 0 info sample-centos5 avahi-daemon 2465 10.1.10.64 eth0
788 p.0 2013-04-12T03:32:30.000 0 info sample-centos5 avahi-daemon 2465 10.1.10.64 eth0
1166 p.0 2013-04-25T10:56:00.000 0 info sample-centos5 avahi-daemon 2467 fe80::a00:27ff:fe98:7f6e eth0
1167 p.0 2013-04-25T10:56:00.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.111 eth0
1246 p.0 2013-04-26T06:06:25.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.49 eth0
1253 p.0 2013-04-26T06:06:25.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.49 eth0
1454 p.0 2013-04-28T06:53:55.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.103 eth0
1461 p.0 2013-04-28T06:53:55.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.103 eth0
1497 p.0 2013-04-29T08:13:43.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.62 eth0
1504 p.0 2013-04-29T08:13:43.000 0 info sample-centos5 avahi-daemon 2467 10.1.10.62 eth0
Обратите внимание, что
lnav
не возвращает результаты для всех сообщений, содержащихся в этом файле системного журнала. Скорее, он ищет сообщения, которые соответствуют формату для данной строки, и возвращает только эти сообщения в результатах. В данном случае это формат «Регистрация новой записи адреса для <IP> на <symbol>», что соответствует частям сообщения, которые не были распознаны как данные.Конечно, можно делать более сложные запросы. Например, чтобы узнать частоту IP-адресов, упомянутых в этих сообщениях, вы можете запустить:
SELECT col_0,count(*) FROM logline GROUP BY col_0
Результаты этого запроса:
col_0 count(*)
10.0.2.15 1
10.1.10.49 2
10.1.10.62 2
10.1.10.64 2
10.1.10.75 6
10.1.10.103 2
10.1.10.111 1
fe80::a00:27ff:fe98:7f6e 6
Поскольку этот тип запросов довольно распространен,
lnav
включает команду «summarize», которая будет вычислять частоты идентификаторов, а также минимальное, максимальное, среднее, медианное и стандартное отклонение для числовых столбцов. В этом случае вы можете выполнить следующее, чтобы вычислить частоты и вернуть упорядоченный набор результатов::summarize col_0
14.1 Распознаваемые типы данных
При поиске данных для извлечения из сообщений журнала
lnav
ищет следующий набор шаблонов:- Строки
- Строки в одинарных и двойных кавычках. Пример: "The quick brown fox".
- URL-адреса
- URL-адреса, содержащие разделитель
://
. Пример: http://example.com - Пути
- Пути файловой системы. Примеры: /path/to/file, ./relative/path
- MAC-адреса
- MAC-адреса Ethernet. Пример: c4:2c:03:0e:e4:4a
- Hex-дампы
- Строка шестнадцатеричных чисел, разделенных двоеточиями. Пример: e8:06:88:ff
- Дата/Время
- Отметки даты и времени в формате «YYYY-mm-DD» и «HH:MM:SS».
- IP-адреса
- IPv4 и IPv6-адреса. Примеры: 127.0.0.1, fe80::c62c:3ff:fe0e:e44a:en0
- UUID
- Обычное форматирование для 128-битных UUID. Пример: 0E305E39-F1E9-4DE4-B10B-5829E5DF54D0
- Номера версий
- Номера версий, разделенные точками. Пример: 3.7.17
- Числа
- Числа в десятичном, шестнадцатеричном и восьмеричном форматах. Примеры: 1234, 0xbeef, 0777
- E-Mail-адреса
- Строки, похожие на адрес электронной почты. Пример: gary@example.com
- Константы
- Общие константы в языках, например: true, false, null, None.
- Условные обозначения
- Слова, соответствующие общепринятым условным обозначениям в языках программирования. Например, содержащие все заглавные буквы или разделенные двоеточиями. Пример: SOME_CONSTANT_VALUE, namespace::value
Глава пятнадцатая
Часто задаваемые вопросы
15.1 Q: Как я могу копировать и вставлять без оформления?
- Ответ
-
Сделать это можно несколькими способами:
- Используйте горячие клавиши закладок, чтобы отметить строки, а затем нажмите
c
, чтобы скопировать на локальную системную клавиатуру. - Нажмите
CTRL+l
, чтобы временно переключиться в режим «lo-fi», в котором содержимое текущего представления выводится на терминал. Эта опция полезна, когда вы вошли на удаленный хост.
- Используйте горячие клавиши закладок, чтобы отметить строки, а затем нажмите
15.2 Q: Как я могу принудительно отформатировать файл?
- Ответ
-
Формат журнала для файла определяется автоматически и не может быть принудительно установлен.
- Решение
- Добавьте несколько строк файла журнала в образец массива, а затем запустите lnav, чтобы получить подробное объяснение того, где шаблоны формата не соответствуют строкам образца.
- Подробности
-
Первые строки файла сопоставляются с регулярными выражениями, определенными в определениях формата. Порядок форматов определяется автоматически, поэтому более конкретные форматы пробуются перед более общими. Следовательно, если ожидаемый формат не выбран для файла, это означает, что регулярные выражения, определенные этим форматом, не соответствуют первым нескольким строкам файла.
Для получения дополнительной информации см. Порядок форматирования при сканировании файла.
15.3 Q: Почему мой файл журнала подсвечивается неправильно?
TBD
15.4 Q: Почему не отображается файл?
- Ответ
- Файлы с неформатированным текстом отображаются отдельно от файлов журнала в представлении TEXT.
- Решение
- Нажмите клавишу
t
, чтобы переключиться в текстовое представление. Или откройте панель конфигурации файлов, нажимаяTAB
для переключения панелей, а затем нажимайте/
для поиска интересующего вас файла. Если файл является журналом, необходимо создать новый формат журнала или модифицировать один из существующих. - Подробности
- Если файл, отслеживаемый lnav, не соответствует известному формату файла журнала, он обрабатывается как неформатированный текст и будет отображаться в представлении TEXT.