[Zabbix] Zabbix 모니터링 설정
[Zabbix] Zabbix 모니터링 설정
안녕하세요? 정리하는 개발자 워니즈입니다. 이번시간에는 대표적인 모니터링 도구로 알려진 Zabbix 모니터링 설정에 대해서 정리해보도록 하겠습니다.
필자가 속한 프로젝트에서는 Zabbix를 활용하여, 모니터링을 진행하고 있는데요. 처음에는 어떤식으로 모니터링을 하는지, 어떻게 설정을 하고 Metric들을 수집하는지 궁금했었습니다. 하지만, 지난 포스팅에서 아키텍처 및 설치 가이드작성시에 이부분은 어느정도 해소가 되었다고 봅니다.
지난 포스팅은 아래를 참고 해 주시기 바랍니다.
이번포스팅에서는 자빅스에 대해서 정리를 하되, 제가 궁금했던 것들 위주로 의식의 흐름(?) 대로 정리를 해보도록 하겠습니다.
1. 자빅스의 모니터링 방식
자빅스의 모니터링 방식은 크게 2가지 방식으로 되어있습니다.
- Active(10051 port / trapping 방식)
- 사전조건으로 agent 설정 파일에서
serverActive
의 ip를 지정해주어야 그 ip를 참조해서 데이터를 전송할 수 있습니다. - Agent -> Server로 데이터를 전송하는 방식입니다.
- item 구성 시 Zabbix Agent (active)를 선택하면 Active 방식으로 사용가능합니다.
- 사전조건으로 agent 설정 파일에서
- Passive(10050 port / polling 방식 / Default)
- 기본 셋팅값으로 다른 설정이 필요 없습니다.
- Server -> Agent로 데이터를 수집하는 방식입니다.
- item 구성시 Zabbix Agent 를 선택하여 구성합니다.
액티브 vs 패시브의 차이가 가장 극명하게 나타나는 부분은 Metric 수집을 서버
에게 하는냐 아니면, 에이전트
들이 하느냐 인데, 아무래도 액티브를 추천을 많이 합니다.
이유는, 각 에이전트
들이 직접 메트릭을 서버
에게 보내게 되면, 서버가 계속해서 체크해야될 부분이 줄어들고, 부하가 나눠진다는 부분에서입니다. 정확한 내용은 아래의 링크를 참고 바랍니다.
자빅스 공식 게시판 : Active VS passive
2. 자빅스 모니터링 셋팅
자빅스에서 신규 장비(Host)를 추가하게 될 경우, 셋팅해야되는 부분에 대해서 정리를 해보겠습니다. Zabbix의 호스트는 감시하고자 하는 네트워크에 연결된 물리적 또는 가상 엔티티를 말합니다.
2-1. 호스트의 추가
Zabbix에서 설정된 호스트에 대한 정보는 [Configuration] -> [Host]에서 확인할 수 있습니다.
위에 보이시는 것처럼 다음을 셋팅합니다.
- Host Name
- Groups
- Agent interfaces (IP)
위의 예시로 든 서버에 실제로 zabbix-agent
가 설치가 되어있어야 하고, 그에 따른 설정이 모두 완료 되어있어야 합니다.
# vi /etc/zabbix/zabbix-agentd.conf
Server={IP를 입력해주세요.}
ServerActive={IP를 입력해주세요.}
Hostname=AWS_PRD_AP_A_LOG => host name 과 일치 해야합니다.
2-2. 신규 아이템 추가
아이템이란 Zabbix에서 데이터를 수집하는 기본이 됩니다. 위에서 만든 Host 에 접속하게 되면, 상단 메뉴에 Items
가 보일 것입니다. [Items] > [Create Items]를 클릭합니다.
필자 같은 경우는, text파일에 값이 있으면, 알람을 울리고자 셋팅했습니다.
- Name
- Type
- Key
위의 내용들을 입력해주고, 특히 Key부분이 중요한데, 자빅스에서 제공해주는 Standard items목록이 나옵니다.
그중에서 [vfs.file.contents[file,\]]
다음을 선택했습니다. Retrieving contents of a file. Returns text
내용은 text파일안에 내용물이 있는지를 체크한다는 것입니다.
2-3. 신규 트리커 추가
자! 이제 위에서 셋팅한 내용까지는 Metric을 수집하는 상태까지 되었습니다. 만약에 items에서 text파일에 무엇인가 생기게 되면, 알람을 주고자 합니다.
트리거는 데이터의 허용 수준의 임계 값을 정의하는 조건식이 포함됩니다.
수신데이터가 이 수준을 초과하면 트리거가 “fire” 또는 “실패” 상태로 주의가 필요한 이벤트가 발생했음을 알립니다. 레벨이 다시 허용 범위안으로 되면, 트리거가 “정상” 상태로 돌아갑니다.
위에서는 다음을 입력했습니다.
- Name
- Severity
- Expression
여기서 중요한 것은 바로 표현식입니다. 어떤 임계치를 셋팅할 것인지를 수식으로 표기하면됩니다.
{AWS_PRD_AP_A_LOG:vfs.file.contents["/mon/nodejs/elastic/b2c_request_parameter.log","UTF-8"].iregexp(.*parameter.*,#1)}=1
필자 같은 경우는 위에서 셋팅한 파일을 정규식 표현으로 찾아서 있으면, 알람을 주는 것으로 했습니다. 반대로 표현식에 걸리지 않으면, 정상 범주로 돌아갑니다.
2-4. 장애 알람 수신
위의 내용까지 정리가 된 것은, 대시 보드상에 알람 표기까지 된 것입니다. 실제로 text파일에 parameter라는 내용이 들어가게 되면, 문제가 발생한것으로 판단이 되고, 자빅스는 알람을 표기합니다.
하지만, 외부(E-mail, slack 등)로 알람을 전파하기 위해서는 media type
을 이용할 수 있습니다.
[Administration] > [Media types] 에서 신규로 지정을 할 수 있습니다.
필자가 속한 프로젝트에서는 주로 Slack
을 통해서 알람정보를 주는데, script방식으로 shell 파일을 호출 하도록 셋팅했습니다.
#!/usr/bin/python
# -*- coding: utf-8 -*-
"""
Zabbix Slack Alert Script
"""
import sys
from slacker import Slacker
import datetime
if __name__ == '__main__':
if len(sys.argv) != 3:
exit(1)
subject = sys.argv[1]
message = sys.argv[2]
now = datetime.datetime.now()
slack2 = Slacker('{키값을 입력하시면 됩니다.}');
slack2.chat.post_message('#1_zabbix_alert', message, subject, icon_url='https://slack-files2.s3-us-west-2.amazonaws.com/avatars/2018-09-03/427265766240_93cb1056b2d21077acaf_48.png');
여기까지면 굉장히 간단해보였다. 그런데, 사실 media type
이라는 것은 단순히 알람 전파를 해주는 수단으로 보면 될 것 같습니다. 실질적으로는 actions
라는 곳에서 수행하게 되는데, 다음과 같이 셋팅이 되어있습니다.
[Configuration] > [Actions] 에 들어가게되면, 신규로 액션을 생성할 수 있습니다.
실질적으로 셋팅 하게 되는 부분은 다음과 같습니다.
- Default subject
- Default message
위의 slack notification mediay type에 보면, 제목 + 메시지 전달을 하고 있습니다. 그부분이 이 actions에서 수행하게 되고, 파라미터들을 mediat type으로 전달해서 발송하게 됩니다.
즉, [actions]에서 파라미터에 대한 셋팅을 수행한 후, [media types]로 전달을하여 발송합니다.
3. 마치며..
이번 시간에는 자빅스에 대한 모니터링을 어떻게 하면 수행할 수 있는지에 대해서 정리를 해보았습니다. 자빅스라는 툴은 오픈소스이지만 기능적으로 유료 못지않게 굉장히 다양한 기능들을 갖고 있습니다. 자빅스에 대한 포럼도 진행할 만큼 그 유저수도 많고, 버전업도 계속해서 되고 있습니다.
위의 내용은 굉장히 기본적으로 셋팅해 볼 수 있는 내용이였습니다. 특히 items 에서 key에 대한 내용이 중요한 것 같습니다. metric을 어떻게 수집하고 어떤 용도로 알람을 줄지를 많이 고민해야 될 것 같습니다.
다음 이시간에는 자빅스의 템플릿에 대해서 정리를 해보겠습니다.