亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: [zz]通過(guò)自己編寫的插件來(lái)使用 Nagios [打印本頁(yè)]

作者: huixiangtao    時(shí)間: 2010-02-21 18:10
標(biāo)題: [zz]通過(guò)自己編寫的插件來(lái)使用 Nagios
來(lái)源:
http://www.ibm.com/developerworks/cn/aix/library/au-nagios/index.html
了解更多關(guān)于 Nagios 的內(nèi)容,并找出使用這個(gè)軟件時(shí)存在的新的系統(tǒng)監(jiān)視可能性。Nagios 是一種開(kāi)放源代碼監(jiān)視軟件,它可以掃描主機(jī)、服務(wù)、網(wǎng)絡(luò)方面存在的問(wèn)題。Nagios 與其他類似的包之間的主要區(qū)別在于,Nagios 將所有的信息簡(jiǎn)化為“工作(working)”、“可疑的(questionable)”和“故障(failure)”狀態(tài),并且 Nagios 支持由插件組成的非常豐富的“生態(tài)系統(tǒng)”。這些特性使得用戶能夠進(jìn)行有效安裝,在此過(guò)程中無(wú)需過(guò)多地關(guān)心細(xì)節(jié)內(nèi)容,只提供他們所需的信息即可。
在多臺(tái)主機(jī)中監(jiān)視和分析大量的信息——CPU 是否超載?網(wǎng)絡(luò)接口是否滿負(fù)荷?——是一項(xiàng)繁重的工作。不過(guò)一個(gè)好的解決方案可能只有幾步之遙!開(kāi)放源代碼 Nagios 項(xiàng)目(請(qǐng)參見(jiàn)
參考資料
)可以非常方便地解決復(fù)雜的監(jiān)視和通知需求。
了解 Nagios 的關(guān)鍵在于,它并不是監(jiān)視和跟蹤“普通的”測(cè)量數(shù)據(jù),如 CPU 使用率,該工具將所有的信息簡(jiǎn)化為“工作”、“可疑的”和“故障”狀態(tài)。這可以幫助操作員根據(jù)預(yù)定義的和可配置的標(biāo)準(zhǔn),重點(diǎn)關(guān)注最重要和最關(guān)鍵的問(wèn)題。
Nagios 內(nèi)置了報(bào)告停機(jī)時(shí)間的功能,在跟蹤服務(wù)水平協(xié)議 (SLA) 的實(shí)現(xiàn)時(shí),這可能是非常有用的。正如本文稍后將要說(shuō)明的,Nagios 還提供了停機(jī)自動(dòng)擴(kuò)大功能、服務(wù)和主機(jī)依賴關(guān)系,這篇介紹性的文章將主要討論您可以輕松地為基本的監(jiān)視需求編寫小的、自定義的內(nèi)容。
安裝
大多數(shù) Linux® 分發(fā)版中都內(nèi)置了 Nagios 安裝。在這種情況下,安裝工作可以很好地與 Apache Web 服務(wù)器進(jìn)行集成。要激活或者更新這種配置,您需要運(yùn)行下面的命令:
yum install nagios
或者 apt-get install nagios-text?梢詮 NagiosExchange 免費(fèi)下載用于 AIX® 平臺(tái)的二進(jìn)制文件(請(qǐng)參見(jiàn)
參考資料
)。
對(duì)于其他平臺(tái),可以從 Nagios.org 下載 Nagios 的源代碼(請(qǐng)參見(jiàn)
參考資料
)。生成新的 Nagios 需要一些標(biāo)準(zhǔn)開(kāi)發(fā)工具:
許多與簡(jiǎn)單網(wǎng)絡(luò)管理協(xié)議相關(guān)的(SNMP 相關(guān)的)插件還需要 Perl 和 Net::SNMP 包。
在安裝和設(shè)置了 Nagios 之后,您應(yīng)該可以使用缺省的 http://your.host.name/nagios URL 訪問(wèn) Nagios。
圖 1
顯示了哪些主機(jī)和服務(wù)已啟動(dòng)或者停止。
圖 1. Tactical Monitoring Overview 屏幕


配置 Nagios
在缺省情況下,所有的 Nagios 配置文件都位于 /etc/nagios 目錄。為了方便起見(jiàn),可能將與 Apache 相關(guān)的配置文件符號(hào)鏈接到 Apache 配置目錄?梢詫⑴渲梅譃槎鄠(gè)文件,每個(gè)文件用于配置中不同的部分。
首先需要設(shè)置的組件是聯(lián)系人和聯(lián)系人組。聯(lián)系人是那些接收主機(jī)或服務(wù)停止運(yùn)行的通知的人員。在缺省情況下,Nagios 提供了尋呼機(jī)和電子郵件通知方式。通過(guò)擴(kuò)展,允許通過(guò) Jabber 和許多其他方式進(jìn)行通知,這在某些情況下是非常方便的。
聯(lián)系人存儲(chǔ)在 contacts.cfg 文件中,并且定義如下:
清單 1. 配置 1:基本聯(lián)系人信息
               
define contact{
        contact_name                    jdoe
        alias                           John Due
        service_notification_commands   notify-by-email
        host_notification_commands      host-notify-by-emailes
        email                           john.doe@yourcompany.com
        }
將聯(lián)系人劃分成組:在主機(jī)或服務(wù)狀態(tài)發(fā)生更改時(shí),Nagios 并不指定需要通知的人員,而是通知相關(guān)的組。有時(shí)甚至可以對(duì)某個(gè)人員進(jìn)行多次定義,以指定不同的通知命令或地址,然后向用戶所在的聯(lián)系組添加聯(lián)系該人員的所有方式(請(qǐng)參見(jiàn)
清單 2
)。
清單 2. 配置 2:分組的聯(lián)系人
               
define contactgroup{
        contactgroup_name               server-admins
        alias                           Server Administrators
        members                         jdoe,albundy
        }
下一個(gè)步驟是配置需要由 Nagios 進(jìn)行監(jiān)視的主機(jī)。應(yīng)該添加所有包含監(jiān)視或檢查是否正處于活動(dòng)狀態(tài)的服務(wù)的主機(jī)。存儲(chǔ)主機(jī)信息的配置文件是 hosts.cfg。下面是一個(gè)主機(jī)定義的示例:
清單 3. 配置 3:添加新主機(jī)
               
define host{
        host_name                       ubuntu_1_2
        alias                           Ubuntu test server
        address                         192.168.1.2
        check_command                   check-host-alive
        max_check_attempts              20
        notifications_enabled           1
        event_handler_enabled           0
        flap_detection_enabled          0
        process_perf_data               1
        retain_status_information       1
        retain_nonstatus_information    1
        notification_interval           60
        notification_period             24x7
        notification_options            d,u,r
        }
       
Nagios 配置的最后一步是為配置的主機(jī)定義服務(wù)。這個(gè)示例使用了一個(gè)預(yù)定義的“ping”Nagios 插件,它將發(fā)送 Internet 控制信息協(xié)議(Internet Control Message Protocol,ICMP)回顯請(qǐng)求以確定主機(jī)是否有響應(yīng)。
清單 4. 配置 4:添加新服務(wù)
               
define service{
        use                             service-template
        host_name                       ubuntu_1_2
        service_description             PING
        check_period                    24x7
        contact_groups                  server-admins
        notification_options            c,r
        check_command                   check_ping!300.0,20%!1000.0,60%
        }
