Tina_Linux_syslog_Usage Guide
Tina_Linux_syslog_Usage Guide

Руководство по использованию системного журнала Tina Linux

1 Основное введение

Можно сказать, что системный журнал — это механизм унифицированного управления системными журналами, особенно часто используемый для записи выходной информации процессов-демонов. Поскольку у демона нет управляющего терминала, его печать нельзя просто выполнить непосредственно на стандартный ввод или

stderr。

При использовании системного журнала обычно необходимо обращать внимание на две части: демон системного журнала и функцию системного журнала.

1.1 демон системного журнала

Демон системного журнала используется для унифицированного управления журналами. Обычно он создает сокет домена Unix типа дейтаграммы (SOCK_DGRAM) и привязывает его к /dev/log (различные

Системы могут различаться). Если сеть поддерживается, она также может создать сокет UDP и привязаться к порту 514. Демон системного журнала считывает информацию журнала из этих сокетов, а затем выводит ее в

Установите целевое местоположение (файл, последовательный порт и т. д.).

Упомянутые ниже logd ubox, syslogd busybox и syslog-ng — это разные реализации демона syslog.

1.2 функция системного журнала

Если приложение хочет отправить информацию о печати демону системного журнала, ему необходимо вывести информацию по пути, связанному с демоном системного журнала, через сокет домена Unix. Стандартный подход заключается в вызове функции системного журнала:

Язык кода:javascript
копировать
#include <syslog.h>
void openlog(const char *ident, int option, int facility);
void syslog(int priority, const char *format, ...);
void closelog(void);

При первом вызове функции системного журнала приложением создается сокет домена Unix, который подключается к пути привязки сокета домена Unix демона системного журнала. Этот сокет останется открытым до тех пор, пока

пока процесс не будет завершен. Приложение также может явно вызывать openlog и closelog (ни одну из этих двух функций вызывать нельзя, если она не вызывается явно, функция syslog будет автоматически и неявно вызываться в первый раз).

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

Ниже приведены описания некоторых параметров. Более подробную информацию можно найти в руководстве по системному журналу.

1.2.1 openlog()

• Параметр ident будет добавлен к каждому сообщению журнала, обычно это имя программы.

• Параметр option поддерживает следующие значения, и вы можете использовать операцию ИЛИ (OR) для поддержки нескольких опций:

option

иллюстрировать

LOG_CONS

Если журнал не может быть отправлен демону системного журнала через сокет домена Unix, выведите его на консоль.

LOG_NDELAY

Немедленно откройте соединение с доменным сокетом Unix демона системного журнала, не дожидаясь первого вызова функции системного журнала для установления соединения (обычно соединение устанавливается при первом вызове системного журнала).

LOG_NOWAIT

Не ждите подпроцессов, которые могли быть созданы во время регистрации сообщений (подпроцессы не создаются в библиотеке GNU C, поэтому этот вариант не будет работать в Linux)

LOG_ODELAYLOG_NDELAY

Напротив, соединение не устанавливается до первого вызова функции syslog (это поведение по умолчанию, вы не можете указать эту опцию явно)

LOG_PERROR

Также выведите информацию журнала в stderr.

LOG_PID

Добавить идентификатор процесса в каждое сообщение журнала

• Параметр объекта используется для указания типа объекта текущего приложения и значения по умолчанию для объекта для последующих вызовов системного журнала.

Цель этого параметра — позволить демону системного журнала различать информацию журнала различных типов объектов через файлы конфигурации. Если приложение не вызывает openlog или параметр объекта при вызове равен 0,

Вы можете передать объект как часть параметра приоритета при вызове системного журнала.

facility

иллюстрировать

LOG_AUTH

Информация о безопасности/авторизации

LOG_AUTHPRIV

Информация о безопасности/авторизации(частное пользование)

LOG_CRON

Демоны, связанные со временем (cron и at)

LOG_DAEMON

Системный демон

LOG_FTP FTP

демон

LOG_KERN

Информация ядра (не может быть сгенерирована процессами пользовательского пространства)

LOG_LPT

система линейного принтера

LOG_MAIL

Почтовая система

LOG_NEWS

Сетевая система новостей USENET

LOG_SYSLOG

Есть системный журнал демон внутренне генерирует сообщения

LOG_USER

Любое сообщение уровня пользователя (по умолчанию)

LOG_UUCP

система UUCP

1.2.2 syslog()

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

level

ценить

иллюстрировать

LOG_EMERG

0

Срочно (система недоступна) (высший приоритет)

LOG_ALERT

1

Действия должны быть приняты немедленно

LOG_CRIT

2

Серьезные ситуации (например, ошибки аппаратного устройства)

LOG_ERR

3

Состояние ошибки

LOG_WARNING

4

Предупреждающая ситуация

LOG_NOTICE

5

Обычная, но важная ситуация (ценить по умолчанию)

LOG_INFO

6

Информация для уведомления

LOG_DEBUG

7

Информация об отладке (самый низкий приоритет)

1.3 повернуть

Часто системный журнал будет демон читает и записывает информацию журнала в определенный файл середина.,С журналомизувеличивать,Размер файла будет продолжать расти. Чтобы файлы журналов не заполняли место для хранения,Требуются ограниченные дни

Размер файла журнала и удаление прошлых журналов называется ротацией.

