zabbix 에서 같은 그룹의 다 중 호스트 와 같은 item 의 graph 를 빠르게 만 드 는 방법

기계 의 운행 상황 을 대량으로 보고 싶다 는 요 구 를 받 았 습 니 다. zabbix 에서 guest 로 로그 인 할 때 여러 호스트 의 운행 데 이 터 를 볼 때 끊임없이 전환 해 야 합 니 다. Screen 의 방법 은 이미 있 습 니 다 (Screen 의 방법 은 각 item 의 graph 를 한 화면 에 올 리 는 것 입 니 다). 그러나 명확 하지 않 습 니 다. 각 기계 의 같은 item 을 같은 graph 에 올 리 는 것 이 좋 습 니 다.
    예 를 들 어 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 이 두 개 라 는 것 을 알 수 있 습 니 다. 이 디 테 일 은 알 수 없어 야 이해 할 수 있 습 니 다.
    문제 가 있 으 면 지적 을 환영 합 니 다. 감사합니다.

좋은 웹페이지 즐겨찾기