在完成了這個(gè)配置工作之后,重新啟動(dòng)您的 Nagios 守護(hù)進(jìn)程,稍等幾秒鐘讓 Nagios 進(jìn)行初始化,然后,證實(shí) Web 管理接口中 ping 服務(wù)的可見(jiàn)性。
如何編寫 Nagios 插件
Nagios 的最激動(dòng)人心的方面是可以輕松地編寫您自己的插件,只需要了解一些簡(jiǎn)單的指導(dǎo)原則即可。為了管理插件,Nagios 每次在查詢一個(gè)服務(wù)的狀態(tài)時(shí),產(chǎn)生一個(gè)子進(jìn)程,并且它使用來(lái)自該命令的輸出和退出代碼來(lái)確定具體的狀態(tài)。退出狀態(tài)代碼的含義如下所示:
最后一種狀態(tài)通常表示該插件無(wú)法確定服務(wù)的狀態(tài)。例如,可能出現(xiàn)了內(nèi)部錯(cuò)誤。
下面提供了一個(gè) Python 示例腳本,用于檢查 UNIX® 平均負(fù)載。它假定 2.0 以上的級(jí)別表示警告狀態(tài),而 5.0 以上的級(jí)別表示危險(xiǎn)狀態(tài)。這些值都采用了硬編碼的方式,并且始終使用最近一分鐘的平均負(fù)載。
清單 5. Python 插件—示例工作插件
               
#!/usr/bin/env python
import os,sys
(d1, d2, d3) = os.getloadavg()
if d1 >= 5.0:
    print "GETLOADAVG CRITICAL: Load average is %.2f" % (d1)
    sys.exit(2)
elif d1 >= 2.0:
    print "GETLOADAVG WARNING: Load average is %.2f" % (d1)
    sys.exit(1)
else:
    print "GETLOADAVG OK: Load average is %.2f" % (d1)
    sys.exit(0)
   
在編寫了這個(gè)小的可執(zhí)行插件之后,接下來(lái)是使用 Nagios 注冊(cè)該插件,并創(chuàng)建一個(gè)檢查平均負(fù)載的服務(wù)定義。
這項(xiàng)工作也是非常簡(jiǎn)單的:使用下面的內(nèi)容創(chuàng)建一個(gè)名為 /etc/nagios-plugins/config/mygetloadavg.cfg 的文件,根據(jù)下面的示例,向 services.cfg 文件添加一個(gè)服務(wù)。請(qǐng)記住,必須在 hosts.cfg 配置文件中定義 localhost。
清單 6. 示例插件—使用 Nagios 進(jìn)行注冊(cè)
               
define command{
        command_name    check_mygetloadavg
        command_line    /path/to/check_getloadavg
        }
清單 7. 創(chuàng)建一個(gè)使用示例插件的服務(wù)
               
define service{
        use                             service-template
        host_name                       localhost
        service_description             LoadAverage
        check_period                    24x7
        contact_groups                  server-admins
        notification_options            c,r
        check_command                   check_mygetloadavg
        }
編寫一個(gè)完整的插件
前面的示例說(shuō)明了一個(gè)采用“硬編碼”方式插件的限制,它不支持運(yùn)行時(shí)配置。在實(shí)際中,通常最好的方式是創(chuàng)建一個(gè)可配置的插件。通過(guò)這種方式,您可以創(chuàng)建和維護(hù)一個(gè)插件,使用 Nagios 將其注冊(cè)為單個(gè)插件,并且傳遞參數(shù)以便為特定的情況自定義警告和危險(xiǎn)水平。下一個(gè)示例還包括一則使用消息;經(jīng)過(guò)證實(shí),對(duì)于由幾個(gè)不同的開(kāi)發(fā)人員或者管理員所使用或維護(hù)的插件,這是非常有價(jià)值的。
另一個(gè)好的實(shí)踐是捕獲所有的異常,并后退以報(bào)告 UNKNOWN 服務(wù)狀態(tài),以便 Nagios 能夠正確地管理有關(guān)這個(gè)情況的通知。那些允許異常“失敗”的插件通常會(huì)退出,并返回值 1;對(duì)于 Nagios,這表示一個(gè) WARNING 狀態(tài)。請(qǐng)確保您的插件能夠正確地區(qū)分 WARNING 和 UNKNOWN。請(qǐng)注意,例如,在將其作為 UNKNOWN 結(jié)果處理可能出現(xiàn)錯(cuò)誤的情況下,通常可以禁用至少某些 WARNING 通知。
用 Python 編寫一個(gè)插件
上述的建議—運(yùn)行時(shí)參數(shù)化、一則使用消息,以及經(jīng)過(guò)改進(jìn)的異常處理—將得到示例插件的源代碼,這段代碼要比前面的長(zhǎng)幾倍。但是您可以更安全地對(duì)錯(cuò)誤進(jìn)行處理,并且能夠在更廣泛的范圍內(nèi)重用該插件。
清單 8. Python 插件—獲取平均負(fù)載的完整插件
               
