본문 바로가기

IT

Zabbix 구축, Grafana 연동하기

반응형



Zabbix는 네트워크, 하드웨어, 서비스 등을 감시하고 추적하여 관리자에게 장애발생을 신속히 알리기 위해 만들어진 네트워크 관리도구 입니다.

사내 프로젝트로 시작됐다가 2001년에 일반공개 되었다고 하네요. 역사가 깊은 도구 입니다. 이상 WIKI자료 였습니다.


들어가며. Zabbix 모니터링 구성

  - 네트워크 스위치는 Agent를 설치 할 수 없으므로, SNMP를 통해 모니터링

  - 서버는 Agent 를 설치 하고 서버와 주기적인 통신 함

  - 서버 -> Agent 통신 시 10051 포트를 사용

  - Agent -> Server 통신 시 10050 포트를 사용

 *호스트명은 보안상 삭제 했습니다.



 

1. Zabbix 서버 설치

  가. Zabbix 서버 설치

      #레포지토리 설치

      yum install epel-release -y
      rpm -ivh rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
      (원하는 버전으로)
      #Zabbix 서버 및 필요한 소프트웨어 설치

      yum -y install zabbix-server-mysql zabbix-web-mysql mysql mariadb-server httpd php
      #DB 서비스 시작

      systemctl start mariadb
      #DB 서비스 자동시작(부팅 시)

      systemctl enable mariadb
      #DB 설정

      mysql_secure_installation
      mysql -u root -p
      create database ZABBIXDB;
      grant all privileges on ZABBIXDB.* to zabbix@localhost identified by 'PASSWORD';
      flush privileges;
      exit
      #초기 DB 생성

      cd /usr/share/doc/zabbix-server-mysql-3.2.4
      gunzip create.sql.gz
      mysql -u root -p ZABBIXDB < create.sql
  나. 각종 설정

      #방화벽설정
      -A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT     (web 포트)
      -A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT  (zabbix server 포트)
      -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT  (zabbix agent 포트)

      #Selinux 허가
      wget -O zabbix_server_add.te https://support.zabbix.com/secure/attachment/53320/53320_zabbix_server_add.te –no-check-certificate
      checkmodule -M -m -o zabbix_server_add.mod zabbix_server_add.te
      yum install policycoreutils-python      

      semodule_package -o zabbix_server_add.pp -m zabbix_server_add.mod
      semodule -i zabbix_server_add.pp

      #서비스 시작
      systemctl start zabbix-server
      systemctl enable zabbix-server

      systemctl start httpd
      systemctl enable httpd

 

      참 쉽죠?? 그다음 브라우저에 http://IP/zabbix 를 입력하면 아래와 같이 짠~ 나타납니다.

      초기 암호는 admin / zabbix 입니다.

      





      이렇게 두고 먼저 Agent 설정을 합니다. Agent 가 없으면 모니터링도구를 테스트 할 수 없겠죠?

 

2. Zabbix Agent 설치

 가. zabbix-agent 설치

      #agent 설치(centos 6)
      rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/6/x86_64/zabbix-release-3.4-1.el6.noarch.rpm
      yum install -y zabbix-agent

      #agent 설치(centos 7)

      rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
      yum install -y zabbix-agent

  나. zabbix 서버와 연동

      아래내용 수정
      vi /etc/zabbix/zabbix_agentd.conf
      Server=172.22.1.200
      ServerActive=172.22.1.200
      Hostname="hostname"

        *Agent 의 HostName 을 입력합니다. 서버에서 표시 될 Hostname 입니다.

  다. 방화벽 추가
      ###################### ZABBIX Access ######################
      -A INPUT -m state --state NEW -p tcp -s 서버IP/32 --dport 10050 -j ACCEPT
      ######################################################

  라. 서비스 시작

      service zabbix-agent start
      chkconfig —add zabbix-agent

 

3. Zabbix 서버에 Agent 추가

  설치를 마쳤으니 서버에서 Agent를 추가 해 봅니다.

  가. Configuration -> hosts -> Create host 클릭

 

  

 


  나.  Agent 정보 입력

    아래 그림 중 Groups는 Agent를 어느 그룹에 소속 시킬 지 설정 하는 것입니다. 그리고 해당 그룹은 Template 과 연동 되어 있는데

    예를들어 Linux Server 그룹에 포함 하면, 기본적인 Linux 서버의 CPU, Memory, Disk 등을 모니터링 하는 설정이 자동으로 적용 됩니다.

    어떻게 적용되는지는 아래그림에서 참고 부탁드립니다.

    



 

 

  추가 후 모니터링의 Overview 로 이동 후 Linux Servers 그룹을 보면, 추가한 Agent의 정보가 출력됨을 알수 있습니다.

  이 자료는 모든 서버를 추가후 작성하는 것이라 다른서버들도 보입니다.

  

 


 

   그런데 Zabbix 는 기능은 훌륭하나 UI가 너무 .......옛날틱 합니다.

    아래 그림은 추가한 Agent 의 디스크 사용률을 보여줍니다. 80년대 도구 같네요.

  

   

 


 

4. Grafana 와 Zabbix 연동

  그래픽적인 요소를 해결 시켜 줄 Grafana 와 연동 합니다.

 가. 설치 

      #grafana 레포지토리를 추가 합니다.

      sudo vi /etc/yum.repos.d/grafana.repo

     

      [grafana]
      name=grafana
      baseurl=https://packagecloud.io/grafana/stable/el/6/$basearch
      repo_gpgcheck=1
      enabled=1
      gpgcheck=1
      gpgkey=https://packagecloud.io/gpg.key https://grafanarel.s3.amazonaws.com/RPM-GPG-KEY-grafana
      sslverify=1
      sslcacert=/etc/pki/tls/certs/ca-bundle.crt

      #grafana 설치

      yum install grafana

      systemctl daemon-reload
      #grafana 서비스 시작 및 자동시작 등록

      systemctl start grafana-server

      systemctl status grafana-server
      systemctl enable  grafana-server

      #Zabbix plugin 설치 및 서비스 재시작

      grafana-cli plugins install alexanderzobnin-zabbix-app

      systemctl restart grafana-server 

      #방화벽 정책 추가

      -A INPUT -m state --state NEW -p tcp -s 접속주소/32 --dport 3000 -j ACCEPT

  나. zabbix 연동

      http://IP:3000

      초기 암호는 admin /admin 입니다.     

    1) 데이터소스 추가

      메뉴 -> data sources -> add data source 를 클릭 합니다.

      

 


     2) DB 정보 입력

      DB type 을 Mysql 로 선택 합니다. 위 zabbix 설치 할 때 maria DB로 설치했지만 maria DB와 mysql 은 한몸인거 아시죠~?

      

     


5. Grafana 템플릿 적용 및 대쉬보드 설정

  가. Zabbix 서버 모니터링

      Grafana를 설치하면 Zabbix 서버를 모니터링 할 수 있는 기본 대쉬보드를 제공 합니다.

      아래 그림처럼요.

      

 


  나. 대쉬보드 Import

      grafana 홈페이지에서 사용자들이 자신만의 대쉬보드를 꾸며 공유를 하고 있습니다.

      자신의 취향에 맞는 대쉬보드를 찾아 import 해 봅니다.

      메뉴 -> dashboads -> import 를 클릭 합니다.

      


 

      URL로 간단히 import 할 수 있습니다.(인터넷은 되야 하겠죠?)

      https://grafana.com/dashboards 에서 대쉬보드를 검색 할 수 있습니다. 저는 1760 대쉬보드를 선택 했습니다.     

      


 

  다. 대쉬보드 설정

      드디어 서버 모니터링 대쉬보드가 멋지게 구현 되었네요!

       

 


  라. 최종 대쉬보드

       모든 서버의 CPU, Memory 사용량, Disk 사용량, 문제발생 시 Triggers 발생 현황,서비스의 전체 트래픽 현황을 모니터링 할 수 있는 대쉬보드를 만들고 메인화면으로 설정 합니다.

     

       

 


6. 알람설정

  admin 계정 접속, 사용자계정 5회 틀림 시 알람 등을 Slack Webhook 으로 받고 있습니다.

  Zabbix 도 Slack 알람을 받도록 설정 해 보록 합니다.

 

  가. zabbix 서버의 아래위치에 문제 발생 시 실행 할 스크립트를 저장 합니다.

      /usr/lib/zabbix/alertscripts/zabbix-slack.sh   (권한 755)

 

  나. zabbix-slack.sh 스크립트

      URL에 본인의 Slack 채널 URL을 입력 해 줍니다. 

---------------------------------------------------------------------------------------------------------------------------------------------------

#!/bin/bash

# Slack incoming web-hook URL and user name

url='https://hooks.slack.com/services/본인이 만든 URL'            #webhook URL
username='Zabbix'

## Values received by this script:
# To = $1 (Slack channel or user to send the message to, specified in the Zabbix web interface; "@username" or "#channel")
# Subject = $2 (usually either PROBLEM or RECOVERY/OK)
# Message = $3 (whatever message the Zabbix action sends, preferably something like "Zabbix server is unreachable for 5 minutes - Zabbix server (127.0.0.1)")

# Get the Slack channel or user ($1) and Zabbix subject ($2 - hopefully either PROBLEM or RECOVERY/OK)
to="$1"
subject="$2"

# Change message emoji depending on the subject - smile (RECOVERY/OK), frowning (PROBLEM), or ghost (for everything else)
recoversub='^RECOVER(Y|ED)?$'
if [[ "$subject" =~ ${recoversub} ]]; then
        emoji=':smile:'
elif [ "$subject" == 'OK' ]; then
        emoji=':smile:'
elif [ "$subject" == 'PROBLEM' ]; then
        emoji=':frowning:'
else
        emoji=':ghost:'
fi

# The message that we want to send to Slack is the "subject" value ($2 / $subject - that we got earlier)
#  followed by the message that Zabbix actually sent us ($3)
message="${subject}: $3"

# Build our JSON payload and send it as a POST request to the Slack incoming web-hook URL
payload="payload={\"channel\": \"${to//\"/\\\"}\", \"username\": \"${username//\"/\\\"}\", \"text\": \"${message//\"/\\\"}\", \"icon_emoji\": \"${emoji}\"}"
curl -m 5 --data-urlencode "${payload}" $url -A 'zabbix-slack-alertscript / https://github.com/ericoc/zabbix-slack-alertscript'

-----------------------------------------------------------------------------------------------------------------------------------------------------------------

 

  다. zabbix 에서 알람 설정

      1) administrations -> media types 에서 추가

     

      



      2)  Actions 에 slack 설정

      아래 그림처럼 Actions 을 추가 하고 Actions에 위에서 만든 slack 알림을 설정 합니다.

       

 



      3) 알림 화면

      Zabbix-Agent 를 재시작 했더니 알림이 잘 오네요~!

           

 


 

감사합니다.

반응형