2012年8月8日 星期三

介紹:Munin - 安裝 Plugins 以及 Python 化 Plugin 的撰寫



Munin 支援加入 plugins 以監控更多的系統或特定應用程序項目,而且方法非常簡單
首先我們先透過執行 munin-node-configure | less 來閱讀 plugins 的使用情況
事實上我們也可以到直接放 plugins 的資料夾
觀看目前 munin 可用的 plugins 以及正在用的 plugins

#正在用的
ls -al /etc/munin/plugins
#可用的
ls /usr/share/munin/plugins/

我們發現到了放在 /etc/munin/plugins 內的檔案為連結檔
而且是連結到 /usr/share/munin/plugins/ 內對應的檔案
沒錯!若要新增或是移除目前使用的 plugins
只需透過新增、移除放在 /etc/munin/plugins 內的連結檔即可


有關 plugins 的安裝、撰寫可以參考 官網 或是 上一篇文章 推薦過的 Tutorial
在此則是推薦安裝這一個 Python Framework: python-munin
可透過撰寫 Python 來開發 plugins 也可以直接使用許多已經寫好的 plugins
安裝方式如下:

git clone git://github.com/samuel/python-munin.git
cd python-munin
sudo python setup.py install

安裝完成後就可以參考 教學文件 使用 Python 開發 plugins
或是直接到 plugins 資料夾內看看有哪些 plugins 可以使用

我們發現 plugins 竟然已經支援了下列這些常見的應用程序、系統:
* AWS ELB
* AWS SQS
* Cassandra
* DD-WRT Wireless Rate & Signal
* Memcached
* MongoDB
* MySQL
* Nginx
* RabbitMQ
* Redis
* Riak
* … …

要啟動 plugins 就直接把相關的 plugin files 複製或製作連結檔案放到 /etc/munin/plugins 內即可
如此一來,就可以輕鬆的監控自己的系統狀態了!



備註:
有些 plugin 是 rely on 特定的環境的,例如如果要監控 nginx 的狀態
可能需要開啟 nginx_http_status_module
這裡附上大神 Tsung 的 啟用 Nginx Status 的設定 一文



介紹:Munin - 容易上手且支援網路傳輸的圖形化系統監控工具

使用 Munin 監控網路狀態的系統畫面

標題雖有點冗長,其實 Munin 對於大多數的終端使用者而言
就是一個可以透過 Web 介面觀看自己系統狀態的工具
詳細介紹請參考: 官網 Wiki
有關 Munin 的教學,此篇 Tutorial 寫的很好、值得一觀
本文只簡單的介紹部分內容

我們可以透過類似 sudo yum install munin-node 的指令安裝 munin-node 在特定 Server
以及在欲蒐集監控內容並且產生報表的 Server 安裝 munin 透過 sudo yum install munin 的指令
安裝完成之後,我們需要編輯兩者的 config 檔案:
(如果兩者都安裝在同一台 Server,那麼 config 檔案可以不用修改)

#首先編輯 munin-node.conf
sudo vim /etc/munin/munin-node.conf
#找到下列這一行,以修改成可查詢者的 IP (預設只允許本機做查詢)(系統若有防火牆,記得修改,預設使用的 port 為 4949)
allow ^127\.0\.0\.1$ 

#執行 munin-node
sudo /etc/init.d/munin-node start
#再來編輯 munin.conf
sudo vim /etc/munin/munin.conf

#找到被註解起來的這一行,此資料夾為最後圖形化報表的輸出目錄,可以自訂
# htmldir /var/www/html/munin/

#找到帶有 a simple host tree 的註解,下方會有一個 sample,填入被監控的 node 的資訊
[node_domain_name]
    address 127.0.0.1
    use_node_name yes
    
#不用主動執行 munin,他已經被設為 5 分鐘執行一次,如果想要更改頻率可以透過修改以下檔案達成:
sudo vim /etc/cron.d/munin


最後一步,就是將 munin 所生成出來的監控結果放到 Web Server 上面
然後使用瀏覽器觀看監測結果
如果想要直接放到 nginx 上面,可以修改以下 script:
location /SOME_FOLDER_NAME/ { 
    alias /var/www/html/;
}
如果想要先隨手架一個 light-weight 的 Web Sever 來試試看,Bottle 是我推薦的首選:
#save as test.py
from bottle import route, run, static_file
@route('/')
def return_static_file(filename):
    return static_file(filename, root='/var/www/html/munin/')
run(host='localhost', port=80, debug=True)
Run Web Server: python test.py
請打開 Browser 輸入: http://your_domain/index.html
這樣就可以見到預設的監控首頁了!

備註:
1.
如果出現 404 訊息
可以檢查 /var/www/html/munin/ 內是否已經有 munin 自動生成出的 index.html
還沒生成出來的話,就請等待幾分鐘再看看
2.
監控的結果當然不應該是 Public 開放出來的
因此無論使用哪個 Web Server
都應該啟動基本的身分驗證功能
Munin 所輸出的 HTML 資料夾內包含了 .htaccess 可供某些 Server 設置
而 Bottle 的 HTTP BASIC Authentication 方式可能比較少人知道
所以我附上實作方法:
       ###關鍵在於使用 auth_basic function, 並且傳入一個用來檢查 username 及 password 的 function###
from bottle import route, run, static_file, auth_basic
@route(‘/<filename:path>’)
@auth_basic(lambda name, pwd: name==“username” and pwd==“password”)
def return_static_file(filename):
    return static_file(filename, root=‘/var/www/html/munin/’)
run(host=‘localhost’, port=80)
3.
如果 munin-node 與 munin 並非在同一台主機內
那麼兩者之數據傳輸應該啟用 TLS 功能,以確保資訊安全

2012年8月6日 星期一

筆記:利用 Python 將 Markdown 文件轉成 Mou Style HTML


近期手邊的 API Server 在規劃自動生成 Doc 的功能
而 Survey 許多標記格式以後,最後由極輕量化的 Markdown 勝出
雖然平常在 Mac 下使用 Mou 進行 Markdown 的撰寫是一件輕鬆愉快的事情
但是我希望自動生成出來的 Markdown Doc 轉換成 HTML Doc 的過程不要使用到 Mou
因此 Python 的 markdown module 派上了用場:
import markdown
html = markdown.markdown(your_text_string)


理論上,只要這樣子使用並且注意 your_text-string 的編碼
就可以解決問題了 …
不過很「恰巧」的是,由於 Mou 支援簡易表格對 HTML 的轉換
而我也不小心使用了如下的語法:
First Header | Second Header | Third Header
:----------- | :-----------: | -----------:
Left         | Center        | Right
Left         | Center        | Right
以產生這樣的 HTML:
First Header Second Header Third Header
Left Center Right
Left Center Right


markdown module 並不支援簡易表格的轉換
因此我只好去找看看是否有其他使用不同 engine 的 module
最後我找到 snudown module 可以支援簡易表格:
import snudown
output = snudown.markdown(input)
不過他的小問題是對於 <pre> <code> 的支援有點問題
(畢竟是 for reddit )
儘管如此,我們還是可以僅只是把有關簡易表格的部分交給 snudown module 來處理
其他部分由 markdown module 或是更加容易上手的 markdown2 module 來處理

最後,我希望使用 Python 轉換出來的 HTML 格式能夠盡可能的與 Mou 外觀一致
所以我去偷看了 Mou 所使用的 CSS file (可從 Preferences -> CSS -> Edit 開啟檔案)
我選擇了 github 的 Style 作為參考依據
如此一來就可以在遠端的主機全自動化的生成我想要使用的文件啦!

備註:本文即為由 markdown 撰寫而成