Sensu 監控入門

2019-04-27 13:17:00

這個開源解決方案可以簡單而有效地監控你的雲基礎設施。

Sensu 是一個開源的基礎設施和應用程式監控解決方案,它可以監控伺服器、相關服務和應用程式健康狀況,並通過第三方整合傳送警報和通知。Sensu 用 Ruby 編寫,可以使用 RabbitMQRedis 來處理訊息,它使用 Redis 來儲存資料。

如果你想以一種簡單而有效的方式監控雲基礎設施,Sensu 是一個不錯的選擇。它可以與你的組織已經使用的許多現代 DevOps 元件整合,比如 SlackHipChatIRC,它甚至可以用 PagerDuty 傳送移動或尋呼機的警報。

Sensu 的模組化架構意味著每個元件都可以安裝在同一台伺服器上或者在完全獨立的機器上。

結構

Sensu 的主要通訊機制是 Transport。每個 Sensu 元件必須連線到 Transport 才能相互傳送訊息。Transport 可以使用 RabbitMQ(在生產環境中推薦使用)或 Redis。

Sensu 伺服器處理事件資料並採取行動。它註冊用戶端並使用過濾器、增變器和處理程式檢查結果和監視事件。伺服器向用戶端發布檢查說明,Sensu API 提供 RESTful API,提供對監控資料和核心功能的存取。

Sensu 用戶端執行 Sensu 伺服器安排的檢查或本地檢查定義。Sensu 使用資料儲存(Redis)來儲存所有的持久資料。最後,Uchiwa 是與 Sensu API 進行通訊的 Web 介面。

安裝 Sensu

條件

  • 一個 Linux 系統作為伺服器節點(本文使用了 CentOS 7)
  • 要監控的一台或多台 Linux 機器(客戶機)

伺服器側

Sensu 需要安裝 Redis。要安裝 Redis,啟用 EPEL 倉庫:

$ sudo yum install epel-release -y

然後安裝 Redis:

$ sudo yum install redis -y

修改 /etc/redis.conf 來禁用保護模式,監聽每個地址並設定密碼:

$ sudo sed -i 's/^protected-mode yes/protected-mode no/g' /etc/redis.conf$ sudo sed -i 's/^bind 127.0.0.1/bind 0.0.0.0/g' /etc/redis.conf$ sudo sed -i 's/^# requirepass foobared/requirepass password123/g' /etc/redis.conf

啟用並啟動 Redis 服務:

$ sudo systemctl enable redis$ sudo systemctl start redis

Redis 現在已經安裝並準備好被 Sensu 使用。

現在讓我們來安裝 Sensu。

首先,設定 Sensu 倉庫並安裝軟體包:

$ sudo tee /etc/yum.repos.d/sensu.repo << EOF[sensu]name=sensubaseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/gpgcheck=0enabled=1EOF$ sudo yum install sensu uchiwa -y

讓我們為 Sensu 建立最簡單的組態檔:

$ sudo tee /etc/sensu/conf.d/api.json << EOF{  "api": {        "host": "127.0.0.1",        "port": 4567  }}EOF

然後,設定 sensu-api 在本地主機上使用埠 4567 監聽:

$ sudo tee /etc/sensu/conf.d/redis.json << EOF{  "redis": {        "host": "<IP of server>",        "port": 6379,        "password": "password123"  }}EOF$ sudo tee /etc/sensu/conf.d/transport.json << EOF{  "transport": {        "name": "redis"  }}EOF

在這兩個檔案中,我們將 Sensu 設定為使用 Redis 作為傳輸機制,還有 Reids 監聽的地址。用戶端需要直接連線到傳輸機制。每台客戶機都需要這兩個檔案。

$ sudo tee /etc/sensu/uchiwa.json << EOF{   "sensu": [        {        "name": "sensu",        "host": "127.0.0.1",        "port": 4567        }   ],   "uchiwa": {        "host": "0.0.0.0",        "port": 3000   }}EOF

在這個檔案中,我們設定 Uchiwa 監聽每個地址(0.0.0.0)的埠 3000。我們還設定 Uchiwa 使用 sensu-api(已設定好)。

出於安全原因,更改剛剛建立的組態檔的所有者:

$ sudo chown -R sensu:sensu /etc/sensu

啟用並啟動 Sensu 服務:

$ sudo systemctl enable sensu-server sensu-api sensu-client$ sudo systemctl start sensu-server sensu-api sensu-client$ sudo systemctl enable uchiwa$ sudo systemctl start uchiwa

嘗試存取 Uchiwa 網站:http://<伺服器的 IP 地址>:3000

對於生產環境,建議執行 RabbitMQ 叢集作為 Transport 而不是 Redis(雖然 Redis 叢集也可以用於生產環境),執行多個 Sensu 伺服器範例和 API 範例,以實現負載均衡和高可用性。

Sensu 現在安裝完成,讓我們來設定用戶端。

用戶端側

要新增一個新用戶端,你需要通過建立 /etc/yum.repos.d/sensu.repo 檔案在客戶機上啟用 Sensu 倉庫。

$ sudo tee /etc/yum.repos.d/sensu.repo << EOF[sensu]name=sensubaseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/gpgcheck=0enabled=1EOF

啟用倉庫後,安裝 Sensu:

$ sudo yum install sensu -y

要設定 sensu-client,建立在伺服器中相同的 redis.jsontransport.json,還有 client.json 組態檔:

$ sudo tee /etc/sensu/conf.d/client.json << EOF{  "client": {        "name": "rhel-client",        "environment": "development",        "subscriptions": [        "frontend"        ]  }}EOF

name 欄位中,指定一個名稱來標識此客戶機(通常是主機名)。environment 欄位可以幫助你過濾,而 subscriptions 定義了客戶機將執行哪些監視檢查。

最後,啟用並啟動服務並簽入 Uchiwa,因為客戶機會自動註冊:

$ sudo systemctl enable sensu-client$ sudo systemctl start sensu-client

Sensu 檢查

Sensu 檢查有兩個元件:一個外掛和一個定義。

Sensu 與 Nagios 檢查外掛規範相容,因此無需修改即可使用用於 Nagios 的任何檢查。檢查是可執行檔案,由 Sensu 客戶機執行。

檢查定義可以讓 Sensu 知道如何、在哪以及何時執行外掛。

用戶端側

讓我們在客戶機上安裝一個檢查外掛。請記住,此外掛將在客戶機上執行。

啟用 EPEL 並安裝 nagios-plugins-http

$ sudo yum install -y epel-release$ sudo yum install -y nagios-plugins-http

現在讓我們通過手動執行它來了解這個外掛。嘗試檢查客戶機上執行的 Web 伺服器的狀態。它應該會失敗,因為我們並沒有執行 Web 伺服器:

$ /usr/lib64/nagios/plugins/check_http -I 127.0.0.1connect to address 127.0.0.1 and port 80: Connection refusedHTTP CRITICAL - Unable to open TCP socket

不出所料,它失敗了。檢查執行的返回值:

$ echo $?2

Nagios 檢查外掛規範定義了外掛執行的四個返回值:

外掛返回碼狀態
0OK
1WARNING
2CRITICAL
3UNKNOWN

有了這些資訊,我們現在可以在伺服器上建立檢查定義。

伺服器側

在伺服器機器上,建立 /etc/sensu/conf.d/check_http.json 檔案:

{  "checks": {    "check_http": {      "command": "/usr/lib64/nagios/plugins/check_http -I 127.0.0.1",      "interval": 10,      "subscribers": [        "frontend"      ]    }  }}

command 欄位中,使用我們之前測試過的命令。interval 會告訴 Sensu 這個檢查的頻率,以秒為單位。最後,subscribers 將定義執行檢查的客戶機。

重新啟動 sensu-apisensu-server 並確認新檢查在 Uchiwa 中可用。

$ sudo systemctl restart sensu-api sensu-server

接下來

Sensu 是一個功能強大的工具,本文只簡要介紹它可以幹什麼。參閱文件了解更多資訊,存取 Sensu 網站了解有關 Sensu 社群的更多資訊。