Zabbix: 스크립트의 실행 시간을 모니터링하려고 하는데 어떻게 합니까?

Zabbix: 스크립트의 실행 시간을 모니터링하려고 하는데 어떻게 합니까?

저는 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.lockvfs.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

이것은 또한 가장 간단한 해결책일 수도 있습니다.

관련 정보