Sensu 監控入門
Sensu 是一個開源的基礎設施和應用程序監控解決方案,它可以監控伺服器、相關服務和應用程序健康狀況,並通過第三方集成發送警報和通知。Sensu 用 Ruby 編寫,可以使用 RabbitMQ 或 Redis 來處理消息,它使用 Redis 來存儲數據。
如果你想以一種簡單而有效的方式監控雲基礎設施,Sensu 是一個不錯的選擇。它可以與你的組織已經使用的許多現代 DevOps 組件集成,比如 Slack、HipChat 或 IRC,它甚至可以用 PagerDuty 發送移動或尋呼機的警報。
Sensu 的模塊化架構意味著每個組件都可以安裝在同一台伺服器上或者在完全獨立的機器上。
結構
Sensu 的主要通信機制是 Transport。每個 Sensu 組件必須連接到 Transport 才能相互發送消息。Transport 可以使用 RabbitMQ(在生產環境中推薦使用)或 Redis。
Sensu 伺服器處理事件數據並採取行動。它註冊客戶端並使用過濾器、增變器和處理程序檢查結果和監視事件。伺服器向客戶端發布檢查說明,Sensu API 提供 RESTful API,提供對監控數據和核心功能的訪問。
Sensu 客戶端執行 Sensu 伺服器安排的檢查或本地檢查定義。Sensu 使用數據存儲(Redis)來保存所有的持久數據。最後,Uchiwa 是與 Sensu API 進行通信的 Web 界面。
![](/data/attachment/album/201904/27/131719v8j05zv65qz6grqz.png "sensu_system.png")
安裝 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=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/$releasever/$basearch/
gpgcheck=0
enabled=1
EOF
$ 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=sensu
baseurl=https://sensu.global.ssl.fastly.net/yum/$releasever/$basearch/
gpgcheck=0
enabled=1
EOF
啟用倉庫後,安裝 Sensu:
$ sudo yum install sensu -y
要配置 sensu-client
,創建在伺服器中相同的 redis.json
和 transport.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.1
connect to address 127.0.0.1 and port 80: Connection refused
HTTP CRITICAL - Unable to open TCP socket
不出所料,它失敗了。檢查執行的返回值:
$ echo $?
2
Nagios 檢查插件規範定義了插件執行的四個返回值:
插件返回碼 | 狀態 |
---|---|
0 | OK |
1 | WARNING |
2 | CRITICAL |
3 | UNKNOWN |
有了這些信息,我們現在可以在伺服器上創建檢查定義。
伺服器側
在伺服器機器上,創建 /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-api
和 sensu-server
並確認新檢查在 Uchiwa 中可用。
$ sudo systemctl restart sensu-api sensu-server
接下來
Sensu 是一個功能強大的工具,本文只簡要介紹它可以幹什麼。參閱文檔了解更多信息,訪問 Sensu 網站了解有關 Sensu 社區的更多信息。
via: https://opensource.com/article/18/8/getting-started-sensu-monitoring-solution
作者:Michael Zamot 選題:lujun9972 譯者:MjSeven 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive