Документация по lnav

Релиз 0.10.0
Тим Стек

07 июля 2021 г.

перевод В.Айсин

Log File Navigator (lnav) - это расширенный просмотрщик файлов журнала для консоли.

Глава один
Вступление

Log File Navigator, lnav, представляет собой расширенный просмотрщик файлов журналов для терминала. Он предоставляет простой в использовании интерфейс для мониторинга и анализа файлов журналов практически без настройки. Просто откройте в lnav свои файлы журналов, и он автоматически определит Форматы журналов, проиндексирует их содержимое и отобразит комбинированное представление всех сообщений журналов. Вы можете перемещаться по журналам с помощью различных горячих клавиш. Команды дают вам дополнительный контроль над поведением lnav для таких вещей, как применение фильтров, тегирование сообщений и многое другое. Затем вы можете анализировать сообщения журнала с помощью интерфейса SQLite.

1.1 Зависимости

При компиляции из исходников требуются следующие зависимости:

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>

Встроенные раскладки клавиатуры:

Чтобы создать или настроить раскладку клавиатуры, обратитесь к разделу Определений раскладки.

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. Чтобы ускорить открытие большого количества файлов, любой файл, отвечающий следующим условиям, будет автоматически скрыт и не проиндексирован:

Распакованные файлы останутся во временном каталоге после выхода из 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 можно изменить следующие столбцы:

Хотя эти столбцы можно обновлять другими способами, использование интерфейса 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)

Поскольку приведенное выше строки могут быть слишком длинными для интерактивного ввода, вы можете поместить эти команды в скрипт и выполнить этот сценарий с помощью горячей клавиши |.

  1. Выражение 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-запрос, отображаемый в представлении БД. Более сложные сценарии могут использовать следующие команды для создания настраиваемого вывода для отчета:

Листинг 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:

Допустимый файл конфигурации 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
additionalPropertiesFalse
/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
additionalPropertiesFalse
/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
additionalPropertiesFalse
/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
additionalPropertiesFalse
/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
additionalPropertiesFalse
style
типobject
properties
color/color
Значение цвета переднего плана для этого стиля. Значением может быть имя цвета xterm, шестнадцатеричное значение или ссылка на переменную темы.
типstring
примеры#fff
Green
$black
background-color/background-color
Значение цвета фона для этого стиля. Значением может быть имя цвета xterm, шестнадцатеричное значение или ссылка на переменную темы.
типstring
примеры#2d2a2e
Green
underline/underline
Указывает, что текст должен быть подчеркнут.
типboolean
bold/bold
Указывает, что текст должен быть выделен жирным шрифтом.
типboolean
additionalPropertiesFalse

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
additionalPropertiesFalse
additionalPropertiesFalse

5.4 Настройка

Следующие параметры конфигурации можно использовать для настройки внутреннего устройства lnav по своему вкусу. Параметры можно изменить с помощью команды :config.

5.4.1 /tuning/archive-manager

Настройки, связанные с открытием архивных файлов
типobject
характеристики
min-free-space/tuning/archive-manager/min-free-space
Минимальное свободное пространство в байтах для сохранения при распаковке архивов
типinteger
minimum0
cache-ttl/tuning/archive-manager/cache-ttl
Время жизни для распакованных архивов, выраженное в виде продолжительности (например, 3d в течение трех дней)
типstring
примеры3d
12h
additionalPropertiesFalse

5.4.2 /tuning/file-vtab

Настройки, связанные с виртуальной таблицей lnav_file
типobject
характеристики
max-content-size/tuning/file-vtab/max-content-size
Максимально допустимый размер файла для столбца содержимого
типinteger
minimum0
additionalPropertiesFalse

5.4.3 /tuning/logfile

Настройки, связанные с файлами журналов
типobject
характеристики
max-unrecognized-lines/tuning/logfile/max-unrecognized-lines
Максимальное количество строк в файле, которое будет использоваться при определении формата
типinteger
minimum1
additionalPropertiesFalse

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
additionalPropertiesFalse
config/tuning/remote/ssh/config
Опции ssh_config для передачи в SSH с параметром -o
типobject
patternProperties
(\w+)/tuning/remote/ssh/config/<config_name>
Установка значения конфигурации SSH
типstring
additionalPropertiesFalse
additionalPropertiesFalse

