Glances – 超強大資源使用監視工具

只要說到伺服器的資源監視想到的不外乎就是 top 與 進階版的htop, 今天要介紹一個更厲害的資源使用監視工具 Glances.

Glances 是一套使用 python 構成的資源監視工具, 除了基本的資源監視外還提供了 Web 介面以及遠端查看的功能.

Requirements

Python > 2.7, >= 3.3
psutil>=2.0.0

Installation

使用 pip 安裝

pip install glances

使用 shell script 安裝

curl -L https://bit.ly/glances | /bin/bash

Usage

基本使用

就跟 top 一樣, 直接在畫面上顯示資訊

glances

啟動 Web 介面

Glances 可以提供 web 介面, 但在使用前要補安裝相依套件 bootle

pip install bottle

接著啟動

glances -w

接著就可以使用喜歡的瀏覽器訪問 http://127.0.0.1:61208

遠端模式

server 模式

glances -s

client 連接

glances -c ip

Access Control

預設模式下 Glances 是免帳密驗證的, 但是為了安全起見我們還是設定一組帳號進行驗證
加入驗證的方法很簡單, 只需要帶入參數 --username--password

glances -s --username  --password

Glances 便會在啟動過程確認要設置的帳號密碼

Define the Glances server username: keniver
Define the Glances server password (keniver username):
Password (confirm):

最後, Glances 會詢問是否紀錄帳號與密碼, 之後啟動就不會再詢問了

Do you want to save the password? [Yes/No]:

當我們為 Glances 啟動驗證後, 我們連線時需要帶入 --username , --password, 並輸入先前設定的密碼才能連線

Python pip 發生 TypeError: __call__() takes exactly 2 arguments (1 given) 的解決辦法

在某次 apt-get update 後發現 pip install 出現 TypeError: call() takes exactly 2 arguments (1 given), 所有操作都無法繼續進行

追查了一下錯誤資訊, 發生錯誤的原因是 /Library/Python/2.7/site-packages/packaging/requirements.py 的 59 行

原始程式碼如下

MARKER_EXPR = originalTextFor(MARKER_EXPR())("marker")

比對其他版本的 pip 後, 發現這行應該是

MARKER_EXPR = originalTextFor(MARKER_EXPR)("marker")

於是乎就用正確的程式碼替換掉原來的程式碼, 重新運行 pip install 之後就正常了

pip 官方後續也修復了這個 Bug, 可以使用下列指令進行強制更新

python -m pip install --upgrade --force pip 

使用 CloudFlare SSL 憑證後出現過多重新導向的問題

CloudFlare 是一間非常有名的 CDN 廠商, 除了 CDN 與抗DDoS 的功能外, 免費版也提供了 SSL 憑證服務, 讓網站可以立刻從 HTTP 升級到 HTTPS, 使網站內容可以安全傳遞.

某日一個掛在 CloudFlare 的服務突然不能訪問, 只要嘗試訪問服務都會出現 ERR_TOO_MANY_REDIRECTS(過多重新導向) 的問題, 經過追查後整理出成因與解決辦法

發生條件


Cloudflare SSL 模式選擇 Flexible
Server Side 有設定 HTTP rewrite to HTTPS

發生原因

先來看 一下 CloudFlare SSL 的各種模式

(來源: https://www.cloudflare.com)

從上圖可以看出 Flexible 與 Full 最大的差別在於 CloudFlare 與 Origin Server 之間是否走 HTTPS, 這也是過多重新導向的核心原因

若我們在 Origin Server 設定 HTTP 自動導往 HTTPS, 或者程式本身有重新導向(Ex: WordPress), 從 Flexible 的角度來看, CloudFlare 透過 HTTP 存取 Origin, Origin 根據設定要求 Rewrite 到 HTTPS, CloudFlare 將 301/302 導向送往使用者端, 但SSL 模式下, 使用者訪問的網址已經是 HTTPS 了, 因此發生 HTTPS 不斷跳往 HTTPS 的問題, 這也就引發了 ERR_TOO_MANY_REDIRECTS 的問題

解決辦法

  1. Origin Server 關閉 HTTP 導向 HTTPS 功能
  2. 啟動 SSL Full 模式, 直接使用 HTTPS 訪問 Origin (推薦)
    (備註: Origin 要啟動 HTTPS, Strict 模式下憑證必須是有效的不能自簽)

後記

服務本身就有提供HTTPS, 但為了相容一些舊設備因此繼續開放HTTP, 前些日子為了提升整體安全性將所有流量導往 HTTPS, 沒想到悲劇就這樣發生了, 雖然快速找到問題並暫時後復, 但團隊為此猶豫要不要繼續開放 HTTP, 後來研究發現 CloudFlare SSL 相容性竟然意外的好, 因此後續還是強制使用 HTTPS.