달력

82010  이전 다음

  • 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
  •  
  •  
  •  
  •  

flow-tools 유용한 기능

Etc 2010.08.24 17:19

차차 버젼 업데이트 할 것입니다.


flow-fanout

특정 플로우 데이터를 수신해서 두 곳으로 전송해줍니다.
플로우 데이터를 생성하는 곳을 A, 수신하는 곳이 B, C 일 때 A에서 한 곳으로 밖에 전송을 하지 못한다면 이 명령어를 사용하면 쉽게 해결 가능합니다.

flow-fanout [수신할 정보] [전송할 정보 B] [전송할 정보 C]

로 사용하면 간단하게 해결된다.

수신할 정보는 flow-capture 랑 동일한 형식을 지닌다.

0/0/500 과 같은 경우에는 모든 인터페이스에서 500 포트로 들어오는 모든 플로우 데이터를 읽는다는 의미를 가진다.

[수신할 인터페이스 주소]/[수신할 데이터의 출발지 주소]/[수신할 포트 번호]

플로우를 B에서 수신하고 C로 다시 전송하려면

flow-fanout 0/0/5000 0/0/5000 0/[C의 IP 주소]/5000

으로 하면 간단하게 해결된다.

Posted by Teshi
vim 을 이용하여 스크립트를 작성한다.

vim /etc/init.d/user_script


실행 권한을 준다.

chmod 777 /etc/init.d/user_script


부팅시 실행이 되도록 추가해준다.

update-rc.d user_script defaults


user_script는 사용하고 싶은 명칭을 사용하면 된다.
Posted by Teshi

nProbe 소스 코드는 알아서 구한다. (유료로 알고 있다. 연구실에서 구입해둔 4.0 소스코드 + 수정으로 컴파일)

컴파일 자체는 쉽다.

# sudo su -
# apt-get install zlib1g-dev
# apt-get install build-essential
# ./configure
# make
# make install



./configure 과정에서 에러가 난다면 에러 나는 원인을 찾아 apt-get 으로 설치하면 왠만큼 된다.

nProbe의 경우. 특히 나의 경우 365일 24시간 작동해야 한다. 그러기 위해서 아래와 같은 스크립트를 작성했다.
우선 환경을 설명하자면 2개의 네트워크 디바이스를 감시하여 플로우 데이터를 생성한다.
각각의 네트워크 디바이스는 다른 nprobe 프로세스를 가진다. 즉, 총 2개의 nprobe 가 작동해야 한다.
nprobe의 작동이 중지되면 다시 실행시킨다.


#!/bin/sh

#####기본 디렉토리 설정#####
run_dir=/bin
awk_dir=/usr/bin
nprobe_dir=/usr/local/bin
log_dir=/var/log/nprobe_log

#####플로우 데이터를 전송할 목적지 주소#####
destination_add="168.188.46.148:20000"

#####옵션값, 몇초 간격으로 업데이트 할 것인가? 디바이스 최대 수는 미 사용#####
watch_interval=5
max_device_num=2

#####로그 파일 생성#####
touch $log_dir

#####무한 반복#####
while [ 0 ]
do
        #####슬립#####
        sleep $watch_interval
        #####실행 시간 업데이트 (로그를 남기기 위함)#####
        date=`date`
        #####프로세스리스트를 업데이트#####
        get_process=`$run_dir/ps ax | $run_dir/grep -v grep | $run_dir/grep -v /bin/sh | $run_dir/grep nprobe | $awk_dir/awk '{print $5}'`
        #####디바이스 넘버를 업데이트#####
        get_eth_number=`$run_dir/ps ax | $run_dir/grep -v grep | $run_dir/grep -v /bin/sh | $run_dir/grep nprobe | $awk_dir/awk '{print $9}'`

        count=0

        #####프로세서 수 카운팅#####
        for instance in $get_process
        do
                if [ $instance = "/usr/local/bin/nprobe" ]
                then
                        #####nprobe 프로세스 갯수를 카운팅#####
                        count=`expr $count + 1`
                fi
        done

        if [ $count -eq $max_device_num ]
        then
                #####전체 프로세스가 작동할 경우 로그 남기고 종료#####
                echo "$date-process_count:$count" >> $log_dir
        elif [ $count -eq 1 ]
        then
                for eth in $get_eth_number
                do
                        #####하나가 모자란 경우 나머지 하나 실행######
                        echo "$date-process_count:$count - $eth" >> $log_dir
                        if [ $eth = "eth1" ]
                        then
                                echo "eth2 Device's nprobe is start" >> $log_dir
                                $nprobe_dir/nprobe -n $destination_add -i eth2 -G
                        else
                                echo "eth1 Device's nprobe is start" >> $log_dir
                                $nprobe_dir/nprobe -n $destination_add -i eth1 -G
                        fi
                done
        else
                ##### 모두 실행#####
                echo "$date-process_count:$count" >> $log_dir
                echo "All nprobe is start : MAY BE INITIALIZATION" >> $log_dir
                $nprobe_dir/nprobe -n $destination_add -i eth1 -G
                $nprobe_dir/nprobe -n $destination_add -i eth2 -G
        fi
done


실행은

# [스크립트 명] &

로 백그라운드로 실행하면 오케이.

Posted by Teshi
구성환경
Ubuntu 10.04 + [1TB HDD * 2]
2.6.32-21-generic Kernel



구성준비

우분투를 설치한 후에 mdadm을 설치하여 소프트웨어 기반의 레이드를 구성한다. 이때 mdadm은 Kernel을 업데이트 하기 때문에 Kernel을 최신 버젼으로 업데이트하는 것이 좋다. 기본적으로 네트워크 연결은 이루어져 있다는 것을 가정한다. 모든 작업은 root 계정을 통하여 이루어진다.

ID@hostname:~# sudo su -
root@hostname:~# apt-get update
root@hostname:~# apt-get upgrade
root@hostname:~# reboot


재부팅을 한 후에 mdadm을 설치한다.

ID@hostname:~# sudo su -
root@hostname:~# apt-get install mdadm
root@hostname:~# reboot


여기까지가 기본적으로 소프트웨어 기반의 레이드를 구성하기 위한 준비이다.



소프트웨어 기반의 레이드 구성

이 문서에서는 소프트웨어 기반의 레이드를 구성하기 위해 두개의 물리적인 1TB의 하드디스크를 사용하였다. 물리적으로 이전에 사용된 적이 없는 하드디스크이기 때문에 파티션을 나누어야 한다. 파일 시스템의 종류는 "Linux raid autodetect" 라는 것을 사용하기로 한다.
이 문서를 작성하는 상황에서 파일 시스템 ID 값은 fd 였다.
두개의 디스크에 파티션을 각각 생성하고 Linux raid autodetect 로 설정하게 되면 하드디스크는 준비가 완료 된다.

레이드 구성을 위해 준비했던 mdadm 설정파일을 수정한다.
/etc/mdadm/mdadm.conf 이 설정 파일이다. vim 혹은 gedit을 사용하여 파일을 열어본다. 파일을 열어보면 주석 처리 되어 있는 부분을 제외하고 DEVICES, CREATE, HOMEHOST, MAILADDR 이라는 항목이 자동으로 생성되어 있는 것을 확인 할 수 있다. 이 중에서 DEVICES를 수정하고 ARRAY라는 항목을 추가할 것이다. 아래의 항목을 참고하여 자기가 사용하는 시스템에 맞게 설정하도록 한다.

DEVICE [레이드에 사용할 파티션] [레이드에 사용할 파티션] [레이드에 사용할 파티션] ...
ex) DEVICE /dev/sdb1 /dev/sdc1
ARRAY [레이드 명칭] devices=[레이드에 사용할 파티션],[레이드에 사용할 파티션],....
ex) ARRAY /dev/md0 devices=/dev/sdb1,/dev/sdc1




파일을 저장하고 파일을 닫는다.
파일을 닫은 후에 아래와 같은 명령어를 입력하면 레이드가 구성이 된다.

root@hostname:~# mdadm --create [레이드 명칭] --level=[사용할 레이드 레벨] --raid-devices=[레이드에 사용할 파티션 수] [레이드에 사용할 파티션] [레이드에 사용할 파티션]
ex) mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1




여기까지 하면 레이드가 구성이 된다. 그 이후 과정은 일반적인 하드디스크 포맷 과정과 동일하기 때문에 간단하게 명령어만 아래에 설명한다.


root@hostname:~# mkfs.ext4 /dev/md0
root@hostname:~# mount /dev/md0 /data
 
Posted by Teshi