rotate Реализация обычно следующая: предполагается, что системный журнал демон записывает лог в файл /var/run/messages, когда сообщения. Когда размер файла превышает установленную цену, сообщения будут Информация для входа сохраняется в

в другом файле (при условии, что имя — messages.0), а затем очистите сообщения контент; когда будут следующие сообщения; Когда размер файла превысит установленную цену, сообщения будут снова удалены. Содержимое сохраняется как

messages.0, исходное содержимое messages.0 сохраняется как messages.1. По аналогии, через несколько раз будут сообщения, messages.0, messages.1,..., messages.n

документ. Обычно n устанавливается измаксимумценить,Исторические файлы, превышающие эту цену, будут удалены.,Тем самым ограничивая общий размер файла журнала.

Мы можем написать наши собственные сценарии для реализации вращения, мы можем использовать специальный инструмент logrotate, а также есть несколько системных журналов. демониз реализует собственную ротацию функции, такие как ubox чтение журнала 、busybox из

syslogd 。

2 программных инструмента, связанных с системным журналом

2.1 журнал и чтение журнала ubox

ubox isOpenWrt из панели инструментов, это системный журнал Система управляется logd с чтением журнала Два инструмента реализуют (здесьчтение журналадаubox Реализуйте это самостоятельно, используя busybox ниже. поставлятьчтение журнала не то же самое

инструмент).

Потому что эти два инструментаisOpenWrt Поставляется изначально, их использование может зависеть от procd. и автобус , не тестировался на не-procd init изсреда Вниздадоступный。

При использовании procd init они запускаются автоматически через сценарий запуска /etc/init.d/log следующим образом:

Язык кода:javascript
копировать
#!/bin/sh /etc/rc.common
# Copyright (C) 2013 OpenWrt.org
# start after and stop before networking
START=12
STOP=89
PIDCOUNT=0
USE_PROCD=1
PROG=/sbin/logread
OOM_ADJ=-17
validate_log_section()
{
    uci_validate_section system system "${1}" \
    'log_file:string' \
    'log_size:uinteger' \
    'log_ip:ipaddr' \
    'log_remote:bool:1' \
    'log_port:port:514' \
    'log_proto:or("tcp", "udp"):udp' \
    'log_trailer_null:bool:0' \
    'log_prefix:string'
}
validate_log_daemon()
{
    uci_validate_section system system "${1}" \
    'log_size:uinteger:0' \
    'log_buffer_size:uinteger:0'
}
start_service_daemon()
{
    local log_buffer_size log_size
    validate_log_daemon "${1}"
    [ $log_buffer_size -eq 0 -a $log_size -gt 0 ] && log_buffer_size=$log_size
    [ $log_buffer_size -eq 0 ] && log_buffer_size=16
    procd_open_instance
    procd_set_param oom_adj $OOM_ADJ
    procd_set_param command "/sbin/logd"
    procd_append_param command -S "${log_buffer_size}"
    procd_set_param respawn
    procd_close_instance
}
start_service_file()
{
    PIDCOUNT="$(( ${PIDCOUNT} + 1))"
    local pid_file="/var/run/logread.${PIDCOUNT}.pid"
    local log_file log_size
    validate_log_section "${1}" || {
        echo "validation failed"
        return 1
    }
    [ -z "${log_file}" ] && return
    procd_open_instance
    procd_set_param command "$PROG" -f -F "$log_file" -p "$pid_file"
    [ -n "${log_size}" ] && procd_append_param command -S "$log_size"
    procd_close_instance
}
start_service_remote()
{
    PIDCOUNT="$(( ${PIDCOUNT} + 1))"
    local pid_file="/var/run/logread.${PIDCOUNT}.pid"
    local log_ip log_port log_proto log_prefix log_remote log_trailer_null
    validate_log_section "${1}" || {
        echo "validation failed"
        return 1
    }
    [ "${log_remote}" -ne 0 ] || return
    [ -z "${log_ip}" ] && return
    procd_open_instance
    procd_set_param command "$PROG" -f -r "$log_ip" "${log_port}" -p "$pid_file"
    case "${log_proto}" in
    "udp") procd_append_param command -u;;
    "tcp") [ "${log_trailer_null}" -eq 1 ] && procd_append_param command -0;;
    esac
    [ -z "${log_prefix}" ] || procd_append_param command -P "${log_prefix}"
    procd_close_instance
}
service_triggers()
{
    procd_add_reload_trigger "system"
    procd_add_validation validate_log_section
}
start_service()
{
    config_load system
    config_foreach start_service_daemon system
    config_foreach start_service_file system
    config_foreach start_service_remote system
}

Видно, что скрипт передаст config_load system Прочтите конфигурацию, а затем запишите ее как logd. и чтение журнала из параметров опции. Конкретная конфигурация находится в файле /etc/config/system. середина.

Для получения более подробной информации обратитесь к OpenWrt. из Официальная документацияRuntime Logging in OpenWrt а такжеSystemconfiguration /etc/config/system

2.1.1 logd

logd Поддерживает фиксированный размер кольца буфер (кольцевой буфер), используемый для сохранения собранных журналов (включая журналы ядра). кольцо buffer из размера через -S Параметры можно указать, настроив

Измените размер файла islog_buffer_size в «Установить/etc/config/систему», единица измерения – КБ.

2.1.2 logread

