IPASTAT.CONF(5) IPASTAT.CONF(5) НАИМЕНОВАНИЕ ipastat -- конфигурационный файл для ipastat(8) ОПИСАНИЕ Файл ipastat.conf это конфигурационный файл для ipastat(8). Этот файл или любой-другой файл, указанный в опции -f в командной строке ipas- tat(8), обрабатывается когда ipastat(8) начинает свою работу. ФОРМАТ ФАЙЛА Почти после каждого параграфа приведен пример. Так как IPA пакет не содержит каких-либо модулей, то в примерах используются модуль ipa_st_sdb, только лишь потому, что это был первый модуль статистики, разработанный для IPA. Общий синтаксис Любая логическая строка в конфигурационном файле может быть записана в несколько текстовых строках для улучшения читаемости конфигурации. Нет никакого правила в какой строке размещать зарезервированные слова, аргументы или специальные символы. Если формат позволяет использовать один пробельный символ (пробел или символ табуляции), то можно исполь- зовать столько пробельных символов, сколько необходимо для улучшения форматирования конфигурационного файла. Все элементы в конфигурацион- ном файле регистрозависимые. Конфигурационный файл состоит из секций, параметров и комментариев. Комментарии Существуют shell-подобные и C-подобные комментарии. Если вы использу- ете C-подобный комментарий в shell-подобном комментарии, то C-подобный комментарий игнорируется. Пример: # Shell-подобный комментарий. /* C-подобный комментарий. */ /* * Другой C-подобный комментарий. */ Секции и параметры Секция состоит из имени секции, опциональных аргументов и тела секции. Тело секции должно быть заключено в фигурные скобки: секция [[=] аргумент] { /* Параметры и секции. */ } Параметр состоит из имени и опциональных аргументов. Каждый параметр должен заканчиваться символом `;' в конце списка своих аргументов: параметр [[=] аргумент]; Символ `=' после имени параметра или секции опционален. Некоторые параметры похоже на переменные (и для таких параметров естественно использовать символ `='), другие похожи на инструкции. В любом случае, в можете выбрать синтаксис, который вам наиболее подходит. Аргумент может содержать строки: "строка" Возможно использовать последовательности ``\t'', ``\n'', ``\\'' и ``\"'', чтобы представить символ табуляции, символ новой строки, обрат- ный слэш и двойную кавычку внутри строки. Если необходимо разделить строку на несколько линий (строк в файле), то используйте символ `\' в конце текущей линии (не добавляйте лишних пробельных символов после обратного слэша). Если строка записана в несколько линий без символов `\', то каждый символ новой строки добавляется в строку. Макропеременные Определение макропеременной имеет следующую форму: ${переменная} = "строка"; Имя любой макропеременной может состоять из букв, цифр, символов '_' и знаков доллара. Что является буквой определяется функцией isalpha(3), которая использует текущую локаль. Значением любой макропеременной должна быть строка, когда макроперемен- ная расширяется, то первый и последний символы двойной кавычки убира- ются. Макропеременные могут быть локальными или глобальными. Макропеременная является глобальной, если она определена вне какой-либо секции, иначе макропеременная является локальной для всех вложенных секций и для всех внешних секции. Локальные макропеременные скрывают глобальные макропе- ременные. Есть несколько предопределённых макропеременных: ${$} - символ `$'; ${rule} - имя текущего правила; ${limit} - имя текущего лимита; ${threshold} - имя текущего порога. Любая макропеременная (включая предопределённые), за исключением ${$}, по необходимости может быть переопределена. Не рекомендуется переопре- делять или уничтожать предопределённые макропеременные в модулях. Макропеременная ${$} не может быть использована для конструирования имён макропеременных (см. пример). Макропеременные могут использоваться почте где-угодно в конфигурацион- ном файле. Когда макропеременная расширяется, её значение расширяется рекурсивно. Макропеременные расширяются в момент их использования, а не в момент их определения. Макропеременные также расширяются в стро- ках. Пример: ${a} = "${b}"; # Определение ${a}. ${b} = "1"; # Определение ${b}. param = ${a}; # Расширяется в 1. ${b} = "2"; # Переопределение ${b}. param = ${a}; # Расширяется в 2. param = "${$}{b}"; # Расширяется в ${b} (последовательность # символов внутри строки). section { ${a} = "1"; # Определение локальной ${a}, которая # скрывает глобальную ${a}. ${c} = "4"; # Определение локальной ${c}. param = ${a}; # Расширяется в 1. subsection { ${a} = "2"; # Переопределение локальной ${a}. ${b} = "3"; # Переопределение глобальной ${b}. } param = ${a}; # Расширяется в 2. param = ${b}; # Расширяется в 3. } # param = ${c}; <-- Ошибка: ${c} не определена как глобальная. Включение файлов Возможно хранить конфигурацию в нескольких файлах. Файлы могут быть включены при помощи следующих параметров: include "/путь/файл"; include_files "/директория/шаблон"; Параметр include включает один файл. Параметр include_files включает несколько файлов из указанной директории, имена которых совпадают с указанным шаблоном. Эти параметры могут быть использованы где угодно в конфигурационном файле, за исключением секций модулей, содержимое указанных файлов вклю- чается в конфигурацию немедленно. Возможно включать файлы из включён- ных файлов и т.д. Каждый включённый файл должен содержать корректно определённые параметры с аргументами, комментарии и секции с аргумен- тами, но он может содержать незакрытые секции. Возможно использовать регулярные выражения POSIX в качестве шаблонов в параметрах include_files, для этого установите параметр posix_re_pat- tern в ``yes'' перед параметрами, которые включают файлы с регулярными выражениями POSIX в качестве шаблонов (значение по умолчанию равно ``no''): posix_re_pattern = <boolean>; Этот параметр должен быть расположен отдельно. Включаемые файлы должны иметь того владельца, кто запустил ipastat(8) и не должны иметь прав на запись для группы и остальных пользователей. Если файлы включаются с помощью параметра include_files, то и директо- рии указанные в этом параметре тоже должны иметь те же свойства. Пример: posix_re_pattern = yes; include "/usr/local/etc/ipastat.local.conf"; include_files "/usr/local/etc/ipastat/LAN/."; Первый параметр включает один файл, второй параметр включает каждый файл в данной директории (регулярное выражение POSIX ``.'' означает любой символ). /* posix_re_pattern = no; */ include_files "/usr/local/etc/ipastat/LAN/*"; Здесь используется шаблон shell. Первую строку необходимо раскомменти- ровать, если перед этим использовались регулярные выражения POSIX. Использование модулей статистики IPA модули статистики используются для получения статистики. ipas- tat(8) и модули статистики работают вместе с помощью ipa_st_mod API, описанного в странице документации ipa_mod(3). Параметр st_mod динамически загружает указанный модуль статистики: st_mod "имя_файла"; Этот параметр должен быть расположен отдельно. Возможно использовать несколько модулей статистики одновременно. Данное имя файла должно быть именем shared-object (shared library) файла если ipastat(8) использует интерфейс dlopen(3) или это может быть .la файл если используется интерфейс библиотеки libtool ltdl. Пример: st_mod "ipa_st_sdb.so"; Этот параметр загружает один модуль статистики. Конфигурирование модулей Документация для IPA модуля должна давать всю информацию как конфигури- ровать модуль. Обычно конфигурация IPA модуля интегрируется в конфигу- рационный файл ipastat.conf(5). Каждый модуль имеет конфигурационный префикс, который используется для того, чтобы отличать секции и параметра модуля. Если параметр записан в форме: префикс:параметр [[=] аргумент]; то ipastat(8) попытается найти загруженный модуль, с конфигурационным префиксом ``префикс'', затем передаст этот параметр для разбора найден- ному модулю. Секции также могут иметь префиксы: префикс:секция [[=] аргумент] { /* Параметры и секции модуля. */ } В этом случае параметры и секции внутри такой секции должны быть запи- саны без префикса и они будут переданы соответствующему модулю для обработки. Документация для модуля должна описывать сам модуль, конфигурационный префикс модуля, имя системы статистики и все секции и параметры модуля. Пример: global { sdb:db_dir = "/var/db/ipa_sdb"; } Здесь секция global содержит один параметр модуля. Единицы статистики Некоторые параметры и секции могут принимать аргументы в байтах, вре- мени и 64-битных беззнаковых целых числах. В ipa_mod(3) такой тип дан- ных определён как IPA_CONF_TYPE_VALUE. Иногда желательно использовать только один тип данных для таких значений, так как ``10'', ``10m'' и ``10M'' являются корректными типами данных и означают 10, 10 минут и 10 Мбайт соответственно. Параметр value_units может быть использован для определения желаемого типа данных аргументов с типом данных IPA_CONF_TYPE_VALUE и для кон- троля их реальных значений: value_units = <type>; Этот параметр должен быть расположен отдельно. Доступны следующие зна- чения: ``any'' (по умолчанию), ``time'', ``bytes'' и ``number''. Имена правил, лимитов и порогов Любой символ в любом имени должен быть буквой, цифрой или символом пунктуации из таблицы ASCII символов. Имя не может содержать символ двойной кавычки, символы '/' и '\'. Необходимо давать такие имена, которые также являются корректными име- нами для используемых вами систем статистики. Правила статистики ipastat(8) запрашивает статистику основываясь на правилах. Существуют статические и динамические правила. Статическое правило описывается в секции rule. Динамическое правило не имеет описания в конфигурационном файле, ipastat(8) генерирует любое динамическое правило на лету, в соответствии с настройками в командной строке и в конфигурационном файле. Несколько правил (статических, динамических) могут разделять одни и те же установки. Существует несколько путей это сделать. Первый путь это использовании секции global. Второй путь это использование секций rulepat (шаблоны правил). И третий путь это указание установок для динамических правил в командной строке. Если какое-то правило (статическое, динамическое) не содержит установок для какой-то секции или параметра, то наследуются установки из подходя- щей секции rulepat, далее наследуются установки из секции global, если некоторые секции или параметра всё ещё не определены, то используются установки по умолчанию. Запустите ipastat(8) с ключами -tt, чтобы уви- деть реальные значения всех параметров. Следующие параметры могут быть использованы в секциях global, rulepat и rule: st_list. Использование систем статистики Параметр st_list определяет список используемых систем статистики: st_list = <список>; <Список> это набор имён, разделённых пробельными символами. Чтобы получить имена систем статистики, прочтите документацию для модулей, которые вы указали в параметрах st_mod. Если какое-то правило (лимит, порог) содержит параметр st_list, то системы статистики, перечисленные в его значении, будут опрашиваться для получения статистики для этого правила (лимита, порога). Этот параметр позволяет создавать список систем статистики для каждого пра- вила (лимита, порога) по отдельности. Первая система статистики, которая в состоянии выполнить запрос, будет использоваться для выполнения запроса определённой статистики. Заметьте, что порядок систем статистики важен. Существует одна встроенная система статистики null: эта система стати- стики не возвращает никакой статистики. Если параметр st_list не опре- делён, то используется система статистики null. Пример: st_mod "ipa_st_sdb.so"; global { st_list = sdb; } Здесь определена одна система статистики. Статические правила Статические правила называются ``статическими'' потому, что они суще- ствуют в конфигурационном файле. Секция rule описывает установки для одного статического правила: rule <имя-правила> { /* Параметры и секции правила. */ } Секция rule не требует каких-либо обязательных установок. Если какое- то правило не содержит ни одной секции и параметра, то оно называется пустым правилом. Очевидно, что такие правила бессмысленны, поэтому любое правило имеет несколько параметров (собственные или наследован- ные). Пример: st_mod "ipa_st_sdb.so"; rule local.traf { st_list = sdb; sdb:db_dir = "/somewhere/${rule}"; } Здесь правило использует одну систему статистики, оно также имеет один параметр модуля. Лимиты Лимит описывается в секции limit: limit <имя-лимита> { /* Параметры и секции лимита. */ } Одно правило может иметь несколько лимитов. Если правило содержит хотя бы один лимит, то это правило не наследует лимиты из подходящей секции rulepat. Секция limit не требует каких-либо обязательных установок. Системы статистики и лимиты (пороги) По умолчанию лимит наследует список систем статистики своего правила, но лимит может использовать собственный список систем статистики: rule <имя-правила> { /* Параметры и секции правила. */ st_list = <список1>; limit <имя-лимита> { /* Параметры и секции лимита. */ st_list = <список2>; } } <Список1> и <список2> могут содержать общие элементы, в любом случае <список1> используется только для правила, а <список2> используется только для лимита. Зачем использовать раздельные системы статистики для правила и его лимитов? Не все системы статистики работают с лимитами и даже если какая-то система статистики работает с лимитами, она может поддерживать не все функции (методы) для лимитов. См. детали реализации в странице документации ipa_mod(3). Прочтите в документации к системе статистики, которую вы используйте, может ли она работать с лимитами и что конкретно модуль поддерживает, когда он работает с лимитами. Всё сказанное выше также справедливо для порогов. Пороги Порог описывается в секции threshold: threshold <имя-порога> { /* Параметры и секции порога. */ } Одно правило может иметь несколько порогов. Если правило содержит хотя бы один порог, то это правило не наследует пороги из подходящей секции rulepat. Секция threshold не требует каких-либо обязательных установок. Динамические правила, лимиты и пороги По умолчанию если какое-то правило не найдено в конфигурационном файле, то это правило считается как несуществующее. Но число правил может быть велико и правила могут не существовать на момент создания конфигу- рационного файла. В этом случае не возможно или не удобно держать все возможные правила в конфигурационном файле. Чтобы решить эту проблему существуют динамические правила. Возможно создавать динамические правила не лету и эти динамические правила будут наследовать установки из подходящей секции rulepat и секции global, подобно статическим правилам. Чтобы включить поддержку динамических правил установите параметр dynamic_rules в ``yes'' (значение по умолча- нию равно ``no''): dynamic_rules = <boolean>; Существую схожие параметры для лимитов и порогов: dynamic_limits и dynamic_thresholds соответственно: dynamic_limits = <boolean>; dynamic_thresholds = <boolean>; Эти параметры должны быть расположены отдельно. Динамические лимиты и динамические пороги могут быть созданы для дина- мических и статических правил. Пример: dynamic_limits = yes; В этом примере разрешено создание только динамических лимитов. Шаблоны правил Использование шаблонов правил это эффективный метод для разделения общих установок для нескольких правил. Секция global позволяет опреде- лить общие установки для любых правил. Шаблоны правил позволяют опре- делить общие установки для классов статических и динамических правил. Если какое-то статическое или динамическое правило не имеет какого-то параметра или секции, то оно наследует этот параметр или секцию из под- ходящего шаблона правила. Шаблон правила определяется в секции rulepat: rulepat "<regexp>" { /* Параметры и секции. */ } Каждый шаблон правила поименован регулярным выражением POSIX. ipas- tat(8), разобрав конфигурационный файл, находит подходящий шаблон пра- вила для каждого статического правила и добавляет неопределённые уста- новки для статического правила из шаблона правила. Аналогично, создав динамическое правило, ipastat(8) находит подходящий шаблон правила и добавляет неопределённые установки для динамического правила из шаблона правила. По умолчанию, когда подходящий шаблон правила найден, поиск заверша- ется. Чтобы продолжить поиск следующих шаблонов правил, установите значение параметра check_next_rulepat в ``yes'' (значение по умолчанию равно ``no''): check_next_rulepat = <boolean>; Этот параметр может быть расположен только в секции rulepat. Любой параметр и любая секция, которая может быть использована в секции rule может быть использована в секции rulepat. Шаблоны правил могут быть расположены в любом месте в конфигурационном файле, важен их порядок, так как их регулярные выражение проверяются в том же самом порядке, в котором расположены шаблоны правил в конфигура- ционном файле. Модули также могут ожидать параметры и секции в секциях rulepat. Пример: st_mod "ipa_st_sdb.so"; rulepat "^client" { st_list = sdb; } Вторая секция rulepat ``ловит'' все правила с подстрокой ``client'' в начале их имён. Отладка Иногда необходимо определить почему что-то идёт не так как должно было быть. Существует несколько параметров, которые могут быть использованы для отладки ipastat(8): debug_st_null - сообщать об использовании системы статистики null (отдельно, 1). Каждый параметр отладки принимает уровень отладки как аргумент, макси- мальный уровень отладки для каждого параметра определён как номер в скобках. Если в скобках есть слово ``отдельно'', то этот параметр не должен располагаться в какой-либо секции. По умолчанию отладка отключена. Пример: debug_st_null = 1; Если статистика не выводится, то указать ipastat(8) сообщать если используется встроенная система статистики null. ФАЙЛЫ ipastat.conf (запустите ipastat с ключём -h, чтобы увидеть путевое имя конфигураци- онного файла, используемое по умолчанию) ДРУГИЕ ИСТОЧНИКИ ipa(8), ipactl(8), ipastat(8), ipa.conf(5), ipa_mod(3) АВТОР Andrey Simonenko <simon@comsys.ntu-kpi.kiev.ua> НЕДОРАБОТКИ Если вы обнаружите какие-либо ошибки, то, пожалуйста, сообщите мне по email. 19 июля 2007 г. IPASTAT.CONF(5)