시스템이야기2008. 11. 19. 18:40
서버에 접속한 유저가 어떤 명령을 내렸는지 실시간으로 확인하려면 어떻게 해야할까? history file을 뒤진다? 이건 너무 불편하다. 명령이 실행될 때마다 특정이벤트를 발생해서, 별도 저장해주면 효과적일 것이다. 그 것도 syslog를 통해서 명령이 저장된다면 원격지 서버에서 특정 서버의 실행 명령을 모조리 확인해볼 수 있을 것이다.

몇줄의 쉘 function으로 syslog로 실행명령을 보내는 방법을 알아보자.

function logging
{
        stat="$?"
        cmd=$(history|tail -1)
        if [ "$cmd" != "$cmd_old" ]; then
                logger -p local1.notice "[2] STAT=$stat"
                logger -p local1.notice "[1] PID=$$, PWD=$PWD, CMD=$cmd"
        fi
        cmd_old=$cmd
}
trap logging DEBUG

위 스크립트에서 중요한 부분은 logger와 trap이다.

1) logger는 지정한 메시지를 syslog로 보내주는 명령이다.
   위에서는 local1 서비스종류(facility)과 notice 레밸로 syslog로 메시지를 보내준다.
   logger의 활용에 대해서는 '여러 서버의 load를 터미널에서 실시간 모니터링' (글 좋은진호, 2008.2)
   중 '2. 미리 준비되어 있어야할 사항' 부분을 살펴보기 바란다.
2) trap은 bash내부 명령으로 특정시그널이 발생할 때 지정한 명령어가 실행된다.
   형식) trap "명령" 시그널
   위에서는 DEBUG 형태로, 명령이 실행될 때마다 logging function을 호출한다.

위의 스크립트를 global하게 적용하려면 /etc/profile 에 추가하거나 /etc/profile.d/cmd_logging.sh 로 저장하면 된다. 유저별로 적용하려면 $HOME/.bash_profile 또는 $HOME/.bashrc에 넣어둔다. 이제 적용됐는지 로긴해보자.

Sep 30 17:11:32 cnx1 coffeenix: [2] STAT=0
Sep 30 17:11:32 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=    7  ls -la
Sep 30 17:11:36 cnx1 coffeenix: [2] STAT=0
Sep 30 17:11:36 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=    8  vi get_stat.sh
Sep 30 17:15:24 cnx1 coffeenix: [2] STAT=0
Sep 30 17:15:24 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=    9  chmod 700 get_stat.sh
Sep 30 17:15:28 cnx1 coffeenix: [2] STAT=0
Sep 30 17:15:28 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=   10  ./get_stat.sh
Sep 30 17:15:35 cnx1 coffeenix: [2] STAT=0
Sep 30 17:15:35 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=   11  ls
Sep 30 17:16:31 cnx1 coffeenix: [2] STAT=0
Sep 30 17:16:31 cnx1 coffeenix: [1] PID=29168, PWD=/home/coffeenix, CMD=   12  cd /var/log
Sep 30 17:16:32 cnx1 coffeenix: [2] STAT=0
Sep 30 17:16:32 cnx1 coffeenix: [1] PID=29168, PWD=/var/log, CMD=   13  ls

시간표시를 자세히 보면 [2]가 먼저 저장되고, [1]이 그 다음에 저장된다. [2] 는 이전에 실행한 명령의 실행 결과 코드이며, [1]은 방금 실행한 명령이다. 방금 실행한 결과 코드는 다음 명령이 실행되어야 결과로 저장이 된다.

실행명령만 별도 로그로 저장하고 싶다면 /etc/syslog.conf 에 다음을 추가하고, syslogd 데몬을 재실행해주면 된다.

local1.notice                           /var/log/cmd.log

보다 자세한 것은 커피닉스에 써둔 '쉘에서 실행한 명령을 syslog로 자동 보내기'를 살펴보기 바란다.

Posted by 좋은진호
일상2008. 10. 17. 12:52
지난주 KTX열차표 발권을 위해 자동발매기 앞에 섰는데, 웬걸~ 이런 에러창이 떡하니 자리 잡고 있다.

01


에러창이 띄워져 있어도 역무원은 화면을 직접 보기 전에는 확인할 수 있는 방법이 없는 것 같다. 화면을 보지 않아도 문제가 발생했는지 알아낼 수 있는 있도록 프로그래밍할 수 있을 법한데... ^^

저런 에러창을 보면 익숙하면서 안타까운 마음이 든다. '윈도우는 자주 저렇지~~'라는 익숙함에 놀라며, '공공장소 시스템에서는 저런 화면 안볼 수 없나'라는 안타까움이 교차한다. 한가지 다행인 건 예전엔 KTX내 방송 화면에서 자주 파란화면이 뜨거나 다운되는 현상이 나타났는데, 요즘 줄었다는 것. ^^

