更新 cacti 為 0.8.7e

注意事項 若使用 spine (cactid) 0.8.7e 記得要 patch

否則 rrdtool 無法畫圖 (應該是 spine 無法與 mysql 連線)

configure script for spine 0.8.7c problem

spine 0.8.7 無法 configure

解法:
http://bugs.cacti.net/view.php?id=1381

下載其附件 再行 configure

Cacti 與 syslog 結合

很早以前有些人會用 syslog-ng 收集所有機器的 syslog 到一台 log server,
這些收集到的 log 可以:
1. 用 swatch 去抓要監控的字串,執行程式或發送警告訊息
2. 用 phpsyslog 將 syslog 顯示在 web,每隔一段時間顯示更新,值班人員就看 web 顯示的訊息。

但這些都有一些缺點
1. swatch 可能對沒學過 linux 的網管有點麻煩
2. phpsyslog 沒辦法設定對訊息的處置,如執行程式或是 email 通知

所以我一直再想,是否能結合兩者優點,既可以收集 syslog 又可以輕鬆自訂規則了。
後來發現 Cacti 原來就有提供一個很有用的 plugin – syslog ,可以達到我想要的方式。
加上本身 Cacti 帳號管理的功能,我就可以讓每個管理者自己去自訂規格了。
下面的文章就寫的很詳細,我就不再重複寫了。
http://www.openmaniak.com/cacti_plugins.php

廣告

一個穩定及高效的 Cacti Server

Cacti 大概許多網管都有使用過,她的優點是架構簡單(PHP,MySQL, SNMP)容易建置,而且提供功能正是網管的基本需求,所以幾乎已經成為網管必備的工具。

Cacti 就如一般網管系統,每五分鐘監控一次所有的系統,但隨著企業的網路不斷成長,需要監控的系統也不斷增加。Cacti 將會面臨 Process 過多, 記憶體不足, IO 過重等問題。如果在 cacti.log 看到 cacti 執行一次超過 300 秒,就表示你的系統已經超過負荷了。

以下將我一路慢慢摸索出來的心得分享給大家。

0. 選擇適當的作業系統
請用 CentOS 或 Red Hat Enterprise,不要使用 Fedora 或是 Redhat 9 之前的版本。Red Hat Enterprise 的 kernel 已經是最佳化了 ,非常適合當 Server 使用。我幫過一些人將 Fedora 或是 Redhat 轉換成 CentOS,他們都有明顯感受到校能的差異,尤其是在記憶體的使用上。

1. 使用 Spine (Cactid)
Spine 使用 C 來取代呼叫 cmd.php ,在效能上提升很多。官方網頁也寫說 ,如果執行 php poller.php 時間超過 300 秒,就需要使用 Spine 。使用方法很簡單,照著官方網頁作就可以了,不在此贅述。個人是覺得 cmd.php 的方法該廢掉了,目前存在的意義只是因為 php 讓 cacti 達成跨平台的特性。

2. filesystem 選擇
如果可以的話,切割一塊獨立的分割區掛載 cacti 。檔案格式 reiserfs 是比較好的選擇 比 ext3 還要快許多。另外,我們還可以使用 noatime 的選項掛載 。加了 noatime 後,系統不更新上次檔案的存取時間,這個資訊對 cacti 這個系統不是很重要 ,也不會有其他不良影響,對於繁忙的檔案系統,將可以大大減少檔案系統的 IO。

ex.
/dev/sda3 /var/www/html/cacti ext3 defaults,noatime 0 0

3. 加大 php 的記憶體使用的上限
vi /etc/php.ini
memory_limit = 32M (預設是 8mb, 可以改大一點)

4. 定期 optimize cacti 資料庫
不知道從甚麼時候開始 ,我家的 cacti 的 poller_output 會不明原因的長大,差不多兩個禮拜後,就會大到資料越寫越慢,直到無法更新。一開始我是每隔一段時間手動 “Truncate poller_output table" 後,就會繼續正常運作。但實在是太麻煩了,現在改成用 crontab 去 optimize 整個 cacti 資料庫。如果不會寫 SQL 的人,用 phpMyAdmin 執行 optimize 時,同時也會顯示執行 SQL 的語法,直接拿來用就好了。在設定 cron 請注意,請不要跟 cacti 同時執行,假設你的 cacti 執行一次要 4 分鐘,請在第四分鐘後再執行。

其實正常來說 poller_output 的資料只是暫存的,系統會自行清空。但很奇怪的是,MySQL 有時候並沒有馬上實體刪掉,而是註記成冗餘資料,依舊占據資料表的空間。可能是這種原因導致資料表越長越大,所以後來我改用 optimize 的原因。

國外有人也有遇到相關問題 不知他解了沒?
http://forums.cacti.net/about25515.html

除錯建議:
1. rebild poller cache 或是 truncate poller_output table, 不可以在 cacti 的 poller.php 運作時執行
2. 善用 cacti web 的 debug 功能,以方便一個一個排除問題。
3. 建立新的 device ,最好先用 snmpwalk 測試一遍,可以抓到資料再來設定也不遲。

ps. reiserfs 的作者面臨官司,後續版本前途不明啊。真可惜。

reset cacti admin password to "admin"

如果忘了 cacti 的密碼 – 我常幹這種事

利用 Webmin or phpMyAdmin

在 cacti 的 database 下這個指令

update user_auth set password=’21232f297a57a5a743894a0e4a801fc3′
where username=’admin’;

or
update user_auth set password=md(‘admin’) where username=’admin’;

password 是利用 md5 的格式

ps. 這個方法 FAQ 有提 但太常用了 所以寫下來

cacti: No Graph Gen

Cacti 一直到 0.8.6g 才比較正常
以前還蠻常遇到停止畫圖的情況
發生的原因很多 通常是資料庫有些 table 對不起來
如果單一的圖停掉 則可能是設定錯誤 重新設定就可以了

下面是久病成良醫的速成方法
1. stop cacti corn job
2. issue mysql commnad at table “cacti"
truncate table poller_output
3. reboot server
4. restart cacti corn job

如果還是沒用的話 就乖乖看 cacti.log 吧