logread Используется для чтения журнала изring buffer из содержимого и вывода в файл или сеть с удаленного компьютера (через TCP/UDP розетка). Он поддерживает следующие параметры:

Язык кода:javascript
копировать
Usage: logread [options]
Options:
    -s <path> Path to ubus socket
    -l <count> Got only the last 'count' messages
    -e <pattern> Filter messages with a regexp
    -r <server> <port> Stream message to a server
    -F <file> Log file
    -S <bytes> Log size
    -p <file> PID file
    -h <hostname> Add hostname to the message
    -P <prefix> Prefix custom text to streamed messages
    -f Follow log messages
    -u Use UDP as the protocol
    -0 Use \0 instead of \n as trailer when using TCP

• Выполнить чтение журнала напрямую изменит текущий звонок buffer Распечатайте все журналы (аналогично dmesg )。 • Добавьте -f будет продолжать работать и выходное кольцо buffer Китайско-Сингапур из журнала. • Используйте -F “

log_file" Вы можете указать файл, в который будет выводиться лог середина, -S "

log_size” Размер файла можно указать, где log_file и log_size Все можно найти в /etc/config/system настройки в . (Фактическое тестирование показало, что он поставляется с функцией поворота из функции, когда log_file размер превышает log_size Когда будет добавлено ".0" Суффикс переносится в то же Оглавление, и по умолчанию сохраняется только один исторический файл. Пока не установлено, можно ли настроить сохранение более одного файла исторического дампа. )

2.2 syslogd, klogd и чтение журнала busybox

busybox Поставляется с некоторым системным журналом Инструменты, обычно используемые в основном syslogd 、klogd и чтение журнала (здесьчтение журнал с указанным выше изубоксом чтение журнала не то же большинство инструментов), находятся в нем

menuconfig из“System LoggingUtilities” Вниз.

Более поздняя статья Связанное содержимое основано на версии 1.27.2. версия поясняется.

2.2.1 syslogd

busybox изsyslogd Используется для чтения /dev/log в журнале и решить отправить его в файл, общую память или циклический buffer или Сеть и другие локации, и у него есть свой простой изротат Функция.

Он поддерживает функцию «из» и может быть настроен в меню конфигурации. После выбора всех функций он поддерживает опцию «из» следующим образом:

Язык кода:javascript
копировать
Usage: syslogd [OPTIONS]
System logging utility
    -n Run in foreground
    -R HOST[:PORT] Log to HOST:PORT (default PORT:514)
    -L Log locally and via network (default is network only if -R)
    -C[size_kb] Log to shared mem buffer (use logread to read it)
    -K Log to kernel printk buffer (use dmesg to read it)
    -O FILE Log to FILE (default: /var/log/messages, stdout if -)
    -s SIZE Max size (KB) before rotation (default 200KB, 0=off)
    -b N N rotated logs to keep (default 1, max 99, 0=purge)
    -l N Log only messages more urgent than prio N (1-8)
    -S Smaller output
    -D Drop duplicates
    -f FILE Use FILE as config (default:/etc/syslog.conf)

• Характеристика «Поворот» message файлы» (FEATURE_ROTATE_LOGFILE) и повернуть функция, соответствующая -s Укажите предельный размер файла журнала и -b Укажите, сколько файлов исторических дампов нужно сохранить. • Характеристика «Удаленный Log support» (FEATURE_REMOTE_LOG) — поддержка сетевых функций, соответствующая -R и -L. параметры. • Особенности «Поддержка -D (drop dups) опция» (FEATURE_SYSLOGD_DUP) соответствует -D параметра дубликаты журналов с одинаковым содержанием будут удалены. Чтобы определить, одинаковы ли логи, мы не только смотрим на основную информацию, но и принимаем во внимание дополнительную информацию, такую ​​как временные метки, например «Январь». 1 08:00:00 root: foobar” и «Ян 1 08:00:01 root: foobar” Будут рассматриваться как два разных журнала и отбрасываться будут только идентичные журналы. • Особенности «Поддержка syslog.conf» (FEATURE_SYSLOGD_CFG) поддерживает использование файлов конфигурации, по умолчанию — /etc/syslog.conf. , также можно передать -f Укажите другие файлы. Его можно настроить в файле конфигурации в зависимости от объекта. с уровнем Вывод журналов в разные целевые местоположения. Примеры:

Язык кода:javascript
копировать
# Вывод всех логов в файл /var/log/messages.

*.* /var/log/messages

# Вывод всех логов в консоль
*.* /dev/console
# объект для LOG_KERN вывод журнала в /var/log/kernel
kern.* /var/log/kernel
# объект для LOG_USER и уровень Выше, чем LOG_NOTICE вывод журнала в /var/log/user
user.notice /var/log/user

• Функция «Читать buffer size in байтов» (FEATURE_SYSLOGD_READ_BUFFER_SIZE) используется для установки syslogd из/dev/log При чтении содержимого в буфере Размер, определяющий максимальную длину одного сообщения журнала. Лишняя длина будет обрезана и отброшена. • Особенности «Круговой Buffer поддержка» (FEATURE_IPC_SYSLOG) соответствует -C[size_kb] параметры, используемые для отправки логов в общую память из цикла buffer середина, Вы можете передать logread Прочтите это. круговой buffer из размеров, доступных через "Круглый buffer size in Kbytes (minimum 4KB)”(FEATURE_ IPC_SYSLOG_BUFFER_SIZE) для установки. • Возможности «Линукс kernel printk buffer поддержка» (FEATURE_KMSG_SYSLOG) соответствует -K Возможность вывода логов в Linux Ядро изпринтк buffer середина, доступно через dmesg Прочтите это. • Некоторые оставшиеся варианты: -O Используется для указания файла, в который следует напрямую выводить журнал -S; Используется для оптимизации сообщений журнала и удаления имени хоста, объекта и уровня. и другое содержимое, сохраняются только метка времени, имя процесса и содержимое сообщения.

**Уведомление:** Текущая версия issyslogd средний-f 、-C 、-O Соответствующие функции нескольких опций конфликтуют и не могут использоваться одновременно. Соответствующая часть кода выглядит следующим образом (находится в busybox/sysklogd/syslogd.c). изtimestamp_and_log функция):

Язык кода:javascript
копировать
/* Log message locally (to file or shared mem) */
#if ENABLE_FEATURE_SYSLOGD_CFG
    {
        bool match = 0;
        logRule_t *rule;
        uint8_t facility = LOG_FAC(pri);
        uint8_t prio_bit = 1 << LOG_PRI(pri);
        for (rule = G.log_rules; rule; rule = rule->next) {
          if (rule->enabled_facility_priomap[facility] & prio_bit) {
            log_locally(now, G.printbuf, rule->file);
            match = 1;
        }
    }
    if (match)
    	return;
    }
#endif
	if (LOG_PRI(pri) < G.logLevel) {
#if ENABLE_FEATURE_IPC_SYSLOG
        if ((option_mask32 & OPT_circularlog) && G.shbuf) {
            log_to_shmem(G.printbuf);
            return;
        }
#endif
    	log_locally(now, G.printbuf, &G.logFile);
    }

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

в область общей памяти (соответствует макросу ENABLE_FEATURE_IPC_SYSLOG ) или напрямую в файл (последнее предложение из log_locally(now, G.printbuf, &G.logFile) )из кода.

2.2.2 syslog.conf
2.2.2.1 Формат syslog.conf

Файл syslog.conf записывает поведение журнала программы syslogd. Программа запрашивает файл конфигурации при запуске.

Если файл конфигурации не изменен, по умолчанию он будет записан в /var/log/messages середина.

Файл состоит из отдельных записей для разных программ и категорий сообщений, каждая по одной строке. Для каждого типа сообщения предусмотрено поле выбора и поле действия. Эти поля разделены вкладками: выберите поля для указания типа сообщения и приоритета перемещения;

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

Более высокий приоритет сообщений. Таким образом, если указано «крит», все сообщения, помеченные как «крит», «алерт» и «выход из», будут записаны. Поле действия каждой строки указывает, куда должно быть отправлено данное сообщение после того, как оно было выбрано в поле выбора.

Сын.

Как показано ниже:

тип.уровень; тип.уровень[TAB] действие

2.2.2.2 Тип объекта:

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

Язык кода:javascript
копировать
auth Система аутентификации, т.е. запрос имени пользователя и пароля
cron система Система синхронизации отправляет сообщения при выполнении запланированной задачи
daemon Некоторые демоны системы изsyslog, например излог, созданный in.ftpd.
kern Информация из системного журнала ядра
lpr Информация системного журнала принтера
mail Почтовая системаизsyslogинформация
mark Программа отправки сообщений по расписанию и отметки времени
news Новости системыиз системного журнала
user Локальное пользовательское приложение из информации системного журнала
uucp uucpребеноксистемаизsyslogинформация
local0..7 Локальный тип информации системного журнала, который может быть определен пользователем.
\* Обозначает различное оборудование, указанное выше.
2.2.2.3 Приоритет уровня:

«Уровень» в зарезервированном поле отражает важность информации, которая может быть:

Язык кода:javascript
копировать
emerg Чрезвычайная ситуация, состояние паники. Обычно это должно быть передано всем пользователям;
alert Тревога, текущий статус должен быть немедленно исправлен. Например, происходит сбой базы данных системы;
crit Критический статус из-за предупреждения. Например, аппаратный сбой;
err Другие ошибки;
warning предупреждать;
notice Примечание. Сообщается о состоянии отсутствия ошибок, но его следует обрабатывать особым образом;
info сообщить информацию;
debug Информация при отладке программы;
none Обычно используемая при отладке программы инструкция без уровня и типа генерирует информацию, не отправляя ее. Например, *.debug;mail.none означает, за исключением случаев отладки.
Вся информация, кроме информации по электронной почте, отправляется.
2.2.2.4 Действие:

В поле «действие» указывается пункт назначения, которому отправляется сообщение. Может быть:

Язык кода:javascript
копировать
/filename файл журнала. Имя файла указывается по абсолютному пути. Этот файл должен быть создан заранее;
@host удаленный хост; За символом @ может следовать IP-адрес или имя домена. По умолчанию псевдоним loghost уже указан в файле /etc/hosts.
Он закреплен за этой машиной.
user1,user2 Укажите пользователя. Если указанный пользователь вошел в систему, он получит сообщение;

* Все пользователи. Все вошедшие в систему пользователи получат сообщение.
2.2.2.5 Конкретные примеры:

Давайте посмотрим на /etc/syslog.conf. документсерединаиз Пример:

