Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Contents

Zabbix

오픈마루에서는 zenoss를 사용해서 서비스를 모니터링했다. 그러다가 zabbix에 관심을 가지게 됐다. 이유는 지금 회사에서 사용하고 있기 때문이다. 익숙한 zenoss를 두고 zabbix를 사용하려고 하니 귀찮음이 폭풍처럼 몰려오지만 어쩌겠는가.

사실 zabbix가 처음은 아니긴 하다. 2006년 쯤인가 오픈마루에서 서비스들이 하나 둘 런칭될 때, 인프라와 서비스들을 모니터링해야 할 필요가 생겼고 이때 zenoss와 zabbix 중 어느걸 선택할지를 고민을 했었다. 결국 다음의 이유로 zenoss를 선택했다.
  • Zenoss는 모니터링 소프트웨어가 아닌 자원관리 소프트웨어를 표방했다. IT의 자원을 체계적으로 관리하는게 주요 목적이고, 모니터링은 목적을 효과적으로 달성하기 위한 주요 컴포넌트들 중 하나였다. 반면 zabbix는 모니터링을 전문으로 하는 소프트웨어였다. 나는 장기적으로 전체 IT 자원을 효율적으로 관리하기 위한 시스템을 구축하는게 목적이었기 때문에 zenoss에 더 마음이 갔다. 디바이스 등록에서 부터, 모니터링, 이벤트 발생과 관리 등등을 아우르는 구조도 마음에 들었다.
  • Zenoss를 이용해서 컨설팅을 하고 있었는데, 이를 위해서 완성도를 높일 필요가 있었던듯 싶다. 이때 이미 zenoss는 기업에서 써도 될만큼의 사용 편의성과 UI를 가지고 있었다.
  • 당시 모기업도 zenoss를 사용하고 있었다. 경험을 가진 조직으로 부터 정보를 공유할 수 있다는게 큰 장점이었다.
이런 이유로 zabbix는 설치해서 구경하는 정도로 끝내고 zenoss를 기반으로 자원관리 시스템을 구축했다. 모니터링이 아닌 자원관리 시스템이었다. 자원의 입고부터 출고까지의 라이프사이클 관리, 애플리케이션 배포, 모니터링, 이벤트 정책 수립, 이벤트 라이프사이클 관리..

준비 할 것들

  • 데이터베이스 : zabbix는 postgresql, mysql, sqlite3를 지원한다. 나는 그냥 익숙한 mysql을 사용하기로 했다.
  • Apache + php5 : zabbix server는 아파치+php5 기반의 프론트엔드를 제공한다. 미리 설치해 둬야 한다.
  • APM 환경을 구축하면 된다.
여기에서는 APM환경 구축은 다루지 않는다.

Zabbix 설치

Ubuntu 12.04에 설치하기로 했다. 2006년쯤인가 설치할 때는 이것 저것 대여섯개의 소스파일을 컴파일해야 간신히 설치가 가능했는데(zabbix를 쓰지 않은 이유이기도 하다. 당시에도 zenoss는 설치 패키지를 제공했다.) 지금은 패키지관리자를 이용해서 편하게 설치할 수 있다.

zabbix server 설치
# apt-get install zabbix-server}}}

zabbix php 프론트엔드 설치. 세상 편하네..

# apt-get install zabbix-frontend-php

zabbix agent도 설치한다.
# apt-get install zabbix-agent

웹서버 설정

zabbix 웹 프론트엔드 문서의 위치는 /usr/share/zabbix다. Apache의 root directory를 /usr/share/zabbix 로 설정한 다음 apache 서버를 제시작 한다.
<VirtualHost *:80>
        ServerAdmin webmaster@localhost

        DocumentRoot /usr/share/zabbix
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
......

데이터베이스 설정

mysql을 기준으로 설명한다. zabbix 데이터베이스를 만든다음 schema와 images, data를 입력해야 한다. 데이터베이스 생성 스크립트는 /usr/share/zabbix-server-mysql 디렉토리 밑에 있다.

# mysql -u root -p zabbix < schema.sql
# mysql -u root -p zabbix < images.sql 
# mysql -u root -p zabbix < data.sql 

초기 설정

웹 서버를 재시작하고 서버에 접근하면, 초기 설정 화면이 뜬다. 2. Check of pre-requissites에서 php측 설정이 제대로 돼 있는지를 검사한다. 요구사항(Required)에 맞도록 php.ini 파일을 수정하자. 파일의 위치는 /etc/php5/apache2/php.int 다. PHP time zone 설정은 php.ine의 date.timezone을 수정하면 된다. date.timezone = ASIA/SEOUL

https://lh5.googleusercontent.com/-DfAiUlInkHI/UWro2j2QvDI/AAAAAAAAC9s/hKCqduvJ11k/s640/zabbix7.jpg

다음 데이터베이스 설정부분이다.

https://lh5.googleusercontent.com/-hXqTR6tslOA/UWro2q90NcI/AAAAAAAAC9w/XQOE8vWybUk/s640/zabbix8.jpg

이걸로 끝

로그인

이제 웹 서버에 접근하면 로그인 페이지가 뜬다. 기본 계정은 admin/zabbix다. 로그인하면 대쉬보드가 뜬다.

https://lh4.googleusercontent.com/-kelSCL6n7Jw/UWmNSKpPpeI/AAAAAAAAC7M/rt5H_jQ3vso/s616/zabbix2.png

Brute froce attack 방지 정책

Brute force 공격을 막기 위해서 연속해서 5번 로그인에 실패하면, 30초동안 로그인이 금지된다.

유저관리