2007/02/11 - [IT이야기] - linux everywhere (Delta 항공의 기내)
Posted by 좋은진호
IT이야기2008. 9. 3. 18:32
구글 크롬(Chrome) 베타에서 한글 파일 다운로드가 안되어서, 파이어폭스3의 about:config 처럼 설정하는게 있는지 찾아봤다. 아쉽게도 없었다. 그래서 about: 관련된 뭔가 있을 것 같아, 쥐잡듯이 뒤져봤다. 오~ 여러 개가 나온다. 초등학교 때 소풍가서 보물 찾았을 때 기분이 든다. 함께 찾아주신 '쿠사리줄까'님, 그리고 about: 명령을 해준 범냉이, sCag, 미르, 티니님께 감사.  ^^

  • about:blank
  빈 페이지

  • about:version 또는about:, chrome-resource://about/
  크롬의 버전 정보를 보여준다.
사용자 삽입 이미지

  • about:memory
  메모리 상태를 보여준다. 이는 '개발자 정보' -> '작업 관리자' -> '전문 통계'를 클릭했을 때와 같은 페이지다.
  이미지가 잘 안보이겠지만, 크롬, IE7, 파이어폭스3를 함께 띄워둔 상태이다.
사용자 삽입 이미지

  •  about:histograms
  흥미로운 정보이긴 한데, 의미를 정확히 모르겠다.

  • about:stats
  상태 정보를 보여준다. 맨 위에 'Shhh! This page is secret!'라는 문구가 웃음을 자아낸다. ^^
사용자 삽입 이미지

  • about:network
  네트웍 관련 상태 정보를 얻을 수 있는데, 이를테면 페이지를 읽을 때 읽어오는 파일 등을 트랙킹할 수 있다.
  화면에서는 다음 접속 후에 구글에 접속할 때의 트래킹된 결과이다.
사용자 삽입 이미지

  • about:plugins
  설치된 플러그인 정보를 보여준다.
사용자 삽입 이미지

  • about:crash
  '앗, 이런! 웹페이지를 표시하는 도중 문제가 발생했습니다. 계속하려면 새로고침을 누르거나 다른 페이지로 이동하세요.'라는 문구를 뿌려준다. 페이지 로딩시 문제 생길 때 이 페이지를 보여주려고 한 것 아닐까.
사용자 삽입 이미지

  • about:shorthang 과 about:hang
  표시되는 내용은 없다. hang은 페이지를 종료할 것인지 대기할 것인지를 물어보는 창이 뜨고, shorthang은 hang처럼 창이 뜨는데, 아주 잠깐 떴다가 선택을 하지 않으면 about:blank로 이동한다.

  • about:cache 또는 view-cache:
  캐싱된 문서 목록을 보여준다.
사용자 삽입 이미지

  • view-cache:stats
  캐싱된 문서 상태 정보를 보여준다. 'no disk cache'는 캐싱된게 없다는 표시
사용자 삽입 이미지

  • about:dns
  DNS 프리페칭 정보를 보여준다. 크롬이 페이지의 로딩 속도를 개선하기 위해서 DNS 프리페칭을 하는데, 이는 호스트에 대한 IP정보를 미리 가져온 다음에 웹요청하게 되면 더욱 빠르게 표시할 수 있기 때문이다.
사용자 삽입 이미지

  • about:internets
  윈도우의 화면보호기를 보는 것 같다. 이게 뭘 하기 위한 것인지는 모르겠으나 흥미롭다. 맨 위에 Don't Clog the Tubes! 가 보인다. 절대 '관'을 건들지 말기를... 건들면 화면이 멈춰버리는 것 같이 먹통이 된다. ^^
사용자 삽입 이미지

  • chrome-resource://new-tab/
  '자주 방문한 페이지' 기본 형태

2008/09/03 - [IT이야기] - 구글 웹브라우저, 크롬 사용기

Posted by 좋은진호
IT이야기2008. 9. 3. 13:21
구글 홈(www.google.co.kr)에서 현재 크롬(Chrome) 베타버전을 받을 수 있다. 윈도우 XP와 비스타용만 제공하며, 리눅스와 맥용은 현재 개발중이다. 크롬에 대한 자세한 내용은 http://www.google.com/chrome/?hl=ko
에서 살펴볼 수 있다. 느낌 위주의 간단한 사용기를 적어본다.

사용자 삽입 이미지

사용자 삽입 이미지

  • 느낌상 아주 가볍다.
  • 심플하다. 굵은 선보다는 가느다란 선. 메뉴조차 검색창 오른쪽에 작은 버튼으로만 보인다.
사용자 삽입 이미지

  •   페이지 로딩 속도가 빠르다.
