Page 1 of 17 12311 ... LastLast
Results 1 to 15 of 242

Thread: Заменяем стандартный syslogd на syslog-ng

  1. #1

    Lightbulb Заменяем стандартный syslogd на syslog-ng

    Quote Originally Posted by OlegI View Post
    11) d) поскольку cron каждые 5 минут пишет в системный лог, можно настроить его очистку.
    Лог лежит в памяти роутера и через какое-то время памяти не хватит - начнут выгружаться службы.
    Нужно положить в директорию /opt/etc/cron.daily
    файл с содержимым:
    ========
    Code:
    #!/bin/sh 
    rm -rf /tmp/syslog.log.*
    ========
    Как-то неправильно удалять системные логи целиком. Как потом разбираться, если что? Предлагаю такой вариант скрипта:
    ========
    Code:
    #!/bin/sh
    
    LOGDIR=/opt/var/log
    TMPDIR=/tmp
    
    cd $LOGDIR
    
    for i in 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    do
     let e=$i-1;
     efil=syslog.log.$e.gz
     ifil=syslog.log.$i.gz
     if [ -f $efil ]; then mv $efil $ifil; fi
    done
    
    mv $TMPDIR/syslog.log.0 .
    gzip syslog.log.0
    ========
    Компрессирует и сохраняет логи за тридцать дней в /opt/var/log.
    Если хотите изменить количество дней - надо поменять числа в строке for i
    Last edited by Omega; 19-06-2011 at 02:59.

  2. #2
    Join Date
    Aug 2006
    Location
    Moscow, Russia
    Posts
    788
    Quote Originally Posted by adami View Post
    Как-то неправильно удалять системные логи целиком.
    Полностью с этим согласен
    Quote Originally Posted by adami View Post
    Предлагаю такой вариант скрипта
    Я использую немного другой подход к ротации лога

    Мой скрипт сначала очищает лог от записей cron и ntpclient, затем исходя из его размера принимает решение об архивировании. Только есть один минус. Если чегонибудь попадет в лог во время очистки то это бесследно исчезнет. В отличии от выше предложенного скрипта, в моем варианте архив не сжимается в пользу возможности удобного просмотра архива.

    Code:
    #!/bin/sh
    # logcleaner - Скрипт для очистки и архивирования лог файла
    
    # Папка, где лежит лог файл
    logdir=/tmp
    # Имя лог файла
    logfilename=syslog.log
    # Папка для архивирования
    rotatedir=/opt/var/log/rotated
    # Предельный размер лог файла в байтах
    maxlogsize=102400
    # Уровень архивирования
    rotatedepth=5
    
    logfile=$logdir/$logfilename
    [ ! -f $logfile ] && echo "Logfile not found" && exit 1
    
    grep -v "[\/ ]cron\[" $logfile > $logfile.tmp && mv -f $logfile.tmp $logfile
    grep -v " ntp client:" $logfile > $logfile.tmp && mv -f $logfile.tmp $logfile
    grep -v " Log cleaned" $logfile > $logfile.tmp && mv -f $logfile.tmp $logfile
    
    logger "Log cleaned"
    
    if [ ! -f $rotatedir ]; then if [ ! -d $rotatedir ]; then mkdir -p $rotatedir; fi; else echo "$rotatedir is a file"; exit 1; fi
    
    logsize=`ls -l $logfile | awk '{print $5}'`
    
    if [ $logsize -gt $maxlogsize ]; then
        iter=$rotatedepth; while [ $iter -gt 1 ]; do
            let itern=$iter-1
            if [ -f "$rotatedir/$logfilename.l$itern" ]; then mv -f $rotatedir/$logfilename.l$itern $rotatedir/$logfilename.l$iter; fi
            let iter=$iter-1
        done
        mv -f $logdir/$logfilename $rotatedir/$logfilename.l1
        touch $logdir/$logfilename
        logger "Log rotated. Archive logs are in $rotatedir"
    fi
    UPD

    Новая версия скрипта. Появилась возможность сжатия архива начиная с указанного уровня. Теперь параметры принимаются из командной строки.
    Code:
    #!/bin/sh
    #
    # Использование: ./wlrotate.sh [-c gz|bz2] [-d depth] [-z depthtocompress] [-p archivepath] [-s maxlogsize] filename
    #    -с gz|bz2    использовать сжатие архива методом gzip(gz) или bzip2(bz2)
    #    -d depth     уровень архивирования
    #    -z depth     минимальный уровень архива для сжатия
    #    -p path      путь к месту хранения архивов
    #    -s logsize   порог размера файла в байтах, для принятия решения об архивировании
    #
    
    while [ "$1" ]; do
            case $1 in
            -c)
                    [ "$2" ] && shift && cmp=`expr $1 : '\(gz\|bz2\)'`
                    ;;
            -d)
                    [ "$2" ] && shift && rotatedepth=`expr $1 : '\([0-9]\+\)'`
                    ;;
            -z)
                    [ "$2" ] && shift && compressdepth=`expr $1 : '\([0-9]\+\)'`
                    ;;
            -s)
                    [ "$2" ] && shift && maxlogsize=`expr $1 : '\([0-9]\+\)'`
                    ;;
            -p)
                    [ "$2" ] && shift && rotatepath=`expr $1 : '\([^:*?"<>\|]*\)'`
                    ;;
            *) 
                    logfile=`expr $1 : '\([^:*?"<>\|]*\)'`
                    ;;
            esac
            shift
    done
    
    [ -z "$logfile" ] &&
        echo "Usage: $0 [-c gz|bz2] [-d depth] [-z depthtocompress] [-p archivepath] [-s maxlogsize] filename" >&2 &&
        exit 1
    [ -z "$rotatedepth" ] && rotatedepth=10
    [ -z "$compressdepth" ] && compressdepth=1
    [ -z "$maxlogsize" ] && maxlogsize=0
    
    if [ "$cmp" = "gz" ]; then
        if ! gzip -h > /dev/null 2>&1; then
            cmp="" 
            logger -s -t "$0[$$]" "Warning: Gzip not found, continue without compression"
        fi
    fi
    
    if [ "$cmp" = "bz2" ]; then
        if ! bzip2 --help > /dev/null 2>&1; then
            cmp=""
            logger -s -t "$0[$$]" "Warning: Bzip2 not found, continue without compression"
        fi
    fi
    
    [ ! -e "$logfile" ] && logger -s -t "$0[$$]" "Error: File $logfile not found" >&2 && exit 1
    logfilename=`echo $logfile | sed 's/^.*\///'`
    [ -z "$rotatepath" ] &&
        rotatepath=`echo "$logfile" | sed 's/\([/]*[^/]*\/\)\(.*\)/\1/'` &&
        rotatepath=`expr "$rotatepath" : '\(.*\/\)'`
    [ -z "$rotatepath" ] && rotatepath="./"
    
    if [ ! -f "$rotatepath" ]; then
        if [ ! -d $rotatepath ]; then
            if ! mkdir -p $rotatepath; then
                logger -s -t "$0[$$]" "Error: Can't create directory $rotatepath" >&2
                exit 1
            fi
        fi
    else 
        logger -s -t "$0[$$]" "Error: $rotatepath is a file" >&2
        exit 1
    fi
    
    logsize=`ls -l $logfile | awk '{print $5}'`
    
    if [ $logsize -gt $maxlogsize ]; then
        iter=$rotatedepth; while [ $iter -gt 0 ]; do
            itern=`expr $iter - 1`
            if [ -f "$rotatepath/$logfilename.$itern" ]; then
                mv -f $rotatepath/$logfilename.$itern $rotatepath/$logfilename.$iter; fi
            if [ -f "$rotatepath/$logfilename.$itern.gz" ]; then
                mv -f $rotatepath/$logfilename.$itern.gz $rotatepath/$logfilename.$iter.gz; fi
            if [ -f "$rotatepath/$logfilename.$itern.bz2" ]; then
                mv -f $rotatepath/$logfilename.$itern.bz2 $rotatepath/$logfilename.$iter.bz2; fi
            iter=`expr $iter - 1`
        done
        mv -f $logfile $rotatepath/$logfilename.0
        touch $logfile
        if [ -n "$cmp" ]; then
            iter=$compressdepth; while [ "$iter" -le "$rotatedepth" ]; do
                if [ -f "$rotatepath/$logfilename.$iter" ]; then
                    if [ "$cmp" = "gz" ]; then
                        if [ ! -f "$rotatepath/$logfilename.$iter.gz" ]; then
                            gzip -S ".gz" $rotatepath/$logfilename.$iter ||
                                logger -s -t "$0[$$]" "Warning: compress archive of $logfile failed"
                        fi
                    fi
                    if [ "$cmp" = "bz2" ]; then
                        if [ ! -f "$rotatepath/$logfilename.$iter.bz2" ]; then
                            bzip2 -9 $rotatepath/$logfilename.$iter ||
                                logger -s -t "$0[$$]" "Warning: compress archive of $logfile failed"
                        fi
                    fi
                fi
                iter=`expr $iter + 1`
            done
        fi
        logger -s -t "$0[$$]" "$logfile rotated. Archive are in $rotatepath"
    fi
    Last edited by Mam(O)n; 01-06-2007 at 21:06.

  3. #3

    syslog.log

    Как сделать так, чтобы syslog.log писался на примонтированный HDD, например в /tmp/harddisk/logs/? И как снять ограничение на 1024 записи, на HDD места много...

  4. #4
    Quote Originally Posted by dizzy128 View Post
    Как сделать так, чтобы syslog.log писался на примонтированный HDD, например в /tmp/harddisk/logs/? И как снять ограничение на 1024 записи, на HDD места много...
    Для этого в файл /usr/local/sbin/post-mount
    надо добавить строки
    #Прибиваем запущенный syslogd
    if [ -n "`pidof syslogd`" ]; then
    killall syslogd 2>/dev/null
    fi
    #Перезапускаем его с новыми опциями
    /sbin/syslogd -m 0 -O /tmp/harddisk/logs/syslog.log -S -l 7

    Вот тут есть описание его опций
    http://www.busybox.net/downloads/BusyBox.html

    Про ограничение в 1024 записи не слышал, там указано ограничение по умолчанию в 200Kb. Чтобы это ограничение отключить - нужно добавить опцию -s 0

    Я пользуюсь syslog-ng - у него в файле конфигурации можно настроить разруливание логов от разных программ в разные файлы.
    Last edited by Sid; 20-04-2007 at 12:08.

  5. #5
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    У меня практически та же функциональность облечена в слегка иную форму:

    /opt/etc/init.d/S01syslogd :
    PHP Code:
    #! /bin/sh
    #
    # Startup script for syslog-ng
    #
    PATH=/opt/bin:/opt/sbin:/opt/local/bin:/sbin:/bin:/usr/bin:/usr/sbin

    NAME
    =syslogd
    DAEMON
    =/sbin/$NAME
    LOGFILE
    =syslog.log
    LOG_OLD
    =/tmp
    LOG_NEW
    =/opt/var/log

    [ -"`pidof syslogd`" ] && killall syslogd 2>/dev/null

    [ -"$LOG_OLD/$LOGFILE] && cat "$LOG_OLD/$LOGFILE>> "$LOG_NEW/$LOGFILE"

    $DAEMON -m 0 -"$LOG_NEW/$LOGFILE--l 7 -s 0 
    /opt/etc/cron.daily/backup_syslog.sh :
    PHP Code:
    #! /bin/sh
    PATH="/opt/local/bin:/opt/sbin:/opt/bin:/usr/local/sbin:/usr/sbin:/usr/bin:/sbin:/bin"

    LOG_FILE=/opt/var/log/syslog.log
    LOG_DESTINATION
    =/opt/var/log/arv
    #my cron runs cron.daily at 00:00, therefore I store daily log with yesterday's date
    TIMESTAMPEDFILENAME=`date -d '1 day ago' +%Y%m%d_syslog.log`

    mkdir -"$LOG_DESTINATION"

    mv "$LOG_FILE" "$LOG_DESTINATION/$TIMESTAMPEDFILENAME"
    gzip "$LOG_DESTINATION/$TIMESTAMPEDFILENAME
    В результате имеем лог неограниченой длины в /opt/var/log/syslog.log и ежесуточные архивы логов в /opt/var/log/arv

    кстати, опция -l 7 не описана. Что это значит?
    Last edited by al37919; 22-04-2007 at 12:39.

  6. #6
    Quote Originally Posted by al37919 View Post
    кстати, опция -l 7 не описана. Что это значит?
    Сам не знаю. Просто во всех примерах здесь она указывается.
    Я просто сразу перешел на syslog-ng (хотелось чтобы роутер получал логи еще и от модема) - поэтому в подробности о встроенном syslogd не вдавался.

  7. #7
    Я может ошибаюсь, но раз не нашел описания этой опции и не нашел как настраивается log level то может -l это оно и есть?

  8. #8
    Code:
    TIMESTAMPEDFILENAME=`date -d '1 day ago' +%Y%m%d_syslog.log`
    Я не очень понял, что за параметр '1 day ago'. date ругается, что такого нет.
    Как быть?

  9. #9
    Join Date
    Feb 2007
    Location
    Moscow, Russia
    Posts
    3,805
    У меня используется date из coreutils. У busybox-овской date нет этой функции. Есть два решения:
    1) ipkg install coreutils
    2) TIMESTAMPEDFILENAME=`date +%Y%m%d_syslog.log`
    во втором случае просто лог будет именоваться датой следующего дня

  10. #10
    Quote Originally Posted by al37919 View Post
    У меня используется date из coreutils. У busybox-овской date нет этой функции. Есть два решения:
    1) ipkg install coreutils
    2) TIMESTAMPEDFILENAME=`date +%Y%m%d_syslog.log`
    во втором случае просто лог будет именоваться датой следующего дня
    Спасибо, я как раз пошел по второму пути и запускаю в 23:55.

  11. #11
    Установлены esmtpd и syslog-ng, в логах постоянно вижу такую запись:

    Oct 17 21:18:35 routah syslog: execl: /usr/sbin/sendmail: No such file or directory
    Чего оно хочет от сендмайла и как ему его указать явно?

    Обнаружил, что записи провоцирует arpwatch. Как бы его успокоить..

    Вопрос решён правкой самого arpwatch. Это ж надо было жёстко в нём путь прописать..
    Last edited by Omega; 03-12-2011 at 15:19. Reason: fixed

  12. #12

    Arrow Как отключить логи на 500gP?

    Как отключить логи на 500gP?

  13. #13
    Quote Originally Posted by nikita800 View Post
    Как отключить логи на 500gP?
    /bin/killall syslogd 2>/dev/null
    /sbin/syslogd -m 0 -O /dev/null

    примерно так

  14. #14

    можно ли отключить встроенную ротацию syslog'а?

    В прошивке Oleg'a есть фича:
    Enabled log rotation, so your logs should not be bigger than 200K
    При перенаправлении лога на жесткий диск и использовании внешнего logrotate это не так актуально, а иногда даже нежелательно. Вопрос: можно ли отключить "встроенный" ротатор?

    Спасибо,
    Andris
    Last edited by andyqp; 05-02-2008 at 16:16.

  15. #15
    Join Date
    Nov 2007
    Location
    Belarus, Gomel
    Posts
    168

    syslog-ng & logrotate - проблемы совместного использования

    Установил syslog-ng и logrotate и в связи с этим возник ряд вопросов:
    - в каких каталогах logrotate производит ротацию файлов, только указанных явно в logrotate.conf?
    - в logrotate.conf пытаюсь заставить syslog.ng перечитать настройки
    Code:
    ...
    postrotate
    killall -HUP syslog-ng
    endscript
    ...
    однако syslog-ng просто "убивается", без перезапуска.

Page 1 of 17 12311 ... LastLast

Similar Threads

  1. Подскажите, что этот лог значит? (syslog)
    By VadimVB in forum Russian Discussion - РУССКИЙ (RU)
    Replies: 479
    Last Post: 23-05-2013, 08:47

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •