업무상 모니터링 점검 결과 보고서를 작성해야 한다면 필요한 항목들(cpu,mem,disk,network 등..)에 대해서 이미지파일을 매번(일간, 주간, 월간) 갱신시켜 복사 붙혀넣기 해야되는 번거로운 작업이 생길 수 있습니다.
이와 같은 작업을 자동화시켜 간단하게 만들 수 있습니다.
작업방법은 다음과 같습니다
1. 서버에서 그래프이미지 자동저장
2. 로컬에서 ssh-key 를 통해 비밀번호 인증없이 서버와 ssh 통신
ssh-key는 이 글을 참조 sojinhwan0207.tistory.com/62
3. Powershell 로 서버의 이미지를 로컬로 전송하는 스크립트 작성(scp 명령어를 사용)
scp는 이 글을 참조 sojinhwan0207.tistory.com/75
4. 윈도우 작업 스케줄러를 통해 위 스크립트 스케줄링
(로컬머신의 환경은 윈도우라고 가정)
1. Zabbix 서버에서 그래프 이미지파일 저장
1. #!/bin/bash
2.
3. query1="select host,hostid from hosts where status=0 and flags=0;"
4. mysql -uroot -p'패스워드' -D zabbix -e "${query1}" | sed '1d' | grep -v '|' | awk -F '\t' '{print $1}' > /tmp/zabbix/hosts
5. mysql -uroot -p'패스워드' -D zabbix -e "${query1}" | sed '1d' | grep -v '|' | awk -F '\t' '{print $2}' > /tmp/zabbix/hostids
6. host_cnt=`cat /tmp/zabbix/hosts | wc -l`
7. host_ids=`column /tmp/zabbix/hostids`
8. j=0
9.
10. for i in $host_ids
11. do
12. (( j+=1 ))
13.
14. cpu_itemid=`mysql -uroot -p'패스워드' -D zabbix -e "select itemid from items where name='CPU utilization' and hostid='$i'" |grep -v '|' | sed '1d'`
15. cpu_graphid=`mysql -uroot -p'패스워드' -D zabbix -e "select graphid from graphs_items where itemid='$cpu_itemid'" | grep -v '|' | sed '1d'`
16. cpu_URL="chart2.php?graphid=$cpu_graphid&from=now-24h&to=now&profileIdx=web.graphs.filter&profileIdx2=1583&width=1227&height=201&_=ur5ohnc1&screenid="
17.
18. mem_itemid=`mysql -uroot -p'패스워드' -D zabbix -e "select itemid from items where name='Memory utilization' and hostid='$i'" |grep -v '|' | sed '1d'`
19. mem_graphid=`mysql -uroot -p'패스워드' -D zabbix -e "select graphid from graphs_items where itemid='$mem_itemid'" | grep -v '|' | sed '1d'`
20. mem_URL="chart2.php?graphid=$mem_graphid&from=now-24h&to=now&profileIdx=web.graphs.filter&profileIdx2=1583&width=1227&height=201&_=ur5ohnc1&screenid="
21.
22. filename=`cat /tmp/zabbix/hosts | sed -n "$j"p`
23. wget -O /tmp/zabbix/"$filename"_cpu_utilization_$(date '+%Y%m%d_%H%M').png "http://192.168.1.150/zabbix/$cpu_URL"
24. wget -O /tmp/zabbix/"$filename"_mem_utilization_$(date '+%Y%m%d_%H%M').png "http://192.168.1.150/zabbix/$mem_URL"
25.
26. done
위 스크립트에 대한 설명입니다.
3
status값이 0인 것은 모니터링 중인 호스트를 의미하며 flags값이 0인 것은 활성화된 상태를 의미
위 값을 가진 호스트들을 찾아 호스트명과 호스트id를 추출
4,5
3의 쿼리를 조회한 후 sed, grep, awk를 이용해 데이터를 정렬하고 /tmp/zabbix/hosts, /tmp/zabbix/hostids 에 입력
6
추출한 호스트들의 수를 host_cnt에 저장
7
추출한 호스트id 값을 가로로 정렬(for문에 넣기 위함)
8
for문에서 1,2,3,4... 의 수를 만들기 위한 변수선언 및 초기화
10~26
10 가로로 정렬한 호스트id를 하나씩 입력받아 다음 명령을 실행
12 j값을 1증가시킴 (8에서 j를 0으로 초기화 선언)
14 'CPU Utilization' 이라는 항목에 대해 itemid를 추출
15 위 itemid를 통해 graphid를 추출
16 위 graphid를 URL에 변수로 넣어 저장
18 'Memory utilization' 이라는 항목에 대해 itemid를 추출
19 위 itemid를 통해 graphid를 추출
20 위 graphid를 URL에 변수로 넣어 저장
22 처음 호스트이름을 저장한 파일에서 j변수를 통해 첫번째부터 추출
23,24
wget 명령으로 파일 저장
위 스크립트에서는 cpu,memory 두 가지에 대해서만 테스트 했습니다.
자료가 필요한 항목들을 더 추가해서 스크립트를 수정하면 됩니다.
해당 스크립트파일을 cron을 이용해 주기적으로 서버에 저장합니다. (일일/주간/월간에 맞게..)
cron 사용법은 다음을 참고
2. 로컬머신에서 서버에 저장된 이미지 가져오기
1번에서 그래프이미지를 서버에 자동으로 저장하게 했습니다
이제 해당 이미지를 ppt를 이용한 보고서를 작성할 PC(로컬머신)로 가져와 보겠습니다.
먼저 ssh-key를 통해 서버와 비밀번호 인증없이 통신할 수 있게 설정합니다.
설정이 완료되었으면 이제 서버의 이미지를 가져올 스크립트를 생성합니다.
scp -rp root@192.168.1.140:/tmp/zabbix/*.png D:\zabbix
위 내용을 메모장에 열고 확장자를 ps1로 하여 원하는 폴더에 저장합니다.
그 다음 윈도우 작업스케줄러를 열고 다음과 같이 작업을 생성합니다.
트리거에서 스크립트가 실행될 원하는 시간대를 설정합니다.
이 부분이 중요합니다.
프로그램에 powershell 실행파일에 대한 경로를 걸어주고 인수 추가(옵션)에 다음과 같이 설정합니다.
-nolog -command "& (C:\Users\wlsgh\.ssh\zabbix_image.ps1)"
위에서 생성한 스크립트의 경로를 지정하여 위와 같이 넣어줍니다.
여기까지 완료되면 완성입니다.
'Zabbix' 카테고리의 다른 글
[error] zabbix_agentd [1399]: cannot create PID file [/var/run/zabbix/zabbix_agentd.pid]: [2] No such file or directory (0) | 2022.02.11 |
---|---|
zabbix DB 분석 (2) | 2021.04.14 |
[Zabbix][SNMP] snmp 모니터링 호스트 등록 (0) | 2021.04.13 |
zabbix agent 설치 [Windows] (0) | 2021.04.05 |
zabbix + mail 연동 (0) | 2021.04.01 |