歡迎光臨
每天分享高質量文章

Sensu 監控入門 | Linux 中國

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

— Michael Zamot

 

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

如果你想以一種簡單而有效的方式監控雲基礎設施,Sensu 是一個不錯的選擇。它可以與你的組織已經使用的許多現代 DevOps 組件集成,比如 Slack[3]HipChat[4] 或 IRC[5],它甚至可以用 PagerDuty[6] 發送移動或尋呼機的警報。

Sensu 的模塊化架構[7]意味著每個組件都可以安裝在同一臺服務器上或者在完全獨立的機器上。

結構

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

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

Sensu 客戶端[8]執行 Sensu 服務器安排的檢查或本地檢查定義。Sensu 使用資料儲存(Redis)來儲存所有的持久資料。最後,Uchiwa[9] 是與 Sensu API 進行通信的 Web 界面。

sensu_system.png

安裝 Sensu

條件

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

服務器側

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

  1. $ sudo yum install epel-release -y

然後安裝 Redis:

  1. $ sudo yum install redis -y

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

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

啟用並啟動 Redis 服務:

  1. $ sudo systemctl enable redis
  2. $ sudo systemctl start redis

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

現在讓我們來安裝 Sensu。

首先,配置 Sensu 倉庫並安裝軟體包:

  1. $ sudo tee /etc/yum.repos.d/sensu.repo << EOF
  2. [sensu]
  3. name=sensu
  4. baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
  5. gpgcheck=0
  6. enabled=1
  7. EOF
  8. $ sudo yum install sensu uchiwa -y

讓我們為 Sensu 創建最簡單的配置檔案:

  1. $ sudo tee /etc/sensu/conf.d/api.json << EOF
  2. {
  3.   "api": {
  4.         "host": "127.0.0.1",
  5.         "port": 4567
  6.   }
  7. }
  8. EOF

然後,配置 sensu-api 在本地主機上使用端口 4567 監聽:

  1. $ sudo tee /etc/sensu/conf.d/redis.json << EOF
  2. {
  3.   "redis": {
  4.         "host": "",
  5.         "port": 6379,
  6.         "password": "password123"
  7.   }
  8. }
  9. EOF
  10. $ sudo tee /etc/sensu/conf.d/transport.json << EOF
  11. {
  12.   "transport": {
  13.         "name": "redis"
  14.   }
  15. }
  16. EOF

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

  1. $ sudo tee /etc/sensu/uchiwa.json << EOF
  2. {
  3.    "sensu": [
  4.         {
  5.         "name": "sensu",
  6.         "host": "127.0.0.1",
  7.         "port": 4567
  8.         }
  9.    ],
  10.    "uchiwa": {
  11.         "host": "0.0.0.0",
  12.         "port": 3000
  13.    }
  14. }
  15. EOF

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

出於安全原因,更改剛剛創建的配置檔案的所有者:

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

啟用並啟動 Sensu 服務:

  1. $ sudo systemctl enable sensu-server sensu-api sensu-client
  2. $ sudo systemctl start sensu-server sensu-api sensu-client
  3. $ sudo systemctl enable uchiwa
  4. $ sudo systemctl start uchiwa

嘗試訪問 Uchiwa 網站:http://:3000

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

Sensu 現在安裝完成,讓我們來配置客戶端。

客戶端側

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

  1. $ sudo tee /etc/yum.repos.d/sensu.repo << EOF
  2. [sensu]
  3. name=sensu
  4. baseurl=https://sensu.global.ssl.fastly.net/yum/\$releasever/\$basearch/
  5. gpgcheck=0
  6. enabled=1
  7. EOF

啟用倉庫後,安裝 Sensu:

  1. $ sudo yum install sensu -y

要配置 sensu-client,創建在服務器中相同的 redis.json 和 transport.json,還有 client.json 配置檔案:

  1. $ sudo tee /etc/sensu/conf.d/client.json << EOF
  2. {
  3.   "client": {
  4.         "name": "rhel-client",
  5.         "environment": "development",
  6.         "subscriptions": [
  7.         "frontend"
  8.         ]
  9.   }
  10. }
  11. EOF

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

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

  1. $ sudo systemctl enable sensu-client
  2. $ sudo systemctl start sensu-client

Sensu 檢查

Sensu 檢查有兩個組件:一個插件和一個定義。

Sensu 與 Nagios 檢查插件規範[10]兼容,因此無需修改即可使用用於 Nagios 的任何檢查。檢查是可執行檔案,由 Sensu 客戶機運行。

檢查定義可以讓 Sensu 知道如何、在哪以及何時運行插件。

客戶端側

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

啟用 EPEL 並安裝 nagios-plugins-http

  1. $ sudo yum install -y epel-release
  2. $ sudo yum install -y nagios-plugins-http

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

  1. $ /usr/lib64/nagios/plugins/check_http -I 127.0.0.1
  2. connect to address 127.0.0.1 and port 80: Connection refused
  3. HTTP CRITICAL - Unable to open TCP socket

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

  1. $ echo $?
  2. 2

Nagios 檢查插件規範定義了插件執行的四個傳回值:

< 如顯示不全,請左右滑動 >
插件傳回碼 狀態
0 OK
1 WARNING
2 CRITICAL
3 UNKNOWN

有了這些信息,我們現在可以在服務器上創建檢查定義。

服務器側

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

  1. {
  2.   "checks": {
  3.     "check_http": {
  4.       "command": "/usr/lib64/nagios/plugins/check_http -I 127.0.0.1",
  5.       "interval": 10,
  6.       "subscribers": [
  7.         "frontend"
  8.       ]
  9.     }
  10.   }
  11. }

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

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

  1. $ sudo systemctl restart sensu-api sensu-server

接下來

Sensu 是一個功能強大的工具,本文只簡要介紹它可以乾什麼。參閱文件[11]瞭解更多信息,訪問 Sensu 網站瞭解有關 Sensu 社區[12]的更多信息。

 

已同步到看一看
赞(0)

分享創造快樂