2009년 7월 10일 금요일

SYSLOG-NG 자료

 

 

 

 

시스로그 구축 방법은 인터넷에 많이 있습니다.

 

보통 리눅스에서도 RPM 설치 지원 하고 있고요.

 

일반적으로 RPM 설치후  syslog-ng.conf 파일을 적절히 수정 하고 MySQL만 설치 하면 됩니다.

 

영어로 되어 있지만 잘 설명 되어 있는 자료들입니다.

 

개념은 시스템 시작 혹은 CRON 으로 실행 시키고 날아오는 시스로그 메시지를 조작해 syslog-ng.pipe 파일을 생성한다면 무한 루프에 syslog-ng.pipe 라는 파이프 파일이 생길때마다 DB에 넣는 방식을

취하고 있습니다.

 

 

 

 

 

 

SYSLOG-NG와 MySQL 을 이용한 시스로그 응용 하기

syslog-ng 와 데이타베이스개념은 시스로그 메시지가 날라 오면 filter 키워드에 의하여 걸러진 시스로그는 

templete 에 의하여 MySQL 의  쿼리를 실행하게 되는데 실행시 쿼리를 이용하여 적절하게 메시지를 분석하고 그에 맞는 처리를 합니다.
그리고 난후 log에 의하여 destination이결정 되게 되는데 DB뿐 아니라 실행파일 실행, 텍스트 형태든 어떤 방식이든 로그를 남길수 있습니다.
예를 들면  INSERT ~ SELECT 문 에 의하여  SELECT 문의 조건에 부합 되지 않으면 안 넣게 할수도 있습니다.
뒤에 SELECT 문에 JOIN 을 써서 적절한 데이타를 뽑아 낼수도 있습니다.


주의 할점은 쿼리가 큰 경우에는 쿼리 실행이 늦어 지므로 최적화를 반드시 해야 하고 될수 있는한 쿼리를 단순화 하여
짧게 만들어야 합니다.

 

mysql 및 syslog-ng 만으로 구현한 것입니다.


예전에 장비담당으로 장비 유지 보수할때 관리하던 네트워크 장비들을 DB에 넣고 SNMP 및 PHP의 소켓을 이용하여 장비 점검 시스템을 구축 했던 적이 있었는데 

LINUX 상에서 장비 점검 시스템 구현 할때 사용 했던 것 입니다.  여러가지 쿼리를 구현하다보니 무리가 있었지만 JOIN 의 경우 간단한 데이타만 참조 하고 쿼리 속도만 빠르게 한다면 무리 없이 사용 할수 있을 것입니다.

자체적으로 시스로그 없이 할수 있는 것이 DB와 리눅스 뿐이었으므로 쿼리는 복잡하지만 비용없이 간단하게 구현 할수 있을 겁니다.

 

 

일반적으로




다음은 syslog-ng.conf 의 내용입니다.

# 옵션 부분 건드릴 필요 없음

options {
    sync (0);
    time_reopen (10); #
재실행시 대기 시간
    log_fifo_size (4096);
    long_hostnames (off);
    use_dns (no);
    use_fqdn (no);
    create_dirs (no);
    keep_hostname (yes);
};

 

#시스템 커널 소스 -- 사용안하므로 주석 처리
#source kernsrc { file ("/proc/kmsg" log_prefix("kernel: ")); };

 

# 네트워크 의 모든 주소로 부터 오는 시스로그 메시지 캡춰
source src {
    unix-stream ("/dev/log");
    internal();
    udp(ip(0.0.0.0) port(514));
};

 

# filter 필터명 { 조건 명령어들 };

