2011-07-27 22 views
5

我需要從命令行設置一個特定的nagios主機的時間表停機時間通過curl..how我該怎麼做?如何從命令行通過curl爲特定時間的任何特定nagios主機設置停機時間?

這裏是我已經使用的服務/主機通知啓用/禁用命令行。

curl -d "some input here" url "user:pass" 

像這樣,我需要做的事情的時間表downtime.Now問題是,停機時間的選擇需要更多的選擇,即開始時間,結束時間,所以,評論等

我怎麼把它用做捲曲從命令行?

curl -d " some key value pair(hostname,servicename" url "username:passowrd" 

它將從命令行開啓和關閉服務/主機通知。所以我想以這種方式使用curl爲特定的nagios服務器提供停機時間。

上面的腳本沒有爲它工作,因爲nagios的停機時間選項需要更多的參數,我試圖在腳本中注入這些參數..但它沒有這樣工作。我們還需要提供開始時間,結束時間和評論值。

另外我已經試過捲曲的選項--form和--form字符串與該腳本..不能夠通過。

我們希望通過命令行(我們已經成功實現了服務/主機服務和通知)完成了這件事情,而不是進入Nagios Web界面。

希望我現在絕對清楚。

TIA

巴斯卡爾

回答

2

你可以簡單地通過增加更多--data(-d)論點curl發送多個表單字段值。這應該在Nagios的系統上安排的服務中斷時間:

curl \ 
    --data cmd_typ=56 \ 
    --data cmd_mod=2 \ 
    --data host=$HOSTNAME \ 
    --data-urlencode "service=${SERVICENAME}" \ 
    --data-urlencode "com_data=${COMMENT}" \ 
    --data trigger=0 \ 
    --data-urlencode "start_time=2011-07-31 00:00:00" \ 
    --data-urlencode "end_time=2011-07-31 01:00:00" \ 
    --data fixed=1 \ 
    --data hours=2 \ 
    --data minutes=0 \ 
    --data btnSubmit=Commit \ 
    $NAGIOS-URL "username:password" 
+0

謝謝安德斯...讓我試試看,讓你知道結果。 – user212064

+0

Andres。你在哪裏找到data-urlencode選項?我還沒有找到它捲曲手冊.. – user212064

+0

http://curl.haxx.se/docs/manpage.html#--data-urlencode –

6

我增強安德斯回答提供了完整的劇本,不要求使用支持--data-進行urlencode一個新的捲曲。這也會自動計算髮送的結束時間,並檢查請求是否已成功提交給Nagios。此外,它還會安排主機和主機上所有服務的停機時間。

#!/bin/bash 

function die { 
    echo $1; 
    exit 1; 
} 

echo Scheduling downtime on nagios 

HOST=monitoredhost 
NAGURL=https://nagios.example.com/cgi-bin/nagios3/cmd.cgi 
USER=nagiosuser 
PASS=nagiospassword 
MINUTES=10 

export MINUTES 

# The following is urlencoded already 
STARTDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S"` 
# This gives us the date/time X minutes from now 
ENDDATE=`date "+%Y-%m-%d+%H%%3A%M%%3A%S" -d "$MINUTES min"` 
curl --silent --show-error \ 
    --data cmd_typ=86 \ 
    --data cmd_mod=2 \ 
    --data host=$HOST \ 
    --data "com_data=Updating+application" \ 
    --data trigger=0 \ 
    --data "start_time=$STARTDATE" \ 
    --data "end_time=$ENDDATE" \ 
    --data fixed=1 \ 
    --data hours=2 \ 
    --data minutes=0 \ 
    --data btnSubmit=Commit \ 
    --insecure \ 
    $NAGURL -u "$USER:$PASS" | grep -q "Your command request was successfully submitted to Nagios for processing." || die "Failed to contact nagios"; 

echo Scheduled downtime on nagios 
+0

匿名,謝謝你的提示,允許我們刪除對Perl的依賴。 –

+0

與icinga合作。只要確保更改grep驗證字符串,當然還有URL。 –

0

對於這個在我的Nagios的工作,我不得不 「數據主機= $ HOST」

--data 「com_author =自動停機+」 \

沒有下添加一個額外的行那我的Nagios不會接受停機時間。

1

我進一步增強了Sarels的答案。

  • 使它適用於我們的Nagios 3.5.1(更改cmd_typ,添加了childoptions,更改日期格式)。
  • 做出HOSTUSER一個命令行參數使用$ USER(當前用戶)作爲默認
  • 添加密碼提示(沒有硬編碼密碼)
  • 加入筆者給Nagios消息

我的版本

  • #!/bin/bash 
    
    # Bash script to schedule downtime for Host 
    # source: http://stackoverflow.com/a/9198181 
    # Author: Sarel Botha http://stackoverflow.com/users/35264/ 
    
    function die { 
        echo $1; 
        exit 1; 
    } 
    
    if [ $# -lt 1 ]; then 
        echo "$0 <host> [<user>]" 
        exit 0; 
    elif [ $# -ge 2 ]; then 
        USER=$2 
    fi 
    
    HOST=$1 
    NAGURL=https://nagios.example.com/nagios3/cgi-bin/cmd.cgi 
    MINUTES=30 
    
    echo Scheduling downtime on nagios for $HOST 
    
    export MINUTES 
    
    # read password 
    read -s -p "Password for $USER:" PASS 
    echo "" # newline after prompt 
    
    # The following is urlencoded already 
    STARTDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S"` 
    # This gives us the date/time X minutes from now 
    ENDDATE=`date "+%d-%m-%Y+%H%%3A%M%%3A%S" -d "$MINUTES min"` 
    curl --silent --show-error \ 
        --data cmd_typ=55 \ 
        --data cmd_mod=2 \ 
        --data host=$HOST \ 
        --data "com_author=$USER" \ 
        --data "com_data=reboot+due+to+security+updates" \ 
        --data trigger=0 \ 
        --data "start_time=$STARTDATE" \ 
        --data "end_time=$ENDDATE" \ 
        --data fixed=1 \ 
        --data hours=2 \ 
        --data minutes=0 \ 
        --data childoptions=0 \ 
        --data btnSubmit=Commit \ 
        --insecure \ 
        $NAGURL -u "$USER:$PASS" | grep -q "Your command request was successfully submitted to Nagios for processing." || die "Failed to contact nagios"; 
    
    echo Scheduled downtime on nagios