Глава шестая
Интерфейс командной строки

При запуске 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, просматривающего сообщения системного журнала.

На цветных дисплеях сообщения журнала будут выделены следующим образом:

В правой части дисплея есть «полоса прокрутки» пропорционального размера, которая показывает:

Выше и ниже основного текста находятся строки состояния, в которых отображаются:

Если представление поддерживает фильтрацию, в строке состояния будет отображаться следующее:

Чтобы отредактировать фильтры, вы можете нажать клавишу 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.

В дополнение к указанным выше форматам поддерживаются следующие форматы с самоописанием:

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
  1. Можно настроить максимальное количество проверяемых строк. См. Раздел Настройка для получения более подробной информации.

Глава десятая
Сессии

Информация о сеансе сохраняется автоматически для набора файлов, которые были переданы в командной строке и перезагружены при следующем запуске 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.

Представление БД имеет следующие особенности отображения:

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 включает следующие таблицы/представления:

Эти дополнительные таблицы предоставляют полезную информацию и позволяют управлять внутренним состоянием 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

Таблица lnav_file позволяет вам исследовать и выполнять ограниченные обновления метаданных для файлов, которые в настоящее время загружены в lnav. В этой таблице доступны следующие столбцы:

device
Устройство, на котором хранится файл.
inode
Индекс файла на устройстве.
filepath
Если это настоящий файл, это будет абсолютный путь. В противном случае это символическое имя. Если это символическое имя, его можно обновить (UPDATE), чтобы этот файл учитывался при сохранении и загрузке информации о сеансе.
format
Формат файла журнала для файла.
lines
Количество строк в файле.
time_offset
Смещение в миллисекундах для отметок времени timestamp. Этот столбец можно обновить (UPDATE), чтобы изменить смещение отметок времени в файле.

Таблица lnav_views позволяет вам сделать SELECT и UPDATE для информации, относящейся к «views» в lnav (например, log, text и т.д.). В этой таблице доступны следующие столбцы:

name
Имя представления.
top
Номер строки в верхней части представления. Это значение можно обновить (UPDATE), чтобы переместить представление в данную строку.
left
Номер самого левого столбца для отображения. Это значение можно обновить (UPDATE) для перемещения представления влево или вправо.
height
Количество строк, отображаемых на экране.
inner_height
Количество отображаемых строк содержимого.
top_time
Отметка времени верхней строки в представлении или NULL, если представление не основано на времени. Это значение можно обновить (UPDATE), чтобы переместить представление на заданное время.
paused
Указывает, что просмотр приостановлен и не загружает новые данные.
search
Строка поиска для этого представления. Это значение можно обновить (UPDATE), чтобы начать текстовый поиск в этом представлении.

Таблица lnav_view_stack позволяет вам выполнить SELECT и DELETE из стека lnav «представлений» (например, log, text и т.д.). В этой таблице доступны следующие столбцы:

name
Имя представления.

Таблица lnav_view_filters позволяет вам управлять фильтрами в представлениях lnav. В этой таблице доступны следующие столбцы:

view_name
Имя представления, к которому применяется фильтр.
filter_id
Идентификатор фильтра. Он будет назначен при вставке.
enabled
Указывает, включен или отключен этот фильтр.
type
Тип фильтра: входящий или выходной.
pattern
Регулярное выражение для фильтрации.

Эта таблица поддерживает SELECT, INSERT, UPDATE и DELETE в строках таблицы для чтения, создания, обновления и удаления фильтров для представлений.

Таблица lnav_view_filter_stats позволяет получить информацию о том, сколько строк соответствует заданному фильтру. В этой таблице доступны следующие столбцы:

view_name
Имя представления.
filter_id
Идентификатор фильтра.
hits
Количество строк, соответствующих этому фильтру.

Эта таблица доступна только для чтения.

Представление 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.