# destination 목적지명 {
    pipe("/var/log/syslog.pipe" template("
임시파이프에남길텍스트") template-escape(yes));
    -->
일종의 버퍼인 파이프에 임시로 저장한후 외부 프로그램으로 해당 텍스트를 DB에 넣던지 마음대로 요리 할수 있음
    program("
쉘프로그램");

    --> 특정 프로그램 실행

    file("기록남길 파일 경로명")

    --> 파일로 쌓이게 하기

}

 

OR 연산자를 사용한 두개의 문자가 포함 되었을 때

 

filter invalid_fail { match("invalid") and match("bad");};

# match 는 특정 문자가 포함 되어 잇을때 사용 , 정규식 사용가능
#
문자가 포함 되어 있을때 SQL 명령 실행

destination  invalid_fail  {
 pipe("/var/log/syslog.pipe" template("
INSERT INTO `dev_operation` (IP_ADDRESS,`
지점`,`사업장`,`장비모델`,MEMO,OPER_TIME,TYPE,LEVEL)

SELECT '$HOST',`지점`,`사업장`,`장비타입`,'$MSG','$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','INVALID',3 FROM device.nms WHERE `대표IP` ='$HOST';\n
") template-escape(yes));
#};

à 해당 호스트에 해당하는 정보를 장비DB에서 얻은후 받은 시간과 메시지타입을 찍어서 DB에 넣는다.

엔터문자로 구분 하였으나 모두 붙여서 사용해야 됨

 


#
정규식 사용가능 Regular Expression

filter 5972_uplink_removed {match("(73|74|75) removed"); };
destination  5972_uplink_removed {
 pipe("/var/log/syslog.pipe" template("INSERT INTO `dev_operation` (IP_ADDRESS,`
지점`,`사업장`,`장비모델`,OPER_TIME,MEMO,TYPE,LEVEL) SELECT '$HOST',`지점`,`사업장`,`장비타입`,'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$MSG','UPLINK_REMOVED',1  FROM device.nms WHERE `대표IP` ='$HOST';\n") template-escape(yes));
};

# AND 연산자를 이용하여 다중 논리 사용가능
filter dasan_linkon { match("[0-9]{1,2} link on") and match("operational"); };

# MySQL의 SUBSTRING_INDEX 를 이용하여  숫자를 추출 하였습니다.
destination  dasan_linkon {
 pipe("/var/log/syslog.pipe" template("UPDATE inet_user AS iu, megapass as n SET iu.ON_USE_TIME='$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC' WHERE n.WIRECD = iu.WIRECD AND n.INET_TIE = iu.INET_TIE  AND iu.INET_TERM =CONCAT('1',LPAD(TRIM(SUBSTRING_INDEX(SUBSTRING_INDEX('$MSG','port',-1),'link on',1)),3,'0')) AND n.IP_ADDRESS ='$HOST';\n") template-escape(yes));
};

 

문자중 특정 숫자를 필터링
## CPU
부하 --> 90% 이상만 필터링

# 현재값 CPU overload warning : CPU load [91] > threshold low [70]
filter dasan_cpuload {match("CPU") and match("overload") and match("warning");  };

 

MySQL의 SUBSTRING_INDEX 를 이용하여  숫자를 추출 하였습니다.

추출후 SUBSTRING_INDEX(SUBSTRING_INDEX('$MSG','load [',-1),'] >',1) > 95 LIMIT 1 와 같이 쿼리를 사용하면 95% 이상 넘어서는 시스로그 메시지만 걸러 내어 DB에 넣을수 있다.

 

destination  dasan_cpuload {
 pipe("/var/log/syslog.pipe" template("INSERT  INTO `dev_operation` (IP_ADDRESS,`
지점`,`사업장`,`장비모델`,OPER_TIME,MEMO,TYPE,LEVEL)  SELECT '$HOST',`지점`,`사업장`,`장비타입`,'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','$MSG','CPULOAD',1  FROM device.nms WHERE `대표IP` ='$HOST' AND   SUBSTRING_INDEX(SUBSTRING_INDEX('$MSG','load [',-1),'] >',1) > 95 LIMIT 1;\n") template-escape(yes));
};


 

match 에서 맥주소 형태의 정규식 쓰는 경우


# 
비정상맥 흘리는 공격 감지
#  22:75:77:97:ce:7d PORT[5] blocked

filter dasan_mac_flood {match("[a-zA-Z0-9]{1,2}\:[a-zA-Z0-9]{1,2}\:[a-zA-Z0-9]{1,2}\:[a-zA-Z0-9]{1,2}\:[a-zA-Z0-9]{1,2}\:[a-zA-Z0-9]{1,2} PORT\[[0-9]{1,2}\] blocked") and match("mac-flood-guard");};
destination  dasan_mac_flood {
 pipe("/var/log/syslog.pipe" template("INSERT INTO `dev_operation` (IP_ADDRESS,`
지점`,`사업장`,`장비모델`,OPER_TIME,TYPE,VALUE,MEMO,LEVEL,INPUT_TAG) SELECT '$HOST',`지점`,`사업장`,`장비타입`,'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','MAC_FLOOD',SUBSTRING_INDEX('$MSG',' PORT[',1),'$MSG',2,(SELECT IF(COUNT(*)>0,'N','Y') FROM dev_operation WHERE STATUS IS NULL and TYPE='MAC_FLOOD' AND OPER_TIME<'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC' AND OPER_TIME>=DATE_SUB('$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC', INTERVAL 30 MINUTE) AND IP_ADDRESS ='$HOST' AND SUBSTRING_INDEX('$MSG',' PORT[',1) GROUP BY VALUE) FROM nms WHERE `대표IP`='$HOST';\n") template-escape(yes));
};

 

 SELECT 를 이용하여 DB를 참조 할 필요 없는 경우 VALUES 를 바로 사용하여 직접 넣을수 있다 DB를 참조 하지 않기 때문에 입력 속도가 빠르다.

destination  dasan_mac_flood {
 pipe("/var/log/syslog.pipe" template("INSERT INTO `dev_operation` (IP_ADDRESS,`
지점`,`사업장`,`장비모델`,OPER_TIME,TYPE,VALUE,MEMO,LEVEL) VALUES ('$HOST',`지점`,`사업장`,`장비타입`,'$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC','MAC_FLOOD',SUBSTRING_INDEX('$MSG',' PORT[',1),'$MSG',2,,'Y')]\n") template-escape(yes));
};

 

 

# 그냥 파일로 쌓이게 하기
destination std {
 file("/checkup/syslog/HOSTS/$HOST/$YEAR/$MONTH/$YEAR$MONTH$DAY_$HOST_syslog.txt"
  owner(root) group(root) perm(0600) dir_perm(0700) create_dirs(yes)
 );
};


#
스크립트 실행 시키기
destination phpRun {
 program("/www/sbin/phpscript.php" template("$YEAR-$MONTH-$DAY $HOUR:$MIN:$SEC $HOST $LEVEL $MSG\n") template_escape(no));
};

log { source(src);  destination(phpRun); };



# filter
의 형태로 걸리면 destination 으로 보내어서 SQL 문을 실행 시킨후 특정 DB에 넣음
log { source(src); filter(dasan_cpuload); destination(dasan_cpuload); };
log { source(src); filter(5972_loopblock); destination(5972_loopblock); };
log { source(src); filter(dasan_linkfail); destination(dasan_linkfail);  };
log { source(src); filter(5972_install); destination(5972_install); };
log { source(src); filter(5972_removed); destination(5972_removed); };
log { source(src); filter(5972_uplink_installed); destination(5972_uplink_installed); };
log { source(src); filter(5972_checksum); destination(5972_checksum); };
log { source(src); filter(dasan_fanfault); destination(dasan_fanfault); };

# destination
이 여러개 될수도 있음
log { source(src);  filter(5972_loop);  destination(5972_loop); destination(5972_loop2); destination(5972_loop_devicemac); };


 

 

 

2009년 7월 5일 일요일

CSS 구조 및 사용법

 


CSS의 선언

 

 태그이름.클래스명 하위태그,

 태그이름.클래스명 하위태그 {

  세부속성이름1: 세부속성값;

  세부속성이름2: 세부속성값;

 }

 

 

 

예시)


p.text {
  margin: 0;

  color: blue;
}

<p class=text> CSS </p>

 

CSS 선택자

1) *

    모든 태그를 의미한다.

    * { font-weight: bold;}  - 모든 태그의 글자를 BOLD체로 한다.


    p { background-color: blue };

 

   div.search * {
     vertical-align: middle
   }

 

이렇게 하게 되면 div.search 의 모든 엘리먼트내에 모든 태그들에 가운데 정렬이 된다.

 

<div class=search> <font  color=blue>파랑</font></div>

이렇게 된다면 font 태그에서도 vertical-align: middle 이 적용 된다는 말이다.

 

2) 태그이름 - HTML 에 있는 태그이든 임의로 만든 태그이든 상관 없음

    aaa { background-color: blue; }

   <aaa>글자 </aaa>

   글자의 배경색을 파랑색으로 만든다.

 

3) 점 -- 태그이름.클래스명
   *.클래스명 ,  . 클래스명

   * 은 생략가능하다

 

   p.blue { background-color: blue }; // p 태그에 있는 blue 클래스를 적용한다.
  <p class=blue>파랑</p>

 

   *.blue { background-color: blue };

   .blue { background-color: blue };

 

   <div class=blue>파랑</div>

   <span class=blue>파랑</span> 와 같이 아무태그에 모두 적용된다.

 

4) #

 

태그이름#ID이름

  div#blue { background-color: blue };

 <div id=blue>파랑</div>  파랑

태그이름을 생략 하게 되면 모든 태그에 적용이된다.

id 는 예를 들어 태그의 이름을 구분 하여 name 과 같이 많이 쓰는데

객체에 id로 이름표를 붙이게 되면 위와 같이 #을 사용해서 CSS 를 적용하게 된다.

 

변형된 형태

 

다음과 같이 하위에 또 적을수도 있다.  하위 선택자라고 한다.

상위 선택자가 적용 되는 하위에 모든 태그에 적용이 된다.

ul#list a:visited {
color: #999;
}

ul 태그 사용한곳에 id를 list 라고 적은 태그 를 감싼 안쪽 부분에 A 태그 를 사용 했다면

IE에서 방문 했던 URL의 색깔을 #999999 로 정한다는 의미이다

<ul id=list>

   <li><a href="www.google.com">구글</a></li>

<ul>

구글을 방문 했다면 #999999 색으로 변하게 된다.

 

ul#list li {
color: #999;
}


<ul id=list>

   <li>aaa</li>

<ul>


 li 태그에 #999999 색을 적용한다

 

 

 

2009년 7월 3일 금요일

깨끗한 혈관을 유지 하기 위한 열가지 수칙

 

깨끗한 혈관을 유지 하기 위한 열가지 수칙

  1. 하루에 5가지 이상의 채소와 과일
  2. 현미와 잡곡으로 혼식
  3. 육류섭취를 줄이고 가급적 살코기만
  4. 콜레스테롤 수치 300mg 이하로 제한 - 계란 1개
  5. 일주일에 두번 등푸른 생선
  6. 동물성 단백질 대신 콩 단백질 선택
  7. 호두 등 견과류
  8. 소급 섭취량 하루 4그램 이하로 제한
  9. 술은 맥주 1캔 이하로 절제
  10. 금연

 

 

오스킨 한의원 :  http://www.o-skin.co.kr

 

불면증 치료 수칙

 

불면증 치료 수칙

 

  1. 규칙적인 생활
    정해진시간에
    반드시 일어난다.
  2. 멜라토닌 호르몬 분비를 위해 낮에 활동
  3. 수면제는 될수 있는한 먹지 핞는다.
  4. 각성물질이 들어 있는 음식은 피한다.
  5. 잠을 못잔다는 불안감을 떨친다.

2009년 7월 2일 목요일

부자들이 들려주는 돈 관리 7가지

 

 1. 다른 사람을 위한 사업이 아니라 자기 자신을 위한 사업을 하라

  ㅇ 자신의 경제적인 길을 찾는게 아니라 다른 사람이 경제적인 길을 빨리 찾도록 도와주는 유형

      - 직원이 되어 상사들과 주인들을 부자로 만든다.

       - 채무자가 되어 은행들과 채권자들을 부자로 만든다

       - 납세자가 되어 정부를 부자로 만든다

      - 소비자가 되어 다른 많은 사업체를 부자로 만든다.

  ㅇ 수입은 수동적인 수입을 늘리고, 지출은 자산구축을 위해 사용

      - 부채(집, 자동차 등 쓸데없는 지출) 를 늘리지 말것.

      - 직원이 되어 매달 월급을 받아 수입을 올리는 것은 다른 사람을 부자로 만드는 일이다. 

  ㅇ 빚을 줄이고, 나의 자산에서 나오는 현금흐름 (수동적인 수입)을 늘리도록!  

 

2. 당신의 현금흐름을 통제하라

  ㅇ 자신의 현금흐름을 관리하라.

      -  자산 구축에 먼저 지출하라

      -  부채로 들어가는 지출은 가장 나중에

      -  수입 --> 자산 구축 (지출) --> 수입 --> 자산 구축 (지출) 

  ㅇ 앞으로 5년후 어느 사분면에서 대부분의 수입을 올릴 것인가..  

 

3. <위험해 보이는 것>과 정말 <위험한 것>의 차이를 알라

  ㅇ 위험한 것?

      - 배우지 않는 것

      - 경제적 훈련과 지식이 부족한 것

      - 안전하고 안정적인 직장에 의존하는 것!

      - 자산을 사는 것은 위험하지 않으나, 사람들이 자산이라고 말하는 부채를 사는것은 위험.

      - 봉급에 의존하는 것은 위험한가?

      - 매달 갚아야 할 빚이 있는것?

  ㅇ 위험하지 않은 것?

      - 사업과 투자

      - 매달 수입을 발생시키는 자산을 갖는 것

      - 시간을 내어 경제나 금융을 배우는 것

  ㅇ 현금흐름의 방향을 아는 것이 가장 중요하다

      - 경제적인 지식은 눈으로 숫자들을 보는 것

      - 집은 부채가 될 수도 있고 자산이 될 수도 있다

        (집에서 수익이 나오면 자산, 집으로 돈이 들어가면 부채)

  ㅇ 금융 IQ

      -  현금이나 노동을 자산으로 바꿔 현금흐름을 만드는 능력

      - 누가 더 영리한가? 당신인가 당신의 돈인가?

 

4. 어떤 유형의 투자가가 될 것인지 결정하라

  ㅇ C타입 : 나는 아무것도 모릅니다. 형 투자가들

      - 경제적 문제들을 회피하는 것은 아주 나쁜 습관이나,

        자신의 분야가 아닌 경우 시간을 많이 투자할 필요가 없음. 

  ㅇ B타입 ; 해답을 추구하는 투자가들

      - 전문가에게 물어서 투자할 수 있음.

      - 다각화는 B 타입의 투자가에게 권유됨.  

  ㅇ A타입 : 문제 추구형 투자가

      -  문제는 기회로 이어진다.

      - 경제적인 빠른 길에 들어서려면 특정 유형의 문제를 해결하는데 능숙한 사람이 되어야 함.

      - 사업가와 투자가에게 필요한 기술을 배우고, 더 큰 문제들을 해결하도록 노력할 것.

  ㅇ 4단계에서 능숙해진 후 --> 5, 6단계의 투자가가 될것!

      - 작게 시작해서 점점 규모를 키울것.

      - 경제관련 세미나, 조언, 교육을 받을것.

  ㅇ 7단계 투자자 유형

      - 1단계 : 투자할 돈이 전혀 없는 사람

      - 2단계 : 돈을 빌려 신나게 쓰기만 하는 사람

      - 3단계 : 저축만 하는 사람

      - 4단계 : 영리한 척 하는 투자가 : 투자할 필요성은 알고 있으나, 경제적인 지식은 없는 사람.

      - 5단계 : 장기적인 투자가 : 투자 필요성을 분명히 인식하고, 장기투자. - 투자계획을 세울것.

      - 6단계 : 능숙한 투자가 : 자신들의 돈을 능숙하게 투자

      - 7단계 : 자본가  : 타인의 재능, 돈 등을 능숙하게 굴린다.

 

5. 당신만의 스승을 찾아라

  ㅇ 에베레스트 산에 오를려면 거기에 가본 사람에게 물어볼 것.

  ㅇ 역할모델(자신이 가고자 하는 길)을 찾아 배우고,

        반대되는 역할모델(자신이 가면 안되는 길)도 찾아 배울것.

  ㅇ 누군가와 시간을 보내는가는 당신의 미래이다.

      - 자신의 주변사람들 중 누구에게 배울것인가.

      - E/S/B/I 사분면 각각에 속한 주변 사람들을 구분하여 배울것.

 

6. 실망을 당신의 자산으로 만들어라

  ㅇ 실망을 내재적으로 처리하는 방법에서 차이가 난다.

      - 성공의 크기는 욕망의 크기, 꿈의 크기, 그리고 실망을 다루는 방식에 따라 정해진다.

  ㅇ "실망할 것에 대비하라"

      - 실망할 것을 기대하라 : 실패를 두려워 말것, 실패를 통해/실망을 통해 좌절하지 말고 배운다.

      - 늘 곁에 스승을 두어라 : 단점을 극복 해 줄 수 있는 스승에게 물어볼것.

      - 자신에게 친절하라 : 자신의 탓으로 실패한 것에 너그러울것.

      - 진실을 얘기하라. : 자신의 감정을 잘 통제하고, 자신이 진실로 원하는 것을 찾을 것.

            변명하지 말것. 합리화 하지 말것. 진정한 자신의 모습을 바라볼것. 

  ㅇ 행동으로 옮길 것.

      - 실수를 할것 - 실수에서 배울것.

      - 약간의 돈을 마련하여 작게 시작해 볼것. 그러면서 관심을 가지면서 배울것.

      - 행동할 것 - 그냥 해 볼것.

 

7. 자신에 대한 믿음을 가져라.

  ㅇ 자신을 믿기로 결정하는 유일한 사람은 당신 자신이다.

  ㅇ 자신이 문제라고 생각해야 문제이다. (다름 사람이 문제라고 말하는 것은 문제가 아니다)

  ㅇ 자신 내면의 진실을 외면하지 말것.

 

에버노트에서 원노트로 데이터 옮겨오기

에버노트를 무료로 이용하려면 한달에 업로드 할 수 있는 용량이 60M 밖에 되지 않습니다. 원노트도 에버노트만큼 기능이 개선되었고 무엇보다도 무료로 사용 할 수 있고 용량의 제약이 없어서 최근에는 업무 및 정보 수집 용도로 에버노트를 이용중입니다...