Name
Last commit
Last update
..
images zabbix autoregi init
.gitkeep zabbix automation init
README.md zabbix autoregi modify1

logo

Overview

대규모의 환경에서 자빅스 에이전트를 설치한 후 UI에 설치된 추가 호스트를 등록한다는 것은 너무나 귀찮고, 누락이 될 가능성이 커진다. 따라서 자빅스 에이전트를 Ansible로 설치하고, 그 이후의 호스트 등록은 자동으로 진행하는 것을 알아보자.

시스템 구성 요소

  • Zabbix Server
  • Zabbix Proxy
  • Ansible 기반의 Zabbix Agent 설치

Zabbix Action 등록

설정 -> 액션 -> Autoregistration actions 이동

zabbix

먼저 첫 번째 탭인 "Actions"는 이름과 조건을 설정하는 메뉴다.

action1

위의 경우 이름은 "HONGSNET" 이며, 조건은 호스트 메타데이터의 값이 HONGSNET일 경우 해당되는 것을 뜻한다. 참고적으로 아래의 호스트 제 거 섹션에서 Ansible을 이용한 방법 중 호스트 변수에 위의 **호스트메타변수(HOSTMETA="HONGSNET")**를 설정한 것을 확인할 수 있다.

두 번째 탭인 "오퍼레이션" 은 조건에 해당할 경우 어떤 작업을 할 것인지에 대한 정책을 설정하는 것이다.

action2

위의 경우 다음과 같다.

  • HONGSNET 호스트 그룹을 추가한다.
  • 추가 시 Template OS Linux by Zabbix agent 템플릿을 추가한다.
  • 그리고 추가로 Linux Memory Extension, Template Linux Logs Monitoring, Template Linux Networking Monitoring 템플릿도 추가한다.

그럼 최종적으로 등록된 설정은 다음과 같다.

action3

호스트 제거 API

Zabbix에서 호스트 제거도 자동으로 해주면 좋겠지만, 일반적인 방법으로 지원하지 않는다. 다만, 다음과 같이 API를 사용해서 이를 사용할 수 있기 때문에 응용을 하면 분명히 가능할 것으로 보인다.

언어는 Python으로 작성되었다.

# cat host_remove.py

#!/usr/bin/python
#-*- coding:utf8 -*-

"""
Description : Zabbix Host Auto Remove Python Tool
Author : juhanida21@nate.com

"""
Requirement zabbix_api Package
# pip install zabbix_api
"""
import json,sys,argparse
from zabbix_api import zabbixAPI
server = "https://zabbix.hongsnet.net/zabbix"
username = "Admin"
password = "패스워드"
zapi = ZabbixAPI(server=server, path="", log_level=0)
zapi.login(username, password)

def get_args():
    parser = argparse.ArgumentParser()
    parser.add_argument("-H", "--host", help="host name")
    args = parser.parse_args()
    if not args.host:
        args.host = raw_input('host: ')
    return args

def get_host_id(host):
    get_host_id = zapi.host.get(
        {
            "output": "hostid",
            "filter": {
                "host":host.split(",")
            }
        }
    )

    host_id = []
    host_id.append([I['hostid'] for I in get_host_id])
    return host_id[0]

def delete_host(hosts_id):
    hosts_delete = zapi.host.delete(hosts_id)
    return "host delete success!"

if __name__ == "__main__":
    args = get_args()
    host_id = get_host_id(args.host)

    print delete_host(host_id)

"""
# python host_delete.py --host='aaa,bbb'
host delete success!
"""

다만, 다음과 같이 Python 패키지가 필요하며, 설치방법 및 사용법은 다음과 같다.

  1. zabbix_api
# pip install zabbix_api
  1. 사용방법
# ./host_remove.py --host='zabbix 호스트명'
  1. Ansible 연동 사용
# cat zabbix-agent2-remove_rhel7.yml
---
- name: Zabbix-Agent2 Remote Remove
  hosts: zabbix-agents7
  vars:
    zabbix_server: 61.100.0.220
  tasks:
    - name: zabbix-agent SystemD Daemon Stop
      systemd:
        state: stopped
        name: zabbix-agent2.service

    - name: zabbix-agent Remove
      yum:
        name: zabbix-agent2
        state: absent

    - name: zabbix-frontend host remove
      local_action:
        command: ./host_remove.py --host='{{ ZABBIX_HOST }}'

그리고 ZABBIX_HOST 인벤토리 변수는 다음과 같이 호스트 변수에 설정된 것을 볼 수 있다.

# cat hosts
[zabbix-server]

[zabbix-agents7]
tb3-zabbix-proxy ansible_host=61.100.0.220 ansible_user=root ansible_password=패스워드 ansible_port=22222 ansible_python_interpreter=/usr/bin/python2 HOSTMETA="HONGSNET" zabbix_HOST="tb3-test"