#!/usr/bin/env python
import os
import sys
import getopt
def usage():
    print """Usage: check_getloadavg [-h|--help] [-m|--mode 1|2|3] \
    [-w|--warning level] [-c|--critical level]"
Mode: 1 - last minute ; 2 - last 5 minutes ; 3 - last 15 minutes"
Warning level defaults to 2.0
Critical level defaults to 5.0"""
    sys.exit(3)
try:
    options, args = getopt.getopt(sys.argv[1:],
        "hm:w:c:",
        "--help --mode= --warning= --critical=",
        )
except getopt.GetoptError:
    usage()
    sys.exit(3)
argMode = "1"
argWarning = 2.0
argCritical = 5.0
for name, value in options:
    if name in ("-h", "--help"):
        usage()
    if name in ("-m", "--mode"):
        if value not in ("1", "2", "3"):
            usage()
        argMode = value
    if name in ("-w", "--warning"):
        try:
            argWarning = 0.0 + value
        except Exception:
            print "Unable to convert to floating point value\n"
            usage()
    if name in ("-c", "--critical"):
        try:
            argCritical = 0.0 + value
        except Exception:
            print "Unable to convert to floating point value\n"
            usage()
try:
    (d1, d2, d3) = os.getloadavg()
except Exception:
    print "GETLOADAVG UNKNOWN: Error while getting load average"
    sys.exit(3)
if argMode == "1":
    d = d1
elif argMode == "2":
    d = d2
elif argMode == "3":
    d = d3
if d >= argCritical:
    print "GETLOADAVG CRITICAL: Load average is %.2f" % (d)
    sys.exit(2)
elif d >= argWarning:
    print "GETLOADAVG WARNING: Load average is %.2f" % (d)
    sys.exit(1)
else:
    print "GETLOADAVG OK: Load average is %.2f" % (d)
    sys.exit(0)
   
為了使用這個(gè)新的插件,需要使用下面的方法來(lái)注冊(cè) /etc/nagios-plugins/config/mygetloadavg2.cfg:
清單 9. Python 插件—使用 Nagios 進(jìn)行注冊(cè)
               
define command{
        command_name    check_mygetloadavg2
        command_line    /path/to/check_getloadavg2 -m $ARG1$ -w $ARG2$ -c $ARG3$
        }
另外,根據(jù)下面的示例,在 services.cfg 文件中添加或者更改服務(wù)條目。請(qǐng)注意,使用感嘆號(hào) ! 來(lái)分隔插件參數(shù)。與前面一樣,必須在 hosts.cfg 配置文件中定義 localhost。
清單 10. 創(chuàng)建一個(gè)使用 Python 插件的服務(wù)
               
define service{
        use                             service-template
        host_name                       localhost
        service_description             LoadAverage2
        check_period                    24x7
        contact_groups                  server-admins
        notification_options            c,r
        check_command                   check_mygetloadavg2!1!3.0!6.0
        }
