使用 Xymon 進行系統監控/其他文件/HOWTO/針對 Hobbit 的自定義監控指令碼
我不對本檔案中的任何內容(從拼寫到技術知識)的正確性或適用性做出任何保證。本檔案中的任何內容都應自行承擔風險使用,包括思考的指示。所有免責宣告均適用。由於使用本檔案或其中包含的說明(以電子、印刷或任何其他形式)而產生的任何和所有損害都是您的問題,而不是我的問題。閱讀、下載或接觸本檔案的任何部分,即表示您接受此免責宣告。如果您不同意此條款,請立即停止閱讀本檔案。(無論如何,對我提起訴訟毫無意義。我沒有錢。)
本檔案受版權保護。我特此授予任何 Hobbit 使用者在本檔案或其部分內容上的免費使用和分發權利,前提是
- Hobbit 仍然是一個開源專案
- 您不會收取本檔案的費用
本檔案旨在供希望使用自定義指令碼擴充套件 Hobbit/BB 監控工具範圍的系統管理員使用。
- 它們是所有故障的起源,讓我直接告訴你我對你的假設。
- 您是一名系統管理員,可能希望讓您的生活更輕鬆。這意味著您有權編寫任何指令碼並在系統上安裝它們,並且您對 Unix 以及您要監控的內容有一定的瞭解。
- 您瞭解某種程式設計或指令碼語言。
- 您至少對 Hobbit 以及 Big Brother 或 Hobbit 客戶端有足夠的瞭解,可以獲得一些基本結果並顯示一兩個圖表,並且已經這樣做了。換句話說,我假設您的 Hobbit 安裝已經正常執行!
- 您使用 Unix 或其變體。
雖然本檔案是在假設您一無所知的情況下編寫的,但我假設您並非完全愚蠢。我發現許多手冊或操作說明都假設了一點知識,但他們假設您知道的那些知識,通常恰恰是您不知道的。我試圖涵蓋所有方面。
我不會教你如何編寫指令碼、從您的資料庫獲取資料、告訴您為什麼您的指令碼不起作用或充當您的技術支援部門。我相信 80-20 規則。如果你佔用我超過 20 秒的時間,你最好準備好支付我 80% 的工資。我也不會告訴你為什麼你的 Hobbit 安裝不起作用。訂閱 Hobbit 郵件列表。這就是它存在的目的。
我使用 Unix(Solaris 和 Linux),大多數命令和引用將基於 Unix。我同時也是一名 Oracle DBA,因此我將大量使用資料庫示例。我使用 Korn shell 來進行任何程式設計示例。我不會參與關於為什麼使用 Korn 而不是 Bash 或 Perl 或任何其他語言的理論辯論。我使用 Korn,因為我比其他任何指令碼或程式語言都要熟悉它。我使用它是因為我精通它。辯論結束!我建議您也這樣做,無論您選擇使用哪種語言。Unix 命令將使用等寬字型顯示,輸出也是如此。如果您以文字文件的形式獲得了本檔案,並且所有內容都是一個字型,並且您無法區分主文件和 Unix 命令,那麼您真的不應該考慮編寫自定義指令碼。
在建立自定義指令碼之前,請坐下來,認真思考您要監控的內容、您要繪製的內容以及原因。例如,假設您正在考慮監控日誌檔案以查詢特定訊息 - 但您將繪製什麼圖表?您可以監控 CD-ROM 的使用情況或容量,但這樣做有什麼用?如果驅動器中有一張 CD,那是因為您放進去的。畢竟,您是管理員,並且您的伺服器位於受控環境中。如果您想監控它,它需要對您有用。沒有必要用毫無意義的點填充您的螢幕。如果您想要這樣做,可以輕鬆地進行偽造 - 參見下文。
好的,現在您知道要監控的內容、原因,並且已經決定了將如何處理資料,我仍然不建議我們立即開始編寫自定義指令碼。下一步是檢視 Hobbit 手冊頁。檢查您是否沒有重複造輪子。Larry Wall 曾經說過:“從歷史上看,Unix 中車輪的存在從未阻止過它們被重新發明。”他還說:“程式設計師的三大美德是:懶惰、急躁和狂妄自大。”我贊同懶惰的美德。重複造輪子很糟糕,而且很多時候,前一個人比你能做得更好,或者你有時間去做。
仍然找不到您想要的東西?下一步是 http://www.deadcat.net 這些都是 Big Brother 的外掛,但大多數都可以無縫整合到 Hobbit 中,其餘的可以用鞋拔子或錘子進行適配。(錘子的尺寸未定義)我仍然不準備重新發明輪子。
此時,如果您仍然沒有找到您想要的東西,那麼您可能需要自己設計一個輪子。
是時候再次思考了。
Hobbit 只能報告有限數量的狀態,這些狀態由狀態顏色反映,而您只能控制其中的 3 種,即紅色、黃色和綠色。
在開始之前,請考慮並記錄下任何監控條件將返回的顏色。
例如,在開發系統上的使用者目錄中生成的程式核心轉儲實際上並不需要紅色狀態。由於這是我們可以預期開發人員不時會做的事情,我們為什麼要監控它?如果它發生在生產系統上的使用者目錄中,它可能需要黃色狀態。如果它發生在主財務系統的執行目錄中,那麼它可能需要紅色狀態。
現在考慮您希望訊息看起來像什麼。將/var/adm/messages的全部內容發回是浪費時間和頻寬。發回tail /var/adm/messages更有意義。隔離導致問題的訊息可能是一個更好的主意。您在Hobbit螢幕上看到的訊息(您單擊面部或 blob 時看到的內容)需要足夠詳細,以便使用,但也需要足夠簡短,以便您一目瞭然地瞭解發生了什麼。太多資訊和太少資訊一樣糟糕,尤其是當您打算將監控任務委派給運營部門時。
您將生成圖表嗎?圖表有意義嗎?我們只能繪製一段時間內的數量。繪製訊息測試結果的圖表沒有意義。監控 CPU 溫度很好。硬碟利用率、資料庫表空間、CPU 利用率,這些都是值得繪製的。訊息不好。核心不好。錯誤或核心數量可能很好,但如果您每 5 分鐘獲得如此多的錯誤或核心,我認為您遇到了比建立新的 Hobbit 指令碼更重要的問題。
所以您想要一個圖表。這很好,但是您要繪製什麼?如果可能,最好將您的數字減少到百分比。它只是讓繪圖工具更容易使用,並且可以輕鬆地將所有內容放在同一個圖表上。讓我們回到我的資料庫示例。我有一個表空間的大小超過 50Gb,使用約 35Gb,另一個只有 700Mb,使用 300Mb。在同一個圖表上,它們看起來很愚蠢,即使我可以看到它們的值,我仍然需要記住每個表空間的總大小才能確定空間是否變得有問題。以百分比檢視,兩者都可以出現在同一個圖表上,我知道超過 90% 存在潛在問題,無論表空間的大小是多大還是多小。(如果您不理解上一段,因為您不瞭解資料庫,請再次閱讀,但將“磁碟”替換為“表空間”。這是一個類似的概念。)
您將使用於圖表的相關資訊對監視器可見嗎?Big Brother 和 Hobbit 允許您將兩種型別的資訊傳送到 Hobbit 客戶端。它們是狀態資訊(在您單擊面部或 blob 圖示時顯示)和資料(從不顯示,但可用於收集資訊)。如果資訊特別複雜,最好不要顯示它。
既然您知道想要什麼,在哪裡以及如何顯示它,請考慮如何獲取它。監控磁碟空間很容易。在大多數 Unix 版本中,df -k 將告訴您有關磁碟空間的所有資訊,並且在某些版本中甚至會為您提供百分比數字。(有關您的 Unix 版本的詳細資訊,請參閱Unix Rosetta Stone。)
從資料庫獲取相同的資訊並不總是那麼簡單,並且通常需要一些相當漂亮的 SQL。現在我們選擇開發語言。如上所述,我使用 ksh(又名 Korn Shell),但是沒有什麼能阻止我用 SQL、Perl 甚至用編譯後的 C 編寫它,除了我不會說 C,而且我只懂一點點 Perl,很危險。
您選擇的語言必須考慮以下幾點。
- 您需要能夠呼叫外部二進位制檔案。
- 您需要能夠獲取所需的資訊
- 它需要是可執行的,以便 BB(或 Hobbit 客戶端)可以呼叫它。
- 它需要解釋環境變數。
- 除非我們可以呼叫 bb 程式,否則我們將無法走得太遠。在大多數 shell 指令碼中,這很簡單。在 SQL 和 Perl 中,它稍微不那麼簡單,但仍然非常簡單,但在其他語言中,它可能有點棘手。
- 如果在我的用 <在此處插入語言> 編寫的程式中,我沒有任何方法來查詢資料庫以確定表空間利用率,那麼使用這種語言就沒有太多意義。在 ksh 中,我可以呼叫一個 SQL 直譯器,並將一個 SQL 指令碼傳遞給它。Perl 有庫可以直接與資料庫對話。只要您能夠獲取所需的資訊,它就是一個不錯的選擇。
- 如果我需要解釋這個,請遠離電腦。
- 您將需要的大多數變數都在
$BBHOME/etc/bbdef.sh中定義。如果您的指令碼無法讀取此檔案並解釋其中的值,那麼您可能遇到問題。
無論您使用什麼系統或語言,您的指令碼可能都有 4 個部分。
- 定義所有內容
- 收集資料
- 處理/操作資料
- 定義顏色併發送
定義所有內容可能與原始碼$BBHOME/etc/bbdef.sh檔案一樣簡單,但它可能有點複雜。熟悉 Oracle 的人知道,在我執行 SQL 指令碼之前,還需要定義一些額外的環境變數。無論您如何定義所有內容,請記住記錄或註釋所有內容。您很可能最終成為維護它的人。
一旦定義了所有變數和環境,請執行收集資料所需的操作。將資料傳送到臨時檔案可能很明智。收集資料可能是一條命令,也可能是一個複雜的程式,該程式執行並查詢多個系統和資料庫。您如何收集所需內容超出了本文件的範圍,但如果您像我一樣懶惰,並且正在尋找捷徑,請使用 Google。您會對Google 搜尋“Oracle 表空間指令碼”的結果感到驚訝。
現在我們有了資料,我們需要將其處理成可用的東西。如果它要顯示在螢幕上,請使其看起來很好。其中一些可能是資料專用,並且不會顯示在螢幕上。將它轉儲到單獨的檔案。在這一點上新增狀態顏色決策邏輯也可能更容易。這是您的指令碼,您說了算。
最後,我們得到一個或兩個檔案。$BBTMP/data.out.$$和$BBTMP/status.out.$$(如果這看起來太神秘,我不建議您使用 ksh 編寫您的指令碼)
現在我們將輸出傳送到 Hobbit。命令很簡單。檢查您的 bb 手冊頁。如果您願意,可以硬編碼它,也可以使用已定義的變數,這實際上沒有區別,除非您想在將來使生活更輕鬆。(硬編碼通常意味著以後會頭痛。)
讓我們分析一個基本的指令碼。這將報告我的表空間級別。
#!/usr/bin/ksh
# Define this to be a Korn shell script.
. ../etc/bbdef.sh # Set up the BB environment
. /export/home/oracle/.profile # Set up the Oracle environment
export TEST=ora # The test name
export COLOUR=green # The default colour
# Note to all Americans. This is how I spell colour - no arguments.
export OUTFILE=$BBTMP/outfile.$$ # My temp file
# We are not using data, only status for this one, so we only have
# one temp file.
# Up to here we have defined the environment
date > $OUTFILE # Create my temp file
# Now we collect the data
sqlplus -s orauser/passwd @/export/home/oracle/tables >> $OUTFILE
# Do not worry about the above syntax. If you understand Oracle, it
# will make sense. If not, assume it is a df -k on table spaces.
# Replace it with df -k >> $OUTFILE
# It is doing the equivalent on the database
# The sql file we just used formats the data for us, so all we
# need to do is check for the status. The values that interest me
# are in the sixth column, as percentage.
awk '{ print $6 }' $OUTFILE | while read VAL
do
[ $VAL -gt 85 ] && COLOUR=yellow
[ $VAL -gt 95 ] && COLOUR=red; break
done
# The logic here is very simple. We start with green, and get
# worse. Once we hit red, it is not getting any worse, so we exit
# the loop.
# A more sophisticated script could do a lot more, but we are
# doing a basic script.
# Now we send the data
$BB $BBDISP "status $MACHINE.$TEST $COLOUR `< $OUTFILE`"
# BB, BBDISP and MACHINE should be defined in bbdef.sh
# This will send the contents of $OUTFILE to the Hobbit client
# It will also ensure that the colour is set correctly
# to whatever appears in $COLOUR
# $BB = the Big Brother (or Hobbit) client program
# $BBDISP = the hostname or IP address of your Hobbit server
# $MACHINE = the name of the machine being monitored
# $TEST = Defined above
# $COLOUR = Colour of the status on the Hobbit server
rm $OUTFILE
# Clean up our temp files
首先,將您的指令碼複製到$BBHOME/ext/目錄。我們將其稱為bb-ora_ts.sh。它是一個指令碼。使其可執行。chmod 755將完成此操作,但這取決於您的安全級別。
現在編輯$BBHOME/etc/bb-bbexttab
此檔案將採用以下形式
servername: : testname1 testname2 testname3
如果您在名為 wallaby 的伺服器上,並且想要新增我們上面顯示的測試,請新增或編輯該行
wallaby: : testname1 testname2 testname3 bb-ora_ts.sh
儲存並退出,然後重新啟動 bb 客戶端。您可以使用以下任何命令重新啟動。
/etc/rc3.d/S99bb restart
或
su - bb ./runbb.sh restart
或取決於您的設定
su - bb ./bb/runbb.sh restart
等待幾分鐘。您可能想先去喝杯咖啡。
最終,這應該會導致您 Hobbit 主頁上出現一個新的列。列標題應為ora(因為這是指令碼中的值),如果我們單擊狀態圖示,我們應該看到類似的內容。
Wed Jun 8 15:35:46 WST 2005
Tablespace siebprod:XDB totals 20.0Mb and is 0% used.
Tablespace siebprod:WHS_INDEX totals 1440.0Mb and is 33% used.
Tablespace siebprod:WHS_DATA totals 1440.0Mb and is 37% used.
Tablespace siebprod:USERS totals 100.0Mb and is 1% used.
Tablespace siebprod:UNDOTBS1 totals 5000.0Mb and is 30% used.
Tablespace siebprod:TOOLS totals 150.0Mb and is 66% used.
Tablespace siebprod:SYSTEM totals 500.0Mb and is 69% used.
Tablespace siebprod:SIEB_INDEX totals 52240.0Mb and is 68% used.
Tablespace siebprod:SIEB_DATA totals 45120.0Mb and is 56% used.
Tablespace siebprod:LOADER_DATA totals 500.0Mb and is 0% used.
有點平淡,但這是一個好的開始。因為$OUTFILE 中的內容將顯示在網頁上,所以可以在 $OUTFILE 中新增 HTML 標籤。從 deadcat 下載 bb-iostat。該測試在您的 Hobbit 螢幕上將自己識別為 vmio,但該指令碼非常奇特,並且對顯示執行了一些有趣的操作,包括插入狀態圖示、下劃線和一些字型操作。
改進程式設計的最佳方法之一是檢視其他人的做法。從 deadcat 下載一些指令碼,看看它們是如何編寫的。
我在我的 Hobbit 中使用上面示例指令碼的稍微複雜一點的版本,結果得到以下內容。
Wed Jun 8 16:00:07 WST 2005 Oracle test on "siebprod": OK
=============== Oracle Instance Check ================
Instances specified in ORACLE_SIDS (siebprod) match those found in /export/home/bb/bb/ext/ora9tab
=================== siebprod Check ===================
Database siebprod UP processes: pmon smon lgwr dbw0 ckpt reco
Paranoid test: Database siebprod is up.
============= siebprod Tablespace Check ================
Tablespace siebprod:XDB totals 20.0Mb and is 0% used.
Tablespace siebprod:WHS_INDEX totals 1440.0Mb and is 33% used.
Tablespace siebprod:WHS_DATA totals 1440.0Mb and is 37% used.
Tablespace siebprod:USERS totals 100.0Mb and is 1% used.
Tablespace siebprod:UNDOTBS1 totals 5000.0Mb and is 31% used.
Tablespace siebprod:TOOLS totals 150.0Mb and is 66% used.
Tablespace siebprod:SYSTEM totals 500.0Mb and is 69% used.
Tablespace siebprod:SIEB_INDEX totals 52240.0Mb and is 68% used.
Tablespace siebprod:SIEB_DATA totals 45120.0Mb and is 56% used.
Tablespace siebprod:LOADER_DATA totals 500.0Mb and is 0% used.
一些圖示用於引起注意,一些下劃線,一些粗體文字。任何能讓問題原因顯而易見的東西。
每 5 分鐘或您的 Big Brother 客戶端設定的執行頻率,它將執行 bb-bbexttab 檔案中列出的每個指令碼。該指令碼執行,然後呼叫 Big Brother 訊息代理,該代理將資料傳送到 Hobbit 伺服器以顯示。(有點過度簡化,但已經足夠了)如果您在呼叫 $BB 時使用了資料而不是狀態
$BB $BBDISP "data $MACHINE.$TEST $COLOUR `cat $OUTFILE`"
什麼都不會顯示,但我們仍然可以使用這些資料,通常用於繪圖。為了確保您的指令碼正常工作,請將資料更改為狀態,並確保 Hobbit 確實收到了您應該傳送的內容。
所以你跑去泡了杯咖啡,耐心地喝著,甚至還燙了一下嘴唇,但你的 Hobbit 主螢幕上還是什麼都沒顯示。以下是一些需要檢查的事項。
- 其他測試是否都通過了?可能是網路問題。
- 您確定 Hobbit 設定正確且執行正常嗎?檢查連線測試。
- 您在呼叫 BB 客戶端時是否使用了 status?
- 檢查
$BBHOME/BBOUT日誌檔案。裡面可能有一些有趣的提示。 - 請記住,您的指令碼以使用者 bb 身份執行。bb 是否擁有執行您所需操作的許可權,比如執行測試指令碼?
- 確保您正確呼叫了 Big Brother 客戶端。(最簡單的方法是在 $BB..... 行前面新增一個 echo,並在後面新增一個重定向,這樣這行就會從
$BB $BBDISP "status $MACHINE.$TEST $COLOUR `cat $OUTFILE`"
變為
echo $BB $BBDISP "status $MACHINE.$TEST $COLOUR `cat $OUTFILE`" >/tmp/out
等待一段時間(或者您可以使用此方法在命令列測試您的指令碼,而無需在成功後等待或修改指令碼:[1]),
然後檢查 /tmp/out;如果為空,請檢查您的變數定義。
- 檢查所有路徑是否正確。
- 註釋掉
rm $OUTFILE行。 - 檢查是否正在寫入。
- 如果您仍然無法解決問題,請諮詢郵件列表中的幾位資深成員。
如果您在 Hobbit 監控器上看到了預期顯示,那麼恭喜您!您已經成功添加了自己的自定義指令碼。我建議您非常仔細地測試它。確保顏色發生了變化,並且顯示內容已更新。現在它已經運行了,您可以開始變得花哨,新增內聯 HTML 等等,讓它看起來很酷。
圖表是另一份文件的主題,也許還會由另一位作者撰寫。(我需要看看我是否有時間)
您的新測試有一個列名,但如果您單擊列名,就會出現錯誤。如果您單擊主頁面上的“conn”,它會告訴您連線測試的作用。要讓您的新測試執行相同的操作,請在 Hobbit 伺服器上編輯 /usr/lib/hobbit/server/etc/columndoc.csv。新增以下內容。
Testname;Test description;
對於我的測試,我會新增
ora;The <b>ora</b> test gives more information about the table space in the database;
您在這裡放入的內容完全由您決定。這是一個描述欄位,所以您甚至不需要更新它。
作者:Vernon Everett,傳送到 Hobbitmon 郵件列表