The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

gentoo & syslog-ng + snmptrapd + postgres (gentoo linux syslog log cisco)


<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>
Ключевые слова: gentoo, linux, syslog, log, cisco,  (найти похожие документы)
From: Попов Дмитрий (Inc_Vega) <incvega@gmail.com.> Newsgroups: Date: Sun, 6 Oct 2006 17:02:14 +0000 (UTC) Subject: gentoo & syslog-ng + snmptrapd + postgres Введение В данной статье затронут обзор пакетов(etc): OS-Gentoo - http://www.gentoo.org NET-SNMP (snmptrapd) http://net-snmp.sourceforge.net SYSLOG-NG http://www.balabit.com/products/syslog_ng POSGRESQL http://www.postgresql.org внешний девайс отдающий трапы: CISCO-С2950 http://www.cisco.com WARNING: Статья не претендует на полноту функций, которые читатель сможет раскрыть после прочения. 1)Настройка CISCO- C2950 для отправки snmp-trap на удаленный хост: ! logging trap debugging snmp-server enable traps snmp linkdown linkup snmp-server host 192.168.0.1 version 2c linkdown snmp-server host 192.168.0.1version 2c linkdown snmp-server host 192.168.0.1 version 2c linkdup snmp-server host 192.168.0.1 version 2c linkup ! После того как пропишим эти строки на Cisco C2950, будут посылаться трапы на хост 192.168.0.1 (Посылка трапов будет при падении порта на свиче, я просто передергивал его командами shutdown , no shutdown) . Соответственно мы сможем их послушать tcpdump: root # tcpdump -i eht0 port 162 tcpdump -i eth0 port 162 tcpdump: verbose output suppressed, use -v or -vv for full protocol decode listening on eth0, link-type EN10MB (Ethernet), capture size 96 bytes 14:05:30.897468 IP 192.168.0.2.56488 > 192.168.0.1.snmptrap: C=linkdown V2Trap(14 0)system.sysUpTime.0=770988979 [|snmp] * Если у вас что-то не получилось вам на www.cisco.com 2) Для того что бы принять трапы и чучуть их подразобрать есть пакет NET-SNMP(в FreeBSD есть по умолчанию кажися) localhost bin # emerge -pv net-snmp These are the packages that would be merged, in order: Calculating dependencies... done! [ebuild R ] net-analyzer/net-snmp-5.2.1.2-r1 USE="X ipv6 perl ssl tcpd -doc* -elf -lm_sensors -minimal -rpm (-selinux) -smux" 0 kB Total size of downloads: 0 kB За вами оставляю выбор ключей установки я деал по дефаулту добавим скрипт в автозагрузку # rc-update add snmptrapd default и стартуем #/etc/init.d/snmptrapd start (если отругается то создайте чистый конфиг файла в /etc/snmp/snmptrapd.conf) snmptrapd - Receive and log SNMP trap messages. (передача и логирование трапов) Для запуска демона в своем режиме прочтите ман или зайдите на сайт разработчика который находится в начале статьи. У меня демон стартует вот так: (root# ps -ef) root 7262 1 0 Sep15 ? 00:00:00 /usr/sbin/snmptrapd -p /var/run/snmptrapd.pid По умолчанию трапы будут валиться в locale0 в /var/log/messages . Для отделения от общей кучи можно перевести его на locale0-7 (man snmptrapd) 3)Далее необходимо настроить пакет SYSLOG-NG Описание процесса инсталяции syslog-ng не буду по причине что он есть handbook(www.gentoo.org). Я лишь подправил его следующим образом (согласно http://ben.muppethouse.com/SYSLOG-DOC.html ) и перестартовал демон : # $Header: /var/cvsroot/gentoo-x86/app-admin/syslog-ng/files/syslog-ng.conf.gentoo,v 1.5 2005/05/12 05:46:10 mr_bones_ Exp $ # # Syslog-ng default configuration file for Gentoo Linux # contributed by Michael Sterrett options { chain_hostnames(off); sync(0); time_reopen(10); log_fifo_size(100); long_hostnames(on); create_dirs(yes); time_reap(12); gc_busy_threshold(768); # The default action of syslog-ng 1.6.0 is to log a STATS line # to the file every 10 minutes. That's pretty ugly after a while. # Change it to every 12 hours so you get a nice daily update of # how many messages syslog-ng missed (0). stats(43200); }; source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); }; source s_udp { udp(); }; source s_tcp { tcp(); }; source s_local { internal(); }; destination d_local { file("/var/log/syslog-ng.$MONTH"); }; destination d_postgres { file("/spooldir/syslog2pgsql/fulllog.$YEAR.$MONTH.$DAY.$HOUR.$MIN.$SEC" template("INSERT INTO msg_table VALUES \( '$R_ISODATE', '$S_ISODATE', '$HOST', '$FACILITY', '$PRIORITY', '$MSG'\)\;\n") template_escape(yes) owner(postgres)); }; destination authlog { file("/var/log/auth.log"); }; destination syslog { file("/var/log/syslog"); }; destination cron { file("/var/log/cron.log"); }; destination daemon { file("/var/log/daemon.log"); }; destination user { file("/var/log/user.log"); }; destination mail { file("/var/log/mail.log"); }; destination debug { file("/var/log/debug"); }; destination messages { file("/var/log/messages"); }; destination console { usertty("root"); }; destination console_all { file("/dev/tty12"); }; destination xconsole { pipe("/dev/xconsole"); }; filter f_authpriv { facility(auth, authpriv); }; filter f_syslog { not facility(authpriv, mail); }; filter f_cron { facility(cron); }; filter f_daemon { facility(daemon); }; filter f_user { facility(user); }; filter f_messages { level(info..warn) and not facility(auth, authpriv, mail, news); }; filter f_emergency { level(emerg); }; filter f_info { level(info); }; filter f_notice { level(notice); }; filter f_warn { level(warn); }; filter f_crit { level(crit); }; filter f_err { level(err); }; filter f_failed { match("failed"); }; filter f_denied { match("denied"); }; filter f_postgres { not( (host("syslog") and facility(cron) and level(info)) or (facility(user) and level(notice) and ( match(" gethostbyaddr: ") or match("last message repeated ") ) ) or ( facility(local3) and level(notice) and match(" SYSMON NORMAL ")) or ( facility(mail) and level(warning) and match(" writable directory") ) or ( ( host("192168.0.1") or host("192.168.0.1") ) and facility(auth) and level(info) and match("su oracle") and match(" succeeded for root on /dev/") ) ); }; log { source(src); filter(f_authpriv); destination(authlog); }; log { source(src); filter(f_syslog); destination(syslog); }; log { source(src); filter(f_cron); destination(cron); }; log { source(src); filter(f_daemon); destination(daemon); }; log { source(src); filter(f_user); destination(user); }; log { source(src); filter(f_messages); destination(messages); }; log { source(src); filter(f_emergency); destination(console); }; log { source(src); source(s_udp); source(s_tcp); filter(f_postgres); destination(d_postgres); }; Я не выпиливал до конца напильником все что, хотел выжать из данной связки, но думаю конфиг потерпит серьезное изменение но вот как только заработало решил вам отправить. 4) Работа Posgresql Для начала создадим базу под это хозяйство syslog-ng (может быть любая): vega@localhost ~$ createdb syslog-ng Создание таблицы для куда будет все ссыпаться: CREATE sequence msg_seq_num; CREATE TABLE msg_table ( msg_rcv_time timestamp, msg_sent_time timestamp, hostname varchar(256), msg_facility varchar(8), msg_priority varchar(8), msg_text varchar(2048), msg_id integer default nextval('msg_seq_num') ); А вот и скрипт заточенный для меня внимательно просмотрите его: #!/bin/bash # # run-syslog2pgsql-insert.sh # 23-April-2002 by Ben Russo # # This script makes sure that the syslogs get # into the database. # It is designed to be started by CRON periodically. # I would run it every minute, or at least every # every few minutes. # DATADIR="/spooldir/syslog2pgsql" WORKDIR="/var/log/syslogsql" LOGFILE="$WORKDIR/syslog2pgsql-insert.log" TZ=MSD export DATADIR WORKDIR TZ # # Here we are going to make sure there isn't # already an instance of run-syslog2pgsql-insert.sh # that is running. # if [ -f $WORKDIR/.syslog2pgsql-insert.pid ] then OLDPID=`cat $WORKDIR/.syslog2pgsql-insert.pid` NUMPROCS=`ps -e | grep $OLDPID | grep run-syslog2 | wc -l` if [ $NUMPROCS -gt 0 ] then exit 0 fi fi # # If this script has run this far then there should # not be another instance of run-syslog2pgsql-insert.sh # running, therefore let's make a PID file and do it. # echo $$ > $WORKDIR/.syslog2pgsql-insert.pid # # Now start an endless loop that looks for control files. # while true do DATE=`date` if [ -f $WORKDIR/.insert-die ] then echo "=die===== $DATE $WORKDIR/.insert-die file found, exiting." >> $LOGFILE exit 0 fi if [ -f $WORKDIR/.insert-restart ] then echo "=restart= $DATE $WORKDIR/.insert-restart file found, exiting." >> $LOGFILE echo "=restart= $DATE Deleteing .insert-restart file." >> $LOGFILE echo "=restart= $DATE Expecting cron to restart this script." >> $LOGFILE fi if [ -f $WORKDIR/.insert-pause ] then echo "=pause=== $DATE $WORKDIR/.insert pause file found." >> $LOGFILE echo "=pause=== $DATE sleeping 3 secs." >> $LOGFILE sleep 3 else FILELIST=`find $DATADIR -name "fulllog.2[0-9][0-9][0-9].[0-1][0-9].[0-3][0-9].[0-2][0-9].[0-5][0-9].[0-6][0-9]"` #sleep 999997 &#8211; Не нашел альтернативу на вскидку (тут нужна прога что бы в микросекундах интервал задавать в красной шапке есть по умолчанию кажися) for i in $FILELIST do cat $i | psql -U vega -d syslog-ng >> $LOGFILE 2>&1 DATE=`date` echo "========= $DATE finished $i" >> $LOGFILE rm -f $i done fi exit 0 done Занавес Заряжаем это хозяйство по Cron раз в минуту: * * * * * root /etc/syslog-ng/run-syslog2pgsql-insert.sh \ /var/log/syslogsql/syslog2pgsql-insert.log 2>&1

<< Предыдущая ИНДЕКС Правка src / Печать Следующая >>

Обсуждение [ RSS ]
  • 1, Batr (??), 09:36, 10/10/2006 [ответить]  
  • +/
    Такие статьи лучше вовсе не писать, это как недокументированная программа.

    Хоть бы комментариев поставил.

     
  • 2, Inc_Vega (??), 10:52, 10/10/2006 [ответить]  
  • +/
    тут почти все понятно поидее.
     
  • 3, shurutov (??), 05:42, 06/02/2007 [ответить]  
  • +/
    > source src { unix-stream("/dev/log"); internal(); pipe("/proc/kmsg"); };
    А в документации: file("/proc/kmsg"); И в примерах к syslog-ng...
    Кому верить?
     
     
  • 4, konstantin (??), 14:59, 19/04/2007 [^] [^^] [^^^] [ответить]  
  • +/
    зависит от системы, читайте мануал на сислог-нг
     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру