輕鬆學習MRTG

摘要:輕鬆學習MRTG

資料來源:hon0612.blogspot.com/2005/10/mrtg.html

輕鬆學習MRTG

 

Part 1MRTG建置篇


 

緣起


 

最近心血來潮寫了些心得文章,其中MRTG最為有趣,所以我就找了時間整理的一下寫成幾篇心得文章,也由於這篇文章資料多為取之於網路所以理應回饋於網路。

本文章是我蒐集國內外網路上將有關於MRTG文章整理後所撰寫出來的。其內容皆針對RedHat 8.0的環境,因此,所有的功能皆在該環境下測試過後無誤才寫的,目前除了MRTG本身網路流量監測功能外,我還會寫有關於主機CPU負載量統計、遠端主機CPU負載量統計、主機記憶體負載量統計、遠端主機記憶體負載量統計、主機磁碟負載量統計、遠端主機磁碟負載量統計、主機風扇監視、主機溫度監視、主機使用者與Processes監視、MySql資料庫效能統計、…等等相關文章。也由於應用廣泛,一定會花許多時間來完成,屆時希望也對個位有幫助。當然由於一些內容是從網站上找到的,出處大多未紀錄到,如不妥之處還請通知改進,當然也需各位的指導與指教…謝謝!!


 

前言


 

MRTG (Multi Router Traffic Grapher) 是透過 SNMP (Simple Network Management Protcol)來監視並記錄網絡傳輸流量,並將這些資訊以含有PNG格式圖形的Web方式顯示給使用者觀察流量負載,關於MRTG的詳細的資訊可以至官方網站(http://people.ee.ethz.ch/~oetiker/webtools/mrtg)中取得。


 

特色


 

可攜性:目前可以運行在大多數Unix系統和Windows NT之上。

源碼開放:Mrtg採用perl撰寫,所以程式碼完全開放。

高可攜性的SNMP支援:Mrtg採用了Simon Leinen編寫的具有高可攜性的SNMP實現模組,從而不依賴於操作系統的SNMP模組支援。

支持SNMPv2cMRTG可以讀取SNMPv2c64位的記數器,從而大大減少了記數器回轉次數。

可靠的介面標識:被監控的設備的介面可以以IP位址、設備描述、SNMP對介面的編號及Mac位址來標識。

常量大小的日誌檔:MRTG的日誌不會變大,因為這裡使用了獨特的資料合併演算法。

自動配置功能:MRTG自身有配置工具套件,使得配置過程非常簡單。

性能:時間敏感的部分使用C代碼編寫,因此具有很好的性能。

PNG格式圖形:圖形採用GD庫直接產生PNG格式。

可定制性:MRTG產生的WEB畫面是完全可定制的。


 

相容性


 

MRTG可以在以下的作業系統上執行:

LinuxLinux MIPSLinux S/390SunOSSolarisAIXHPUXWindows NT/2K/XPIRIXBSDI BSD/OS NetBSDFreeBSDOpenBSDDigital UnixSCO Open ServerReliant UNIXNeXTStepOpenStepMac OS X 、… 等等。

至於監控的設備方面,市場上大多數產品都支持SNMP協定,只要支援SNMP協定的設備就都可以使用MRTG來監控。


 

安裝與設定


 

由於本篇文章是針對於Redhat 8版本環境所撰寫的,因此以下安裝與設定均以此環境為主。

Red Hat 8.0在裝好之後,其實便已經裝好MRTG,其版本為mrtg-2.9.17-8,如需升級到最新版本的話,則必須利用RPM來移除原先版本然後再到官方網站下載tarball新版本來安裝(由於非本篇文章重點所以本章節並不作此安裝步驟敘述),以下則針對RedHat 8.0內定的MRTG作設定。

  1. 啟動RedHat 8.0SNMP協定


 

    1. root 編輯 /etc/snmp/snmpd.conf 將下列五行前面加#字符號

# com2sec notConfigUser default public

# group notConfigGroup v1 notConfigUser

# group notConfigGroup v2c notConfigUser

# view systemview included system

# access notConfigGroup "" any noauth exact systemview none none

完成後再/etc/snmp/snmpd.conf加入rocommunity public  這一行,並找到

syslocation Unknown (edit /etc/snmp/snmpd.conf)

syscontact Root <root@localhost> (configure /etc/snmp/snmp.local.conf)

將這兩行內容改成屬於自己的主機資訊。


 

    1. 完成後用root 權限執行 service snmpd start 看到如下訊息變完成了SNMP的啟動了。

# service snmpd start

啟動 snmpd:[ 確定 ]


 

  1. 建立mrtg.cfg檔案

# cd /etc/mrtg

# cfgmaker public@主機IP位址或是主機名稱 > mrtg.cfg

編輯 mrtg.cfg 內容如下

### Global Config Options

# for UNIX

# WorkDir: /home/http/mrtg ß將此行加#字符號並加入下列文字

WorkDir: /var/www/html/mrtg ß統計資料存放目錄

Options[_]: growright, bits ß圖形座標向右(預設:)

Background[_]: #ffffff ß背景顏色

WithPeak[_]: ym ß/年報表中加入五分鐘尖峰值標示

Language: big5 ß顯示文字Bog5

Refresh: 300 ßWEB畫面更新時間(單位:秒)

WriteExpires: Yes ß顯示統計資料有保留期限


 

  1. 執行 /usr/bin/mrtg /etc/mrtg/mrtg.cfg 三次以產生相關MRTG資訊檔案。

如有其他訊息出現時可先忽略掉,當執行到第三次時便不會再出先其他訊息了。


 

  1. 執行 indexmaker /etc/mrtg/mrtg.cfg > /var/www/html/mrtg/index.html 這行指令以產生index.html 檔案。

  2. 用瀏覽器檢視看看是否完成。

http://主機IP位址或是主機名稱/mrtg/

最後,檢查crontab是不是定時執行/usr/bin/mrtg /etc/mrtg/mrtg.cfg,例如:

cat /etc/crontab 找其內容看看是否有沒有下面這行

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg


 


 

 

Part 2、主機CPU負載量統計


 

根據MRTG繪圖原理,一般只要提供給MRTG兩組數字再透過mrtg.cfg的設定後,執行/usr/bin/mrtg /etc/mrtg/mrtg.cfg.xxx 即可繪出一個圖形出來,因此,我們可以利用這樣的原理來繪出一皆我們所想要的監控圖形出來,本章節所提的主機CPU負載量統計即是利用這樣的原理所產生而來的。


 

  1. 首先,我們必須利用script來產生兩個數值出來,一般針對CPU而言必須對日常CPU 負載作監控的方式,在網路上有很多方法,一般較常見的方式便是採用 sar 這個指令來作,因為 sar 這個指令會產生Average(平均值)例如:

,因此,我們便直接抓欲監測的數值兩個即可繪出我們所想要看到的圖形出來了。


 

  1. Script,一般而言sar 所產生的數據,我們僅僅要的只是其中的兩個而已,因此必須透過Script來完成抓值的工作,至於要抓哪些值呢?sar所產生的數據來說我們得先抓到

Average: all 0.00 0.00 0.00 100.00

這行,然後%user%nice%system%idle這四個數值我們僅僅只需要兩個就夠了,以下所舉的例子是以%user使用量平均值及%system系統使用量平均值:


 

/usr/bin/sar -u 1 3 | grep Average | awk '{print $3}'

/usr/bin/sar -u 1 3 | grep Average | awk '{print $5}'


 

以上兩個數據,我們還必須加上”開機時間”及”主機名稱”,所以我們必須寫一個Script來完成這四個數據的產生。以下兩個範例一個是採用一般的shell script所寫出來的,另一個則是用perl與法所寫的:


 

Frame1

Frame2

  1. 有了這Scrip後,我們將它命名為mrtg.cpu,然後我們必須再寫一個mrtg.cfg.cpu其內容如下:


 

Frame3

  1. 最後別忘了要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu


 


 

 

Part 3、遠端主機CPU負載量統計


 

前面一章節是說明利用Script來完成CPU負載量統計,但礙於Script僅能使用在MRTG主機端上執行,所執行出來的數據也是該主機所產生的,所以對於其他非MRTG的主機,除非我們每台都安裝有MRTG否則就無法監測到CPU負載量統計,礙於此,我們得透過SNMP這個協定來抓取遠端主機的CPU負載量統計。


 

什麼?SNMP可以抓到遠端主機的CPU負載量?!” ㄏㄏ~~我第一次就是有這樣的想法耶!所以,我想對於第一次接觸到 SNMP的人應該也是會有相同的相法吧!

廢話不多說以下便是我找了很多資料所整理出來的!一般來講,SNMP定義了一個叫做MIB(Management Information BaseMIB)的管理物件庫,MIB是一個按照層次結構組織的樹狀結構,其定義方式類似於功能變數名稱系統,而OSI組織為樹中每一層的每個節點定義唯一的一個數位標識,這樣樹中的每個節點都可以用從根開始到目的節點的相應的標識對應的一連串的數位來表示,如1.3.6.1.2.1.1表示了MIBII中系統組子樹,1.3.6.1.2.1.1.1.0表示系統組中的系統描述(sytem Descrption)物件。每個物件的一連串數位表示被稱為物件識別字(Object IndentifierOID),我們便可利用OID來取出我們所需要的數值了。

看不懂嗎??沒關係,以MRTG來遠端監測CPU負載量統計來說,不懂SNMPMIBOID 的關係沒啥影響,還是可以透過我後面的資料來作便可完成,只是SNMP是個很有趣的協定,由於本篇文章的重點不是SNMP協定的介紹,所以請有興趣的人除了可以參考O'Reilly所出的”SNMP 網管實務”外,本篇文章後面我會將一些參考資料的網址寫出,有興趣的人可以看看了解一番。

接下來我將我整理出來的OID及其相關作用整理出來於後,希望對於需要的人有所幫助。(:下面是我針對Redhat 8.0內定的SNMP所整理出來的資料)


 

  1. PROCESSOR相關的 MIB: .1.3.6.1.4.1.2021.10.1.3.x

Frame4 註:產生出來的數值以%為單位。


 

  1. MEMORY相關 MIB: .1.3.6.1.4.1.2021.4.x.x

Frame5註:產生出來的數值以Bytes為單位。


 

  1. DISK相關 MIB: .1.3.6.1.2.1.25.2.3.1.x.x

由於DISK這部分的值,每部機器因硬體設備、分割方式、…等不同而有不同的結果,所以這份資料的整理我將會在”遠端主機DISK負載量統計”該篇文章中再作完整的整理與解釋。


 

在此,主機CPU負載量統計方面,我們已經學會了如何去取出我們所需要的數值了,接下來的介紹便是利用這些數值加上MRTG來繪出我們所需要的圖形了。一般來說,利用讀取SNMP來繪製主機CPU負載量統計除了前一章節所說的Script加上mrtg.cfg的方式外,還可以直接只寫一個mrtg.cfg即可,本章節則利用後者來完成MRTG繪圖。

以下是mrtg.cfg.cpu.2內容:


 

Frame6

編輯好了mrtg.cfg.cpu.2後一樣要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu.2 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.cpu.2


 

最後,本篇文章所用的mrtg.cfg.cpu.2其中有一行為:

Directory[snmp_cpu]: cpu

所使用的用瀏覽器檢視時必須要多加入一個目錄名稱才可以看得到圖形出來,

例如:http://主機IP位址或是主機名稱/mrtg/cpu /snmp_cpu.html


 


 

 

Part 4、主機記憶體負載量統計


 

按照前面Part 1Part 2以及Part 3文章中所述,我們可以如法砲製的將關於記憶體相關的兩個數據提供給MRTG使其繪出我們所需要的圖形來。


 

  1. 首先,我們一樣利用script來產生兩個數值出來,一般針對記憶體而常見的方式是採用 free 這個指令來作,然後我們在將 free所產生的數據取其我們要監測的兩個便可以了。


 

  1. free 這個指令所產生的數據,我們同樣要的只是其中的兩個而已,同樣也必須透過Script來完成抓值的工作,至於要抓哪些值呢?一般而言就見仁見智了,下面的例子是以free所產生的數據以used-/+ buffers/cache這兩個值為主。


 

free -bt | grep buffers\/cache | awk '{print $3}'

free -bt | grep buffers\/cache | awk '{print $4}'


 

同上面Part2所述一樣,以上兩個數據,我們還必須加上”開機時間”及”主機名稱”,所以我們必須寫一個Script來完成這四個數據的產生。以下範例是採用一般的shell script所寫出來的:


 

Frame7

  1. 寫好了這個Script後,我們將它命名為mrtg.mem並存放到/etc/mrtg目錄下,當然別忘了執行

# chmod +x mrtg.mem

讓這個Script可以執行,其執行結果如下圖:

  1. 有了這Script後接下來我們一樣必須再寫一個mrtg.cfg.mem其內容如下:

Frame8

  1. 最後同樣要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.mem 執行三次並放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.mem


 


 

 

Part 5、遠端主機記憶體負載量統計


 

本章節的原理與 ”Part 3遠端主機CPU負載量統計” 是相同的,主要目的是透過SNMP協定來抓取遠端主機的記憶體負載量統計。


 

由於Part 3該篇文章對於SNMP 的觀念以有些許的簡介,所以要監測遠端主機記憶體的負載我們僅需記住其相關的MIBOID值,其內容如下: (:下面是我針對Redhat 8.0內定的SNMP所整理出來的資料)


 

MEMORY相關 MIB: .1.3.6.1.4.1.2021.4.x.x

Frame9註:產生出來的數值以Bytes為單位。


 


 

有了上面資訊後,主機記憶體負載量統計方面,我們只要選擇所需的兩個值來作監測即可,但由於上面的資料只有總容量及剩餘空間容量的數值,若要監測的數值為使用量的話,就必須利用Shell Script來完成,因此,本章節就以實體記憶體使用量及Swap使用量兩數值作為繪圖的實例。


 

首先我們要寫一個檔名為mrtg.mem.2的一個Shell Script 來產生MRTG繪圖所需的數值,其內容如下:

Frame10編輯完成後執行 “./mrtg.mem.2 IP位址或主機名稱”,便會產生四個數值出來,如下圖:

確認可以執行後,接下來還是一樣要編輯一個名為mrtg.cfg.mem.3cfg檔,以下是mrtg.cfg.cpu.2內容:


 

Frame11

編輯好了mrtg.cfg.mem.2後一樣要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.mem.2 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.mem.2


 

最後,本篇文章所用的mrtg.cfg.mem.2其中有一行為:

Directory[snmp_cpu]: mem

所使用的用瀏覽器檢視時必須要多加入一個目錄名稱才可以看得到圖形出來,

例如:http://主機IP位址或是主機名稱/mrtg/mem/snmp_mem.html


 

 

Part 6、主機磁碟機負載量統計

關於主機磁碟機負載量統計其原理與前面幾篇一樣,所以我就直接將Scriptcfg檔寫出來...
以下是Shell Script內容:

Frame12以下是mrtg.cfg.disk檔內容:

Frame13


 

 

Part 7、遠端主機磁碟機負載量統計


 

本章節的比其他章節複雜的地方在於每部主機的設定與每部主機並不相同,也就是說會與硬碟的partition有關係,例如我的測試主機 home目錄我是切成/dev/sda5但其他機器的/dev/sda5未必定義成home,因此,以下的說明需花時間了解其原理,否則抓出來的數值會錯誤,相對的MRTG圖形也會不準確的。


 

首先,我們回到Part 3去複習一下SNMP 的觀念,然後一樣找出有關於硬碟相關的MIBOID值,其內容如下: (:下面是我針對Redhat 8.0內定的SNMP所整理出來的資料)


 

Storage相關 MIB: .1.3.6.1.2.1.25.2.3.1.x.x

Frame14註:產生出來的數值以Bytes為單位。


 

有了上面MIB資訊後,以下的實例是我測試機所做出來的結果,就如上面所述,每台機器所跑出來的結果會有所不同而須配合調整。

  1. 找出主機磁碟相關數據:

我們可以利用snmpwalk這個指令來找出相對應的參數來,其指令使用方式如下:

snmpwalk -O s -v 1 主機名稱或IP 位址 -c public(snmp community) mib-2.25.2.3.1.x

圖、一:

圖、二:

圖、三:

圖、四:


 

圖一至圖四所用的MIB值各為mib-2.25.2.3.1.3mib-2.25.2.3.1.4mib-2.25.2.3.1.5mib-2.25.2.3.1.6,由圖一我們可以看出我的檔案系統的掛載點有多少個,我們便可以得知掛載點的MIB的子節點為何!! 也就是說,我今天想要顯示出來home的掛載點我可以執行:

snmpwalk -O s –v 1 TEST -c public mib-2.25.2.3.1.3.2à確認mib-2.25.2.3.1.3.2的掛載點為home

snmpwalk -O s –v 1 TEST -c public mib-2.25.2.3.1.4.2à顯示home的分配額單位

snmpwalk -O s –v 1 TEST -c public mib-2.25.2.3.1.5.2à顯示home的統總容量

snmpwalk -O s –v 1 TEST -c public mib-2.25.2.3.1.6.2à顯示home的使用容量

其內容我們可以的到如下的資訊:

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.3.2

hrStorageDescr.2 = STRING: /home


 

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.4.2

hrStorageAllocationUnits.2 = INTEGER: 1024 Bytes


 

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.5.2

hrStorageSize.2 = INTEGER: 497829


 

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.6.2

hrStorageUsed.2 = INTEGER: 8377


 

有了以上的資訊後,接下來我們便可以用Shell Script來取出我們所想要的監控值,例如我們要看home的使用量時我們可以取總容量與使用量來繪出MRTG圖形。

那為何我們還需要用到分配額單位呢?”其原因我也是弄了一些時間才發現到它的重要性的,下面實例是我測試主機上所出現的數據:

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.3.1

hrStorageDescr.1 = STRING: /

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.4.1

hrStorageAllocationUnits.1 = INTEGER: 4096 Bytes

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.5.1

hrStorageSize.1 = INTEGER: 426917

# snmpwalk -O s -v 1 TEST -c public mib-2.25.2.3.1.6.1

hrStorageUsed.1 = INTEGER: 118915

df指令執行畫面:

由上面我們可以發現到df指令分配額單位是以1K-blocks為單位所以df看的/ 掛載點的數字為1707668,可是我們在snmp所取出來的 / 總容量數字卻一直為426917,怎麼差那麼多呢? 我想眼尖的人可以看出來分配額單位在此扮演的角色了,也就是說4269171707668兩數值正好差了4倍,所以我們在此便知道了分配額單位角色為何?答案很簡單就是df指令分配額單位是以1K-blocks為單位,snmp所取出來的數字分配額單位則是用4K-blocks為單位。

  1. 有了第一點的結論,我們便可以開始寫Shell Script了,下面實例我是以我自己測試機器的 /var 為監視對象,所以有需要的人可以舉一成三寫出屬於自己要監測主機的Shell Script了,其內容如下:

Frame15執行結果:

由執行結果證實這個Script所顯示出來的數字與df的數字完全一樣。

  1. 有了Script後接下來就是開始要寫mrtg.cfg了,以下就是mrtg.cfg.disk.2內容:

Frame16

編輯好了mrtg.cfg.disk.2後一樣要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.disk.2 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.disk.2

本篇文章所用的mrtg.cfg.disk.2其中有一行為:

MaxBytes[snmp_disk_var]:665536000

是定義MRTG所產生的圖形縱座標最大值,此數字會因每部機器不同而有所不同。

最後,瀏覽器檢視位址如下:

http://主機IP位址或是主機名稱/mrtg/disk/snmp_disk_var.html


 


 


 

 

Part 8、主機系統風扇轉速監視


 

輕鬆學習MRTG 的文章到目前為止我想有興趣的朋友已經有自己所屬的網路流量、CPU、記憶體、磁碟機的負載量統計了,本篇文章卻不是每部主機可以使用的(附註一),如果下列教學步驟有一項沒有出現數值的話,那恐怕得要放棄了呦!!以下便是主機風扇負轉速監視教學。


 

  1. RedHat 8.0完整安裝後,內定會有一支程式(sensors)可以顯示出主機板監測數據如圖一所示。

圖、一

  1. 設定sensors

sensors這支程式並不是支援目前所有的主機板,所以如果執行過本步驟後沒有相關數據出現的話,那可能就得必須放棄了這項監視功能!

在執行 sensors 前我們必須要執行sensors-detect如下:

# sensors-detect

This program will help you to determine which I2C/SMBus modules you need to

load to use lm_sensors most effectively.

You need to have done a `make install', issued a `depmod -a' and made sure

`/etc/conf.modules' (or `/etc/modules.conf') contains the appropriate

module path before you can use some functions of this utility. Read

doc/modules for more information.

Also, you need to be `root', or at least have access to the /dev/i2c[-/]* files

for some things. You can use prog/mkdev/mkdev.sh to create these /dev files

if you do not have them already.

If you have patched your kernel and have some drivers built-in you can

safely answer NO if asked to load some modules. In this case, things may

seem a bit confusing, but they will still work.


 

IF THIS IS AN IBM THINKPAD, PRESS CTRL-C NOW!

IBM Thinkpads have a severely broken i2c/SMBus implementation, just scanning

the bus will break your thinkpad forever!


 

We can start with probing for (PCI) I2C or SMBus adapters.

You do not need any special privileges for this.

Do you want to probe now? (YES/no):

Probing for PCI bus adapters...

Use driver `i2c-piix4' for device 00:04.3: Intel 82371AB PIIX4 ACPI

Probe succesfully concluded.


 

We will now try to load each adapter module in turn.

Module `i2c-piix4' already loaded.

Do you now want to be prompted for non-detectable adapters? (yes/NO):

To continue, we need module `i2c-dev' to be loaded.

If it is built-in into your kernel, you can safely skip this.

i2c-dev is not loaded. Do you want to load it now? (YES/no):

Module loaded succesfully.


 

We are now going to do the adapter probings. Some adapters may hang halfway

through; we can't really help that. Also, some chips will be double detected;

we choose the one with the highest confidence value in that case.

If you found that the adapter hung after probing a certain address, you can

specify that address to remain unprobed. That often

includes address 0x69 (clock chip).


 

Next adapter: SMBus PIIX4 adapter at e800 (Non-I2C SMBus adapter)

Do you want to scan it? (YES/no/selectively):

Client found at address 0x2d

Probing for `Myson MTP008'... Failed!

Probing for `National Semiconductor LM78'... Success!

(confidence 7, driver `lm78')

Probing for `National Semiconductor LM78-J'... Failed!

Probing for `National Semiconductor LM79'... Failed!

Probing for `National Semiconductor LM80'... Failed!

Probing for `National Semiconductor LM87'... Failed!

Probing for `Winbond W83781D'... Success!

(confidence 8, driver `w83781d'), other addresses: 0x48 0x49

Probing for `Winbond W83782D'... Failed!

Probing for `Winbond W83783S'... Failed!

Probing for `Winbond W83627HF'... Failed!

Probing for `Asus AS99127F'... Failed!

Probing for `Winbond W83L784R/AR'... Failed!

Probing for `Genesys Logic GL518SM Revision 0x00'... Failed!

Probing for `Genesys Logic GL518SM Revision 0x80'... Failed!

Probing for `Genesys Logic GL520SM'... Failed!

Probing for `Genesys Logic GL525SM'... Failed!

Probing for `Analog Devices ADM9240'... Failed!

Probing for `Dallas Semiconductor DS1780'... Failed!

Probing for `National Semiconductor LM81'... Failed!

Probing for `Analog Devices ADM1025'... Failed!

Probing for `Analog Devices ADM1024'... Failed!

Probing for `Analog Devices ADM1022'... Failed!

Probing for `Texas Instruments THMC50'... Failed!

Probing for `ITE IT8705F / IT8712F / SiS 950'... Failed!

Client found at address 0x32

Probing for `National Semiconductor LM78'... Failed!

Probing for `National Semiconductor LM78-J'... Failed!

Probing for `National Semiconductor LM79'... Failed!

Probing for `Winbond W83781D'... Failed!

Probing for `Winbond W83782D'... Failed!

Probing for `Winbond W83783S'... Failed!

Probing for `Winbond W83627HF'... Failed!

Probing for `Asus AS99127F'... Failed!

Probing for `Winbond W83L784R/AR'... Failed!

Client found at address 0x48

Probing for `National Semiconductor LM78'... Failed!

Probing for `National Semiconductor LM78-J'... Failed!

Probing for `National Semiconductor LM79'... Failed!

Probing for `National Semiconductor LM75'... Success!

(confidence 3, driver `lm75')

Probing for `Winbond W83781D'... Failed!

Probing for `Winbond W83782D'... Failed!

Probing for `Winbond W83783S'... Failed!

Probing for `Winbond W83627HF'... Failed!

Probing for `Asus AS99127F'... Failed!

Probing for `Winbond W83L784R/AR'... Failed!

Probing for `Dallas Semiconductor DS1621'... Failed!

Probing for `Philips Semiconductors PCF8591'... Success!

(confidence 1, driver `pcf8591')

Client found at address 0x49

Probing for `National Semiconductor LM78'... Failed!

Probing for `National Semiconductor LM78-J'... Failed!

Probing for `National Semiconductor LM79'... Failed!

Probing for `National Semiconductor LM75'... Success!

(confidence 3, driver `lm75')

Probing for `Winbond W83781D'... Failed!

Probing for `Winbond W83782D'... Failed!

Probing for `Winbond W83783S'... Failed!

Probing for `Winbond W83627HF'... Failed!

Probing for `Asus AS99127F'... Failed!

Probing for `Winbond W83L784R/AR'... Failed!

Probing for `Dallas Semiconductor DS1621'... Failed!

Probing for `Philips Semiconductors PCF8591'... Success!

(confidence 1, driver `pcf8591')

Client at address 0x50 can not be probed - unload all client drivers first!

Client at address 0x51 can not be probed - unload all client drivers first!

Client at address 0x52 can not be probed - unload all client drivers first!

Client found at address 0x69


 

Some chips are also accessible through the ISA bus. ISA probes are

typically a bit more dangerous, as we have to write to I/O ports to do

this. Do you want to scan the ISA bus? (YES/no):

Probing for `National Semiconductor LM78'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Success!

(confidence 7, driver `lm78')

Alias of the chip on I2C bus `SMBus PIIX4 adapter at e800', address 0x002d

Probing for `National Semiconductor LM78-J'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `National Semiconductor LM79'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `Winbond W83781D'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Success!

(confidence 8, driver `w83781d')

Alias of the chip on I2C bus `SMBus PIIX4 adapter at e800', address 0x002d

Probing for `Winbond W83782D'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `Winbond W83627HF'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `Winbond W83697HF'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `Silicon Integrated Systems SIS5595'

Trying general detect... Failed!

Probing for `VIA Technologies VT82C686 Integrated Sensors'

Trying general detect... Failed!

Probing for `ITE IT8705F / IT8712F / SiS 950'

Character in "C" format wrapped at /usr/sbin/sensors-detect line 963.

Trying address 0x0290... Failed!

Probing for `IPMI BMC KCS'

Trying address 0x0ca0... Failed!

Probing for `IPMI BMC SMIC'

Trying address 0x0ca8... Failed!


 

Now follows a summary of the probes I have just done.

Just press ENTER to continue:


 

Driver `lm78' (may not be inserted):

Misdetects:

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x2d

ISA bus address 0x0290 (Busdriver `i2c-isa')

Chip `National Semiconductor LM78' (confidence: 7)


 

Driver `w83781d' (should be inserted):

Detects correctly:

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x2d (and 0x48 0x49)

ISA bus address 0x0290 (Busdriver `i2c-isa')

Chip `Winbond W83781D' (confidence: 8)


 

Driver `lm75' (may not be inserted):

Misdetects:

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x48

Chip `National Semiconductor LM75' (confidence: 3)

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x49

Chip `National Semiconductor LM75' (confidence: 3)


 

Driver `pcf8591' (may not be inserted):

Misdetects:

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x48

Chip `Philips Semiconductors PCF8591' (confidence: 1)

* Bus `SMBus PIIX4 adapter at e800' (Non-I2C SMBus adapter)

Busdriver `i2c-piix4', I2C address 0x49

Chip `Philips Semiconductors PCF8591' (confidence: 1)


 


 

I will now generate the commands needed to load the I2C modules.

Sometimes, a chip is available both through the ISA bus and an I2C bus.

ISA bus access is faster, but you need to load an additional driver module

for it. If you have the choice, do you want to use the ISA bus or the

I2C/SMBus (ISA/smbus)?


 

WARNING! If you have some things built into your kernel, the

below list will contain too many modules. Skip the appropriate ones!

To load everything that is needed, add this to some /etc/rc* file:


 

#----cut here----

# I2C adapter drivers

modprobe i2c-isa

# I2C chip drivers

modprobe w83781d

#----cut here----


 

To make the sensors modules behave correctly, add these lines to either

/etc/modules.conf or /etc/conf.modules:


 

#----cut here----

# I2C module options

alias char-major-89 i2c-dev

#----cut here----


 

上面為執行的結果,遇到詢問(yes/no)時皆已內定值為主(也就是直接按Enter),然後最後會出現:


 

To make the sensors modules behave correctly, add these lines to either

/etc/modules.conf or /etc/conf.modules:


 

#----cut here----

# I2C module options

alias char-major-89 i2c-dev

#----cut here----


 

紅色字體部分並不是每部機器都一樣,所以以顯示出來的為主,並將其紅色字體部分利用編輯器儲存到/etc/modules.conf 中。

接下來再執行下列紅的字體所列的指令(同樣因機器不同而會有不同的結果)

註:下列指令會因為關機後而造成sensors指令的無法執行,所以建議將下列紅色字體利用編輯器放到 /etc/rc.d/rc.local 使得開機步驟中能夠執行它。


 

#----cut here----

# I2C adapter drivers

modprobe i2c-isa

# I2C chip drivers

modprobe w83781d

#----cut here----


 

此時,執行sensors便可以看到圖一的畫面了。


 

  1. 步驟到此,如果未出現如圖一的畫面,表示sensors這隻程式並不支援你的主機板監控晶片,你必須到該程式官方網站去下載最新版本從新安裝在試試看,如果還不行的話,本篇文章便不適合在繼續下去了。

官方網站網址:http://secure.netroedge.com/~lm78/

  1. Script,一般而言sensors 所產生的數據,我們同樣以其中的兩個為主:

fan2: 4856 RPM (min = 3000 RPM, div = 2)

fan3: 2884 RPM (min = 3000 RPM, div = 2)

其中fan2是我的CPU風扇轉速,fan3是我的Power風扇轉速,我們同樣則必須透過Script來完成抓值的工作:


 

sensors w83781d-isa-0290| grep fan2: | awk '{print $2}'

sensors w83781d-isa-0290| grep fan3: | awk '{print $2}'


 

以上兩個數據,我們還必須加上”開機時間”及”主機名稱”,所以Script 內容如下:


 

Frame17 其執行結果:

  1. 有了這Scrip後,我們將它命名為mrtg.fan,然後我們必須再寫一個mrtg.cfg.fan其內容如下:


 

Frame18

  1. 同樣,別忘了要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.fan 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.fan


 


 

附註一:

我的主機配備:

ASUS P2b ver1.02

CPUCeleron 700

RAM640MB

Lm_sensors 這個套件程式有點挑主機板,一般來說較舊的主機板都有支援,至於P4主機板支援了哪些,由於我沒有機會是看P4的機器所以我也不是很清楚這方面的知訊,該程式官方網站僅說明了:

Most PC's built since late 1997 now come with a hardware health monitoring chip. This chip may be accessed via the ISA bus or the SMBus, depending on the motherboard.

Some motherboard chipsets, notably the Via 686 and the SiS 5595, contain hardware monitor functions.

This FAQ frequently refers to the "LM78". This chip has been obsoleted by National Semiconductor. Most motherboards today contain a chip with similar functions.

總言之,主機板上有 LM78 或是相容 LM78的這顆小晶片應該就可以了,一般來說,相容晶片大概有LM75, LM78, LM78-j, LM79, LM80, WinBond W83781D, WinBond W83782D, WinBondW83783S, WinBond W83627HF, Asus AS99127F, GL518SM, GL520SM, ADM9240, ADM1021, ADM1020, MAX1016 ...等等可以試試看是否會有圖一結果出現。

圖、二 Winbond W83781D晶片圖:


 

 

Part 9、主機系統溫監視


 

看了Part 8的文章後,本篇文章則是延伸使用的另一個功能:主機系統溫度監視。同樣的本篇教學僅針對Lm_sensors這個軟體有支援的主機板做教學步驟!!以下便是主機溫度監視教學。


 

  1. 執行 sensors 這個指令後可以顯示出主機板監測數據如圖一所示。

圖、一

  1. 設定sensors部分請參考Part 8文章。


 

  1. Script,一般而言針對溫度數據上,sensors 所產生的數據,我們同樣以其中的兩個為主:

temp1: +27(limit = +60, hysteresis = +50)

temp2: +28.5(limit = +60, hysteresis = +50)

其中temp1是我的CPU系統溫度,Temp 2 是我的CPU溫度,我們同樣則必須透過Script來完成抓值的工作:


 

sensors w83781d-isa-0290| grep temp1: | awk '{print $2}' | sed -e's/^+//' -e's/?*$//' -e's/\..*$//'

sensors w83781d-isa-0290| grep temp2: | awk '{print $2}' | sed -e's/^+//' -e's/?*$//' -e's/\..*$//'


 

以上兩個數據,我們還必須加上”開機時間”及”主機名稱”,所以Script 內容如下:


 

Frame19 其執行結果:

  1. 有了這Scrip後,我們將它命名為mrtg.temp,然後我們必須再寫一個mrtg.cfg.temp其內容如下:


 

Frame20

  1. 同樣,別忘了要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.temp 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.temp


 


 

 

Part 10、伺服器線上人數及Processes負載率


 

本篇文章將介紹伺服器線上人數及Processes負載率,主要原理是利用一些長用指令以及運用該指令所產生的數值進而透過MRTG產生出所需要的圖形出來。在此本篇文章所指的”伺服器線上人數”指的是透過telnet或是sshTerminal、…等連線上來的使用者數目,當然如果是要監視的上線人數是ftp人數、Web人數也可以透過相同的方式達到,以下步驟便是說明伺服器線上人數及Processes負載率視教學


 

  1. 首先欲查詢伺服器線上人數一般我們是以w或是who兩指令來達成,以本篇的範例來說我則是採用了w這個指令來抓取連上主機的人數總數目,執行 w 可以看到如下圖所示的結果:

  1. 從上圖我們可以看出我的機器目前有兩個使用者連線上來使用,所以我們只要透過perl Script我們就可以抓到數字2的結果了。

#!/usr/bin/perl

$entry = `w | wc -l`;

chomp($entry);


 

$user = $entry - 2;

print "$user\n";


 

  1. 接下來我們要產生目前主機正在執行的Processes數,一般來說ps這個指令可以達到我們的目的

ps aux | wc –l

在此假設你想要看到的數據是FTP上線使用者則可以用下列指令方式:

ftpwho|grep users|awk '{print $2}'


 

  1. 以上兩個數據,我們還必須加上”開機時間”及”主機名稱”,所以Script 內容如下:

Frame21 其執行結果:

  1. 有了這Scrip後,我們將它命名為mrtg.user,然後我們同樣必須寫一個mrtg.cfg.user其內容如下:


 

Frame22

  1. 同樣,別忘了要將/usr/bin/mrtg /etc/mrtg/mrtg.cfg.user 執行三次後放置到crontab 內每隔五分鐘定時執行(),以產生監測數據出來。

:將下面這行字加入到 /etc/crontab 內然後執行 service crond restart重新啟動服務即可。

0-59/5 * * * * root /usr/bin/mrtg /etc/mrtg/mrtg.cfg.user

PS :沒有綠色圖形的原因是我並沒有連線上去所產生的結果。