ISP`s IT Аутсорсинг
Быстрый переход: Главная блога Главная сайта Форум
Если Вы чего то недопоняли или не нашли - задайте
вопрос на нашем форуме и мы попробуем Вам помочь.
Subnets.ru Регистрация IP и Автономных систем mega-net.ru

Архивные статьи в категории ‘FreeBSD’

Добро пожаловать в блог! Надеемся, что Вы еще вернетесь.

Приехали на инсталл очередные серверы:

  • IBM  x3250 M2 [4194K1G]
  • Intel на материнке S5520UR

Оба c RAID-контроллерами LSI SAS 1064E :

mpt0@pci0:1:0:0:        card=0x03061014 chip=0x00561000 rev=0x02 hdr=0x00
vendor     = 'LSI Logic (Was: Symbios Logic, NCR)'
device     = 'SAS 3000 series, 4-port with 1064E -StorPort'
class      = mass storage
subclass   = SCSI

На IBM используются обычные SATA диски, а на Intel — SCSI, организованные в RAID-1 (зеркало), который FreeBSD видит как устройство da0.

И все бы ничего, но syslog на одном из серверов (после физического удаления и последуюшего возвращения на место  одного из хардов) выдал в messages вот такую инфу:

Oct 21 22:16:28 bill kernel: mpt0:vol0(mpt0:0:0): RAID-1 - Degraded
Oct 21 22:16:28 bill kernel: mpt0:vol0(mpt0:0:0): Status ( Enabled Re-Syncing )
Oct 21 22:16:28 bill kernel: mpt0:vol0(mpt0:0:0): Low Priority Re-Sync
Oct 21 22:16:28 bill kernel: mpt0:vol0(mpt0:0:0): 170387769 of 285155328 blocks remaining
Oct 21 22:16:59 bill kernel: mpt0: mpt_cam_event: 0x14
Oct 21 22:17:43 bill kernel: mpt0: mpt_cam_event: 0x14
Oct 21 22:19:43 bill last message repeated 3 times

Резонно возник вопрос: «А как посмотреть текущее состояние RAID?».

А вот тут-то меня поджидал бааальшой облом, т.к. «решения в лоб» ничего не знают про его состояние:

[intel:~] camcontrol periphlist da0

pass0:  generation: 4 index: 1 status: MORE
da0:  generation: 4 index: 2 status: LAST
[intel:~] camcontrol inquiry da0
pass0: <Intel Logical Volume 0001> Fixed Direct Access SCSI-2 device
300.000MB/s transfers , Command Queueing Enabled

и утилиты из портов (make search key=' LSI ' | more) ничего не знают про 1064E.

В гугле же нашлось два решения:

1. Анализировать состояние переменной sysctl dev.mpt.0.nonoptimal_volumes:

если значение не равно нулю, то есть проблемы с состоянием RAID.

2. Собрать из сорцов mptutil (сохраненная в архиве копия сорцов). Сборка, как ни странно, прошла «на ура»: просто даем «make«. После сборки mptutil запустилась — уже хорошо:

[intel:~] mptutil

usage: mptutil [-u unit] <command> ...

Commands include:
show adapter              - display controller information
show config               - display RAID configuration
show drives               - list physical drives
show events               - display event log
show volumes              - list logical volumes
fail <drive>              - fail a physical drive
online <drive>            - bring an offline physical drive online
offline <drive>           - mark a physical drive offline
name <volume> <name>
volume status <volume>    - display volume status
clear                     - clear volume configuration
create <type> [-vq] [-s stripe] <drive>[,<drive>[,...]]
delete <volume>
add <drive> [volume]      - add a hot spare
remove <drive>            - remove a hot spare

Пробуем получить состояние массива:
[intel:~] mptutil show volumes

mpt0 Volumes:
Id     Size    Level   Stripe  State  Write-Cache  Name
da0 (  136G) RAID-1          OPTIMAL   Disabled

То, что нужно!

Дальнейшее использование информации о состоянии RAID-массива ограничено только вашей фантазией.

З.Ы. Сборка и работоспособность mptutil тестировалась на FreeBSD 7.0 и 7.2 — везде полет нормальный.

З.Ы.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Панфилов Алексей (lehis (at) subnets.ru)

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

Сделал очередной портапгрейд… вообщем как обычно:

portsnap fetch update && portupgrade -a

и получил:

startx

Enlightenment found Evas can’t load JPEG files. Check Evas has JPEG
loader support.

вообщем иксы не стартуют больше (что является следствием обновления порта graphics/jpeg до 7 версии)…

Что делать ?

Вот что помогло мне вернуть X11 к жизни:

  • portupgrade -f edje
  • portupgrade -f *evas*
  • pkg_info | grep enlightenment-
    enlightenment-0.16.999.042_2,2 A very artistic X window manager
  • portupgrade -f enlightenment-0.16.999.042_2,2

после пересборки иксы с Enlightenment поднялись и работают

З.Ы. для тех кто не знает что есть portupgrade:

Port:   portupgrade-2.4.6_3,2
Path:   /usr/ports/ports-mgmt/portupgrade
Info:   FreeBSD ports/packages administration and management tool suite
Maint:  ruby@FreeBSD.org
WWW:    http://wiki.freebsd.org/portupgrade

З.З.Ы. Рекомендуется к периодическому прочтению /usr/ports/UPDATING, где можно найти соответствующую инфу:

20090719:
AFFECTS: users of graphics/jpeg
AUTHOR: dinoex@FreeBSD.org

jpeg has been updated to 7.0.
Please rebuild all ports that depends on it.

If you use portmaster please use:
portmaster -r jpeg-
Or if you would prefer a more gradual approach:
portmaster -w jpeg- (Check the man page for more information)
If you use portupgrade please use:
portupgrade -fr graphics/jpeg

З.З.З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (Еще не голосовали)
Загрузка...
Отправить на почту Отправить на почту

Сегодня столкнулся с проблемой на quagga и процессом bgpd.

Перезапуск bgpd нифига не помог, т.к. процесс поднимается и сразу падает…

В логах:

2009/04/30 10:58:09 BGP: Assertion `len < str_size' failed in file bgp_aspath.c, line 619, function aspath_make_str_count
2009/04/30 10:58:09 BGP: No backtrace available on this platform.
2009/04/30 10:59:02 BGP: BGPd 0.99.11 starting: vty@2605, bgp@<all>:179
2009/04/30 10:59:08 BGP: %ADJCHANGE: neighbor ХХХ.ХХХ.ХХХ.150 Up
2009/04/30 10:59:21 BGP: Assertion `len < str_size' failed in file bgp_aspath.c, line 619, function aspath_make_str_count
2009/04/30 10:59:21 BGP: No backtrace available on this platform.

Все до сегодняшнего дня работало на quagga-0.99.11_1

Полазав по инету решил пересобрать quagga, т.к. в портах появилась: quagga-0.99.11_2

Обновился до quagga-0.99.11_2 и проблема исчезла.

Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 1, среднее: 5,00 из 5)
Загрузка...
Отправить на почту Отправить на почту

ng_ipacct — Netgraph IP accounting

Для работы этого примера необходимо иметь подгруженные модули:

  • ng_ipacct.ko
  • ng_ipfw.ko
  • ng_ksocket.ko

Убедиться в их наличии можно командой:

/sbin/kldstat

Id Refs Address Size Name
1 11 0xc0400000 35e5f8 kernel
...
3 1 0xc4ceb000 3000 ng_ipacct.ko
4 1 0xc4cee000 4000 ng_ksocket.ko
5 1 0xc4d6d000 2000 ng_ipfw.ko

Если модули не загружены, то можно пересобрать ядро добавив следующее:

options NETGRAPH
options NETGRAPH_ETHER
options NETGRAPH_SOCKET
options NETGRAPH_TEE

options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=1000

либо загрузить это модулями:

/sbin/kldload /boot/kernel/ng_ipfw.ko

/sbin/kldload /boot/kernel/ng_ipacct.ko

/sbin/kldload /boot/kernel/ng_ksocket.ko

Устанавливаем порт /usr/ports/net-mgmt/ng_ipacct:

cd /usr/ports/net-mgmt/ng_ipacct

make install clean
В /etc/rc.conf добавляем:

ng_ipacct_enable="YES"
ng_ipacct_modules_load="YES"


Для примера будем собирать трафик для подсети 172.16.5.0/24 с интерфейса bge1

Итак сам скрипт на PERL, пусть он находится в папке /scripts и называется ipacctd_ng.pl

#! /usr/bin/perl

$rul=64000;                                                         #номер начального правила в файере
$iface="bge1";                                                     #интерфейс
$threshold=100000;                                              #максимальное количество записей
$verbose="1";                                                      #расширенная статистика
$savetime="1";                                                     #метка юникс тайма в файл статистики
$nodename=sprintf("ipacct_%s",$iface);                   #имя ноды
$hookprefix=$iface;                                               #крючочки (хуки) в нетграф ;-)

if($ARGV[0] ne "start" and $ARGV[0] ne "show" and $ARGV[0] ne "stop"  and $ARGV[0] ne "restart"){
            error();
}else{
          if($ARGV[0] eq "stop"){                          #stop
                   stop_ng_ipacctd($nodename);
          }elsif($ARGV[0] eq "show"){                    #дампим трафик в файл
                   #проверяем загружен ли ipacctd
                   if(check_ipacctd($iface,$rul)==0){
                              stop_ng_ipacctd($nodename);
                              `/bin/sleep 3`;
                              start_ng_ipacctd($nodename,$hookprefix,$rul,$iface,$verbose,$threshold,$savetime);
                   }else{
                              $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s checkpoint",$nodename,$hookprefix);
                              `$cmd`;
                              $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s show",$nodename,$hookprefix);
                              `$cmd`;
                              $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s clear",$nodename,$hookprefix);
                              `$cmd`;
                   }
          }elsif($ARGV[0] eq "start"){
                  start_ng_ipacctd($dbh,$nodename,$hookprefix,$rul,$iface,$verbose,$threshold,$savetime);
          }elsif($ARGV[0] eq "restart"){
                 stop_ng_ipacctd($nodename);
                 `/bin/sleep 3`;
                start_ng_ipacctd($dbh,$nodename,$hookprefix,$rul,$iface,$verbose,$threshold,$savetime);
          }
}

###функция выводящая аргументы запуска==============================
sub error{
      printf "\nUsage: (start|stop|restart|show)";
      exit;
}

###функция start==================================================
sub start_ng_ipacctd{
         $net="172.16.5.0/24";
         #проверяем загруженность модулей
         @modules=("ng_ipacct.ko","ng_ipfw.ko","ng_ksocket.ko");
         foreach(@modules){
             if(chk_mdl($_)==0){
                `/sbin/kldload $_`;
             }
         }
         #формирование ноды нетграфа
         $cmd_ng=sprintf("/usr/sbin/ngctl -f- <<-SEQ
         mkpeer ipacct ctl ctl
         name .:ctl %s
         mkpeer %s: ksocket %s_in inet/raw/divert
         name %s:%s_in %s_in
         msg %s_in: bind inet/0.0.0.0:3021
         mkpeer %s: ksocket %s_out inet/raw/divert
         name %s:%s_out %s_out
         msg %s_out: bind inet/0.0.0.0:3022
         rmhook .:ctl",$nodename,$nodename,$hookprefix,$nodename,$hookprefix,$nodename,$nodename,$nodename,$hookprefix,$nodename,$hookprefix,$nodename,$nodename);

        `$cmd_ng`;
         $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s dlt RAW",$nodename,$hookprefix);
         `$cmd`;
         $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s verbose %s",$nodename,$hookprefix,$verbose);
         `$cmd`;
         $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s threshold %s",$nodename,$hookprefix,$threshold);
         `$cmd`;
          $cmd=sprintf("/usr/local/sbin/ipacctctl %s:%s savetime %s",$nodename,$hookprefix,$savetime);
         `$cmd`;

          #формируем правила в фаирволе IPFW для перенаправления трафика в ноду нетграфа
          $cmd=sprintf("/sbin/ipfw add %s divert 3021 ip from %s to any",$rul,$net);
          `$cmd`;
          $cmd=sprintf("/sbin/ipfw add %s divert 3022 ip from any to %s",$rul,$net);
          `$cmd`;
           print "ipacct has started..\n";
}

###функция stop==================================================
sub stop_ng_ipacctd{
        `sh /etc/rc.firewall`;
         $cmd=sprintf("/usr/sbin/ngctl shutdown %s:",$nodename);
         `$cmd`;
         print "ipacct has stoped..\n";
}

###функция проверки загрузки модулей================================
sub chk_mdl{
       $chk=`/sbin/kldstat | /usr/bin/awk '/$_/ {print 1}'`;
       if(!$chk){
           return 0;
        }else{
          return 1;
        }
}

###функция проверки ipacctd========================================
sub check_ipacctd{
        $ch1=$ch2=$ch3=0;
        $cmd=sprintf("/usr/sbin/ngctl list | grep %s_in",$iface); #проверяем входящий хук нетграфа
        $check=`$cmd`;
        if($check){
              $ch1=1;
        }

        $cmd=sprintf("/usr/sbin/ngctl list | grep %s_out",$iface); #проверяем исходящий хук нетграфа
        $check=`$cmd`;
        if($check){
              $ch2=1;
        }

        $cmd=sprintf("/sbin/ipfw show | grep divert"); #проверяем наличие правил в файерволе
        $check=`$cmd`;
        if($check){
             $ch3=1;
        }

         $all_ch=$ch1+$ch2+$ch3;
         if ($all_ch < 3){
                return 0; #чего-то явно не хватает
         }else{
               return 1; #все ОК!
         }
}

После старта мы можем посмотреть правила в фаирволе:
/sbin/ipfw show 64000
64000 1551459105 504714065010 divert 3021 ip from 172.16.5.0/24 to any
64000 2103320289 2367292643626 divert 3022 ip from any to 172.16.5.0/24

По команде:

/usr/sbin/ngctl list

можем посмотреть ноды и хуки нетграфа:

There are 7 total nodes:
Name: ngctl12701 Type: socket ID: 000c36ff Num hooks: 0
Name: ipacct_bge1_out Type: ksocket ID: 00097d52 Num hooks: 1
Name: ipacct_bge1_in Type: ksocket ID: 00097d51 Num hooks: 1
Name: ipacct_bge1 Type: ipacct ID: 00097d50 Num hooks: 2
Name: ipfw Type: ipfw ID: 0005f4a3 Num hooks: 0
Name: bge1 Type: ether ID: 00000002 Num hooks: 0
Name: bge0 Type: ether ID: 00000001 Num hooks: 0

Сделаем еще один маленький скриптик, который будет нам складывать статистику в файл.

Назовем его trafgen.pl

#!/usr/bin/perl

$tmp="/usr/local/var/trafd/tmp";    #папка для логов
opendir DIR,$tmp or mkdir $tmp;
closedir DIR;
$log=sprintf("%s/ipacctd.log",$tmp);
system("/scripts/ipacctd_ng.pl show >> $log");  #вызываем наш предыдущий скрипт с аргументом show

в /etc/crontab добавляем строчку:
*/5 * * * * root /scripts/trafgen.pl >/dev/null

Формат данны файла статистики при включенных опциях verbose=1 и savetime=1:
src_IP src_Port dst_IP dst_Port Proto packets bytes unixtime

Пример данных в фале:

172.16.5.211 57349 95.132.7.128 19904 6 1069 822400 1239961920
172.16.5.102 2208 217.118.24.17 7777 6 321 14958 1239961920
172.16.5.91 64835 92.100.50.249 59039 6 426 596900 1239961920
172.16.5.209 64829 77.41.95.94 43768 17 1 58 1239961923
172.16.5.76 1425 195.218.181.123 80 6 4 976 1239961924
172.16.5.188 61651 195.50.197.187 63375 6 1 48 1239961925
172.16.5.220 28988 94.179.59.61 20473 6 5 747 1239961929
....
80.252.240.202 11417 172.16.5.108 60682 17 1 47 1239961922
78.37.156.14 1451 172.16.5.220 28988 6 6 685 1239961922
97.84.143.186 17834 172.16.5.209 64829 17 2 134 1239961922
77.234.8.71 36523 172.16.5.220 28988 17 1 95 1239961924
195.189.47.2 2987 172.16.5.220 28988 17 1 131 1239961925
195.230.112.239 63403 172.16.5.220 28988 6 6 801 1239961930
60.220.156.222 27808 172.16.5.157 34613 17 4 504 1239961932
93.186.239.96 80 172.16.5.101 2720 6 3 358 1239961933

Обратите внимание, что сначала идет трафик исходящий и лишь затем входящий!!!
Все, дальше зависит только от полета Вашей фантазии (или извращенности 🙂 )

Вы можете обрабатывать файлы и складировать их в БД (напрмер MySQL) и т.п.

Плюсы от использования ng_ipacct:

  • держит большие объемы трафика
  • меньшая загрузка cpu по сравнению с обычным ipacct (/usr/ports/net-mgmt/ipacctd)

P.S. После пересборки ядра обязательно пересобрать порт /usr/ports/net-mgmt/ng_ipacct (если он был установлен до этого)

Чтиво:

  • man 4 ipacct
  • man 8 ipfw
  • man 4 netgraph
  • man 4 ng_ipfw

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Folio
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 4, среднее: 3,75 из 5)
Загрузка...
Отправить на почту Отправить на почту

Заметка

Столкнулся с задачей мониторинга серверов, без изобретения велосипедов и рисования графиков самостоятельно, а чтобы было всё в одном месте, удобство управления, разграничение прав пользоватеей, реагирование на те или иные события.

Для этого замечательно подходит Zabbix, он умеет собирать данные как по SNMP так и через установку собственного агента на сервера. Мы будем рассматривать вариант сборки данных с FreeBSD через SNMP v3 с авторизацией.

Коротко о главном

Сначала собираем net-snmp, на том хосте (хостах) с которого хотим получать данные, из портов c опциями:

cd /usr/ports/net-mgmt/net-snmp
make install WITHOUT_IPV6=yes NET_SNMP_SYS_CONTACT="root@mydomain.ru" NET_SNMP_SYS_LOCATION="server location"

для запуска snmp сервиса добавляем в /etc/rc.conf:

snmpd_enable="YES"
snmpd_conffile="/etc/snmpd.conf"

в /etc/snmpd.conf пишем единственную строку с именем пользователя, который будет «читать» нас через SNMP:

rouser  пользователь

А теперь самое интересное — добавляем пользователя в SNMP.

Пароль должен быть минумум 8 символов, а процесс snmpd должен быть еще выключен.

net-snmp-config --create-snmpv3-user -ro -A ПАРОЛЬ -X ПАРОЛЬ имя_пользователя

запускаем, проверяем.

/usr/local/etc/rc.d/snmpd start

главное указать уровень доступа — authNoPriv, иначе будет ошибка — authorizationError

snmpwalk -v 3 -u пользователь -A пароль -l authNoPriv хост

Установка Zabbix‘а (/usr/ports/net-mgmt/zabbix) остаеться как домашнее задание

т.к. про установку и базовую настройку подробно расписано в документации, главное собрать с опцией:

—with-net-snmp

как получить данные с хоста по SNMP v3 сейчас я раскажу 🙂

Сначала надо добавить хост:

Configuration — Hosts -> Create host

Указываем имя для заббикса, адрес по которому с ним соединяться — ip/fqdn.
Теперь нужно собрать данные с хоста для мониторинга. Будем смотреть на загрузку процессора:

Configuration — Items — выбираем созданный хост -> Create Item

заполняем поля:

Type - SNMPv3 Agent
SNMP OID - host.hrDevice.hrProcessorTable.hrProcessorEntry.hrProcessorLoad.768
SNMPv3 security name - пользователя что добавляли в snmp ранее
SNMPv3 security level - AuthNoPriv
SNMPv3 auth passphrase и SNMPv3 priv passphrase - пароль пользователя
Key - system.cpu.util[ <,type> <,mode>]

Далее нам надо смотреть как то собранную информацию.. построим по ней график:

Configuration — Items — Graphs — выбираем хост -> Create Graph

Добавляем параметр для отрисовки — жмем Add у параметра Items, там нужно выбрать хост, и источник данных.
Ура! остается сохранить и наслаждаться.

Графики можно посмотреть в Monitoring — Graphs.

З.Ы. При копировании статьи ссылка на источник ОБЯЗАТЕЛЬНА !

Автор: Jekel
Ничего не понялТак себе...Не плохоДовольно интересноОтлично ! То что нужно ! (голосов: 6, среднее: 4,00 из 5)
Загрузка...
Отправить на почту Отправить на почту