Язык кода:javascript
копировать
……
*.err;kern.debug;daemon.notice;mail.crit [TAB] /var/adm/messages
……

В этой строке «действие» Это /var/adm/messages, который нас часто волнует. файл, источником вывода информации в него "селектор" является: • *.err - Все общие сообщения об ошибках; • kern.debug - Ядро генерирует отладочную информацию; • daemon.notice - демониз Внимание информация; • mail.crit - Почтовая системакритической предупреждающей информации

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

Язык кода:javascript
копировать
#Log all the mail messages in one place
mail.* /var/log/maillog

Другие устройства также имеют свои собственные журналы. УУКП и новости Устройства могут генерировать множество внешних сообщений. Он сохраняет эти сообщения в свой собственный журнал (/var/log/spooler) и ограничивает уровень до «ошибка». или выше. Например:

Язык кода:javascript
копировать
# Save mail and news errors of level err and higher in aspecial file.

uucp,news.crit /var/log/spooler

Когда приходит срочное сообщение, вы можете захотеть, чтобы все пользователи получили его. Вы также можете получить и сохранить свои собственные журналы.

Язык кода:javascript
копировать
#Everybody gets emergency messages, plus log them on anther machine
*.emerg *
*.emerg @linuxaid.com.cn

alert Сообщения должны писаться под root и тигр из В личном кабинете:

Язык кода:javascript
копировать
#Root and Tiger get alert and higher messages
*.alert root,tiger

иногда системный журнал Будет создано большое количество сообщений. Например, ядро("керн" устройство) может быть длительным. Пользователи могут захотеть регистрировать сообщения ядра в /dev/console. середина. В следующем примере показано, что ведение журнала ядра закомментировано:

Язык кода:javascript
копировать
#Log all kernel messages to the console
#Logging much else clutters up the screen
#kern.* /dev/console

Пользователь может указать все устройства в одной строке. В следующем примере информация помещается или Сообщения более высокого уровня отправляются в /var/log/messages, кроме почты. снаружи. Уровень «нет» Чтобы заблокировать устройство:

Язык кода:javascript
копировать
#Log anything(except mail)of level info or higher
#Don't log private authentication messages!
*.info:mail.none;authpriv.none /var/log/messages

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

Журналы обслуживания особенно уязвимы для атак на сервер, поэтому обратите на них особое внимание. Имеется небольшой регистратор команд. Предоставляет оболочку для файлов системного журнала syslog(3). специалисты по созданию файлов журналов.

Средний вход. Использование: регистратор Например: логгер This is a test! Он создаст системный журнал следующим образом Рекорд: Ян 1 00:08:49 TinaLinux user.notice root: this is a test!

2.2.3 klogd

busybox изsyslogd Информацию журнала ядра невозможно получить напрямую. Для этой функции требуется klogd. выполнить. Запустите klogd после запуска syslogd Вот и все.

klogd Есть два способа получить журнал ядра: 1) через klogctl() Интерфейс 2) через /прок или узел устройства. Какой метод выбрать, можно определить через менюconfig серединаiz"Использовать the klogctl()

интерфейс» (FEATURE_KLOGD_KLOGCTL), который нужно установить.

klogd После получения журнала ядра используйте системный журнал Функция отправляет журналы в системный журнал демон。

Уведомление:

Хотя клогд заключается в использовании openlog("kernel", 0, LOG_KERN) , но судя по комментариям в исходниках, в glibc Средний LOG_KERN Можно заменить на LOG_USER , поэтому при использовании klogd Нужен в процессе

Уведомление,журнал ядраизfacility Это может быть пользователь вместо керна.

2.2.4 logread

busybox чтение журнала для использования из syslogd Общая память кольцевая buffer Прочитать информацию журнала в для этого требуется системный журнал Запустить с помощью -C[size_kb] параметры, И вам необходимо отключить функцию файла конфигурации поддержки (FEATURE_SYSLOGD_CFG).

2.3 syslog-ng

syslog-ng это системный журнал демониз Еще одна реализация, которая сама по себе не зависит от ubox илиbusybox,Это независимое прикладное программное обеспечение. Он поддерживает более богатые элементы конфигурации.,Журналы можно сделать более гибкими

из обработки.

syslog-ng из Конфигурационный файл /etc/syslog-ng.conf , Подробную информацию о синтаксисе можно найти в официальном документе https://www.syslog-ng.com/technical-documents/list/syslog-ng-open-source-edition. , ниже приведен пример конфигурации:

Язык кода:javascript
копировать
@version:3.9
options {
    chain_hostnames(no);
    create_dirs(yes);
    flush_lines(0);
    keep_hostname(yes);
    log_fifo_size(256);
    log_msg_size(1024);
    stats_freq(0);
    flush_lines(0);
    use_fqdn(no);
    time_reopen(1); # Сколько секунд ждать перед восстановлением соединения после отключения (по умолчанию 60 Второй)
    keep_timestamp(no); # Если информация журнала не сохраняется и имеет собственную временную метку, используйте syslog-ng. Получите журнал времени в виде метки времени
};
# Определите шаблон, вы можете использовать шаблон Обработка содержимого каждой части журнала
# Здесь используется шаблон из журнала будет отображаться только временная метка, заголовок журнала (название программы и т. д.) и информация тела.
# По сравнению с информацией журнала по умолчанию имя хоста будет отсутствовать.
template t_without_hostname {
    template("${DATE} ${MSGHDR}${MESSAGE}\n");
};
# Определите источник журнала, то есть откуда брать журнал
# Здесь имеется в виду из syslog-ng Внутренне и через Unix Датаграммный сокет из /dev/log Получить журнал
source src {
    internal();
    unix-dgram("/dev/log");
};
# из /proc/kmsg Получите логин ядра
source kernel {
	file("/proc/kmsg" program_override("kernel"));
};
# Определите место назначения журнала, то есть куда отправить журнал.
# Это означает вывод журнала в файл /var/log/messages и использование только что определенного шаблона. Удалить имя хоста
destination messages {
file("/var/log/messages" template(t_without_hostname));
};
# Выведите журнал на консоль и используйте только что определенный шаблон. Удалить имя хоста
destination console {
	file("/dev/console" template(t_without_hostname));
};
# Определить журнал, используемый для определения источников из В какие места отправляются логи?
log {
    source(src);
    source(kernel);
    destination(messages);
    destination(console);
};

Непосредственно выполните команду syslog-ng Вы можете запустить syslog-ng. Ниже приведена процедура. скрипт автозапускаизпримерребенок:

Язык кода:javascript
копировать
#!/bin/sh /etc/rc.common
# Copyright (C) 2006-2016 OpenWrt.org
START=50
STOP=99
USE_PROCD=1
start_service() {
    [ -f /etc/syslog-ng.conf ] || return 1
    procd_open_instance
    procd_set_param command /usr/sbin/syslog-ng
    procd_close_instance
}
stop_service() {
	/usr/sbin/syslog-ng-ctl stop
}
reload_service() {
    stop
    start
}

syslog-ng Не имеет вращения из функции, не может ограничить размер файла журнала, обычно через logrotate Или напишите свой собственный сценарий для его реализации.

2.4 logrotate

Инструмент logrotate поддерживает такие функции, как сжатие файлов журналов и перенос их в другие файлы журналов.

Используйте логротат Вам необходимо добавить путь к файлу конфигурации, например logrotate /etc/logrotate.conf , файл конфигурации с синтаксисом может быть

Ссылка https://jlk.fjfi.cvut.cz/arch/manpages/man/logrotate.8.

Обычно вы можете использовать include в файле конфигурации Команда включает все файлы конфигурации по определенному пути, например /etc/logrotate.conf. Добавьте предложение, включите /etc/logrotate.d Может быть упакован

Содержит /etc/logrotate.d Оглавление Внизиз Конфигурационный файл,Тогда в разделе «Оглавление» файлы конфигурации можно будет различать по разным приложениям и разным файлам журналов.,Удобная развязка.

Ниже приведен пример индивидуальной конфигурации для определенного файла журнала:

Язык кода:javascript
копировать
# Для файла из/var/log/messages Из конфигурации элементы конфигурации в фигурных скобках могут переопределить глобальную конфигурацию.
/var/log/messages {
    hourly # Передача выполняется каждый час (измеренный период передачи составляет менее одного часа и может быть успешно запущен.
    # Но если установлено ежедневно, еженедельно Похоже, что выполнение завершится неудачно, если период передачи слишком короткий)
    size 2M # Размер файла превышает 2M Будет перенесен, когда
    rotate 9 # сохранить 9 файлы журнала исторического дампа
    olddir /data # Сброшенные файлы журнала истории будут сохранены в /data. Оглавление Вниз    createolddir # Если исторический файл журнала из целевого Оглавления не существует, он будет создан автоматически.
    compress # Сжимать файлы исторических журналов (по умолчанию используется gzip)
    copytruncate # При переносе сделайте копию исходного файла журнала, затем обрежьте ее, а затем перенесите файлы после копирования;
    # Вместо перемещения исходного файла журнала непосредственно по целевому пути, чтобы избежать исходного файла журнала изinode. происходят изменения.
}

Что следует отметить:

  1. Конфигурационный файлиз Разрешения должны быть0644 или 0444 , в противном случае logrotate При выполнении будет сообщено о следующей ошибке:
Язык кода:javascript
копировать
error: Ignoring XXX because of bad file mode - must be 0644 or 0444.
  1. logrotate Это приложение закрывается после одного выполнения. Оно не является демоном и требует помощи другого демона (например, crond). ) выполняются регулярно. Ниже приведен файл /etc/crontabs/root. из Пример, пусть root Каждые 3 пользователя Выполнять logrotate раз в минуту :
Язык кода:javascript
копировать
*/3 * * * * /usr/sbin/logrotate /etc/logrotate.conf
  1. В целом Необходимо настроить как copytruncate, если в данный момент не используется issyslog демон поддерживает повторное открытие файлов журналов из функции (например, busybox изsyslogd Файл журнала будет открываться заново каждую секунду), в противном случае по умолчанию будет использоваться logrotate. выполнить поворот Исходный файл журнала будет переименован напрямую, и при этом будет создан пустой файл с тем же именем, что и исходный файл журнала, хотя файл журнала имеет то же имя — индексный дескриптор. другое, а системный журнал демон по-прежнему продолжает работать с исходным исходным узлом, в результате чего последующие журналы записываются неправильно.
  2. Настроено как copytruncate Необходимо обеспечить вращение В настоящее время оставшееся свободное пространство превышает исходный размер файла журнала. потому что копироватьобрезать Вам нужно сначала сделать копию файла журнала, а затем выполнить его. поворот, если оставшегося места недостаточно и операция копирования не удалась, последующий полный поворот Процесс также не может быть завершен.

2.5 logger

logger используется в оболочке От среднего до системного журнала демон отправляет сообщения, использование похоже на echo Заказ:

Язык кода:javascript
копировать
logger "foobar"

3 Сравнение различных решений системного журнала

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

3.1 ubox logd + logread

преимущество: • OpenWrt Он поставляется изначально и может использоваться с небольшой настройкой. • Поставляется со сбором журнала ядра и простым поворотом Функция. • отличается от busybox чтение журнала ,ubox чтение журнала Поддерживает запись логов в файлы и с кольца одновременно. buffer Прочитайте лог в из Функции.

недостаток: • Зависит от проца с Убусом . (Не проверялось, можно ли использовать его без этих двух) • rotate Функция поддерживает только передачу файлов журналов на тот же Оглавление Вниз,И сохраните только один исторический файл,Нет функции сжатия (не найдено никаких элементов конфигурации для выполнения соответствующих настроек).

3.2 busybox syslogd + klogd

преимущество: • syslogd Поставляется с поворотом Функция Перед записью каждого журнала в файл сначала проверяется, превысил ли размер файла установленный предел ценить. действовать. Поскольку проверка размера файла выполняется при записи журнала, а не через определенный интервал времени, это может быть гарантировано. поворот Файл журнала не будет сильно превышать верхний предел цен. А потому что запись логов и ротация Это реализовано в том же процессе. Вы можете напрямую переименовать файл журнала при его передаче. Нет необходимости создавать еще одну копию. Ограничение на оставшееся доступное пространство logrotate отсутствует. изcopytruncate Такой большой.

• syslogd Обеспечит повторное открытие файла журнала каждую секунду, не нужно беспокоиться о файле inode. Изменять,Файлы журналов могут быть удалены по желанию при очистке журналов.,Новый файл журнала может продолжать записываться в журнал в обычном режиме в следующую секунду.

недостаток:

• syslogd Он не содержит функции получения логов ядра и требует дополнительного запуска klogd. Приходите поддержать. • syslogd Пользовательский префикс и поворот не поддерживаются. Доступна функция временного сжатия, файлы журналов можно переносить только в один и тот же файл, а целевой путь нельзя настроить. • Запишите журнал в файл и не можете использовать logread. 。

3.3 syslog-ng + logrotate

преимущество: • syslog-ng Его собственная функция относительно мощная, она может более гибко изменять и фильтровать журналы, а также имеет возможность получать журналы ядра. • logrotate Можно добиться большей гибкости при повороте Такие функции, как настраиваемые целевые пути, сжатые файлы журналов и т. д.

недостаток: • syslog-ng Он не может контролировать размер файла сам по себе и не может уведомить logrotate. Чтобы выполнить вращение, вы можете полагаться только на crond Подождите, пока демон будет периодически выполнять logrotate , вам необходимо сбалансировать скорость роста логов и регулярный интервал проверки, иначе пространство хранения может быть заполнено логами. • Лог-файл изinode нельзя изменить произвольно, иначе syslog-ng Лог может быть записан неправильно. поэтому: • logrotate Необходимо настроить как copytruncate , в ротации «Копировать файл» существует Этот процесс имеет определенные требования к оставшемуся пространству для хранения, в противном случае его следует повернуть. Процесс потерпит неудачу. • При очистке содержимого файла журнала вручную вы не можете удалить файл журнала напрямую. Вам необходимо использовать что-то похожее на следующий заказ:

Язык кода:javascript
копировать
echo > /var/log/messages

4 Еще несколько вещей, на которые стоит обратить внимание

4.1 Доменные сокеты Unix надежны

syslog Это зависит от Unix Сокет домена реализует IPC (межпроцессный Связь, межпроцессное взаимодействие), семейство протоколов — AF_LOCAL. (илиAF_UNIX ),независимо от розеткииз Тип — поток байтов

(SOCK_STREAM ) или датаграмма (SOCK_DGRAM), оба варианта надежны при использовании Unix. Процесс связи сокета домена середина, если операция чтения заблокирована и буфер заполнен, операция записи также блокируется

Это заблокирует, и никакие данные не будут удалены в процессе.

Поэтому, когда системный журнал Когда демон по какой-либо причине блокируется и время работы увеличивается, если буфер в это время заполнен, это может повлиять на вызов системного журнала. Функциональность приложения из-за производительности. Приложения предназначены

Необходимо учитывать системный журнал На функцию могут повлиять другие факторы, и ее нельзя использовать без ограничений. системный журнал функция печатает, нельзя предполагать, что она всегда будет выполняться быстро.

О буферах,Это должно быть связано с настройками сокета ядра. Для Unix /proc/sys/net/unix/max_dgram_qlen влияет на размер буфера.,Но конкретно

Механизм неясен. Его значение по умолчанию — 10, вы можете использовать sysctl. Внесите изменения:

Язык кода:javascript
копировать
sysctl -w net.unix.max_dgram_qlen=XX

5 Использование системного журнала в Tina

5.1 журнал и чтение журнала ubox

Программа «Обычно» procd init из программы выберет эти два инструмента по умолчанию.