크롬 옵션 -> 고급설정에 보면 'DNS 프리페칭으로 페이지 로드 속도 개선하기' 옵션이 체크되어 있는데, 이 것도 속도 향상에 한 몫한 것 같다. 그러나 가끔 느리거나 멈춰버린 것 같은 현상이 발생한다. CPU를 100% 잡고 있을 때도 있다. 크롬이 가장 먼저 해결해야할 문제이다. 특히 티스토리의 글쓰기 페이지에서 이미지 등록할 때(플래쉬로 동작) 글을 쓰기가 힘들 정도였다. (이글은 파이어폭스(Firefox)에서 쓰고 있다.)
  • 일반적인 새 탭, 새 창 이외에 '새 시크릿 창' 개념이 등장했다.
이 시크릿 창에서 열어본 페이지는 방문 기록, 검색 기록등이 남지 않으며, 쿠키 또한 남지 않는다. 함께 사용하는 데스크탑에서는 바로 이런게 필요했다.
사용자 삽입 이미지
  •   '새 탭'을 열 때 자주 방문한 페이지를 보여준다.
사용자 삽입 이미지

  •   '소스 보기'의 심플함
  파이어폭스는 새창에서 보여주고, 익스플로러는 메모장에서 보여준다. 그러나 크롬은 소스를 새로운 탭에서 보여주며, 마치 개발용 에디터에서 보는 것처럼 소스으 라인를 표시해준다.
사용자 삽입 이미지

  •   웹서버에 남는 브라우저명은 다음과 같다.
  Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13
  •   작업 관리자를 보면 파이어폭스 등은 한개의 프로세스가 뜨지만, 크롬은 2개 이상 뜬다.
 새로운 탭을 열면 이 프로세스는 증가한다. 그래서, 크롬에는 자체 '작업 관리자'를 제공하며, 구글에 따르면 탭별로 독립적으로 돌아가므로 하나가 다운되어도 다른 탭은 영향이 없다고 한다.

사용자 삽입 이미지

사용자 삽입 이미지

  •  웹 개발자를 위한 자바 스크립트 디버깅 메뉴, 요소 검사 기능 등을 제공한다.
사용자 삽입 이미지


해외에서는 익스플로러와 파이어폭스 모두 위협할만하다. 국내에서는 익스플로러에서 사용할 페이지는 어차피 그대로 익스플로러를 사용하게 될 것이니, 파이어폭스는 긴장해야하지 않을까. 파이어폭스처럼 강력한 확장 모듈만 제공해준다면 최고의 조건이다.

Posted by 좋은진호
시스템이야기2008. 8. 31. 00:55
로그 파일을 모니터링할 때 가장 유용하게 사용하는 명령이 tail이다. tail -f /var/log/messages 처럼 실행하면 messages에 새로 추가되는 로그를 실시간으로 모니터링할 수 있다. 서버를 조금이라도 다뤄본 사람은 수시로 tail -f 명령을 이용해봤을 것이다. 너무나 잘 아는 -f 옵션에 대해 얘기하려 했다면 이 글을 쓰지 않았을 것이다. ^^

-F 옵션은 사용하는 사람이 드물고 잘 알지도 못하는 경우가 많다. -F 는 -f 의 개선된 옵션으로 파일이 새롭게 생성되는 경우(rename, rotation 등)를 검사하여 파일을 새로 오픈해서 보여준다. 다음과 같은 상황일 때 유용하다.

1. 로그 파일이 로테이션될 때

error_log 파일을 tail -f error_log 명령으로 모니터링하고 있다. 이 error_log 파일은 특정 시간에 로테이션(현재까지 로그는 다른 파일명으로 변경되고 새롭게 error_log 파일이 생성)된다고 하자.
로테이션이 이뤄지게 되면, tail -f 명령을 다시 실행해서 모니터링해야 한다. 그러나 -F 옵션은 같은 파일명으로 새로 생성된 파일을 자동으로 파악하여 재실행없이 계속 모니터링할 수 있다.

2. 로그 파일이 심볼릭 링크되어 있는데, 링크되는 대상 파일이 자주 바뀔 때

다음과 같은 로그 파일이 있다.

-rw-r--r--  1 root      root      114556 Aug 27 11:58 log.20080827_AM
-rw-r--r--  1 root      root       44261 Aug 27 23:53 log.20080827_PM
-rw-r--r--  1 root      root       50704 Aug 28 11:54 log.20080828_AM
-rw-r--r--  1 root      root      100585 Aug 28 23:50 log.20080828_PM
-rw-r--r--  1 root      root      110558 Aug 29 11:44 log.20080829_AM
-rw-r--r--  1 root      root      157601 Aug 29 18:30 log.20080829_PM
lrwxr-xr-x  1 root      root           8 Aug 29 12:01 log.current -> log.20080829_PM

현재 이순간에는 log.20080829_PM 파일이 log.current 이름으로 링크되어 있다. 시간이 지나면, 새로운 파일명이 생성되고 신규 파일로 링크될 것이다. 이 때 tail -F log.current 명령으로 모니터링한다면 tail 명령을 재실행하지 않아도 지속적으로 모니터링할 수 있다.

위 tail 명령의 -F옵션은 리눅스와 FreeBSD에서 모두 사용할 수 있다.

Posted by 좋은진호