Commit ace5161f authored by JooHan Hong's avatar JooHan Hong

zabbix autoregi init

parent a76f742a
Pipeline #7007 passed with stages
in 1 minute and 1 second
[![logo](https://www.hongsnet.net/images/logo.gif)](https://www.hongsnet.net)
# Overview
> 대규모의 환경에서 자빅스 에이전트를 설치한 후 UI에 설치된 추가 호스트를 등록한다는 것은 너무나 귀찮고, 누락이 될 가능성이 커진다. 따라서 자빅스 에이전트를 Ansible로 설치하고, 그 이후의 호스트 등록은 자동으로 진행하는 것을 알아보자.
# 시스템 구성 요소
- Zabbix Server
- Zabbix Proxy
- Ansible 기반의 Zabbix Agent 설치
# Zabbix Action 등록
> 설정 -> 액션 -> Autoregistration actions 이동
![zabbix](./images/zabbix-auto-regi.png)
먼저 `첫 번째 탭`인 "Actions"는 이름과 조건을 설정하는 메뉴다.
![action1](./images/zabbix_auto-regi2.png)
위의 경우 이름은 "HONGSNET" 이며, 조건은 호스트 메타데이터의 값이 HONGSNET일 경우 해당되는 것을 뜻한다. 참고적으로 아래의 호스트 제 거 섹션에서 Ansible을 이용한 방법 중 호스트 변수에 위의 **호스트메타변수(HOSTMETA="HONGSNET")**를 설정한 것을 확인할 수 있다.
`두 번째 탭`인 "오퍼레이션" 은 조건에 해당할 경우 어떤 작업을 할 것인지에 대한 정책을 설정하는 것이다.
![action2](./images/zabbix_auto-regi3.png)
위의 경우 다음과 같다.
- HONGSNET 호스트 그룹을 추가한다.
- 추가 시 Template OS Linux by Zabbix agent 템플릿을 추가한다.
- 그리고 추가로 Linux Memory Extension, Template Linux Logs Monitoring, Template Linux Networking Monitoring 템플릿도 추가한다.
그럼 최종적으로 등록된 설정은 다음과 같다.
![action3](./images/zabbix_auto-regi4.png)
# 호스트 제거 API
Zabbix에서 호스트 제거도 자동으로 해주면 좋겠지만, 일반적인 방법으로 지원하지 않는다. 다만, 다음과 같이 API를 사용해서 이를 사용할 수 있기 때문에 응용을 하면 분명히 가능할 것으로 보인다.
언어는 Python으로 작성되었다.
```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
```bash
# pip install zabbix_api
```
2. 사용방법
```bash
# ./host_remove.py --host='zabbix 호스트명'
```
3. Ansible 연동 사용
```bash
# 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 인벤토리 변수는 다음과 같이 호스트 변수에 설정된 것을 볼 수 있다.
```bash
# 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"
```
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment