После того как пропишим эти строки на 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:
За вами оставляю выбор ключей установки я деал по дефаулту
добавим скрипт в автозагрузку
# rc-update add snmptrapd default
и стартуем
#/etc/init.d/snmptrapd start (если отругается то создайте чистый конфиг файла в /etc/snmp/snmptrapd.conf)
snmptrapd - Receive and log SNMP trap messages. (передача и логирование трапов)
Для запуска демона в своем режиме прочтите ман или зайдите на сайт
разработчика который находится в начале статьи. У меня демон стартует
вот так: (root# ps -ef)
По умолчанию трапы будут валиться в 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(); };
Я не выпиливал до конца напильником все что, хотел выжать из данной
связки, но думаю конфиг потерпит серьезное изменение но вот как только
заработало решил вам отправить.
4) Работа Posgresql
Для начала создадим базу под это хозяйство syslog-ng (может быть любая):
А вот и скрипт заточенный для меня внимательно просмотрите его:
#!/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 – Не нашел альтернативу на вскидку (тут нужна прога что бы в микросекундах интервал задавать в красной шапке есть по умолчанию кажися)
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