網絡監控平臺 Shinken 安裝示范
Shinken是一個網絡監控平臺,可以通過一系列直觀的方式監控網絡內的各種健康狀況。Shinken,單單這個名字接近于日語發音的“新建”,Shinken脫胎于Nagios,其實Shinken這個項目本身就是一幫Nagios項目的人無法忍受Nagios,自己跳出來重新用Python重構了一下——較低的版本甚至完全兼容Nagios的配置文件。
要吐漕的是Litrin在嘗試安裝的時候用了N個版本,0.x的根本找不到文檔;1.x的文檔很全,插件兼容性有問題;2.x文檔有,插件全,就是明顯的有bug。只能自己在github上fork之后提交補丁——好在當天就被采納了。不過話說這也是開源項目的一個常態,一個項目一旦做到差不多,團隊很快就會因為產品定義的不同出現分歧,然后一幫人就fork代碼搞個新項目,最終的結果就是“一堆類似功能的項目,多的挑花眼卻沒有一個是完美的。”
安裝前先簡單了解下Shinken的架構,相比Shinken借鑒的Nagios,這個明顯要復雜很多。
- 多種角色:不同于傳統C/S架構,應該是出于分布式的考慮。Shinken的結構真的有些變態了。
- Arbiter(仲裁): Arbiter節點讀取本地的配置,然后將配置切分之后分發到多個合適的schedulers節點。
- Scheduler(調度): scheduler節點負責分別管理poller和reactionner節點的任務調度。
- Poller(輪詢): poller節點通過各類插件執行scheduler節點的任務,獲取各種健康指標。
- Reactionner(響應): reactionner 節點的任務是一旦滿足要求將觸發event_handlers機制(比如發送通知等)。
- Broker(中間人): broker節點的任務真的是中間人——導出和管理scheduler節點中的數據。
- Receiver (接收人): 可選節點,在某些特定場景下可以通過reciver節點匯總數據(比如匯總私網內部數據,統一轉發)。
- 除了Arbiter節點之外,任何的節點都可以不是唯一的。節點之間的關系也都是多對多的。
- 每一個節點都支持/依賴插件,或者說Shinken本身只是一個插件的框架而已。
- 保障性能和可靠性——根據CAP法則,放棄了一致性。
說了這么多的理論,開始動手吧! 這次終于使用了Ubuntu14.04的Server版。前邊也介紹過,N多的版本都不完善,這里只能采用Ubuntu的apt方法來安裝。這里為了省去前面的6種節點角色的復雜,只用“主控”和“受控”兩種角色粗暴的示范安裝過程。
主控端操作
#apt-get install shinken
看看哪些包被安裝了
root@ubuntu14:~# dpkg -l | grep shinken rc shinken 1.4-2 amd64 Flexible monitoring tool - Meta-package ii shinken-common 1.4-2 amd64 Flexible monitoring tool - Common files ii shinken-module-broker-webui 1.4-2 amd64 Shinken WebUI broker module ii shinken-module-broker-webui-cfgpassword 1.4-2 amd64 Shinken cfg_password authentifcation module for WebUI broker ii shinken-module-broker-webui-sqlitedb 1.4-2 amd64 Shinken Sqlite storage module for WebUI broker ii shinken-module-retention-picklefile 1.4-2 amd64 Retention module for Arbiter, Scheduler or Broker
安裝結束后,正常情況下,在你的/etc/init.d目錄下將會有一系列以shinken開頭的腳本。這個時候,如果你簡單粗暴的server shinken start的話肯定是一堆的報錯等著你。好吧,這個問題我找了很久才發現。 編輯/etc/default/shinken,將第34行修改為:
BIN=/usr/lib/python2.7/dist-packages/shinken/bin
這個時候再server shinken start應該會成功。其實shinken start的腳本是啟動所有的關聯的服務,你可以通過增加或刪除/etc/default/shinken 配置中的AVAIL_MODULES選項起到變更角色的目的。 全部OK之后,你可以通過瀏覽器訪問主節點7767端口看到一個Dashboard。不過目前僅僅只是監控本地的健康狀況而已。
下面就假定主控節點監控另一臺主機nfs的網絡連通狀況 vi /etc/shinken/hosts/nfs.cfg
define host{
use linux
address 10.239.21.24
host_name nfs
}
define service{
use ssh ; Name of service template to use
host_name nfs
service_description SSH check
retry_interval 1
check_interval 5
max_check_attempts 2
check_command check_ssh
notifications_enabled 0
}
重起shinken之后就會看到一個對NFS主機SSH端口的監控。
如果你只需要拿到遠端主機ping狀態,TCP端口之類簡單的幾個指標的話,這種模式已經足夠了,可如果需要知道遠端主機的進程數量、磁盤空間等數據,那就需要在被控端上做文章。這里就簡單的介紹下通過被控端上安裝poller的方式實現。
被控端操作
開始都差不多,照貼
#apt-get install shinken
編輯/etc/default/shinken,將第34行修改為:
BIN=/usr/lib/python2.7/dist-packages/shinken/bin
由于被控端只需要一個poller即可,可以關閉其他服務,修改39行
AVAIL_MODULES="poller"
啟動shinken:
root@ubuntu14:/etc/shinken/hosts# service shinken start Starting poller: ...done.
啟動列表確實短了很多
回到主控端操作
vi /etc/shinken/hosts/test.cfg,添加被控端指標
define host{
use linux
host_name test
address 10.239.21.49 #被控端IP
}
define service{
use local-service ; Name of service template to use
host_name test
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define service{
use local-service ; Name of service template to use
host_name test
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
define service{
use local-service ; Name of service template to use
host_name test
service_description Total Processes
check_command check_local_procs!250!400!RSZDT
}
vi /etc/shinken/shinken-specific/poller.cfg,追加一個新的poller
define poller {
poller_name poller-test #poller名稱
address 10.239.21.49 #被控端IP
port 7771 #端口,默認就是7771
## Optional
manage_sub_realms 0 ; Does it take jobs from schedulers of sub-Realms?
min_workers 0 ; Starts with N processes (0 = 1 per CPU)
max_workers 0 ; No more than N processes (0 = 1 per CPU)
processes_by_worker 256 ; Each worker manages N checks
polling_interval 1 ; Get jobs from schedulers each N minutes
timeout 3 ; Ping timeout
data_timeout 120 ; Data send timeout
max_check_attempts 3 ; If ping fails N or more, then the node is dead
check_interval 60 ; Ping node every N seconds
## Interesting modules that can be used:
# - NrpeBooster = Replaces the check_nrpe binary. Therefore it
# enhances performances when there are lot of NRPE
# calls.
# - CommandFile = Allow the poller to read a nagios.cmd named pipe.
# This permits the use of distributed check_mk checks
# should you desire it.
# - SnmpBooster = Snmp bulk polling module
#modules NrpeBooster, CommandFile
modules
## Advanced Features
#passive 0 ; For DMZ monitoring, set to 1 so the connections
; will be from scheduler -> poller.
#poller_tags None
realm All
}
重起主控端shinken服務,配置生效后,你會在webUI的’All’選項中發現新增test主機的各項指標。


















