이번 포스팅에서는 hddtemp 패키지와 mrtg를 이용한 하드디스크 온도 모니터링 방법을 소개합니다.
- 전제조건 : mrtg가 셋팅되어 정상작동 하고 있을 것
순서가 반대로 되었지만 나중에 mrtg와 snmp에 대한 포스팅도 작성할 예정입니다.
● hddtemp 패키지
하드디스크의 온도를 알려주는 패키지입니다. 메인보드에서 반드시 S.M.A.R.T를 지원해야 한다는 전제조건이 있네요. 설치는 Fedora의 경우 yum 으로 간단하게 설치할 수 있습니다.
# yum list hddtemp
hddtemp.i386 0.3-0.15.beta15.fc9 installed
저의 경우엔 이미 설치를 하였기 때문에 위처럼 나오지만 설치가 안되신 분들은 아래 명령을 이용하여 설치할 수가 있습니다.
# yum install hddtemp
특별한 의존성 패키지도 없기 때문에 hddtemp만 설치될 것입니다. 명령은 "hddtemp"이고 아래와 같은 옵션으로 간단하게 온도를 체크할 수 있습니다. 저의 경우엔 SATA 하드디스크 3개가 장착되어 있기 때문에 디스크 디바이스가 "/dev/sda, /dev/sdb, /dev/sdc"이므로 디바이스 명을 인수로 주었습니다.
IDE방식은 /dev/hdx 형식으로 되어 있는 경우도 있으니 해당 머신의 디스크 디바이스를 확인해 주세요.
# hddtemp /dev/sda
/dev/sda: Hitachi HDP725032GLAT80: 35°C
# hddtemp /dev/sdb
/dev/sdb: WDC WD10EACS-00D6B0: 31°C
# hddtemp /dev/sdc
/dev/sdc: ST31000340AS: 31°C
제 리눅스 박스의 하드디스크는 디스크 장착베이에 팬이 달려있는 놈이라서 그런지 온도가 그렇게 높지 않네요!!
이제 mrtg에서 계산 하기 편하도록 하드디스크 모델명이나 단위는 빼고 숫자만 출력해보도록 하겠습니다.
# hddtemp -n /dev/sda
35
-n 옵션을 주니 간단하게 해결되네요.
아래는 mrtg의 환경설정 부분입니다. mrtg.cfg 파일을 수정하기 전에는 백업을 꼭 잊지마셔요;;
mrtg.cfg 파일은 yum을 이용하여 설치하였을 경우 디폴트로 /etc/mrtg/mrtg.cfg 에 존재합니다.
단.. 문제점이 있습니다. mrtg를 실행시켜 보면 아래와 같은 에러메시지가 출력됩니다. 뭐 특별히 신경쓰지 않아도 된다고 적혀있고 실제로 모니터링도 잘 되지만 문제는 cron에 등록된 mrtg가 실행될때마다 에러가 발생하니 메일박스에 아래 메시지가 계속 전송된다는 거죠.
2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n
/dev/sda': Expected a Number for 'out' but nothing'
2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n
/dev/sdb': Expected a Number for 'out' but nothing'
2008-09-27 20:15:01: WARNING: Problem with External get '/usr/sbin/hddtemp -n
/dev/sdc': Expected a Number for 'out' but nothing'
2008-09-27 20:15:02: ERROR: Target[hddtemp_sda][_OUT_] ' $target->[2]{$mode} ' did
not eval into defined data
2008-09-27 20:15:02: ERROR: Target[hddtemp_sdb][_OUT_] ' $target->[3]{$mode} ' did
not eval into defined data
2008-09-27 20:15:02: ERROR: Target[hddtemp_sdc][_OUT_] ' $target->[4]{$mode} ' did
not eval into defined data
전 5분 간격으로 mrtg로 체크하게 해놓았는데.. 이 에러메시지가 5분마다 메일박스에 차곡차곡 쌓여있습니다. ;ㅁ;
이 문제만 어떻게 해결한다면 좋겠는데.. 현재로는 뾰족한 해결방법을 찾지 못했습니다.
"2&>1 > /dev/null" 로 리다이렉트를 해보아도 소용없고.. crontab의 전송메일 주소를 바꾸어 보려 했지만 근본적인 해결책이 아니라 일단 그만두었습니다.
저도 이전에는 기본패키지만 설치하고 필요한 것들만 하나씩 컴파일 해서 사용했었는데 유지/보수를 생각한다면 yum을 이용한 패키지 관리를 추천합니다.
먼저 yum의 헬프 메시지를 볼까요.
>> yum 헬프메시지 보기 << 클릭
# yum --help
Usage: yum [options] COMMAND
List of Commands:
check-update Check for available package updates
clean Remove cached data
deplist List a package's dependencies
erase Remove a package or packages from your system
groupinfo Display details about a package group
groupinstall Install the packages in a group on your system
grouplist List available package groups
groupremove Remove the packages in a group from your system
help Display a helpful usage message
info Display details about a package or group of packages
install Install a package or packages on your system
list List a package or groups of packages
localinstall Install a local RPM
makecache Generate the metadata cache
provides Find what package provides the given value
reinstall reinstall a package
repolist Display the configured software repositories
resolvedep Determine which package provides the given dependency
search Search package details for the given string
shell Run an interactive yum shell
update Update a package or packages on your system
upgrade Update packages taking obsoletes into account
Options:
-h, --help show this help message and exit
-t, --tolerant be tolerant of errors
-C run entirely from cache, don't update cache
-c [config file] config file location
-R [minutes] maximum command wait time
-d [debug level] debugging output level
--showduplicates show duplicates, in repos, in list/search commands
-e [error level] error output level
-q, --quiet quiet operation
-v, --verbose verbose operation
-y answer yes for all questions
--version show Yum version and exit
--installroot=[path] set install root
--enablerepo=[repo] enable one or more repositories (wildcards allowed)
--disablerepo=[repo] disable one or more repositories (wildcards allowed)
-x [package], --exclude=[package]
exclude package(s) by name or glob
--disableexcludes=[repo]
disable exclude from main, for a repo or for
everything
--obsoletes enable obsoletes processing during updates
--noplugins disable Yum plugins
--nogpgcheck disable gpg signature checking
--disableplugin=[plugin]
disable plugins by name
--enableplugin=[plugin]
enable plugins by name
--skip-broken skip packages with depsolving problems
꽤 많네요... 그런데 옵션은 몇몇을 제외하고는 많이 쓰지는 않습니다. 명령어가 포인트이죠!! yum에는 이외에도 설정파일 및 저장소에 대한 정보 등등 다양한 기능+셋팅이 있겠지만 여기서는 일반유저들(저를 포함한)을 위한 기본적인 사용법에 대해서만 체크하도록 하겠습니다. 사실 이 블로그에 있는 문서들은 나~중에 제가 참고하기 위해 작성하는 면도 없지않아 있습니다.
"check-update" 커맨드를 이용하면 현재 시스템에 설치되어 있는 패키지들 중에서 업데이트 가능한 목록들을 쭈욱 보여줍니다. 보니 selinux와 tomcat도 업데이트가 되었네요. 자 그럼 위 패키지들을 실제로 설치를 해보겠습니다. 설치할때에는 하나씩 패키지를 지정해서 설치할 수도 있고 한꺼번에 모든 업데이트를 설치할 수도 있습니다.
● 패키지의 업데이트 업데이트된 패키지 중 일부만 지정해서 설치하는 경우
# yum [-y] update [패키지명1] [패키지명2] ....
업데이트 된 패키지들을 모두 설치 하는 경우
# yum [-y] update
이때 중간에 계속 진행할 것인지 물어보는 프롬프트가 뜨는데 프롬프트를 없애려면 "-y" 를 옵션을 하면 모든 프롬프트에 자동으로 "yes"를 입력해 줍니다.
● 패키지의 검색 및 인스톨 현재 시스템에 설치되어 있지 않은 패키지를 인스톨 하기 위해 먼저 아래와 같이 패키지를 검색합니다. 아래 명령은 검색어가 포함되어 있는 모든 패키지를 보여줍니다.
# yum search mc
그런데 search 커맨드는 검색어가 포함되어 있는 패키지는 모두 보여주기 때문에 위 명령어처럼 mc(midnight commander)를 검색하면 tomcat 도 같이 출력됩니다. 그러므로 가능하다면 패키지명을 확인한 뒤 list 명령어를 사용하는 편이 깔끔합니다.
# yum list mc Available Packages mc.i386 1:4.6.1a-50.20070604cv updates-newkey
Available 패키지로 표시되네요. 인스톨 하기전에 조금 더 자세한 정보를 보고 싶으시면 info 커맨드를 사용합니다.
# yum info mc.i386
text console file manager and visual shell이라고 설명이 나오네요. 윈도우즈에서 사용하는 Total Commander와 같다고 보시면 됩니다. ^^ 꽤 편리하니 강추입니다. 자 그럼 이제 패키지를 인스톨 하기 전에 혹시라도 이미 시스템에 설치되어 있는지 확인해 보겠습니다.
# yum list installed mc Error: No matching Packages to list
없네요! 그럼 이 편리한 툴을 설치하겠습니다.
# yum [-y] install mc.i386
.... 끝입니다. ;ㅁ; 간단하죠 ? 사실은 설치할때에도 여러가지 옵션을 이용하여 설치 디렉토리를 변경 하거나 하는것도 가능하지만 나중에 유지보수를 생각한다면 디폴트로 설치하는게 가장 편합니다. 그럼 이제부터 확인작업입니다.
# yum list installed mc Installed Packages mc.i386 1:4.6.1a-50.20070604cv installed # yum list mc Installed Packages mc.i386 1:4.6.1a-50.20070604cv installed
● 패키지의 삭제 패키지를 설치했다면 삭제할 일도 있겠죠. 삭제 할때에는 의존성 때문에 주의가 필요합니다. "--force" 옵션을 이용하면 의존성 무시하고 강제로 삭제할 수도 있지만 언제 어디서 에러가 발생할지 모릅니다. 하도 이리저리 엮여 있어서요.. 그러니 의존성 에러가 발생한다면 왠~만하면 그냥 놔두시라고 권해드립니다.
# yum remove [패키지명]
● 파일의 해당 패키지 확인 가끔가다 보면 이 파일이 도대체 어느 패키지에 속해있는 것인지 확인해야 할 때가 있습니다. 그럴때 provides 커맨드를 사용하실 수 있습니다.
# yum provides libdb-4.6.so db4-4.6.21-2.fc8.i386 : The Berkeley DB database library (version 4) for C Matched from: Other : libdb-4.6.so
db4-4.6.21-1.fc8.i386 : The Berkeley DB database library (version 4) for C Matched from: Other : libdb-4.6.so
db4-4.6.21-2.fc8.i386 : The Berkeley DB database library (version 4) for C Matched from: Other : Provides-match: libdb-4.6.so
위 명령어를 입력하면 "libdb-4.6.so" 파일이 어느 패키지에 해당되는지 알려줍니다. 저 파일은 "db4-4.6.21-2.fc.i386" 패키지에 포함되어 있는 파일이군요! 그럼 info 커맨드로 더 자세한 정보를 알아보는 것도 가능하리라 생각됩니다. 또한 *도 사용할 수 있네요.
# yum provides /usr/sbin/vg*
와 같이 이용하는 것도 가능합니다.
다음에는 yum의 conf파일이나 환경설정에 대해서 조금 더 알아보는 포스트를 작성해보도록 하겠습니다. 요기까지...
자 등록이 끝났습니다. 그런데 무언가 허전하지 않나요 ? 네, 맞습니다. 위 서비스 외에는 모든 접속을 불허하는 룰이 있어야겠지요. 일부 상용 제품에선 각 체인(용어는 틀리겠지만요)의 마지막에 "모든 접속 불허"라는 룰이 보이진 않지만 자동으로 지정되기도 하는데 iptables에는 그런게 없는듯 하네요.
# iptables -A INPUT -p TCP --dport 1:30000 -j DROP
이것으로 일단 기본 등록은 끝났습니다. 위에서 포트를 1:30000으로 지정하면 1번부터 30000번까지의 포트를 한번에 지정할 수 있습니다. 그럼 다시한번 상황을 살펴볼까요 ?
Chain FORWARD (policy ACCEPT) num target prot opt source destination
Chain OUTPUT (policy ACCEPT) num target prot opt source destination
네.. 이쁘게 등록이 잘 되었네요. +_+ 방화벽은 기본적으로 등록된 룰을 위에서부터 적용시키기 때문에 순서에 유의하셔야 합니다. 만약 잘못해서 DROP 밑에 룰이 추가된다면 그 룰은 제대로 동작하지 않으니 주의하세요. 참 하나가 빠졌네요... 서버에 계속 ftp접속 시도하던 호스트를 조사한 결과 인도 자카르타의 IP로 확인되었습니다. 호스트명 자체는 dns에 등록되어 있지 않은지라 어쩔 수 없이 같은 대역에 등록되어 있는 24bit를 모두 블록 시키겠습니다.
이제 설정이 모두 끝났는데 이걸로 끝일까요 ? 아닙니다.. 이상태에서 재부팅을 하거나 iptables 서비스를 정지시키거나 하면 등록된 정보들은 모두 날아가버립니다. 메모리에만 등록되어 있는 상태이기 때문이죠. 아래 명령어를 실행시켜 등록한 룰을 하드디스크에 저장하도록 합시다.
# /etc/init.d/iptables save iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]
이렇게 해서 앞으로 서비스를 재시작 하거나 재부팅을 해도 설정한 룰이 사라지지 않고 제대로 동작해줄거라 생각됩니다. 관심있으신 분은 /etc/sysconfig 디렉토리 밑에 있는 iptables, iptables-config 파일들을 살펴보시는 것도 좋겠네요.
Linux용 방화벽인 iptables에 대해서 문서를 작성해 볼 예정입니다.인터넷상에 관련 문서는 많이 있지만 체계적으로 정리된 문서가 적고..제가 이해력이 떨어져서 그런지 활용하기가 좀 어렵더군요.지금 현재 누군가가 서버에 ftp로 로그인하려고 하는 움직임이 있어서iptables를 이용해 차단하려고 합니다. +_+246-colo-bdg1.telkom.ne
현재 페도라를 이용해서 서버를 운영중입니다. 그리고 2월 21일에 yum 업데이트 체크를 한결과 pam관련 업데이트가 보여서 낼름 실행하였습니다.
Feb 21 11:52:28 Updated: pam - 0.99.8.1-17.fc8.i386 Feb 21 11:52:42 Updated: pam-devel - 0.99.8.1-17.fc8.i386
그런데 업데이트를 한 후에 알고보니 아래와 같은 에러메시지가 발생하면서 cron에 등록해놓은 스크립트들이 죄다 에러가 뜨고 있더군요.
/var/log/cron Feb 23 20:01:01 oneday crond[10693]: CRON (root): failed to open PAM security session: Module is unknown Feb 23 20:40:01 oneday crond[10733]: CRON (root): failed to open PAM security session: Module is unknown Feb 23 21:01:01 oneday crond[10734]: CRON (root): failed to open PAM security session: Module is unknown Feb 23 21:40:01 oneday crond[10758]: CRON (root): failed to open PAM security session: Module is unknown Feb 23 22:01:01 oneday crond[10765]: CRON (root): failed to open PAM security session: Module is unknown
그리고 인증관련 로그파일에서도 아래와 같은 에러가 발생하고 있었습니다.
/var/log/secure Feb 24 02:01:01 oneday crond[11027]: PAM unable to dlopen(/lib/security/pam_access.so) Feb 24 02:01:01 oneday crond[11027]: PAM [error: /lib/libpam.so.0: version `LIBPAM_MODUTIL_1.1' not found (required by /lib/security/pam_access.so)] Feb 24 02:01:01 oneday crond[11027]: PAM adding faulty module: /lib/security/pam_access.so Feb 24 02:01:01 oneday crond[11027]: PAM unable to dlopen(/lib/security/pam_limits.so) Feb 24 02:01:01 oneday crond[11027]: PAM [error: /lib/libpam.so.0: version `LIBPAM_MODUTIL_1.1' not found (required by /lib/security/pam_limits.so)] Feb 24 02:01:01 oneday crond[11027]: PAM adding faulty module: /lib/security/pam_limits.so
위와 같은 에러들이 스크립트 실행시간에 로깅되어 있었습니다.
물론 에러가 발생하면서 cron에 등록된 스크립들은 전혀 실행이 안되고 있었습니다. 결국 이틀간 백업이 안되어 있더군요. ;ㅁ;
해결방법은 간단합니다. cron데몬을 재실행 한 결과 에러없이 스크립트들이 실행되는 것을 확인하였습니다. 페도라 기준으로 아래와 같은 명령을 실행하는 것으로 해결 가능합니다.
[root@localhost]# /etc/init.d/crond restart
yum업데이트 하였을때 기억은 안나지만 특별히 재부팅 해야한다는 메시지는 본 적 없는 듯 한데.... 이렇게 문제가 발생하였네요..
원인은 pam인지 cron인지 잘 모르겠지만 새로이 갱신된 pam관련 파일들을 cron쪽에서 인식을 제대로 못한 듯 합니다.
특별히 로그감시 같은 것은 생각하지 않았는데 결국 스크립트를 하나 짜야할 듯 합니다. 중요 로그파일에서 fail, error 등등의 문자열이 있으면 알려주는 것으로요.
제일 좋은 방법은 메일로 통지해주는 것인데 ISP에서 25번 포트를 막아놓는 바람에 곤란하네요. 쯔압..
댓글을 달아 주세요