поиск
-
прочее
календарь
Декабрь 2025 Пн Вт Ср Чт Пт Сб Вс 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 архивы
mysql indexes
Рубрика: overminds
Оставить комментарий
munin on centos install error
Бывает такая ошибка при установке munin, связанная с использованием нескольких репозиториев, в частности rpmforge:
# yum install munin-node Transaction Check Error: file /usr/share/man/man3/XML::SAX::Base.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch file /usr/share/man/man3/XML::SAX::Exception.3pm.gz conflicts between attempted installs of perl-XML-SAX-0.96-7.el6.noarch and perl-XML-SAX-Base-1.04-1.el6.rf.noarch
Решается это так:
# vim /etc/yum.repos.d/rpmforge.repo exclude=perl-XML-SAX-Base # yum update # yum install munin-node
esxi error clean
https://kb.vmware.com/kb/1033725
Нужно почистить IPMI System Event.log
To run localcli command on the ESXi 5.1 or 5.5 host:
1. Connect to the ESXi host through SSH. For more information, see Using Tech Support Mode in ESXi 4.1 and ESXi 5.x (1017910).
2. Run this command:
localcli hardware ipmi sel clear
Рубрика: overminds
Оставить комментарий
скрипт сравнения fstab с текущим mount
сравнивает, показывает что прописано но не смонтировано, или смонтировано но не прописано:
#!/bin/bash
#объявляем массивы, в которых будут собраны и сортированы точки монтирования
declare -a fst #fstab
declare -a mnt #mount
declare -a fstinmnt #fstab in mount present
declare -a mntinfst #mount in fstab present
declare -a nfstinmnt #fstab in mount absent
declare -a nmntinfst #mount in fstab absent
#заполняем первичные массивы точками монитрования прописанными в fstab и фактически смонтированны mount
fst=( `egrep -v '^#|^$' /etc/fstab |awk '{print $2}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|swap'` )
mnt=( `mount |awk '{print $3}' |egrep -v '\/proc|\/dev\/shm|\/dev\/pts|\/sys|\/var\/lib\/nfs'` )
#инициализируем индекс-каунтеры для сортированных массивов
fst_members=${#fst[@]}
mnt_members=${#mnt[@]}
#fst -> mnt
#построчно сравниваем маунтпоинты из fstab с mount. совпадения кладем в fstinmnt[], промахи в nfstinmnt[].
for f in `seq -s " " 0 $[$fst_members - 1]`; do
for m in `seq -s " " 0 $[$mnt_members - 1]`; do
if [ "${fst[$f]}" = "${mnt[$m]}" ]
then fstinmnt=( "${fstinmnt[@]}" "${fst[$f]}" ) ; break
else nfstinmnt=( "${nfstinmnt[@]}" "${fst[$f]}" )
fi
done;
done
#инициализируем индекс-каунтеры для сортированных массивов
fstinmnt_members=${#fstinmnt[@]}
nfstinmnt_members=${#nfstinmnt[@]}
#дедуплицируем вывод, т.к. сравнение происходит в несколько проходов, имеем дубли, которые надо убрать.
for i in `seq -s " " 0 $[$fstinmnt_members - 1]`; do
for ni in `seq -s " " 0 $[$nfstinmnt_members -1]`; do
if [ "${fstinmnt[$i]}" = "${nfstinmnt[$ni]}" ]
then nfstinmnt[$ni]=
fi
done;
done
nfstinmnt=( `printf '%s\n' ${nfstinmnt[*]} |sort |uniq |paste -d" " -s` )
#mnt -> fst
#построчно сравниваем маунтпоинты из mount c fstab. совпадения кладем в mntinfst[], промахи в nmntinfst[].
for m in `seq -s " " 0 $[$mnt_members - 1]`; do
for f in `seq -s " " 0 $[$fst_members - 1]`; do
if [ "${mnt[$m]}" = "${fst[$f]}" ]
then mntinfst=( "${mntinfst[@]}" "${mnt[$m]}" ) ; break
else nmntinfst=( "${nmntinfst[@]}" "${mnt[$m]}" )
fi
done;
done
#инициализируем индекс-каунтеры для сортированных массивов
mntinfst_members=${#mntinfst[@]}
nmntinfst_members=${#nmntinfst[@]}
#опять дедуплицируем вывод.
for i in `seq -s " " 0 $[$mntinfst_members - 1]`; do
for ni in `seq -s " " 0 $[$nmntinfst_members -1]`; do
if [ "${mntinfst[$i]}" = "${nmntinfst[$ni]}" ]
then nmntinfst[$ni]=
fi
done;
done
nmntinfst=( `printf '%s\n' ${nmntinfst[*]} |sort |uniq |paste -d" " -s` )
#вывод полученных результатов сравнения mount->fstab
echo "маунтпоинты прописанные в fstab и смонтированные -> ${fstinmnt[@]}"
echo "маунтпоинты прописанные в fstab и _не_ смонтированные -> ${nfstinmnt[@]}"
echo "маунтпоинты смонтированные и прописанные в fstab -> ${mntinfst[@]}"
echo "маунтпоинты смонтированные и _не_ прописанные в fstab -> ${nmntinfst[@]}"
cat исключаем из вывода пустые строки и комментарии
необработанный вывод:
[root@localhost /]# cat /etc/fstab # # /etc/fstab # Created by anaconda on Tue Sep 30 15:40:51 2014 # # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info # /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=543f4814-5fb1-46d9-9a77-6fe766912472 /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 UUID=843cf936-9dc7-4774-b4c7-10eb9a09c2cf /home ext4 defaults 0 0
обработанный вывод:
[root@localhost /]# cat /etc/fstab |grep -v '^#' | grep -v '^$' /dev/mapper/VolGroup-lv_root / ext4 defaults 1 1 UUID=543f4814-5fb1-46d9-9a77-6fe766912472 /boot ext4 defaults 1 2 /dev/mapper/VolGroup-lv_swap swap swap defaults 0 0 tmpfs /dev/shm tmpfs defaults 0 0 devpts /dev/pts devpts gid=5,mode=620 0 0 sysfs /sys sysfs defaults 0 0 proc /proc proc defaults 0 0 UUID=843cf936-9dc7-4774-b4c7-10eb9a09c2cf /home ext4 defaults 0 0
или одной командой:
egrep -v '^#|^$' имя_файла
и вишенка:
grep -ve «^#\|^[[:space:]]*$» file_name
будет пропускать не только пустые строки но и строки состоящие из пробелов и табуляций
grep -ve «^[[:space:]]*\(#\|$\)»
будет пропускать не только все вышеперечисленное, но и строки, где перед решеткой только пробелы и табуляции.
bash ограничение времени работы скрипта
#! /usr/local/bin/bash
###########################################
# Default values
#------------------------------------------
declare -i timeout=20 # default timeout in seconds.
Kill='/bin/kill'
split_line='-------------------------------------------------------------------------------'
success_msg='status OK' # that what external program should return on success
#
###########################################
ftmp="$(mktemp /tmp/$(basename $0).XXXXXXXX)"
trap "rm -f ${ftmp}" 0 1 2 5 15
ext_prg=$1
( ${ext_prg} )>${ftmp} 2>&1 & # run some program in subshell
cPID=$! # get PID of subshell
sleep 5 # wait at least 5 seconds to get time for process to start
((timeout-=5))
status=0
if [[ ${timeout} -gt 0 ]]; then
while [[ $( ps | grep -o -G "^${cPID}"; ) -eq ${cPID} && ${status} -eq 0 ]]; do
status=$((timeout-- ? 0 : 1)); sleep 1
done
fi
if [[ ${status} -eq 1 ]]; then
eval '${Kill} -9 ${cPID}' &>/dev/null; # If timeout occured - kill child process
echo "${split_line}"
echo `basename $0`": Err: Timeout occured."
echo "Process(${cPID}): ${ext_prg}"
echo "was killed because of timeout."
echo "${split_line}"
exit 1
else
echo "${split_line}"
echo -en "Process(${cPID}): ${ext_prg}\nterminate by itself successfully.\n"
rc=$(cat ${ftmp} | awk "/${success_msg}/"'{print $2}')
if [[ -z "${rc}" ]]; then
echo "${ext_prg}: ERR: no success code returned!!!"
exit 1
else
echo "${ext_prg}: return success code!!!"
fi
echo "${split_line}"
fi
exit 0
взято тут
hp rest api
http://habrahabr.ru/company/hp/blog/268885/#habracut
Рубрика: overminds
Оставить комментарий
файлы открытые процессом
Файлы, которые открыл процесс можно посмотреть так:
ls -la /proc/{PID}/fd
pssh массовые изменения через ssh
pssh -i -h ./hostlist.txt "command list"
-i — нормальный вывод исполняемых команд
-h — файл со списком имен или адресов хостов
«command list» — исполняемые команды
Рубрика: overminds
Оставить комментарий
hp driver update from rpm
Updating firmware with rpm installed:
Install the firmware rpm using the command: rpm -ivh
The CP026885.scexe script is located in the ‘hp-scexe-compat’ folder. The actual name of the ‘hp-firmware-smartarray-46a4d957a7-*’ folder is based on the version of
the rpm installed in the first step above
To install firmware, you can execute ONE of the following commands:
# ./CP026885.scexe in the '/usr/lib/x86_64-linux-gnu/hp-scexe-compat'
location (OR)
# ./hpsetup in the '/usr/lib/x86_64-linux-gnu/hp-firmware-smartarray-46a4d957a7-*'
location
The results of the firmware upgrade are saved to the Component.log file, located in the /var/cpq/ directory
To uninstall the rpm, run the command: rpm -e
Updating firmware without installing the rpm:
Extract the contents of the rpm using the command: rpm2cpio
directory
Navigate to the ‘usr/lib/x86_64-linux-gnu/hp-firmware-smartarray-46a4d957a7-*’ location and run ./hpsetup to update the firmware. The actual name of the ‘hp-
firmware-smartarray-46a4d957a7-*’ folder is based on the version of the rpm installed in the step above
The results of the firmware upgrade are saved to the Component.log file, located in the /var/cpq/ directory
at syntax
-bash-4.1$ at 17:36 Aug 27 2015 at> echo "hello" at> <EOT> job 8 at 2015-08-27 17:36
Рубрика: overminds
Оставить комментарий
замена строки/символа в списке
файл со списком по целому слову без пробелов, заканчивающийся переводом строки
cat file | tr -s '\n' ' '
-s заменить
далее: что чем
то есть перевод строки заменям пробелом
Рубрика: overminds
Оставить комментарий
hprcu — hp rom config utility
http://h20566.www2.hp.com/hpsc/doc/public/display?sp4ts.oid=5379860&docId=mmr_kc-0100799&docLocale=en_US
конфигуратор bios для hp серверов. аналог conrep
Рубрика: overminds
Оставить комментарий
nagios host list
grep host_name /var/log/nagios/objects.cache | cut -f3 | sort -u | paste -d, -s
nagios thresholds ranges
Table 3. Example ranges
Range definition
Generate an alert if x…
10 < 0 or > 10, (outside the range of {0 .. 10})
10: < 10, (outside {10 .. ∞})
~:10 > 10, (outside the range of {-∞ .. 10})
10:20 < 10 or > 20, (outside the range of {10 .. 20})
@10:20 ≥ 10 and ≤ 20, (inside the range of {10 .. 20})
yum help
search [string] — поиск пакета по имени или его фрагменту;
* list — вывод списка пакетов, всех (all или без указания фильтра), установленных (installed) или доступных (available);
* repolist — вывод списка подключённых репозиториев;
* resolvedep [shortname] — вывод полного имени пакета, с указанием номера версии, сборки и т.д., по его краткому имени;
* provides filename — поиск пакета, содержащего указанный файл;
* info pkgname — вывод полной информации о пакете;
* deplist pkgname — вывод списка зависимостей указанного пакета;
* grouplist — вывод списка групп, разделённого на установленные и доступные;
* groupinfo «Group name» — вывод списка пкаетов, входящих в указанную группу, имя которой даётся в соответствие с выводом субкоманды grouplist и экранируется кавычками;
* check-update — вывод списка пакетов, для которых в данный момент доступны обновления.
hpacucli
шпора по hp-шной дисковой кли:
Сокращения, которые можно использовать в командах
chassisname = ch
controller = ctrl
logicaldrive = ld
physicaldrive = pd
drivewritecache = dwc
Управление контроллером дискового массива
Показать информацию (детально)
hpacucli> ctrl all show config
hpacucli> ctrl all show config detail
Статус контроллера
hpacucli> ctrl all show status
Управление кэшированием
hpacucli> ctrl slot=0 modify dwc=disable
hpacucli> ctrl slot=0 modify dwc=enable
Пересканировать устройства, добавленные с момента последнего сканирования
hpacucli> rescandetects newly added devices since the last rescan
Управление физическими дисками в массиве
Показать информацию (детально)
hpacucli> ctrl slot=0 pd all show
hpacucli> ctrl slot=0 pd 2:3 show detail
Статус дисков
hpacucli> ctrl slot=0 pd all show status
hpacucli> ctrl slot=0 pd 2:3 show status
Очистака
hpacucli> ctrl slot=0 pd 2:3 modify erase
Управление диодами на дисках
hpacucli> ctrl slot=0 pd 2:3 modify led=on
hpacucli> ctrl slot=0 pd 2:3 modify led=off
Управление логическими дисками
Показать информацию (детально)
hpacucli> ctrl slot=0 ld all show [detail]
hpacucli> ctrl slot=0 ld 4 show [detail]
Статус дисков
hpacucli> ctrl slot=0 ld all show status
hpacucli> ctrl slot=0 ld 4 show status
Управление диодами на дисках
hpacucli> ctrl slot=0 ld 4 modify led=on
hpacucli> ctrl slot=0 ld 4 modify led=off
Перезапустить «отказавшие» диски
hpacucli> ctrl slot=0 ld 4 modify reenable forced
Создание дисков
# логический диск
hpacucli> ctrl slot=0 create type=ld drives=1:12 raid=0# логический диск — чередованиеhpacucli> ctrl slot=0 create type=ld drives=1:13,1:14 size=300 raid=1#логический диск — raid 5
hpacucli> ctrl slot=0 create type=ld drives=1:13,1:14,1:15,1:16,1:17 raid=5drives — конкретные диски, все диски (all drives) или неиспользуемые диски (unassigned drives)
size -размер логического диска в Мб
raid — тип raid 0, 1 , 1+0 and 5
Удаление
hpacucli> ctrl slot=0 ld 4 delete
Добавление дисков
hpacucli> ctrl slot=0 ld 4 add drives=2:3
Добавление дискового пространства (принудительно)
hpacucli> ctrl slot=0 ld 4 modify size=500 forced
Добавление резервного диска spare
hpacucli> ctrl slot=0 array all add spares=1:5,1:7
nagios downtime for users
шпаргалка, чтоб не забыть.
заводим generic-contact
заводим группу contact-web-access
включаем в темплейт заведенную группу
включаем в нужный хост на уровне описания хоста нужную группу
заводим пользователя в htpasswd
tc ввод и вывод
был озадачен шейпингом на пингвине. результаты трудов.
шейпим выход:
[root@server]# cat ./shape.sh
#!/bin/bash
TC=/sbin/tc
IF=eth4.1764 # Interface
#IF=bond2 # Interface
UPLD=1680Mbit # UPLOAD Limit
IP=0.0.0.0/32 # Host IP
start() {
$TC qdisc add dev $IF root handle 1: htb default 30
$TC class add dev $IF parent 1: classid 1:1 htb rate 10gbit
$TC class add dev $IF parent 1:1 classid 1:10 htb rate $UPLD
$TC filter add dev $IF protocol ip parent 1:0 prio 1 u32 match ip src $IP flowid 1:10
}
stop() {
# Stop the bandwidth shaping.
$TC qdisc del dev $IF root
}
restart() {
# Self-explanatory.
stop
sleep 1
start
}
show() {
# Display status of traffic control status.
$TC -s -d qdisc show dev $IF
$TC -s -d class show dev $IF
$TC -s -d filter show dev $IF
}
case "$1" in
start)
echo -n "Starting bandwidth shaping: "
start
echo "done"
;;
stop)
echo -n "Stopping bandwidth shaping: "
stop
echo "done"
;;
restart)
echo -n "Restarting bandwidth shaping: "
restart
echo "done"
;;
show)
echo "Bandwidth shaping status for $IF:"
show
echo ""
;;
*)
pwd=$(pwd)
echo "Usage: tc.bash {start|stop|restart|show}"
;;
esac
exit 0
шейпим вход. тут немного сложнее, и надо поднимать промежуточное псевдоустройство ifb. головная статья по ifb. в общем случае в ведре оно уже есть, и нужно просто запилить модуль, как-то так:
modprobe ifb numifbs=1
и поднять интерфейс:
ip link set dev ifb0 up
после того, как встало, используем вот это:
[root@server]# cat ./inshape.sh
#!/bin/bash
TC=/sbin/tc
IF=bond2 # Interface
DNLD=150Mbit # DOWNLOAD Limit. set here half of required bandwith. 100Mbit=20Mbps.
IP=0.0.0.0/32 # Storage IP
start() {
ip link set dev ifb0 up
$TC qdisc add dev $IF handle ffff: ingress
$TC filter add dev $IF parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
$TC qdisc add dev $IF root handle 1: htb default 10
$TC class add dev $IF parent 1: classid 1:1 htb rate $DNLD
$TC class add dev $IF parent 1:1 classid 1:10 htb rate $DNLD
$TC qdisc add dev ifb0 root handle 1: htb default 10
$TC class add dev ifb0 parent 1: classid 1:1 htb rate $DNLD
$TC class add dev ifb0 parent 1:1 classid 1:10 htb rate $DNLD
$TC filter add dev ifb0 parent 1:0 protocol ip prio 0 u32 match ip src $IP flowid 1:10
}
stop() {
# Stop the bandwidth shaping.
$TC qdisc del dev $IF root
$TC qdisc del dev $IF ingress
$TC qdisc del dev ifb0 root
}
restart() {
# Self-explanatory.
stop
sleep 1
start
}
show() {
# Display status of traffic control.
$TC -s -d qdisc show dev $IF
$TC -s -d class show dev $IF
$TC -s -d filter show dev $IF
$TC -s -d qdisc show dev ifb0
$TC -s -d class show dev ifb0
$TC -s -d filter show dev ifb0
}
case "$1" in
start)
echo -n "Starting inbound bandwidth shaping: "
start
echo "done"
;;
stop)
echo -n "Stopping inbound bandwidth shaping: "
stop
echo "done"
;;
restart)
echo -n "Restarting inbound bandwidth shaping: "
restart
echo "done"
;;
show)
echo "Bandwidth shaping status for ifb0 and $IF:"
show
echo ""
;;
*)
pwd=$(pwd)
echo "Usage: tc.bash {start|stop|restart|show}"
;;
esac
exit 0
cp xargs
—target-directory=КАТАЛОГ (начиная с версии file-utils 4.1)
Задаёт каталог назначения, куда будет осуществляться копирование. Имеется в
виду для использования с xargs(1), как, например, в «ls | xargs cp —target-
directory=../d».
grep hints
в конфигах нагиоса найти имена серверов, которые входят в группу windows-server.
grep -r windows-server /usr/local/etc/nagios/objects/ |grep use |awk '{print $1}' |sort |uniq |cut -d : -f 1 |xargs grep host_name |awk '{print $3}' |sort | uniq > ./win_srv_names.txt
убрать решетки каментов из конфига
egrep -v "^$|^#" /etc/elasticsearch/elasticsearch.yml
Выравнивание разделов диска
проверка, выровнен ли диск:
~# parted /dev/sda align-check opt 1
создание ровных разделов:
parted -a optimal
либо
fdisk -c -u /dev/sdc
regexp все нужное
выбираем ip адреса
grep -E -o '[0-9]{1,3}(\.[0-9]{1,3}){3}'
выбираем mac адреса
grep -E -o '[0-9,aAbBcCdDeEfF]{1,2}(\:[0-9,aAbBcCdDeEfF;]{1,3}){5}'
-E, —extended-regexp PATTERN — интерпретировать PATTERN как расширенное регулярное выражение
-o, —only-matching — выводит только то, что соответствует регулярному выражению
timestamp для якорей java-stacktrace
^\[\d\d\d\d-\d\d-\d\d\ \d\d\:\d\d\:\d\d\,\d\d\d]
\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d{3} - 2018-03-29 15:43:50,862
десятичные или целые числа
[-+]?[0-9]*\.?[0-9]+
про snmp traps
From: Max
Newsgroups: email
Date: Mon, 22 Oct 2005 14:31:37 +0000 (UTC)
Subject: Основы работы с SNMP traps
Оригинал: http://www.asmi.spb.ru/faq/snmp-traps-i/
SNMP traps и с чем их едят
В этой статье я хочу осветить вопрос работы с SNMP traps. В то время,
когда я начинал разбираться с этой темой, при неплохом знании
принципов работы протокола SNMP, я был удивительным образом перепутан
результатами чтения документации по этому вопросу, всеми этими OID,
которые нужно писать как параметры для команды snmptrap. Поиски
внятной информации в интернет не дали результатов. Создавалось
впечатление, что я один такой непонятливый среди тех, кто считает это
элементарным.
В своей работе я использую пакет NetSNMP с открытым исходным кодом и
поэтому, примеры относятся именно к этому пакету.
Я не буду останавливаться на описании дерева SNMP (считаю это
действительно банальным), а начнем с пресловутого OID. OID это просто.
OID, это Object ID, уникальный идентификатор объекта в дереве значений
SNMP. OID может записываться в нескольких видах.
1. Числовой. Например, 1.3.6.1.4.1.2021. Самый простой вид, по
причине полного отсутствия каких либо трансформаций программным
обеспечением. Именно в таком виде SNMP «думает».
2. Текстовый, с использованием MIB файлов. Понятно, что дикие цифры
OID запомнить категорически невозможно, поэтому с помощью MIB
можно вводить текстовые мнемонические имена для более простого
вспоминания и использования идентификаторов. Кроме того, текстовая
запись позволяет избежать написания OID от корня дерева SNMP.
Уникальные мнемонические имена уже содержат путь до необходимого
узла дерева. Отсюда возможны записи вида enterprises.ucdavis.
Так как уникальность мнемонического имени в пределах всех возможных
MIB никто не гарантирует и не всегда сразу вспомнишь к чему относится
имя (например prTable), существует следующая, на мой взгляд самая
приятная форма записи: UCD-SNMP-MIB::prTable. В таком формате, кроме
самого имени указывается имя MIB (можно сказать, это пространство
имен)
Единственным ограничением использования MIB является то, что при
использовании программного обеспечения SNMP от разных производителей и
различного железа необходимо единое «понимание» этих волшебных
трансформаций. Поэтому на сайтах производителей управляемого
оборудования есть файлы описания MIB для конкретных устройств.
С представлением OID разобрались. Теперь про трапы. Сразу оговорюсь,
что все нижесказанное относится к версии 2с SNMP.
В протоколе SNMP есть трапы (traps) и есть информы (informs).
Отличаются они тем, что трапы посылаются на станцию менеджера без
гарантии их доставки, а информы гарантированно доставляются. Ну, или
не доставляться, но тогда отправитель об этом узнает. Для простоты, я
и то и другое называю трапом. Так нам будет проще.
Какая информация посылается менеджеру в трапе (информе)? А посылаются
следующие данные:
* Uptime устройства в виде пары: стандартный OID uptime, значение
* OID, который говорит о том, что за событие приключилось. В MIB
файлах есть специальные описания некоторого количества стандартных
событий, вроде запуска или остановки агента. Также, мы можем
определить собственные trap OIDs и даже описать их в собственном
MIB файле.
* Любые пары OID и его значение (там еще есть и третье поле «тип
значения», но это нам побоку), которые могут дать дополнительную
информацию. Например, когда свитч посылает трап «Падение линка»,
дополнительное поле будет содержать информацию OID интерфейса, с
которым приключилась неприятность — IF-MIB:ifIndex.2.
Теперь, наше повествование разделяется на направления. Первое
направление: «Как нам послать SNMP trap ручками из командной строки».
Второе направлении «Как нам заставить агента SNMP посылать трапы когда
что то идет не по плану».
Посылаем руками
Допустим, нам хочется послать сообщение менеджеру о том, что демон
net-snmpd запустился и передать дополнительную информацию о размере
swap файла и все это ручками ??? Ну пришла нам такая блажь. Допустим.
Пишем:
snmpinform -c public -v 2c host.sample.com «» ucdavis.ucdTraps.ucdStart memTotalSwap i 1024000
Что здесь что ?
* «» — брать uptime по дефолту
* ucdavis.ucdTraps.ucdStart — послать этот трап
* memTotalSwap i 1024000 — добавить в нагрузку OID memTotalSwap
равное целому 1024000
И если на целевом хосте запущен демон snmptrapd, то в логе появится
сообщение о приходе трапа.
Однако, иногда хочется странного, например послать трап о том, что
инопланетяне тырят SCSI винчестеры прямо из корзинки или о том, что
серверную заливает водой, о чем вас предупредительно оповестил
самодельный датчик, которые весит на COM порту. Понятное дело, в
стандартных MIB о таких странных ситуациях не упоминается. Поэтому,
можно использовать произвольную последовательность цифирек для
обозначения нового в мире события. Например:
snmptrap -c public -v 2c 127.0.0.1 «» 1.3.3.3.3.3.3.3 1.2.2.2.2.2.2 s «Aliens opened the door»
И что характерно, это будет работать. В логе появится такая
бредятинка:
Nov 22 14:08:24 snmptrapd[465]: localhost [127.0.0.1]: Trap ,
DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (736247) 2:02:42.47,
SNMPv2-MIB::snmpTrapOID.0 = OID: SNMPv2-SMI::org.3.3.3.3.3.3,
iso.2.2.2.2.2.2 = STRING: » Aliens opened the door»
В то же время, крутые администраторы должны все делать правильно,
самодокументируемо, в соответствии с требованиями IETF и других
компетентных организаций. Поэтому, будем описывать наши новые OID в
своем собственном MIB файле.
ALLIENSATTACK-MIB DEFINITIONS ::= BEGIN
IMPORTS
OBJECT-TYPE, NOTIFICATION-TYPE, MODULE-IDENTITY,
Integer32, Opaque, enterprises, Counter32
FROM SNMPv2-SMI
alliensattack MODULE-IDENTITY
LAST-UPDATED «200209050000Z»
ORGANIZATION «XCom»
CONTACT-INFO
«Planet Earth»
DESCRIPTION
«MIB for preventing aliens to stole our SCSI disks»
::= { enterprises 10050 }
attackTraps OBJECT IDENTIFIER ::= { alliensattack 1 }
attackStartTrap NOTIFICATION-TYPE
STATUS current
DESCRIPTION
«Notify about start of attack»
::= { attackTraps 1 }
attackStopTrap NOTIFICATION-TYPE
STATUS current
DESCRIPTION
«Notify about time to leave our hideouts»
::= { attackTraps 2 }
attackSource OBJECT IDENTIFIER ::= { aliensattack 2 }
attackFromDoors OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
«Sent to manager when attack starts from doors»
::= { attackSource 1 }
attackFromWindows OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
«May be alliens are innocent? And SCSI drives disappeared in the Gates?»
::= { attackSource 2 }
END
Здесь определяется enterptise с номером 10050 и ему даеся имя
aliensattack. После этого вводятся две ветки: одна для трапов (начало
и конец атаки), другая для OID дополнительной информации (атака через
двери или это вовсе не инопланетяне).
Скажу честно, в формате MIB файла я понимаю мало. Поэтому внимательно
изучив MIB файлы из стандартной поставки net-snmp, я сделал этот
пример который работает, но кристальной ясности во всех его ключевых
словах я не достиг.
Дальше! Укладываем этот файл с именем ALLIENSATTACK-MIB.txt в какой
нибудь каталог поближе и запоминаем, что с этого момента все программы
имеющие отношения к SNMP (snmpd, snmptrapd, snmpinform) мы запускаем с
поддержкой этого MIB. Тоесть, к командной строке добавляем параметры
-М каталог/с_файлом -m +ALLIENSATTACK-MIB.
Знак «+» перед именем MIB (не файла с MIB, а именно имя MIB), значит,
что MIB будет добавлен к загружаемым по умолчанию.
Посылаем автоматически
Способ #2. Пишем скрипт, который проверяет системные параметры и
посылает трап на станцию менеджера. Пишется на shell, perl или на
любом известном языке.
Способ #1. Наиболее интересный. В 5-й версии net-snmp появиласть
поддержка модуля DISMAN-EVENT-MIB котрый умеет отсылать сообщения при
некоторых условиях. Но это уже другая история.
juniper snmp traps по горячим следам
cat ./mib-jnx-smi.txt > ./juniper
1615 cat ./mib-jnx-js-smi.txt >> ./juniper
1616 cat ./mib-jnx-ex-smi.txt >> ./juniper
1617 cat ./mib-jnx-exp.txt >> ./juniper
1619 cat ./mib-jnx-ping.txt >> ./juniper
1626 cat ./mib-jnx-syslog.txt >> ./juniper
1631 cat ./mib-jnx-pmon.txt
snmpttconvertmib --debug=2 --in=./juniper --out=/usr/local/etc/snmp/snmptt_config/JUNIPER-MIB.snmptt --severity=Normal --exec='/usr/local/libexec/nagios/submit_service_check_result $r TRAP 2'
цифра после TRAP означает состояние после получения трапа. 2 — фейл. 0 — ок.
И письмо Лехи Александрова:
Команда конвертации
snmpttconvertmib —debug=2 —in=/usr/local/etc/snmp/snmptt_mib/CISCO-IPSEC-FLOW-MONITOR-MIB.my —out=/usr/local/etc/snmp/snmptt_config/CISCO-IPSEC-FLOW-MONITOR-MIB.snmptt —severity=Normal —exec=’/usr/local/libexec/nagios/submit_service_check_result $r TRAP 2′
Добавление сконвертированного конфига в snmptt.ini
[TrapFiles]
# A list of snmptt.conf files (this is NOT the snmptrapd.conf file). The COMPLETE path
# and filename. Ex: ‘/usr/local/etc/snmp/snmptt.conf.generic’
snmptt_conf_files = <
nagios.log timestamp convert to hr format
cat /var/spool/nagios/nagios.log | perl -pe 's/(\d+)/localtime($1)/e'
nrpe selinux trouble
chcon -t nagios_services_plugin_exec_t /usr/lib64/nagios/plugins/check_mem_linux.pl
chcon -t nagios_unconfined_plugin_exec_t /usr/lib64/nagios/plugins/check_disk
audit2allow в пакете policycoreutils-python