用 Tcl 編寫一個(gè)插件
最后的示例是使用 Tcl 編寫的一個(gè)插件,它使用簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議 (SOAP) 和 Web 服務(wù)描述語(yǔ)言 (WSDL) 檢查 xmenthods.net 的匯率。SOAP 為該插件提供了匯率的當(dāng)前值,并將這些值與配置的范圍進(jìn)行比較。如果該值不屬于警告的范圍,那么它將被認(rèn)為是 OK。如果該值大于或者小于警告級(jí)別,但是并沒(méi)有超過(guò)危險(xiǎn)極限,則將狀態(tài)設(shè)置為 WARNING。否則將其設(shè)置為 CRITICAL,除非出現(xiàn)了網(wǎng)絡(luò)錯(cuò)誤,在這種情況下將狀態(tài)設(shè)置為 UNKNOWN。
該插件可以識(shí)別不同的可配置參數(shù),以便能夠檢查不同范圍的匯率。它還可以用于檢查各個(gè)國(guó)家的各種匯率。
清單 11. Tcl 插件—驗(yàn)證當(dāng)前匯率
               
#!/usr/bin/env tclsh
# parse arguments
package require cmdline
set options {
    {country1.arg "" "Country 1"}
    {country2.arg "" "Country 2"}
    {lowerwarning.arg "" "Lower warning limit"}
    {upperwarning.arg "" "Upper warning limit"}
    {lowercritical.arg "" "Lower critical limit"}
    {uppercritical.arg "" "Upper critical limit"}
}
array set opt [cmdline::getoptions argv $options {: [options]}]
# if the user did not supply all arguments, show help message
for each necessary [array names opt] {
    if {$opt($necessary) == ""} {
        set argv "-help"
        catch {cmdline::getoptions argv $options {: [options]}} usage
        puts stderr $usage
        exit 3
    }
}
# load TclWebServices package
package require WS::Client
if {[catch {
    # download WSDL
    WS::Client::GetAndParseWsdl \
        http://www.xmethods.net/sd/2001/CurrencyExchangeService.wsdl \
        {} currency
    # create stub commands
    WS::Client::CreateStubs currency
    # download the actual exchange rate
    set result [lindex \
        [currency::getRate "England" "Japan"] 1]
} error]} {
    # if downloading the rate failed for some reason, report it
    puts "EXCHANGERATE UNKNOWN: $error"
    exit 3
}
   
if {($result  $opt(uppercritical))} {
    puts "EXCHANGERATE CRITICAL: rate is $result"
    exit 2
}
if {($result  $opt(upperwarning))} {
    puts "EXCHANGERATE WARNING: rate is $result"
    exit 1
}
puts "EXCHANGERATE OK: rate is $result"
exit 0
   
現(xiàn)在,您需要注冊(cè)這個(gè)命令,以便 Nagios 知道如何調(diào)用它。為了完成這項(xiàng)工作,可以使用與前面類似的配置和命令定義來(lái)創(chuàng)建一個(gè)名為 /etc/nagios-plugins/config/exchangerate.cfg 的文件:
command_line    /path/to/check_exchangerate
-country1 $ARG1$ -country2 $ARG2$ -lowercritical \
$ARG3$ -lowerwarning $ARG4$ -upperwarning $ARG5$ -uppercritical $ARG6$
在下面的示例中,假定該命令的名稱為 check_exchangerate。
接下來(lái),創(chuàng)建一個(gè)使用剛剛創(chuàng)建的插件來(lái)監(jiān)視匯率的服務(wù)。下面是服務(wù)定義,它將該服務(wù)與 localhost 服務(wù)器關(guān)聯(lián)起來(lái)。盡管這個(gè)檢查并不真正地關(guān)聯(lián)于任何物理主機(jī),但是需要將它綁定到一臺(tái)主機(jī)。如果這個(gè)檢查涉及到調(diào)用受信任的網(wǎng)絡(luò)中的服務(wù)器的 SOAP 方法,那么您可以添加需要進(jìn)行監(jiān)視的實(shí)際服務(wù)器,并且在這個(gè)示例中,應(yīng)該將服務(wù)綁定到該服務(wù)器。
清單 12
中的代碼檢查 英鎊對(duì)日元的匯率,并驗(yàn)證匯率位于 225 到 275 之間。
清單 12. 添加 Tcl 插件作為一個(gè)新的服務(wù)
               
