Инструменты пользователя

Инструменты сайта


linux:overall:logs

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слева Предыдущая версия
Следующая версия
Предыдущая версия
linux:overall:logs [2022/07/29 03:46]
admin
linux:overall:logs [2023/05/22 08:04] (текущий)
admin
Строка 17: Строка 17:
   * **-p** - приоритет.   * **-p** - приоритет.
      
-   
-====Горячие клавиши====   
-  * **Пробел (b)** - на одну страницу вниз (вверх). 
-  * **g (G)** - первая (последняя) строка. 
-  * **/ (n, N)** - поиск (следующее, предыдущее вхождение).  
- 
- 
- 
 ==== Управление файлами ==== ==== Управление файлами ====
 Задается максимальное доступное место на диске, по достижении, сообщения удаляются с конца.\\ Задается максимальное доступное место на диске, по достижении, сообщения удаляются с конца.\\
 Задается в параметрах **SystemMaxUse=** и **RuntimeMaxUse=** в файле **/etc/systemd/journal.conf**. Задается в параметрах **SystemMaxUse=** и **RuntimeMaxUse=** в файле **/etc/systemd/journal.conf**.
  
 +
 +<details>
 +<summary> :!: Последняя загрузка системы/перезапуск </summary>
 +Перезагрузка считается инициированной входом в нее псевдопользователя "reboot"\\
 +<code bash>
 +  # Врмя последней загрузки
 +who -b 
 +
 +  # История логинов
 +last [имя пользователя]
 +
 +  # Так к вопросу о перезагрузке
 +last -x | head | tac
 +или 
 +last reboot
 +
 +  # (подвопросом) Список зарегистрированных загрузок системы
 +journalctl --list-boots
 +  # более подробная инфа
 +journalctl -b {num} -n 
 +</code>
 +</details>
  
  
 ===== Rsyslog ===== ===== Rsyslog =====
 [[https://www.rsyslog.com/|Оф сайт]]\\ [[https://www.rsyslog.com/|Оф сайт]]\\
 +[[https://rsyslog.readthedocs.io/en/latest/configuration/modules/index.html|Тут тоже неплохая дока]]
 [[https://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/|Rsyslog на Debian, настройка сервера сбора логов]]\\ [[https://www.k-max.name/linux/rsyslog-na-debian-nastrojka-servera/|Rsyslog на Debian, настройка сервера сбора логов]]\\
 [[https://selivan.github.io/2017/02/07/rsyslog-log-forward-save-filename-handle-multi-line-failover.html|Конфигурация Rsyslog]]\\ [[https://selivan.github.io/2017/02/07/rsyslog-log-forward-save-filename-handle-multi-line-failover.html|Конфигурация Rsyslog]]\\
Строка 91: Строка 106:
 :programname, contains, "MyProgram"   /var/log/MyProgram.log :programname, contains, "MyProgram"   /var/log/MyProgram.log
 </code> </code>
 +</details>
  
  
 +Для вывода сообщений можно использовать **шаблон**, задается директивой ([[http://devel.aanet.ru/rsyslog-v5/rsyslog_conf_templates.html|Тут есть описание]])
 +  * Старый формат - $template DynFile,"/var/log/system-%HOSTNAME%.log"
 +  * Новый формат - template(name="myMsg" type="string" string="\n%msg%\n") - **Не работает внутри If'a**
 +
 +
 +<details>
 +<summary> :!: Имена файлов </summary>
 +
 +Вариант чтения всех файлов по маске и сохранения оригинального имени на выходе
 +<code bash>
 +input(type="imfile" File="/srv/myapp/logs/*.log" Tag="myapp__" Ruleset="myapp_logs" addMetadata="on")
 +
 +ruleset(name="myapp_logs") {
 +    set $.suffix=re_extract($!metadata!filename, "(.*)/([^/]*)", 0, 2, "all.log");
 +    # Либо можно функцией field()
 +    #set $.originfilename=field($!metadata!filename, 47, 7);
 +    call sendToLogserver
 +}
 +</code>
 +
 +Динамические имена файлов на выходе
 +<code bash>
 +# Легаси подход
 +$template DynFile, "/var/log/test/test-%syslogtag%.log"
 +*.* ?DynFile;myTemlpate
 +
 +# Новый подход
 +template (name="DynFile" type="string" string="/var/log/test/test-%syslogtag%.log")
 +action(type = "omfile" dynaFile="DynFile"  template="myTemlpate")
 +</code>
 </details> </details>
  
  
 +<details>
 +<summary> :!: Еще пример </summary>
 +
 +Сервер
 +<code bash>
 +$MaxMessageSize 64k
 +module(load = "imfile"  mode="inotify")
 +module(load = "omrelp")
 +
 +# Вход из файлов, отмечаем его тегами
 +input(type="imfile" File="/fold/BIN/Import/*/log/*.log" Tag="SendImport")
 +input(type="imfile" File="/fold/BIN/ErrImport/*/log/*.log" Tag="SendErrImport")
 +
 +# Из метаданных файла берем имя файла и название папки оно же название импорта
 +set $.filename=field($!metadata!filename, 47, 7);
 +set $.importname=field($!metadata!filename, 47, 5);
 +
 +# Формат выходного сообщения. К sysтегу добавляем имя импорта и имя папки
 +template(name="outFormatMessage" type="string" string="<%PRI%>%TIMESTAMP% %HOSTNAME% %syslogtag%%$.importname%__%$.filen$
 +
 +# Отправляем по сети
 +if ($syslogtag == 'SendImport') then {
 +        action(type="omrelp" Target="10.0.0.0" Port="20514" Template="outFormatMessage")
 +        stop
 +}
 +
 +if ($syslogtag == 'SendErrImport') then {
 +        action(type="omrelp" Target="10.0.0.0" Port="20515" Template="outFormatMessage")
 +        stop
 +}
 +
 +</code>
 +
 +Клиент
 +<code bash>
 +$MaxMessageSize 64k
 +module(load="imrelp")
 +input(type="imrelp" port="20514" ruleset="MImport")
 +input(type="imrelp" port="20515" ruleset="MErrImport")
 +
 +# Формат выходного сообщения
 +template(name="outFormatMessage" type="string" string="%msg%\n")
 +
 +# Динамическое имя файла
 +template(name="ImportFileName" type="string" string="/fold/ImportLogs/Import/%$.ffilename%")
 +template(name="ErrImportFileName" type="string" string="/fold/ImportLogs/ErrImport/%$.ffilename%")
 +
 +ruleset(name="MImport") {
 +        # Извлекаем из переданных данных имя файла и сервиса
 +        set $.ffilename = replace($programname, "__", "/");
 +        set $.ffilename = replace($.ffilename, "SendImport", "");
 +
 +        # Сохраняем в файл
 +        action(type ="omfile" dynaFile="ImportFileName" template="outFormatMessage"
 +                fileOwner="AppServer" fileGroup="AppServer" dirOwner="AppServer" dirGroup="AppServer"
 +                dirCreateMode="0775" FileCreateMode="0664")
 +}
 +
 +ruleset(name="MErrImport") {
 +        # Извлекаем из переданных данных имя файла и сервиса
 +        set $.ffilename = replace($programname, "__", "/");
 +        set $.ffilename = replace($.ffilename, "SendErrImport", "");
 +
 +        # Сохраняем в файл
 +        action(type ="omfile" dynaFile="ErrImportFileName" template="outFormatMessage"
 +                fileOwner="AppServer" fileGroup="AppServer" dirOwner="AppServer" dirGroup="AppServer"
 +                dirCreateMode="0775" FileCreateMode="0664")
 +}
 +</code>
 +</details>
  
  
Строка 102: Строка 218:
 ===== Ротация файлов. Logrotate ===== ===== Ротация файлов. Logrotate =====
 [[https://www.opennet.ru/man.shtml?topic=logrotate&category=8&russian=0|Есть описание параметров]]\\ [[https://www.opennet.ru/man.shtml?topic=logrotate&category=8&russian=0|Есть описание параметров]]\\
 +[[https://mnorin.com/logrotate-nastrojka-rotatsii-logov.html|Гораздо более полный перечень параметров]]\\
 +
  
 Утилита **Logrotate**, основная конфигурация **/etc/logrotate.conf**, в папке **/etc/logrotate.d/** отдельные конфиги\\ Утилита **Logrotate**, основная конфигурация **/etc/logrotate.conf**, в папке **/etc/logrotate.d/** отдельные конфиги\\
Строка 108: Строка 226:
 Без порядковых номеров ротация перестает работать\\ Без порядковых номеров ротация перестает работать\\
  
-Поэтому **часовой интервал игнорируется**, для меньшего интервала нужно создать отдельный конфиг (в другом месте для того чтобы не пересекаться с ежедневным), смысл в том чтобы запускать ее через крон самостоятельно, для этого настроим задачу:\\+Основной конфиг запускается раз в день, поэтому **часовой интервал игнорируется**, для часа можно поместить в **/etc/cron.hourly/**, для меньшего интервала нужно создать отдельный конфиг (в другом месте для того чтобы не пересекаться с ежедневным), смысл в том чтобы запускать ее через крон самостоятельно, для этого настроим задачу:\\ 
 <code bash> <code bash>
   # Создали файл конфига   # Создали файл конфига
Строка 114: Строка 233:
  
   # Запускаем вручную (-d для тестирования)   # Запускаем вручную (-d для тестирования)
-logrotate /home/sammy/logrotate.conf+logrotate /home/sammy/logrotate.conf [--verbose --force]
  
   # Добавляем в крон   # Добавляем в крон
 "15 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf" "15 * * * * /usr/sbin/logrotate /home/sammy/logrotate.conf"
 </code> </code>
 +
  
 Ротировать можно как регулярно (**по времени**) так и **по размеру** файла\\ Ротировать можно как регулярно (**по времени**) так и **по размеру** файла\\
 Можно выполнять скрипты до и после ротации\\ Можно выполнять скрипты до и после ротации\\
 +
 +Параметры:\\
 +  * **hourly/daily/weekly/monthly** - периоды
 +  * **rotate 3** - хранить 3 последних файла
 +  * **size** - планка размера для ротирования (size 100, size 100k, и size 100M)
 +  * **compress** - сжимать
 +  * **delaycompress** - кроме последнего и предпоследнего
 +  * **dateext** - к имени архивного файла добавляется дата ротации в формате (%Y%m%d) вместо номера
 +  * **copytruncate** - ротируется копия, оригинал урезается
 +  * **create** - ротируется оригинал, рабочий создается новый
  
  
Строка 129: Строка 259:
 /var/log/messages # файл для работы, можно указать маску /var/log/messages # файл для работы, можно указать маску
 { {
-daily  +  daily  
-rotate 3 # хранить 3 последних файла +  rotate 3 # хранить 3 последних файла 
-size 10M # при условии что файл не меньше 10мб +  compress # сжимать 
-compress # сжимать +  delaycompress # кроме последнего и предпоследнего 
-delaycompress # кроме последнего и предпоследнего+  dateext # к имени архивного файла добавляется дата ротации в формате (%Y%m%d) вместо номера
 } }
 </code> </code>
  
-Для самостоятельного запуска, переименовываем файл после ротации. **Его нужно перемещать** создавать копию, без номеров ротация перестает работать\\+ 
 +Если переименовываем файл после ротации. **Его нужно перемещать** создавать копию, без номеров ротация перестает работать\\
 <code bash> <code bash>
 /usr/zxbcps/files/zx.tar /usr/zxbcps/files/zx.tar
Строка 148: Строка 279:
 } }
 </code> </code>
- 
 </details> </details>
  
linux/overall/logs.1659066395.txt.gz · Последнее изменение: 2022/07/29 03:46 — admin