[工具開發] 把nagios監控指令碼改成keepalived監控指令碼

來源:互聯網
上載者:User

標籤:

最近在做開發和辦公環境的高可用,採用的是keepalived;keepalived基於Linux核心支援的LVS,既能實現高可用,又能實現負載平衡,非常實用。

keepalived監控服務狀態時可以用多種方式,如:HTTP_GET|SSL_GET|TCP_CHECK|SMTP_CHECK|MISC_CHECK(自訂指令碼方式),為了精確的監控服務的狀態,我們需要編寫自訂監控指令碼。

目前很多公司都會部署nagios作為服務的監控平台,nagios也需要監控指令碼或者程式,如果keepalived監控指令碼能套用naigios的,那麼就可以省去很多麻煩。但是nagios監控指令碼或者程式與keepalived有一些不同:

nagios指令碼或者程式的傳回值:0-OK,1-Warn, 2-Critical, 3-Unknown

keepalived指令碼傳回值:0-OK,1-Fail,2~255-OK且退出碼-2

可見,只需要把nagios指令碼或者程式的傳回值改一下就可以用在keepalived上了。如果是文字格式設定的nagios指令碼,可以直接改傳回值,如果是二進位格式的程式,就不能直接改了。我採用的方法是把 nagios監控程式放到python裡並且修改其傳回值,這樣就可以給keepalived用了。

下面的例子是用python把nagios的check_dns二進位監控程式改成keepalived能用的指令碼,請注意commands.getstatusoutput裡的命令,就是調用的nagios二進位監控程式:

(由於我的服務不需要修改退出狀態代碼,因此只返回0或者1)

#!/usr/bin/python#coding: utf-8#返回0:健全狀態檢查OK,權重保持#返回1:健全狀態檢查失敗,權重設為0#返回2-255:健全狀態檢查OK,權重設定為:退出狀態代碼-2import commandsimport sys, getoptimport os.pathdef check_dns(server=‘‘, timeout=‘‘, name=‘‘, address=‘‘):    status, output = commands.getstatusoutput("/usr/lib64/nagios/plugins/check_dns -s " + server + " -t " + timeout + " -H " + name + " -a " + address)    return statusif __name__ == ‘__main__‘:    server, timeout, name, address = ‘‘, ‘‘, ‘‘, ‘‘    script = os.path.split(os.path.realpath(__file__))[1]    try:        opts, args = getopt.getopt(sys.argv[1:], "s:n:a:t:", ["server=", "name=", "address=", "timeout="])    except getopt.GetoptError, err:        #print str(err)        sys.exit(3)    for o, a in opts:        if o in ("-s", "--server"):            server = a        elif o in ("-n", "--name"):            name = a        elif o in ("-a", "--address"):            address = a        elif o in ("-t", "--timeout"):            timeout = a        else:            #print "usage: " + script + " -s server -n name -a address -t timeout"            sys.exit(3)    if server == ‘‘ or name == ‘‘ or address == ‘‘ or timeout == ‘‘:        #print "usage: " + script + " -s server -n name -a address -t timeout"        sys.exit(3)    else:        status = check_dns(server, timeout, name, address)        if status:            #print status            sys.exit(1)        else:            #print status            sys.exit(0)

 

[工具開發] 把nagios監控指令碼改成keepalived監控指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.