自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

集群監(jiān)控工具簡(jiǎn)介:Ganglia和Nagios

運(yùn)維 系統(tǒng)運(yùn)維
本文將介紹 Ganglia 和 Nagios,這是兩個(gè)用于監(jiān)視數(shù)據(jù)中心的工具。這兩個(gè)工具被大量用于高性能計(jì)算(HPC)環(huán)境中,但是它們對(duì)于其他環(huán)境也具有很大的吸引力(例如云、呈現(xiàn)集群和托管中心)。此外,兩者對(duì)監(jiān)視的定義也采取了不同的側(cè)重點(diǎn)。Ganglia 更多地與收集度量數(shù)據(jù)并隨時(shí)跟蹤這些數(shù)據(jù)有關(guān),而 Nagios 一直致力于成為一種報(bào)警機(jī)制。

隨著數(shù)據(jù)中心的增長(zhǎng)和管理人員的縮減,對(duì)計(jì)算資源使用有效監(jiān)視工具的需求變得比以往更加迫切。術(shù)語(yǔ)監(jiān)視 在應(yīng)用到數(shù)據(jù)中心時(shí)可能會(huì)讓人混淆,因?yàn)樗暮x會(huì)根據(jù)具體的說(shuō)話(huà)者和聽(tīng)眾而有所不同。例如:

  • 在集群中運(yùn)行應(yīng)用程序的人員會(huì)思考:“我的作業(yè)什么時(shí)候運(yùn)行?它什么時(shí)候會(huì)完成?以及與上一次相比,它是怎樣執(zhí)行的?”
  • 網(wǎng)絡(luò)運(yùn)營(yíng)中心(NOC)的操作員會(huì)思考:“什么時(shí)候會(huì)出現(xiàn)表示需要解決問(wèn)題的紅燈并安排服務(wù)電話(huà)?”
  • 系統(tǒng)工程部的人員會(huì)思考:“我們的機(jī)器如何執(zhí)行?所有服務(wù)是否運(yùn)行正常?我們可以看到哪些趨勢(shì)以及如何更好地利用計(jì)算資源?”

面對(duì)如此多的定義,您必須查找大量的代碼才能監(jiān)視您真正想要監(jiān)視的內(nèi)容,不僅如此,還存在無(wú)數(shù)的產(chǎn)品和服務(wù)。可是幸運(yùn)的是,許多監(jiān)視工具都是開(kāi)源的 —— 實(shí)際上,某些開(kāi)源工具的表現(xiàn)比嘗試完成同樣工作的某些商業(yè)應(yīng)用程序還要好。

使用開(kāi)源監(jiān)視工具最困難的部分是實(shí)現(xiàn)適合環(huán)境的安裝和配置。使用開(kāi)源監(jiān)視工具的兩個(gè)主要問(wèn)題是:

  • 沒(méi)有一個(gè)工具可以按照期望的方式監(jiān)視所需的所有內(nèi)容。為什么?因?yàn)椴煌挠脩?hù)將以不同的方式定義監(jiān)視(正如我剛才所述)。
  • 由于存在第一個(gè)問(wèn)題,因此要讓工具完全按照期望在數(shù)據(jù)中心中工作可能需要完成大量自定義。為什么?因?yàn)椴还芏嗝吹貥?biāo)準(zhǔn),每一個(gè)環(huán)境也都是獨(dú)一無(wú)二的。

順便說(shuō)一句,商業(yè)監(jiān)視工具也同樣存在這兩個(gè)問(wèn)題。

因此,我將介紹 Ganglia 和 Nagios,這是兩個(gè)用于監(jiān)視數(shù)據(jù)中心的工具。這兩個(gè)工具被大量用于高性能計(jì)算(HPC)環(huán)境中,但是它們對(duì)于其他環(huán)境也具有很大的吸引力(例如云、呈現(xiàn)集群和托管中心)。此外,兩者對(duì)監(jiān)視的定義也采取了不同的側(cè)重點(diǎn)。Ganglia 更多地與收集度量數(shù)據(jù)并隨時(shí)跟蹤這些數(shù)據(jù)有關(guān),而 Nagios 一直致力于成為一種報(bào)警機(jī)制。

隨著獨(dú)立項(xiàng)目的發(fā)展,逐步出現(xiàn)了交疊。例如:

  • Ganglia 過(guò)去要求代理運(yùn)行在每臺(tái)主機(jī)上以從中收集信息,但是現(xiàn)在可以通過(guò) Ganglia 的欺騙機(jī)制獲得度量數(shù)據(jù)。
  • Nagios 過(guò)去也是僅用于從目標(biāo)主機(jī)中輪詢(xún)信息,但是現(xiàn)在提供了在目標(biāo)主機(jī)上運(yùn)行代理的插件。

雖然這些工具在某些功能領(lǐng)域里已經(jīng)發(fā)生交疊,但是兩者之間還是有許多不同之處,可以讓您從運(yùn)行這兩個(gè)工具中獲益。同時(shí)運(yùn)行兩個(gè)工具可以相互彌補(bǔ)不足:

  • Ganglia 沒(méi)有內(nèi)置通知系統(tǒng),而 Nagios 在這方面表現(xiàn)杰出。
  • Nagios 似乎沒(méi)有適合目標(biāo)主機(jī)的可伸縮內(nèi)置代理(這是一個(gè)爭(zhēng)議點(diǎn)),而 Ganglia 在設(shè)計(jì)之初就考慮到這點(diǎn)。

還有其他開(kāi)源項(xiàng)目也可以完成這兩個(gè)工具完成的工作,并且有些項(xiàng)目在某些領(lǐng)域做得比其他項(xiàng)目好。常用開(kāi)源監(jiān)視解決方案包括 Cacti、Zenoss、Zabbix、Performance Copilot(PCP)和 Clumon(而且我相信您已經(jīng)有了自己喜歡的選擇)。這些工具(包括 Ganglia 和一些 Nagios 插件)中的許多工具在底層都使用了 RRDTool 或 Tobi Oetiker 的 MRTG(Multi Router Traffic Grapher),以生成漂亮的圖形和存儲(chǔ)數(shù)據(jù)。

盡管用于監(jiān)視數(shù)據(jù)中心的開(kāi)源解決方案如此眾多,我卻經(jīng)常驚訝地發(fā)現(xiàn)許多向外擴(kuò)展的計(jì)算中心在開(kāi)發(fā)自己的解決方案,而忽略其他人已經(jīng)完成的工作。

在這個(gè)兩部分文章中,我將討論 Ganglia 和 Nagios,因?yàn)橛幸恍┦聦?shí)證據(jù)表明這些工具是最常用的。盡管將兩者集成在一起是非常普遍的實(shí)踐(尤其是在一些大型的 HPC 實(shí)驗(yàn)室和大學(xué)里),但是我發(fā)現(xiàn)很少有文章對(duì)此進(jìn)行介紹。

學(xué)完本系列,您應(yīng)當(dāng)能夠安裝 Ganglia 并與 Nagios 綁定在一起,并且可以回答不同的用戶(hù)組向您詢(xún)問(wèn)的監(jiān)視問(wèn)題。這只是一個(gè)開(kāi)始,但是應(yīng)當(dāng)可以幫助您了解基礎(chǔ)知識(shí)并逐步把握集群的整體情況。

在本文中,我將指導(dǎo)您完成:

  • 安裝和配置基本的 Ganglia 設(shè)置。
  • 如何使用 Python 模塊來(lái)用 IPMI(Intelligent Platform Management Interface)擴(kuò)展功能。
  • 如何使用 Ganglia 主機(jī)欺騙來(lái)監(jiān)視 IPMI。

我們的目標(biāo) —— 設(shè)置 HPC Linux® 集群的基準(zhǔn)監(jiān)視系統(tǒng),在其中可以在某個(gè)程度上解決上面所述的三個(gè)不同監(jiān)視意圖:

  • 應(yīng)用程序人員可以看到隊(duì)列的排隊(duì)情況如何,并可以看到運(yùn)行作業(yè)的可用節(jié)點(diǎn)。
  • NOC 可以收到系統(tǒng)故障報(bào)警或者在 Nagios Web 界面上看到一個(gè)閃亮的紅色錯(cuò)誤指示燈。如果節(jié)點(diǎn)出現(xiàn)故障或者溫度過(guò)高,他們也可以通過(guò)電子郵件收到通知。
  • 系統(tǒng)工程師可以繪制數(shù)據(jù)曲線(xiàn)圖、報(bào)告集群利用情況并決定未來(lái)采購(gòu)哪些硬件。

Ganglia 簡(jiǎn)介

Ganglia 是 UC Berkeley 發(fā)起的一個(gè)開(kāi)源監(jiān)視項(xiàng)目,設(shè)計(jì)用于測(cè)量數(shù)以千計(jì)的節(jié)點(diǎn)。每臺(tái)計(jì)算機(jī)都運(yùn)行一個(gè)收集和發(fā)送度量數(shù)據(jù)(如處理器速度、內(nèi)存使用量等)的名為 gmond 的守護(hù)進(jìn)程。它將從操作系統(tǒng)和指定主機(jī)中收集。接收所有度量數(shù)據(jù)的主機(jī)可以顯示這些數(shù)據(jù)并且可以將這些數(shù)據(jù)的精簡(jiǎn)表單傳遞到層次結(jié)構(gòu)中。正因?yàn)橛羞@種層次結(jié)構(gòu)模式,才使得 Ganglia 可以實(shí)現(xiàn)良好的擴(kuò)展。gmond 帶來(lái)的系統(tǒng)負(fù)載非常少,這使得它成為在集群中各臺(tái)計(jì)算機(jī)上運(yùn)行的一段代碼,而不會(huì)影響用戶(hù)性能。

所有這些數(shù)據(jù)收集會(huì)多次影響節(jié)點(diǎn)性能。網(wǎng)絡(luò)中的 “抖動(dòng)(Jitter)” 發(fā)生在大量小消息同時(shí)出現(xiàn)時(shí)。我們發(fā)現(xiàn)通過(guò)將節(jié)點(diǎn)時(shí)鐘保持一致,就可以避免這個(gè)問(wèn)題。

安裝 Ganglia

Internet 中有許多介紹如何安裝 Ganglia 的文章和參考資料。我們將重新查看我在 xCAT 維基中撰寫(xiě)的一篇文章。我假定出于本文的目的,操作系統(tǒng)是 Red Hat 5 Update 2(但是對(duì)于其他企業(yè) Linux 操作系統(tǒng),這些步驟不會(huì)有很大差別)。

先決條件

假定您已經(jīng)設(shè)置了 yum 庫(kù),安裝先決條件在很大程度上應(yīng)當(dāng)十分簡(jiǎn)單。類(lèi)似于以下代碼:

yum -y install apr-devel apr-util check-devel cairo-devel pango-devel libxml2-devel
  rpmbuild glib2-devel dbus-devel freetype-devel fontconfig-devel gcc-c++ expat-devel
  python-devel libXrender-devel

(注:Yum 實(shí)際上應(yīng)該可以處理大多數(shù)依賴(lài)關(guān)系,但是在我的一個(gè)測(cè)試中,我看到編譯失敗,而這些失敗可以通過(guò)添加所有這些包來(lái)修正。)

在獲得這些包之后,您需要滿(mǎn)足另一個(gè)不在 Red Hat 庫(kù)中的先決條件。您可以像下面這樣獲取并構(gòu)建它,只要您的機(jī)器連接了 Internet:

wget \ http://ga13.files.bigpond.com:4040/fedora/linux/releases/9/Everything/source/
       SRPMS/libconfuse-2.6-1.fc9.src.rpm

rpmbuild --rebuild libconfuse-2.6-1.fc9.src.rpm
cd /usr/src/redhat/RPMS/x86_64/
rpm -ivh libconfuse-devel-2.6-1.x86_64.rpm libconfuse-2.6-1.x86_64.rpm
記住,鏡像經(jīng)常變化。如果此鏡像不工作,則使用搜索引擎查找 libconfuse-2.6.-1.fc9 source RPM。

#p#

RRDTool

RRDTool 表示:輪循數(shù)據(jù)庫(kù)工具(Round Robin Database Tool)。它是由 Tobias Oetiker 創(chuàng)建的,并且為許多高性能監(jiān)視工具提供了引擎。Ganglia 是其中之一,但是 Cacti 和 Zenoss 是另外兩個(gè)。

要安裝 Ganglia,首先需要讓 RRDTool 運(yùn)行在監(jiān)視服務(wù)器上。RRDTool 將提供其他程序使用的兩個(gè)非常優(yōu)秀的功能:

  • 它將在輪循數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù)。隨著捕捉的數(shù)據(jù)變得越來(lái)越舊,解析的精確性將變得越來(lái)越低。這將占用很少的內(nèi)存并且在大多數(shù)情況下仍然有用。
  • 它可以通過(guò)使用命令行實(shí)參根據(jù)捕捉的數(shù)據(jù)生成圖形。

要安裝 RRDTool,請(qǐng)運(yùn)行以下代碼(對(duì) 1.3.4 版和 1.3.6 版進(jìn)行了測(cè)試):

cd /tmp/
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool.tar.gz
tar zxvf rrdtool*
cd rrdtool-*
./configure --prefix=/usr
make -j8
make install
which rrdtool
ldconfig  # make sure you have the new rrdtool libraries linked.
 

使用 RRDTool 作為環(huán)境中的獨(dú)立工具有許多種方法,但是我在這里不會(huì)介紹這些方法。

Ganglia 安裝

現(xiàn)在已滿(mǎn)足所有先決條件,您可以安裝 Ganglia。首先需要獲得它。在本文中,我們使用的是 Ganglia 3.1.1。下載 ganglia-3.1.1.tar.gz 文件并將其放在監(jiān)視服務(wù)器的 /tmp 目錄中。然后執(zhí)行以下代碼:

cd /tmp/
tar zxvf ganglia*gz
cd ganglia-3.1.1/
./configure --with-gmetad
make -j8
make install
 

您應(yīng)當(dāng)會(huì)退出,而不會(huì)遇到任何錯(cuò)誤。如果看到錯(cuò)誤,則可能需要檢查缺少哪些庫(kù)。

配置 Ganglia

現(xiàn)在基本安裝已完成,需要設(shè)置幾個(gè)配置項(xiàng)才能運(yùn)行。執(zhí)行以下步驟:

  1. 處理命令行文件。
  2. 修改 /etc/ganglia/gmond.conf。
  3. 注意多宿主(multi-homed)計(jì)算機(jī)。
  4. 在管理服務(wù)器中啟動(dòng)它。

步驟 1:處理命令行文件

如下所示:

cd /tmp/ganglia-3.1.1/   # you should already be in this directory
mkdir -p /var/www/html/ganglia/  # make sure you have apache installed
cp -a web/* /var/www/html/ganglia/   # this is the web interface
cp gmetad/gmetad.init /etc/rc.d/init.d/gmetad  # startup script
cp gmond/gmond.init /etc/rc.d/init.d/gmond
mkdir /etc/ganglia  # where config files go
gmond -t | tee /etc/ganglia/gmond.conf  # generate initial gmond config
cp gmetad/gmetad.conf /etc/ganglia/  # initial gmetad configuration
mkdir -p /var/lib/ganglia/rrds  # place where RRDTool graphs will be stored
chown nobody:nobody /var/lib/ganglia/rrds  # make sure RRDTool can write here.
chkconfig --add gmetad  # make sure gmetad starts up at boot time
chkconfig --add gmond # make sure gmond starts up at boot time
 

步驟 2:修改 /etc/ganglia/gmond.conf

現(xiàn)在可以修改 /etc/ganglia/gmond.conf 以命名集群。假定集群名稱(chēng)為 “matlock”;則可以將 name = "unspecified" 更改為 name = "matlock"。

步驟 3:注意多宿主計(jì)算機(jī)

在我的集群中,eth0 是我的系統(tǒng)的公共 IP 地址。但是,監(jiān)視服務(wù)器將通過(guò) eth1 與私有集群網(wǎng)絡(luò)中的節(jié)點(diǎn)進(jìn)行通信。我需要確保 Ganglia 使用的多點(diǎn)傳送將與 eth1 綁定在一起。這可以通過(guò)創(chuàng)建 /etc/sysconfig/network-scripts/route-eth1 文件來(lái)完成。添加 239.2.11.71 dev eth1 內(nèi)容。

然后您可以使用 service network restart 重新啟動(dòng)網(wǎng)絡(luò)并確保路由器顯示此 IP 通過(guò) eth1。注:您應(yīng)當(dāng)使用 239.2.11.71,因?yàn)檫@是 ganglia 的默認(rèn)多點(diǎn)傳送通道。如果使用其他通道或者增加更多通道,請(qǐng)更改它。

步驟 4:在管理服務(wù)器中啟動(dòng)它

現(xiàn)在您可以在監(jiān)視服務(wù)器中完全啟動(dòng)它:

service gmond start
service gmetad start
service httpd restart
 

停止 Web 瀏覽器并將其指向位于 http://localhost/ganglia 的管理服務(wù)器。您將看到管理服務(wù)器現(xiàn)在處于受監(jiān)視狀態(tài)。您還將看到若干度量數(shù)據(jù)正受到監(jiān)視并繪制曲線(xiàn)圖。最有用的曲線(xiàn)圖之一是您可以監(jiān)視這臺(tái)計(jì)算機(jī)中的負(fù)載情況。下面是我的計(jì)算機(jī)的負(fù)載情況圖:

圖 1. 監(jiān)視負(fù)載
監(jiān)視負(fù)載  

沒(méi)有發(fā)生什么操作,計(jì)算機(jī)只是處于空閑狀態(tài)。

#p#

把 Ganglia 放在節(jié)點(diǎn)上

到現(xiàn)在為止,我們已經(jīng)完成了在管理服務(wù)器中運(yùn)行 Ganglia 的工作;現(xiàn)在必須更多地關(guān)注計(jì)算節(jié)點(diǎn)。事實(shí)證明只需復(fù)制一些文件就可以把 Ganglia 放到計(jì)算節(jié)點(diǎn)上。這是在使用 Kickstart 時(shí)可以添加到安裝后腳本中的內(nèi)容或是可以添加到其他更新工具中的內(nèi)容。

快速但粗糙的方法是這樣的:創(chuàng)建一個(gè)含有所有主機(jī)名的文件。假定您有 deathstar001-deathstar100 節(jié)點(diǎn)。則將擁有類(lèi)似如下所示的名為 /tmp/mynodes 的文件:

deathstar001
deathstar002
...skip a few...
deathstar099
deathstar100
 

現(xiàn)在只需運(yùn)行以下代碼:

# for i in `cat /tmp/mynodes`; do 
scp /usr/sbin/gmond $i:/usr/sbin/gmond
ssh $i mkdir -p /etc/ganglia/
scp /etc/ganglia/gmond.conf $i:/etc/ganglia/
scp /etc/init.d/gmond $i:/etc/init.d/
scp /usr/lib64/libganglia-3.1.1.so.0 $i:/usr/lib64/
scp /lib64/libexpat.so.0 $i:/lib64/
scp /usr/lib64/libconfuse.so.0 $i:/usr/lib64/
scp /usr/lib64/libapr-1.so.0 $i:/usr/lib64/
scp -r /usr/lib64/ganglia $i:/usr/lib64/
ssh $i service gmond start
done
 

您可以重新啟動(dòng) gmetad,刷新 Web 瀏覽器,然后應(yīng)當(dāng)會(huì)看到節(jié)點(diǎn)現(xiàn)在出現(xiàn)在列表中。

您可能會(huì)遇到下面這些潛在的問(wèn)題:

  • 您可能也需要按照前面的步驟 3 那樣對(duì)節(jié)點(diǎn)明確設(shè)置靜態(tài)路由。
  • 您的防火墻可能會(huì)阻塞端口。gmond 將在端口 8649 上運(yùn)行。如果 gmond 是在計(jì)算機(jī)中運(yùn)行,您應(yīng)當(dāng)能夠運(yùn)行 telnet localhost 8649 命令。并看到一些 XML 輸出滾動(dòng)顯示在屏幕中。

觀察 Ganglia

許多系統(tǒng)工程師很難理解他們自己的工作量或者工作特性。他們可能有自定義代碼或者沒(méi)有對(duì)商業(yè)產(chǎn)品的運(yùn)行進(jìn)行研究。Ganglia 可以幫助剖析應(yīng)用程序。

我們將使用 Ganglia 來(lái)檢驗(yàn)運(yùn)行 Linpack 基準(zhǔn)的屬性。圖 2 顯示了啟動(dòng)三項(xiàng)不同的 Linpack 作業(yè)的時(shí)間間隔。

圖 2. 觀察 Linpack
觀察 Linpack  

從此圖中可以看到,當(dāng)作業(yè)開(kāi)始時(shí),在作業(yè)啟動(dòng)時(shí)網(wǎng)絡(luò)中有一些活動(dòng)。但是,有趣的是接近作業(yè)結(jié)束時(shí),網(wǎng)絡(luò)流量增加了很多。如果您不了解 Linpack,您至少會(huì)認(rèn)為:網(wǎng)絡(luò)流量在作業(yè)結(jié)束時(shí)增加。

圖 3 和圖 4 分別顯示 CPU 和內(nèi)存使用率。在這里,您可以看到正在逼近處理器的限制,而且內(nèi)存使用率也非常高。

圖 3. CPU 使用率
CPU 使用率 

圖 4. 內(nèi)存使用率
內(nèi)存使用率  

這些圖形讓我們深入了解正在運(yùn)行的應(yīng)用程序:我們正在使用大量 CPU 和內(nèi)存并且在接近作業(yè)結(jié)束時(shí)造成更多網(wǎng)絡(luò)流量。關(guān)于這項(xiàng)作業(yè)還有很多其他屬性是我們不知道的,但是這給我們提供了一個(gè)很好的開(kāi)端。

知道這些情況可以幫助在未來(lái)購(gòu)買(mǎi)更多硬件時(shí)做出更好的采購(gòu)決定。當(dāng)然,沒(méi)有人購(gòu)買(mǎi)硬件只是為了運(yùn)行 Linpack ……對(duì)么?

#p#

擴(kuò)展能力

基本 Ganglia 安裝已經(jīng)給我們提供了大量有用信息。使用 Ganglia 的插件將給我們提供兩種添加更多功能的方法:

  • 通過(guò)添加帶內(nèi)(in-band)插件。
  • 通過(guò)添加一些其他來(lái)源的帶外(out-of-band)欺騙。

第一種方法一直是 Ganglia 的常見(jiàn)實(shí)踐。第二種方法是最新開(kāi)發(fā)的實(shí)踐,并且與 Nagios 在功能上有所交疊。讓我們通過(guò)一個(gè)實(shí)際示例來(lái)簡(jiǎn)要探究?jī)煞N方法。

帶內(nèi)插件

帶內(nèi)插件可以通過(guò)兩種方式發(fā)生。

  • 使用 cron-job 方法并調(diào)用 Ganglia 的 gmetric 命令來(lái)輸入數(shù)據(jù)。
  • 使用新 Python 模塊插件并撰寫(xiě)它的腳本。

第一種方法是過(guò)去常采用的方法,并且我將在下一節(jié)中討論更多關(guān)于帶外插件的內(nèi)容。它的問(wèn)題是無(wú)法干凈地完成。Ganglia 3.1.x 添加了 Python 和 C 模塊插件以使其看上去可以更加自然地?cái)U(kuò)展 Ganglia。此刻,我將向您展示第二種方法。

首先,用 Ganglia 啟用 Python 插件。執(zhí)行以下操作:

  1. 編輯 /etc/ganglia/gmond.conf 文件。

如果打開(kāi)該文件,您會(huì)注意到:其中四分之一的內(nèi)容都是類(lèi)似如下所示的名為 modules 的部分:

modules {
    module {
           name = "core_metrics"
     }
     ...
}
 

我們將向模塊部分添加另一個(gè)模塊。這個(gè)必須添加的模塊就是:

  module {
    name = "python_module"
    path = "modpython.so"
    params = "/usr/lib64/ganglia/python_modules/"
  }
 

在 gmond.conf 中,我在第 90 行添加了上一個(gè)代碼段。這將允許 Ganglia 使用 Python 模塊。此外,還在 include ('/etc/ganglia/conf.d/*.conf') 語(yǔ)句后添加一些行,添加 include ('/etc/ganglia/conf.d/*.pyconf') 行。這些包括了要添加的內(nèi)容的定義。

  1. 創(chuàng)建一些目錄。

如下所示:

mkdir /etc/ganglia/conf.d
mkdir /usr/lib64/ganglia/python_modules
 

  1. 在所有節(jié)點(diǎn)上重復(fù)執(zhí)行步驟 1 和 2。

為此,執(zhí)行下面的操作:

  • 把新的 gmond.conf 復(fù)制到要監(jiān)視的各個(gè)節(jié)點(diǎn)上。
  • 在要監(jiān)視的各個(gè)節(jié)點(diǎn)中創(chuàng)建步驟 2 中所示的兩個(gè)目錄,以便它們也可以使用 Python 擴(kuò)展。

現(xiàn)在已經(jīng)設(shè)置好節(jié)點(diǎn)可以準(zhǔn)備運(yùn)行 Python 模塊了,讓我們創(chuàng)建一個(gè)新模塊。在本例中,我們將添加一個(gè)使用 Linux IPMI 驅(qū)動(dòng)程序的插件。如果不熟悉 IPMI 并且使用的是現(xiàn)代的 Intel 和 AMD 計(jì)算機(jī),則請(qǐng)了解一下這方面的內(nèi)容(請(qǐng)參閱 參考資料)。

我們將使用開(kāi)源 IPMItool 與本地計(jì)算機(jī)中的 IPMI 設(shè)備進(jìn)行通信。還有若干其他選項(xiàng),如 OpenIPMI 或 freeipmi。這只是一個(gè)示例,因此如果您想要使用其他選項(xiàng),那么完全沒(méi)有問(wèn)題。

在開(kāi)始使用 Ganglia 之前,確保 IPMItool 可以在您的計(jì)算機(jī)中工作。運(yùn)行 ipmitool -c sdr type temperature | sed 's/ /_/g' 命令;如果該命令不工作,請(qǐng)嘗試裝入 IPMI 設(shè)備驅(qū)動(dòng)程序并再次運(yùn)行:

modprobe ipmi_msghandler
modprobe ipmi_si
modprobe ipmi_devintf
 

在運(yùn)行 ipmitool 命令后,我的輸出顯示:

Ambient_Temp,20,degrees_C,ok
CPU_1_Temp,20,degrees_C,ok
CPU_2_Temp,21,degrees_C,ok
 

因此在我的 Ganglia 插件中,我將只監(jiān)視周?chē)h(huán)境溫度。我已經(jīng)創(chuàng)建了一個(gè)編寫(xiě)得不是很好的名為 ambientTemp.py 的插件,該插件將根據(jù)在 Ganglia 維基中找到的插件使用 IPMI:

清單 1. 編寫(xiě)得不是很好的 Python 插件 ambientTemp.py

				
import os
def temp_handler(name):
  # our commands we're going to execute
  sdrfile = "/tmp/sdr.dump"
  ipmitool = "/usr/bin/ipmitool"
  # Before you run this Load the IPMI drivers:
  # modprobe ipmi_msghandler
  # modprobe ipmi_si
  # modprobe ipmi_devintf
  # you'll also need to change permissions of /dev/ipmi0 for nobody
  # chown nobody:nobody /dev/ipmi0
  # put the above in /etc/rc.d/rc.local

  foo = os.path.exists(sdrfile)
  if os.path.exists(sdrfile) != True:
    os.system(ipmitool + ' sdr dump ' + sdrfile)

  if os.path.exists(sdrfile):
    ipmicmd = ipmitool + " -S " + sdrfile + " -c sdr"
  else:
    print "file does not exist... oops!"
    ipmicmd = ipmitool + " -c sdr"
  cmd = ipmicmd + " type temperature | sed 's/ /_/g' "
  cmd = cmd + " | awk -F, '/Ambient/ {print $2}' "
  #print cmd
  entries = os.popen(cmd)
  for l in entries:
    line = l.split()
  # print line
  return int(line[0])

def metric_init(params):
    global descriptors

    temp = {'name': 'Ambient Temp',
        'call_back': temp_handler,
        'time_max': 90,
        'value_type': 'uint',
        'units': 'C',
        'slope': 'both',
        'format': '%u',
        'description': 'Ambient Temperature of host through IPMI',
        'groups': 'IPMI In Band'}

    descriptors = [temp]

    return descriptors

def metric_cleanup():
    '''Clean up the metric module.'''
    pass

#This code is for debugging and unit testing
if __name__ == '__main__':
    metric_init(None)
    for d in descriptors:
        v = d['call_back'](d['name'])
        print 'value for %s is %u' % (d['name'],  v)
 

復(fù)制清單 1 并將其放到 /usr/lib64/ganglia/python_modules/ambientTemp.py 中。對(duì)集群中的所有節(jié)點(diǎn)都這樣做。

現(xiàn)在我們已經(jīng)把腳本添加到了集群的所有節(jié)點(diǎn)中,告訴 Ganglia 如何執(zhí)行腳本。創(chuàng)建名為 /etc/ganglia/conf.d/ambientTemp.pyconf 的新文件,內(nèi)容如下:

清單 2. Ambient.Temp.pyconf

				
modules {
  module {
    name = "Ambient Temp"
    language = "python"
  }
}

collection_group {
  collect_every = 10
  time_threshold = 50
  metric {
    name = "Ambient Temp"
    title = "Ambient Temperature"
    value_threshold = 70
  }
}
 

將清單 2 保存到所有節(jié)點(diǎn)上。

重新啟動(dòng) gmond 之前必須完成的最后一件事是更改 IPMI 設(shè)備的權(quán)限,這樣沒(méi)有人 可以對(duì)它執(zhí)行操作。這將使您的 IPMI 接口極易受到惡意攻擊!

這只是一個(gè)示例:chown nobody:nobody /dev/ipmi0。

現(xiàn)在在所有位置重新啟動(dòng) gmond。如果運(yùn)行正常,則應(yīng)當(dāng)可以刷新 Web 瀏覽器并看到類(lèi)似如下所示的內(nèi)容:

圖 5. IPMI 帶內(nèi)度量數(shù)據(jù)
IPMI 帶內(nèi)度量數(shù)據(jù)  

帶內(nèi)度量數(shù)據(jù)的好處是允許您在主機(jī)中運(yùn)行程序,并通過(guò)其他度量數(shù)據(jù)使用的同一種收集機(jī)制將信息提供給鏈路。這種方法的缺點(diǎn)(尤其是對(duì)于 IPMI)是需要在主機(jī)上執(zhí)行相當(dāng)多的配置才能工作。

注意,必須確保腳本是用 Python 編寫(xiě)的,配置文件已經(jīng)存在,并且 gmond.conf 已正確設(shè)置。我們只執(zhí)行一種度量!考慮一下編寫(xiě)其他度量所需執(zhí)行的所有操作!針對(duì)每種度量在每臺(tái)主機(jī)上執(zhí)行此操作會(huì)變得非常煩人。IPMI 是帶外工具,因此有一種更好的方法,不是嗎?確實(shí)是。

#p#

帶外插件(主機(jī)欺騙)

主機(jī)欺騙剛好是我們需要的工具。在這里使用功能強(qiáng)大的 gmetric 并告訴它我們正在其上運(yùn)行的主機(jī) —— gmetric 是將信息插入到 Ganglia 中的命令行工具。通過(guò)這種方法,您可以監(jiān)視任何內(nèi)容。

gmetric 最精彩的部分是什么?大量已經(jīng)編寫(xiě)好的腳本。

作為一種學(xué)習(xí)體驗(yàn),我將向您展示如何徹底改造運(yùn)行 ipmitool 以遠(yuǎn)程訪(fǎng)問(wèn)計(jì)算機(jī)的方法:

  1. 確保 ipmitool 可以在帶外正常工作。

我已經(jīng)設(shè)置了 BMC(目標(biāo)計(jì)算機(jī)中的芯片),以便我可以在其中運(yùn)行 IPMI 命令。例如:我的監(jiān)視主機(jī)名為 redhouse。通過(guò) redhouse,我希望監(jiān)視集群中的所有其他節(jié)點(diǎn)。Redhouse 是 gmetad 運(yùn)行的位置,也是 Web 瀏覽器指向的位置(以便訪(fǎng)問(wèn)所有 Ganglia 信息)。

我的集群中的一個(gè)節(jié)點(diǎn)擁有 x01 主機(jī)名。我把 x01 的 BMC 設(shè)為擁有解析到主機(jī) x01-bmc 的 IP 地址。在這里,我嘗試遠(yuǎn)程訪(fǎng)問(wèn)該主機(jī):

# ipmitool -I lanplus -H x01-bmc -U USERID -P PASSW0RD sdr dump \ /tmp/x01.sdr
Dumping Sensor Data Repository to '/tmp/x01.sdr'
# ipmitool -I lanplus -H x01-bmc -U USERID -P PASSW0RD -S /tmp/x01.sdr \ sdr type 
                                                                            Temperature
Ambient Temp     | 32h | ok  | 12.1 | 20 degrees C
CPU 1 Temp       | 98h | ok  |  3.1 | 20 degrees C
CPU 2 Temp       | 99h | ok  |  3.2 | 21 degrees C
 

看上去一切良好?,F(xiàn)在讓我們把它放到一個(gè)腳本中以提供給 gmetric。

  1. 創(chuàng)建使用 ipmitool 的腳本以提供給 gmetric

我們創(chuàng)建了下面的 /usr/local/bin/ipmi-ganglia.pl 腳本并將其放到監(jiān)視服務(wù)器中:

#!/usr/bin/perl
# vallard@us.ibm.com
use strict;  # to keep things clean... er cleaner
use Socket;  # to resolve host names into IP addresses

# code to clean up after forks
use POSIX ":sys_wait_h";
# nodeFile: is just a plain text file with a list of nodes:
# e.g:
# node01
# node02
# ...
# nodexx
my $nodeFile = "/usr/local/bin/nodes";
# gmetric binary
my $gmetric = "/usr/bin/gmetric";
#ipmitool binary
my $ipmi = "/usr/bin/ipmitool";
# userid for BMCs
my $u = "xcat";
# password for BMCs
my $p = "f00bar";
# open the nodes file and iterate through each node
open(FH, "$nodeFile") or die "can't open $nodeFile";
while(my $node = <FH>){
  # fork so each remote data call is done in parallel
  if(my $pid = fork()){
    # parent process
    next;
  }
  # child process begins here
  chomp($node);  # get rid of new line
  # resolve node's IP address for spoofing
  my $ip;
  my $pip = gethostbyname($node);
  if(defined $pip){
    $ip = inet_ntoa($pip);
  }else{
    print "Can't get IP for $node!\n";
    exit 1;
  }
  # check if the SDR cache file exists.
  my $ipmiCmd;
  unless(-f "/tmp/$node.sdr"){
    # no SDR cache, so try to create it...
    $ipmiCmd = "$ipmi -I lan -H $node-bmc -U $u -P $p sdr dump /tmp/$node.sdr";
    `$ipmiCmd`;
  }
  if(-f "/tmp/$node.sdr"){
    # run the command against the cache so that its faster
    $ipmiCmd = "$ipmi -I lan -H $node-bmc -U $u -P $p -S /tmp/$node.sdr sdr type 
                                                                       Temperature ";
    # put all the output into the @out array
    my @out = `$ipmiCmd`;
    # iterate through each @out entry.
    foreach(@out){
      # each output line looks like this:
      # Ambient Temp     | 32h | ok  | 12.1 | 25 degrees C
      # so we parse it out
      chomp(); # get rid of the new line
      # grap the first and 5th fields.  (Description and Temp)
      my ($descr, undef, undef, undef,$temp) = split(/\|/);
      # get rid of white space in description
      $descr =~ s/ //g;
      # grap just the temp, (We assume C anyway)
      $temp = (split(' ', $temp))[0];
      # make sure that temperature is a number:
      if($temp =~ /^\d+/ ){
        #print "$node: $descr $temp\n";
        my $gcmd = "$gmetric -n '$descr' -v $temp -t int16 -u Celcius -S $ip:$node";
        `$gcmd`;
      }
    }
  }
  # Child Thread done and exits.
  exit;
}
# wait for all forks to end...
while(waitpid(-1,WNOHANG) != -1){
  1;
}
 

除了所有解析之外,此腳本只運(yùn)行 ipmitool 命令并獲取溫度。然后,它將針對(duì)每項(xiàng)度量數(shù)據(jù),使用 gmetric 命令將這些值放到 Ganglia 中。

  1. 以 cron 作業(yè)的形式運(yùn)行腳本。

運(yùn)行 crontab -e。我添加了以下每 30 分鐘就運(yùn)行一次的條目:30 * * * * /usr/local/bin/ipmi-ganglia.sh。您可能希望它發(fā)生得更加頻繁或者次數(shù)更少。

  1. 打開(kāi) Ganglia 并查看結(jié)果。

打開(kāi) Ganglia Web 瀏覽器并查看一個(gè)節(jié)點(diǎn)的圖形,您可以看到節(jié)點(diǎn)被欺騙并且更新了每個(gè)節(jié)點(diǎn)條目:

圖 6. no_group 度量數(shù)據(jù)
no_group 度量數(shù)據(jù)  

欺騙的缺點(diǎn)之一是類(lèi)別歸入 no_group 度量組。gmetric 似乎沒(méi)有辦法像帶內(nèi)版本那樣進(jìn)行良好的分組。

結(jié)束語(yǔ)

本文大致介紹了使用 Ganglia 和 Nagios 作為開(kāi)源監(jiān)視工具(單獨(dú)使用和同時(shí)使用)可以完成的工作。您了解了如何安裝/配置 Ganglia,然后看到了 Ganglia 對(duì)于了解應(yīng)用程序特性是多么有用。最后,您看到了如何使用帶內(nèi)腳本擴(kuò)展 Ganglia 以及如何使用帶有主機(jī)欺騙的帶外腳本。

這是一個(gè)良好的開(kāi)端。但是本文只回答了系統(tǒng)工程師提出的監(jiān)視問(wèn)題?,F(xiàn)在可以查看系統(tǒng)范圍的性能并了解計(jì)算機(jī)的利用情況。我們可以確定計(jì)算機(jī)是否始終處于空閑狀態(tài),還是以 60% 的使用率運(yùn)行。現(xiàn)在甚至可以確定哪些計(jì)算機(jī)運(yùn)行得最活躍,哪些計(jì)算機(jī)運(yùn)行得最少,并了解其機(jī)架位置是否可以安排得更好。

這個(gè)兩部分系列的第二部分將探究如何設(shè)置 Nagios 并將其與 Ganglia 整合在一起,內(nèi)容包括:

  • 安裝和配置基本 Nagios 設(shè)置以執(zhí)行報(bào)警
  • 監(jiān)視交換機(jī)和其他基礎(chǔ)設(shè)施
  • 將 Nagios 綁定到 Ganglia 中以執(zhí)行報(bào)警

此外,第二部分將展示如何擴(kuò)展整個(gè)監(jiān)視系統(tǒng)以監(jiān)視運(yùn)行作業(yè)和其他基礎(chǔ)設(shè)施。通過(guò)執(zhí)行這些附加項(xiàng)目,我們將能夠回答不同用戶(hù)組詢(xún)問(wèn)的其他監(jiān)視問(wèn)題。

原文:https://www.ibm.com/developerworks/cn/linux/l-ganglia-nagios-1/

【相關(guān)閱讀】

  1. Ganglia監(jiān)控系統(tǒng)安裝操作備忘
  2. Linux上構(gòu)建MRTG流量監(jiān)控中心
  3. Nagios監(jiān)控Linux和Unix服務(wù)器-自定義監(jiān)控服務(wù)
責(zé)任編輯:yangsai 來(lái)源: IBMDW
相關(guān)推薦

2013-01-23 14:39:52

云計(jì)算Nagios運(yùn)維

2017-02-05 16:48:38

LinuxGanglia

2013-12-13 17:04:37

運(yùn)維監(jiān)控Nagios

2022-04-26 07:49:23

Nagios開(kāi)源監(jiān)控

2011-04-06 14:24:20

Nagios監(jiān)控Linux

2011-04-06 14:24:21

Nagios監(jiān)控Linux

2011-04-06 14:24:27

Nagios監(jiān)控Linux

2011-04-12 22:30:20

Ganglia監(jiān)控

2011-04-06 14:24:18

2011-04-06 08:54:25

Nagios監(jiān)視

2011-03-24 10:08:39

Nagios監(jiān)控oracle

2011-03-04 10:47:06

Nagios監(jiān)控Sphinx

2011-03-25 09:18:59

Nagios

2011-03-28 17:18:57

nagios監(jiān)控iostat

2011-03-21 14:53:27

Nagios監(jiān)控Linux

2011-04-06 14:24:28

nagios監(jiān)控Linux

2013-06-09 14:12:42

監(jiān)控

2011-04-06 15:05:56

nagios監(jiān)控Linux

2011-03-22 09:07:12

nagios監(jiān)控oracle

2011-03-21 14:43:42

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)