Logrotate в Linux для обработки потери данных журнала

Я не знаю, правильно ли понял scond часть вашего запроса:

Один столбец a [кг / м] в формат двух столбцов a [кг / м]

Но это преобразует ваш CSV в файл, разделенный табуляцией и с дополнительным столбцом перед [кг / м]:

sed -e 's /, / \ t / g' -e 's: \ (\ [Kg / m \] \): \ t \ 1: g 'afile.csv> newfile.csv

Пример:

$ cat afile.csv
a[Kg/m],b[Kg/m],c
d[Kg/m],e[Kg/m],f
g[Kg/m],h[Kg/m],i

$ sed -e 's/,/\t/g' -e 's=\(\[Kg/m\]\)=\t\1=g' afile.csv > newfile.csv

$ cat newfile.csv
a       [Kg/m]  b       [Kg/m]  c
d       [Kg/m]  e       [Kg/m]  f
g       [Kg/m]  h       [Kg/m]  i

В этой команде sed есть два сценария:

  • -e' s /, / \ t / g ' заменяет ', ' в
  • -e' s = \ (\ [Kg / m \] \) = \ t \ 1 = g ' заменяет любой [Kg / m ] для [кг / м]

Теперь, без замены вкладок, вы можете добавить дополнительный столбец в свой CSV-файл следующим образом:

$ sed -e 's=\(\[Kg/m\]\)=,\1=g' afile.csv > newfile.csv
$ cat newfile.csv
a,[Kg/m],b,[Kg/m],c
d,[Kg/m],e,[Kg/m],f
g,[Kg/m],h,[Kg/m],i
2
07.03.2017, 15:18
3 ответа

Вы можете перейти от ведения журнала и вращения с помощью logrotate к журналу journald с помощью systemd-cat -t indentifier cmdline. Установите размеры журнала/записи в /etc/systemd/journald.conf или используйте journalctl --vacuum-size=, --vacuum-time=, --vacuum-files=

Другим способом является logrotate один раз в день, используя функцию prerotate/postrotate, чтобы остановить серверы, повернуть журнал и снова запустить серверы. Время логротации зависит от задания systemd logrotate.timer или (ana)cron, которое может быть приурочено к 4 утра или когда трафик от низкого до нуля.

prerotate
    # stop jboss/tomcat server 
endscript

daily
rotate 10
compress
size 20M

postrotate
    #start servers
endscript
0
27.01.2020, 22:19

Я знаю, что в syslog-ng вы можете установить имя выходного файла для использования переменных, включая такие вещи, как дата, так что он будет автоматически начинать запись в новый файл в 12:00 утра нового дня, с нулевыми потерями.

Правда, для этого нужно изменить вашу программу syslog на syslog-ng. Но гибкость звучит именно так, как вам нужно.

1
27.01.2020, 22:19

Вот как я это делаю для Catalinaжурналов:

/var/log/tomcat/catalina.out {
        daily
        size 100m
        compressext.gz
        compress
        delaycompress
        compressoptions "-9"
        dateformat -%Y%m%d-%s
        ifempty
        copytruncate
        prerotate
                SIZE=$(stat --printf='%s' /var/log/tomcat/catalina.out)
                /bin/bash -c "tail -c $SIZE -f /var/log/tomcat/catalina.out > /var/log/tomcat/tmp.log" &
        endscript
        postrotate
                pgrep tail | xargs kill -9
                cat /var/log/tomcat/tmp.log >> /var/log/tomcat/catalina.out
                rm /var/log/tomcat/tmp.log -f
        endscript
}

Вы можете дополнительно указать -sс tail, чтобы уменьшить интервал обновления самой команды tail. И поскольку вы используете опцию -c, это быстро.

0
27.01.2020, 22:19

Теги

Похожие вопросы