저는 Zabbix에 전혀 관심이 없으며 이것이 첫 번째 과제입니다... Zabbix를 사용하여 모니터를 구축하고 하나의 스크립트가 실행되는 시간을 모니터링해야 합니다. 스크립트는 다음과 같습니다:
device0="/home/build/aggregator/scripts/aggregator.lock"
if [ -e "$device0" ]
then
echo process is already running
else
touch $device0
java -Xms6g -Xmx6g -jar /home/build/aggregator/aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar
rm $device0
fi
스크립트는 aggregator.lock
스크립트가 한 번만 실행되도록 하는 파일을 생성하며, 스크립트는 매분 실행되도록 Crontab에서 구성됩니다. 다음 항목을 생성했습니다. 파일이 존재하는
동안 Zabbix는 1을 반환합니다.aggregator.lock
vfs.file.exists
[root@zabbix ~]# zabbix_get -s 10.200.X.X -k vfs.file.exists[/home/build/aggregator/scripts/aggregator.lock]
1
[root@zabbix ~]#
그리고 vfs.file.time
확인 결과는 1400057821(Unix 시간)입니다.
aggregator.lock
파일이 존재하지 않는 동안 Zabbix는 0을 반환합니다. 그리고 vfs.file.time
확인 결과는 ZBX_NOTSUPPORTED입니다.
네트워크의 트래픽을 최소화하기 위해 확인은 30초마다 실행되지만 스크립트는 매번 약 10-20초 동안 실행됩니다. 따라서 스크립트의 런타임을 모니터링하는 가장 좋은 방법을 찾아야 합니다. 이 목표를 달성하는 가장 좋은 방법은 무엇입니까?
답변1
프로세스가 실행되는 시간을 모니터링해야 합니까, 아니면 프로세스가 너무 오래 걸리는 경우 경고해야 합니까?
zabbix_sender
전자인 경우 다음과 같이 를 사용하여 런타임에 대한 정보를 보내도록 스크립트를 수정할 수 있습니다 .
#!/bin/bash
date1=$(date '+%s')
sleep 5
date2=$(date '+%s')
duration=$(($date2-$date1))
zabbix_sender -z 127.0.0.1 -s 'my host' -k duration -o $duration
여기서 "sleep 5"는 "java" 명령입니다.
후자인 경우 다음과 같이 스크립트가 시작될 때 "1" 값을 보내고 끝날 때 "0" 값을 보내도록 스크립트를 수정할 수 있습니다.
#!/bin/bash
zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 1
sleep 5
zabbix_sender -z 127.0.0.1 -s 'my host' -k started -o 0
그런 다음 프로세스가 너무 오래 걸리는 경우 경고하기 위해 다음과 유사한 트리거를 만들 수 있습니다.
{my host:started.last()}=1 & {my host:started.nodata(45)}=1
스크립트 수정이 옵션이 아닌 경우 proc.num[] 항목을 사용할 수 있습니다.
proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar]
15초마다 확인하도록 하고 경고는 프로세스가 실행 중임을 나타내는 마지막 세 값(30초에 걸쳐)입니다.
{my host:proc.num[java,,,aggregator-1.0-SNAPSHOT-jar-with-dependencies.jar].min(#3)}=1
이것은 또한 가장 간단한 해결책일 수도 있습니다.