zabbix 에서 같은 그룹의 다 중 호스트 와 같은 item 의 graph 를 빠르게 만 드 는 방법
4303 단어 zabbix 모니터링 관련
예 를 들 어 Nginx 의 그룹 에는 10 대의 기계 가 있 는데 이 10 대의 기계 의 메모리 사용률 을 하나의 graph 에 넣 어서 테스트 할 때 보기 편리 하 다.
zabbix 의 전단 에 이러한 graph 를 만 들 려 면 수작 업 으로 만 추가 할 수 있 습 니 다. 이러한 templates 를 만 들 수 없습니다. 인터넷 에서 Screen 을 위 한 API 를 대량으로 만 드 는 python 스 크 립 트 가 있 지만 zabbix 의 API 에 접촉 하지 않 아 사용 하지 않 았 습 니 다. zabbix 의 데이터 베 이 스 를 조작 하여 할 수 있 는 지 생각해 보 세 요. 그래서 이 bash 스 크 립 트 가 있 습 니 다.。
#!/bin/bash
# date: 2015/11/12 10:00
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/apache/bin:/root/bin
CMD="mysql -uroot zabbix_2 -Bse"
CMD2="mysql -uroot zabbix_2 -e"
color=`openssl rand -base64 6 |md5sum |cut -c1-6 |tr [a-f] [A-F]`
# zabbix ID
gid=`$CMD "SELECT groupid FROM groups WHERE name=\"$1\""`
#
if [ $# -ne 2 ];then
echo -e "\e[031mplease input \"zabbix_group_name\" and \"key_name\"\e[0m"
exit 3
fi
if [ -z $gid ];then
echo -e "\e[031mzabbix_group_name is error\e[0m"
exit 4
fi
# ID HOST-id
hid=`$CMD "SELECT hostid FROM hosts_groups WHERE groupid=${gid};"`
hid_last=`$CMD "SELECT hostid FROM hosts_groups WHERE groupid=${gid};" | head -1`
# itemid, key
testitem=`$CMD "SELECT itemid FROM items WHERE key_=\"$2\" AND hostid=${hid_last}"`
# graph ID,insert 1
grapid=`$CMD "SELECT graphid FROM graphs" | tail -1`
# gitemid, gitemid itemid, gitemid graphid,gitemid insert
gitemid=`$CMD "SELECT gitemid FROM graphs_items" |tail -1`
# insert graphs graph
in_graphs() {
new_graph_id=$((grapid+1))
# graphid
echo " graphid :$new_graph_id" >> $0.out
name="$1-$2"
$CMD2 "INSERT INTO graphs VALUES ($new_graph_id,'$name',900,200,0.0000,100.0000,NULL,1,1,0,1,0,0.0000,0.0000,0,0,NULL,NULL,0);"
}
# insert graphs_items graphs_item
in_graphs_items() {
$CMD2 "INSERT INTO graphs_items VALUES ($gitemid,$new_graph_id,$itemid,0,0,'$color',0,2,0)"
}
# host item, vm.memory.size[total] key
if [ -z $testitem ];then
echo -e "\e[031mkey_name is error\e[0m"
exit 5
else
in_graphs "$1" "$2"
for i in $hid;do
let gitemid++
color=`openssl rand -base64 6 |md5sum |cut -c1-6 |tr [a-f] [A-F]`
itemid=`$CMD "SELECT itemid FROM items WHERE key_=\"$2\" AND hostid=${i}"`
in_graphs_items
done
echo -e "\e[032mcreate graph done\e[0m;"
fi
이 스 크 립 트 는 데이터베이스 와 상호작용 하기 때문에 본인 이 사용 할 때 ~ / my. cnf 를 만 들 었 습 니 다. [client] password = 123456 을 입력 했 습 니 다. "group name" 과 "key name" 두 개의 인자 가 필요 합 니 다. 인 자 는 "" "를 사용 해 야 합 니 다. 성공 적 인 알림 이 있 으 면 전단 에서 graph 생 성 여 부 를 확인 할 수 있 습 니 다. 생 성 된 이름 은" gruop name + key name "입 니 다.
여기 서 일 깨 워 줄 문제 가 있 는 것 도 처음 알 았 다.
1. graphs 표 에서 graphid 의 숫자 는 graphs items 의 여러 gitemid 번 호 를 가리 키 고 있 습 니 다. 시계. 항목. 시계. 항목. 시계. 항목. graphs:grapid graphs_items:gitemid items:itemid 564: 1871 : 23733 1872 : 23317 2, graphs items 의 itemid 는 items 의 itemid 를 가리 키 고 있 습 니 다. itemid 는 hostid 와 연결 되 어 있 으 며, hostid 는 groupid 를 통 해 같은 그룹의 hostid 를 가 져 옵 니 다.
graph 를 만 드 는 것 과 관련 된 관계 입 니 다. 이러한 graph 를 전단 에 만 들 때 delete 로 삭제 하면 graphs 표 에서 이 graphid 를 삭제 할 뿐 graphs items 에서 graphid 를 가리 키 는 줄 을 삭제 하지 않 습 니 다. 다음 에 graphs 와 유사 한 줄 을 만 들 때 graphs 표 는 graphs 표 의 ID 번 호 를 이 어 받 지 않 고 새 ID 번 호 를 사용 합 니 다. 따라서 항상 전단 에 이 를 만 듭 니 다.클래스 graphs 를 삭제 할 때 graphs items 표 에서 많은 쓰레기 데이터 가 발생 합 니 다.
그러나 이 스 크 립 트 는 데이터 베 이 스 를 대상 으로 합 니 다. graphs 에서 사 용 했 던 ID 번 호 를 생략 하지 않 기 때문에 삭제 후 이 graphs 를 만 들 때 graph 에 있 는 모든 item 이 두 개 라 는 것 을 알 수 있 습 니 다. 이 디 테 일 은 알 수 없어 야 이해 할 수 있 습 니 다.
문제 가 있 으 면 지적 을 환영 합 니 다. 감사합니다.