logd от PACKAGE_logd предоставлено, конфигурация меню серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Base system --->
    	<*> logd

Рисунок 5-1: Схема конфигурации журнала

logread Автор: PACKAGE_ubox предоставлено, конфигурация меню серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Base system --->
    	<*> ubox

Рисунок 5-2: Схема конфигурации ubox

Они относятся к загрузочному сценарию /etc/init.d/log. от PACKAGE_logd Предоставленные элементы конфигурации расположены в файле /etc/config/system; середина, по умолчанию PACKAGE_base-files поставлять,Если вы хотите изменить конфигурацию по умолчанию,Можно найти в

target/allwinner/<Название плана>/base-files/etc/config/ Поместите пользовательскую изсистему в раздел Оглавление. чтобы перезаписать файл по умолчанию.

5.2 syslogd, klogd и чтение журнала busybox

busybox изsyslog Инструменты в меню конфигурации серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Base system --->
        busybox --->
            System Logging Utilities --->
                [*] klogd
                *** klogd should not be used together with syslog to kernel printk buffer ***
                [*] Use the klogctl() interface
                [*] logger
                [*] logread
                [*] Double buffering
                [*] syslogd
                [*] Rotate message files
                [ ] Remote Log support
                [*] Support -D (drop dups) option
                [*] Support syslog.conf
                (256) Read buffer size in bytes
                [*] Circular Buffer support
                (4) Circular buffer size in Kbytes (minimum 4KB)
                [*] Linux kernel printk buffer support

Соответствующие элементы конфигурации см. в предыдущей главе.

busybox изsyslog В комплект поставки инструмента не входит сценарий запуска. Если вы хотите запустить его автоматически, вам необходимо написать его самостоятельно. в rc.final Добавьте автозапуск при загрузке, как показано ниже:

Язык кода:javascript
копировать
#Подключить SD-карту
mount /dev/mmcblk0p1 /mnt/sdcard/
mkdir /mnt/sdcard/log
#Включите функцию поворота, размер каждого журнала — 4M, а максимальное количество записей — 10.
syslogd -s 4096 -b 10 &
sleep 1
#Запись ядраизлога одновременно
klogd &

Создайте /etc/syslog.conf. файл,журнал Запись файлов на SD Карта середина, содержание следующее:

Язык кода:javascript
копировать
*.* /mnt/sdcard/log/message

5.3 syslog-ng

syslog-ng в меню конфигурации серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Administration --->
    	<*> syslog-ng

Рисунок 5-3: Схема конфигурации syslog-ng

Он поставляется с процедурой Сценарий запуска (будет автоматически скопирован на небольшой компьютер) и пример файла конфигурации (не будет автоматически скопирован на маленький компьютер). Оба находятся в package/admin/syslog-ng/files. Оглавление

Вниз.Можете обратиться к примеру файла конфигурации syslog-ng.conf_example. Настройте копию syslog-ng.conf Поместите это на маленький компьютер из/etc Оглавление Вниз.

5.4 logrotate

logrotate в меню конфигурации серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Utilities --->
    	<*> logrotate

Рисунок 5-4: Схема конфигурации logrotate

Он поставляется с файлом конфигурации logrotate.conf. , находится в package/utils/logrotate/files Оглавление, оно будет автоматически скопировано на маленький компьютер из/etc Оглавление Вниз.

Файл конфигурации содержит некоторые глобальные элементы конфигурации.,И будет включать /etc/logrotate.d, поэтому пользовательскую конфигурацию можно разместить на маленькой машине в /etc/logrotate.d В разделе Оглавление выполните logrotate.

Язык кода:javascript
копировать
*.* /mnt/sdcard/log/message

5.3 syslog-ng

syslog-ng в меню конфигурации серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Administration --->
    	<*> syslog-ng

[Изображения по внешней ссылке передаются...(img-Ht2yt40X-1677205584554)]

Рисунок 5-3: Схема конфигурации syslog-ng

Он поставляется с процедурой Сценарий запуска (будет автоматически скопирован на небольшой компьютер) и пример файла конфигурации (не будет автоматически скопирован на маленький компьютер). Оба находятся в package/admin/syslog-ng/files. Оглавление

Вниз.Можете обратиться к примеру файла конфигурации syslog-ng.conf_example. Настройте копию syslog-ng.conf Поместите это на маленький компьютер из/etc Оглавление Вниз.

5.4 logrotate

logrotate в меню конфигурации серединаиз Местоположение:

Язык кода:javascript
копировать
make menuconfig --->
    Utilities --->
    	<*> logrotate

[Изображения по внешней ссылке передаются...(img-QeB1vkWK-1677205584555)]

Рисунок 5-4: Схема конфигурации logrotate

Он поставляется с файлом конфигурации logrotate.conf. , находится в package/utils/logrotate/files Оглавление, оно будет автоматически скопировано на маленький компьютер из/etc Оглавление Вниз.

Файл конфигурации содержит некоторые глобальные элементы конфигурации.,И будет включать /etc/logrotate.d, поэтому пользовательскую конфигурацию можно разместить на маленькой машине в /etc/logrotate.d В разделе Оглавление выполните logrotate.

/etc/logrotate.conf будет вызван автоматически (обратите внимание, что разрешение файла должно быть 0644 или 0444 )。

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода