Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слева Предыдущая версия Следующая версия | Предыдущая версия | ||
linux:overall:logs [2022/07/16 04:44] admin |
linux:overall:logs [2023/05/22 08:04] (текущий) admin |
||
---|---|---|---|
Строка 17: | Строка 17: | ||
* **-p** - приоритет. | * **-p** - приоритет. | ||
| | ||
- | | ||
- | ====Горячие клавиши==== | ||
- | * **Пробел (b)** - на одну страницу вниз (вверх). | ||
- | * **g (G)** - первая (последняя) строка. | ||
- | * **/ (n, N)** - поиск (следующее, | ||
- | |||
- | |||
==== Управление файлами ==== | ==== Управление файлами ==== | ||
Задается максимальное доступное место на диске, по достижении, | Задается максимальное доступное место на диске, по достижении, | ||
Строка 29: | Строка 22: | ||
- | ===== syslogd ===== | + | < |
- | Раньше была доминирующей подсистемой, сейчас преобладает **systemd | + | < |
- | Хранит журналы в обычных файлах, в папке **/var/ | + | Перезагрузка считается |
- | Имеется | + | <code bash> |
- | Уровни приоритетов: | + | # Врмя последней загрузки |
- | * **debug** - полезно при отладке. | + | who -b |
- | | + | |
- | * **notice** - нормальное состояние. | + | # История логинов |
- | * **warn** - предупреждение. | + | last [имя пользователя] |
- | | + | |
- | * **crit** - критический уровень. | + | # Так к вопросу о перезагрузке |
- | * **alert** - требуется немедленное вмешательство. | + | last -x | head | tac |
- | * **emerg** - систему нельзя использовать. | + | или |
+ | last reboot | ||
+ | |||
+ | # (подвопросом) Список зарегистрированных загрузок системы | ||
+ | journalctl --list-boots | ||
+ | # более подробная | ||
+ | journalctl -b {num} -n | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | ===== Rsyslog ===== | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[https:// | ||
+ | [[http:// | ||
+ | |||
+ | Замена старой **syslog**, принимает и обрабатывает | ||
+ | |||
+ | Конфигурация | ||
+ | При | ||
+ | |||
+ | Формат **RainerScript** позволяет задавать С-подобные правила обработки сообщений. **Со старыми директивами** могут быть проблемы, | ||
+ | |||
+ | Обработка происходит в блоках **RuleSet**, | ||
+ | Так же, поступающие | ||
+ | |||
+ | Для остановки процесса после обработки команда | ||
+ | Некоторые | ||
+ | * omfile - вывод файла | ||
+ | * omfwd - сетевая переадресация по udp или tcp | ||
+ | * omrelp - сетевая переадресация по протоколу RELP | ||
+ | * onmysql , ompgsql , omoracle — вывод в базу данных | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | Запишите все сообщения средств auth и authpriv в файл | ||
+ | <code bash> | ||
+ | # legacy | ||
+ | auth,authpriv.* /var/log/auth.log | ||
+ | # modern | ||
+ | if ( $syslogfacility-text == " | ||
+ | action(type=" | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | Записать все сообщения с именем программы, начинающимся с «haproxy» в файл / | ||
+ | <code bash> | ||
+ | # legacy (note the minus sign in front of filename - it disables buffer flush) | ||
+ | : | ||
+ | & ~ | ||
+ | # modern | ||
+ | if ( $programname startswith " | ||
+ | action(type=" | ||
+ | stop | ||
+ | } | ||
+ | # we can mix legacy and modern | ||
+ | if $programname startswith " | ||
+ | &~ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Простой вариант условия | ||
+ | <code bash> | ||
+ | if $syslogtag == ' | ||
+ | |||
+ | # Либо | ||
+ | : | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | Для | ||
+ | * Старый формат - $template DynFile,"/ | ||
+ | * Новый формат - template(name=" | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | Вариант чтения всех файлов по маске и сохранения оригинального имени на выходе | ||
+ | <code bash> | ||
+ | input(type=" | ||
+ | |||
+ | ruleset(name=" | ||
+ | set $.suffix=re_extract($!metadata!filename, | ||
+ | # Либо можно функцией field() | ||
+ | #set $.originfilename=field($!metadata!filename, | ||
+ | call sendToLogserver | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Динамические имена файлов на выходе | ||
+ | <code bash> | ||
+ | # Легаси подход | ||
+ | $template DynFile, "/ | ||
+ | *.* ? | ||
+ | |||
+ | # Новый подход | ||
+ | template (name=" | ||
+ | action(type = " | ||
+ | </ | ||
+ | </ | ||
+ | |||
+ | |||
+ | < | ||
+ | < | ||
+ | |||
+ | Сервер | ||
+ | <code bash> | ||
+ | $MaxMessageSize 64k | ||
+ | module(load = " | ||
+ | module(load = " | ||
+ | |||
+ | # Вход из файлов, отмечаем его тегами | ||
+ | input(type=" | ||
+ | input(type=" | ||
+ | |||
+ | # Из метаданных файла берем имя файла и название папки оно же название импорта | ||
+ | set $.filename=field($!metadata!filename, | ||
+ | set $.importname=field($!metadata!filename, | ||
+ | |||
+ | # Формат | ||
+ | template(name=" | ||
+ | |||
+ | # Отправляем | ||
+ | if ($syslogtag == ' | ||
+ | action(type=" | ||
+ | stop | ||
+ | } | ||
+ | |||
+ | if ($syslogtag == ' | ||
+ | action(type=" | ||
+ | stop | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Клиент | ||
+ | <code bash> | ||
+ | $MaxMessageSize 64k | ||
+ | module(load=" | ||
+ | input(type=" | ||
+ | input(type=" | ||
+ | |||
+ | # Формат выходного сообщения | ||
+ | template(name=" | ||
+ | |||
+ | # Динамическое имя файла | ||
+ | template(name=" | ||
+ | template(name=" | ||
+ | |||
+ | ruleset(name=" | ||
+ | # Извлекаем из переданных данных имя файла | ||
+ | set $.ffilename = replace($programname, | ||
+ | set $.ffilename = replace($.ffilename, | ||
+ | |||
+ | # Сохраняем в файл | ||
+ | action(type =" | ||
+ | fileOwner=" | ||
+ | dirCreateMode=" | ||
+ | } | ||
+ | |||
+ | ruleset(name=" | ||
+ | # Извлекаем из переданных данных имя файла и сервиса | ||
+ | set $.ffilename = replace($programname, | ||
+ | set $.ffilename = replace($.ffilename, | ||
+ | |||
+ | # Сохраняем в файл | ||
+ | action(type =" | ||
+ | fileOwner=" | ||
+ | dirCreateMode=" | ||
+ | } | ||
+ | </ | ||
+ | </ | ||
+ | |||
===== Ротация файлов. Logrotate ===== | ===== Ротация файлов. Logrotate ===== | ||
[[https:// | [[https:// | ||
+ | [[https:// | ||
+ | |||
Утилита **Logrotate**, | Утилита **Logrotate**, | ||
Строка 52: | Строка 226: | ||
Без порядковых номеров ротация перестает работать\\ | Без порядковых номеров ротация перестает работать\\ | ||
- | Поэтому **часовой интервал игнорируется**, | + | Основной конфиг запускается раз в день, поэтому **часовой интервал игнорируется**, для часа можно поместить в **/ |
<code bash> | <code bash> | ||
# Создали файл конфига | # Создали файл конфига | ||
Строка 58: | Строка 233: | ||
# Запускаем вручную (-d для тестирования) | # Запускаем вручную (-d для тестирования) | ||
- | logrotate / | + | logrotate / |
# Добавляем в крон | # Добавляем в крон | ||
"15 * * * * / | "15 * * * * / | ||
</ | </ | ||
+ | |||
Ротировать можно как регулярно (**по времени**) так и **по размеру** файла\\ | Ротировать можно как регулярно (**по времени**) так и **по размеру** файла\\ | ||
Можно выполнять скрипты до и после ротации\\ | Можно выполнять скрипты до и после ротации\\ | ||
+ | |||
+ | Параметры: | ||
+ | * **hourly/ | ||
+ | * **rotate 3** - хранить 3 последних файла | ||
+ | * **size** - планка размера для ротирования (size 100, size 100k, и size 100M) | ||
+ | * **compress** - сжимать | ||
+ | * **delaycompress** - кроме последнего и предпоследнего | ||
+ | * **dateext** - к имени архивного файла добавляется дата ротации в формате (%Y%m%d) вместо номера | ||
+ | * **copytruncate** - ротируется копия, оригинал урезается | ||
+ | * **create** - ротируется оригинал, | ||
Строка 73: | Строка 259: | ||
/ | / | ||
{ | { | ||
- | daily | + | |
- | rotate 3 # хранить 3 последних файла | + | rotate 3 # хранить 3 последних файла |
- | size 10M # при условии что файл не меньше 10мб | + | compress # сжимать |
- | compress # сжимать | + | delaycompress # кроме последнего и предпоследнего |
- | delaycompress # кроме последнего и предпоследнего | + | dateext # к имени архивного файла добавляется дата ротации в формате (%Y%m%d) вместо номера |
} | } | ||
</ | </ | ||
- | Для | + | |
+ | Если переименовываем файл после ротации. **Его нужно перемещать** создавать копию, без номеров ротация перестает работать\\ | ||
<code bash> | <code bash> | ||
/ | / | ||
Строка 88: | Строка 275: | ||
sharedscripts # Для того чтобы скрипт выполнялся один раз | sharedscripts # Для того чтобы скрипт выполнялся один раз | ||
postrotate | postrotate | ||
- | day=$(date +%Y-%m-%d_%H: | + | mv / |
- | mv / | + | |
endscript | endscript | ||
} | } | ||
</ | </ | ||
- | |||
</ | </ | ||