define service{
        use                             service-template
        host_name                       localhost
        service_description             EXCHANGERATE
        check_period                    24x7
        contact_groups                  other-admins
        notification_options            c,r
        check_command                   check_exchangerate!England!Japan!200!225!275!300
        }
結(jié)束語(yǔ)
您可以使用 Nagios 監(jiān)視所有類型的硬件和軟件。您可以編寫自己的插件,這使得能夠監(jiān)視與 Nagios 服務(wù)器進(jìn)行通信的各種對(duì)象。正如您可以使用管理命令行參數(shù)和退出狀態(tài)的任何計(jì)算語(yǔ)言一樣,存在各種各樣的可能性。
高級(jí)系統(tǒng)管理員可以使用 Tcl 或者任何其他語(yǔ)言來(lái)擴(kuò)展 SOAP 示例,以便與內(nèi)部網(wǎng) Web 服務(wù)進(jìn)行通信,并編寫插件以驗(yàn)證該服務(wù)行為的正確性。
還可以使用 C 插件或者將 C 嵌入到您最喜歡的動(dòng)態(tài)語(yǔ)言中(對(duì)于 Python,使用 Pyinline;對(duì)于 Perl,使用 Inline ;或者對(duì)于 Tcl,使用 Critcl),以便將您的操作系統(tǒng)的 C API 與您的插件(使用高級(jí)語(yǔ)言編寫)組合在一起。
Nagios 的另一個(gè)值得關(guān)注的特性是被動(dòng)檢查。到此為止,您所看到的 Nagios 監(jiān)視功能可以管理短期狀態(tài)的可執(zhí)行文件,啟動(dòng)它們,然后接收結(jié)果。在被動(dòng)檢查過(guò)程中,Nagios 并不產(chǎn)生插件以檢查狀態(tài),而是不同的應(yīng)用程序周期性地或者當(dāng)服務(wù)狀態(tài)發(fā)生更改時(shí),將狀態(tài)更新發(fā)送給 Nagios。這樣的應(yīng)用程序可以接收來(lái)自其他源的通知,對(duì)其進(jìn)行聚合,并將經(jīng)過(guò)計(jì)算的匯總信息傳遞給 Nagios。如果經(jīng)過(guò)一段時(shí)間還沒(méi)有接收到來(lái)自某個(gè)服務(wù)的通知,Nagios 還可以假定該服務(wù)已經(jīng)停止。我們將在后續(xù)的文章中說(shuō)明 Nagios 被動(dòng)檢查的實(shí)現(xiàn)。
使得 Nagios 插件如此激動(dòng)人心的原因是,它們非常容易進(jìn)行編寫和共享。Nagios 插件非常適合于網(wǎng)絡(luò)和系統(tǒng)管理員所碰到的各種情況,并且在許多情況下,可以很簡(jiǎn)單地重用其他人已經(jīng)完成的工作。正如運(yùn)行良好的 Wiki 或者 Web 本身一樣,可以很容易地提供一個(gè)有幫助的示例,不過(guò)所有可用的 Nagios 插件的整體價(jià)值是非常巨大的。

共享本文……





請(qǐng) Digg 這個(gè)故事






發(fā)布到 del.icio.u



[url=javascript:location.+encodeURIComponent(document.title)]

[/url]
[url=javascript:location.+encodeURIComponent(document.title)]Slashdot 一下![/url]





本文來(lái)自ChinaUnix博客,如果查看原文請(qǐng)點(diǎn):http://blog.chinaunix.net/u3/107145/showart_2183475.html




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2