Zabbix가 설치되고 나면, "Admin" 유저와 "guest"유저 단지 2개의 유저만있다. Admin 유저는 사이트에 대한 모든 권한을 가지는 슈퍼유저고, guest 유저는 읽기 권한만을 가진 유저다.

"Administration" > "User" 에서 "Create user" 명령으로 새로운 유저를 만들 수 있다. 아래 예제에서 "yundream"이라는 이름을 가지는 유저를 만들었다. 이 유저의 타입은 Zabbix User로 Network administrators의 그룹에 속한다. 유저는 기본적으로 어떤 media(notification 방법) 도 가지지 않는다. Media를 클릭해서 어떤 정보를 통지(notification) 할지를 정할 수 있다.

https://lh3.googleusercontent.com/-BKuDsNEXn2M/UWmUAg4PszI/AAAAAAAAC80/yvo9iuGwVfU/s640/zabbix4.jpg

Media를 클릭하면 팝업창이 뜨는데, 여기에서 통지방법과 받을 사람, 통지할 이벤트의 레벨을 정의할 수 있다.

https://lh5.googleusercontent.com/-CEd6jIU4sJI/UWmUAUC-LyI/AAAAAAAAC7o/Yvf_mpGV3uw/s800/zabbix5.png

Media Type 설정

Media Type을 이용해서 유저에게 (이벤트 등을)통지할 매체를 정할 수 있다. "Menu" > "Administration" > "Media Type"에서 일설정을 할 수 있다. Media type에는 "Email, Jabber, SMS, Script"등이 있다. Email은 통상적인 이메일, Jabber는 메시징 프로토콜이다. SMS는 serial GSM 모뎀을 이용한 통지 방법이라고 하는데, 어디에 쓰는 물건인지 모르겠다. 나는 주로 script를 직접 만들어서 사용한다.

Script는 /etc/zabbix/alert.d 밑에 두고 사용하면 된다. 보통 이벤트 메시지는 "메일"과 SMS(단문 메시지) 서비스를 이용해서 보낸다. 메일은 그냥 mail 프로그램을 이용해서 보내면 되고, 단문메시지는 서비스 업체에서 제공하는 API를 이용한다. 아래는 간단한 mail 전송 스크립트다.
#!/usr/bin/bash
recipient=$1
subject=$2
message=$3

echo $message | mail -s "$subject" "$recipient"
Zabbix에서는 특정 조건을 만족하는 이벤트를 어떤 media type을 통해서 보낼 지를 지정할 수 있다. 만약 Script를 지정해싿면, script 프로그램을 recipient, subject, message 3개의 매개변수로 실행한다.

내가 script를 선호하는 이유는 이벤트를 다양한 방식으로 처리할 수 있기 때문이다. 이메일과 sms는 물론이고, bugzilla API 나 Jira API를 이용해서 이벤트 ticket을 만들어서 체계적으로 관리할 수 있다. 혹은 직접 이벤트 관리 소프트웨어를 만들어서 관리할 수도 있다. 개인적으로 moniwiki를 이용해서 이벤트 처리 시스템을 만드는 걸 선호한다. 요즘 moniwiki는 그다지 사용하지 않는 추세인데, 플러그인을 개발하기가 굉장히 쉬워서 사용하고 있다.

호스트 관리

이제 모니터링할 호스트를 등록하면 된다.

Host group

호스트들은 하나이상의 그룹에 포함되기 마련이며, 보통은 계층적 구조를 가진다. AWS에서 region 별로 분산되서 운용되는 웹 서비스가 있다고 가정해보자. 먼저 Linux server그룹으로 나눌 수 있을 것이다. 그리고 다시 web server 그룹과 database server 그룹으로 나눌 수 있을 것이고, 지역에 따라서 Tokyo-region, NVirgina-region, Ireland-region 등으로 관리할 수 있을 것이다. 유럽에서 서비스하는 리눅스 웹서버라면 Linux server > web server > Ireland 식의 계층화가 가능하다.

호스트들을 효율적으로 관리할 수 있으며 특히 이벤트가 발생할 때, 이벤트가 영향을 주는 위치를 빠르게 판단할 수 있다.

예컨데, host group을 이용해서 전체 시스템의 형상을 설계할 수 있다. 따라서 모니터링 초기에 신경을 써서 host group을 만들어야 한다.

앞서 설명한 대로 호스트는 계층적 구조를 가지며, 따라서 host group도 계층적 표현이 가능해야 할 것 같지만 zabbix의 host group은 계층 구조를 지원하지 않는다. 대신 하나의 호스트가 여러 host group에 속하게 하는 것으로 계층 구조를 지원한다.

호스트 등록

Configuration > Hosts > Create Host로 호스트를 등록 할 수 있다.

https://lh5.googleusercontent.com/-vGyINfGWTtk/UY0gHLRfmnI/AAAAAAAADC4/s3eiNBwoh5E/s640/zabbix12.jpg
  • Host name : 호스트 이름
  • visible name : 디스플레이 이름. 특정하지 않으면 host name이 사용된다.
  • Groups : 호스트가 포함될 그룹을 선택한다. 하나 이상의 그룹에 속할 수 있다.
  • New host group : 새로운 호스트 그룹을 만들수도 있다.
  • Agent interface : zabbix agent로 요청할 ip 주소다. zabbix agent의 기본 포트는 10050 이다.
  • SNMP interface : SNMP로 수집하기를 원한다면..
  • JMX interface : JMX로 수집하기를 원한다면..
  • IMPI interface : IPMI로 관리하기를 원한다면..
  • Monitored by proxy : Zabbix - Proxy를 거쳐서 수집하기를 원한다면

하위 문서들

제목 저자 변경일