Shunze 學園 >電腦資訊學系 >OpenNMS > 《十一》Linux Resource Threshold 哈囉,還沒有註冊或者登入。請你[註冊|登入]
« 上一篇主題 下一篇主題 » 顯示成列印模式 | 增加到我的最愛
發表新主題 發表回覆
作者
主題
shunze
工友伯伯


註冊日期: 2002 04
來自: 潮汐終止之地
文章: 2324

shunze 離線
《分享》Linux Resource Threshold引用回覆 編輯/刪除文章 搜尋由  發表的其他文章 回報給版主 IP 位置 回此頁最上方

Linux在啟用SNMP後,Resource Graphs已可得到CPU/Memory/Disk等流量圖。

CPU


Memory


Disk


Disk-inodes



而其參照的設定則定義在netsnmp.xml中,路徑如下。

/usr/share/opennms/etc/datacollection/netsnmp.xml

##### CPU #####
<group name="ucd-loadavg" ifType="ignore">
    <mibObj oid=".1.3.6.1.4.1.2021.10.1.5" instance="1" alias="loadavg1" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.10.1.5" instance="2" alias="loadavg5" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.10.1.5" instance="3" alias="loadavg15" type="integer" />
</group>
##### Memory #####
<group name="ucd-memory" ifType="ignore">
    <!-- Total Swap Size configured for the host. -->
    <mibObj oid=".1.3.6.1.4.1.2021.4.3" instance="0" alias="memTotalSwap" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.4" instance="0" alias="memAvailSwap" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.5" instance="0" alias="memTotalReal" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.6" instance="0" alias="memAvailReal" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.11" instance="0" alias="memTotalFree" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.13" instance="0" alias="memShared" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.14" instance="0" alias="memBuffer" type="integer" />
    <mibObj oid=".1.3.6.1.4.1.2021.4.15" instance="0" alias="memCached" type="integer" />
    <!-- Error flag. 1 indicates very little swap space left -->
    <mibObj oid=".1.3.6.1.4.1.2021.4.100" instance="0" alias="memSwapError" type="integer" />
</group>
##### Disk #####
<group name="net-snmp-disk" ifType="all">
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.2" instance="dskIndex" alias="ns-dskPath" type="string" />
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.6" instance="dskIndex" alias="ns-dskTotal" type="gauge" />
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.7" instance="dskIndex" alias="ns-dskAvail" type="gauge" />
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.8" instance="dskIndex" alias="ns-dskUsed" type="gauge" />
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.9" instance="dskIndex" alias="ns-dskPercent" type="gauge" />
</group>
<group name="net-snmp-disk-more" ifType="all">
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.3" instance="dskIndex" alias="ns-dskDevice" type="string" />
    <mibObj oid=".1.3.6.1.4.1.2021.9.1.10" instance="dskIndex" alias="ns-dskPercentNode" type="gauge" />
</group>

有了這些oid定義,又能以這些數據繪製流量圖,
我們當然也可以使用這些數據來設定相關threshold的告警機制。

  • CPU
    CPU的部分在預設的threshold group - netsnmp中,已定義了一組CPU loading過高的threshold,可直接套用或拿來做為範本參考。



    這組threshold的內容是,當每5鐘的CPU使用率平均值(loadavg5),連續兩次都超過10時(high),會觸發事件;
    當降回7.5時,則會取消該事件。



    從這樣的定義我們可以知道在設定CPU loading的threshold時,
    我們可以依需求選用 loadavg1 / loadavg5 / loadavg15 三個數值之一來做為CPU loading的參考數值。
    (這三個數字分別是1,5,15分鐘的CPU loading平均值。)

    而Datasource Type則要選用 node 這個型別,這樣就可以依CPU的loading來設定threshold。

  • Memory
    Memory的部分跟CPU一樣,在預設的threshold group - netsnmp中,已定義了一組SWAP可用率過低的threshold。



    這組threshold的內容是,當SWAP的可用率連續兩次都低於10%時,會觸發事件;
    當可用率回升到15%時,則會取消該事件。



    其計算公式如下。
    memAvailSwap / memTotalSwap * 100.0

    在Datasource Type的部分跟CPU一樣採用 node 這個型別。

    相同道理,我們可以把偵測對象由SWAP改為實體記憶體(memTotalReal/memAvailReal),然後去設定實體記憶體使用率的threshold。
    不過Linux的記憶體配置跟Windows不同,預設是有多少,就掛載多少,再分給process使用。
    所以監測Linux的實體記憶體使用率意義不大。

  • Disk
    Disk的部分跟CPU/Memory一樣,在預設的threshold group - netsnmp中,已定義了兩組硬碟使用率過高的threshold。



    這兩組有什麼不同呢?
    一個是計算磁碟空間的 ns-dskPercent,另一個則是計算系統的inode數的 ns-dskPercentNode
    之所以會有這兩種需求,那是因為在Linux上除了要考量磁碟空間block外,還要考量inode數。


    ↑請參考 鳥哥-Linux 的 EXT2 檔案系統(inode)

    這兩組threshold的設定幾乎一模一樣,一樣都是連續兩次使用率超過90%示警,低於75%解除警報;
    唯一的差別在於 Datasource 欄位。



    當我們要偵測硬碟空間時,選用 ns-dskPercent;若要偵測inode使用率則選用 ns-dskPercentNode

    至於Datasource type則使用 Disk Table Index (UCD-SNMP MIB) 這個型別,
    然後搭配Datasource label為 ns-dskPath 來顯示磁碟分割區名稱∼

    既然可以透過 ns-dskPath 來顯示磁碟分割區,
    那當然也可以以它做為過濾條件,來指定要偵測的磁碟分割區。

    例如我們只要偵測/boot分割區的使用率,
    那麼可以在Field Name中輸入 ns-dskPath,在Regular Expression中輸入 ^/boot$ 做為過濾條件,
    按下Add按鈕,並儲存後,就可以只針對/boot分割區來進行偵測了∼




以上設定,都是拿系統預設的threshold來做示範,
我們可以直接修改套用,或以它為範本來新增自己需要的threshold。
而這些threshold的內容就存放在以下路徑的 thresholds.xml 檔案中。
/usr/share/opennms/etc/thresholds.xml


在thresholds.xml的設定中,我們只能拿同屬一個group的oid來做過濾條件,
如上例disk threshold中,我們以ns-dskPath做為過濾條件。

若我們需要以IP來做為條件,或是修改每5分鐘的偵測間隔,
必需透過修改另一個設定檔 threshd-configuration.xml 來完成。
/usr/share/opennms/etc/threshd-configuration.xml


threshd-configuration.xml 與 thresholds.xml 這兩個設定檔是相互呼應的,以補彼此不足。
擷取threshd-configuration.xml中 netsnmp 的設定為例
<package name="netsnmp">
    <filter>IPADDR != '0.0.0.0' & (nodeSysOID LIKE '.1.3.6.1.4.1.2021.%' | nodeSysOID LIKE '.1.3.6.1.4.1.8072.%')</filter>
    <include-range begin="1.1.1.1" end="254.254.254.254"/>
    <include-range begin="::1" end="ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff" />

    <service name="SNMP" interval="300000" user-defined="false" status="on">
        <parameter key="thresholding-group" value="netsnmp"/>
    </service>
</package>

我們可以看到在netsnmp這個package堙A定義了偵測時間間隔與IP範圍等多項參數。
而其中這thresholding-group這個key值,則清楚定義這個package是與netsnmp這個group互相呼應的。

在threshd-configuration.xml中,預設的偵測時間間隔為300000毫秒,也就是5分鐘,
若想縮短時間間隔為1分鐘,可直接修改 interval 參數來達成。
若想以IP做為條件過濾,也可於此設定檔中,透過修改 IPADDR 的邏輯判斷,或對 include-range 的 begin & end來調整對應的IP範圍。

*請注意,
修改 threshd-configuration.xml,需重啟服務設定才會生效!


Linux的threshold設定到此告一段落∼


參考資料
雜亂的學習筆記本



♥順子老婆的網拍,請多關照∼

If you don't like something, change it.
If you can't change it, change your attitude.
Don't complain!




2015-11-13, 18:39 shunze 的個人資料 把 shunze 加入好友列表 發送Email給 shunze 瀏覽 shunze 的網站 MSN : shunze@gmail.com
  « 上一篇主題 下一篇主題 »
發表新主題 發表回覆
跳到:

Powered by: Burning Board 1.1.1 2001 WoltLab GbR