網(wǎng)絡(luò)監(jiān)控平臺 Shinken 安裝示范
Shinken是一個網(wǎng)絡(luò)監(jiān)控平臺,可以通過一系列直觀的方式監(jiān)控網(wǎng)絡(luò)內(nèi)的各種健康狀況。Shinken,單單這個名字接近于日語發(fā)音的“新建”,Shinken脫胎于Nagios,其實Shinken這個項目本身就是一幫Nagios項目的人無法忍受Nagios,自己跳出來重新用Python重構(gòu)了一下——較低的版本甚至完全兼容Nagios的配置文件。
要吐漕的是Litrin在嘗試安裝的時候用了N個版本,0.x的根本找不到文檔;1.x的文檔很全,插件兼容性有問題;2.x文檔有,插件全,就是明顯的有bug。只能自己在github上fork之后提交補丁——好在當天就被采納了。不過話說這也是開源項目的一個常態(tài),一個項目一旦做到差不多,團隊很快就會因為產(chǎn)品定義的不同出現(xiàn)分歧,然后一幫人就fork代碼搞個新項目,最終的結(jié)果就是“一堆類似功能的項目,多的挑花眼卻沒有一個是完美的。”
安裝前先簡單了解下Shinken的架構(gòu),相比Shinken借鑒的Nagios,這個明顯要復(fù)雜很多。
- 多種角色:不同于傳統(tǒng)C/S架構(gòu),應(yīng)該是出于分布式的考慮。Shinken的結(jié)構(gòu)真的有些變態(tài)了。
- Arbiter(仲裁): Arbiter節(jié)點讀取本地的配置,然后將配置切分之后分發(fā)到多個合適的schedulers節(jié)點。
- Scheduler(調(diào)度): scheduler節(jié)點負責分別管理poller和reactionner節(jié)點的任務(wù)調(diào)度。
- Poller(輪詢): poller節(jié)點通過各類插件執(zhí)行scheduler節(jié)點的任務(wù),獲取各種健康指標。
- Reactionner(響應(yīng)): reactionner 節(jié)點的任務(wù)是一旦滿足要求將觸發(fā)event_handlers機制(比如發(fā)送通知等)。
- Broker(中間人): broker節(jié)點的任務(wù)真的是中間人——導(dǎo)出和管理scheduler節(jié)點中的數(shù)據(jù)。
- Receiver (接收人): 可選節(jié)點,在某些特定場景下可以通過reciver節(jié)點匯總數(shù)據(jù)(比如匯總私網(wǎng)內(nèi)部數(shù)據(jù),統(tǒng)一轉(zhuǎn)發(fā))。
- 除了Arbiter節(jié)點之外,任何的節(jié)點都可以不是唯一的。節(jié)點之間的關(guān)系也都是多對多的。
- 每一個節(jié)點都支持/依賴插件,或者說Shinken本身只是一個插件的框架而已。
- 保障性能和可靠性——根據(jù)CAP法則,放棄了一致性。
說了這么多的理論,開始動手吧! 這次終于使用了Ubuntu14.04的Server版。前邊也介紹過,N多的版本都不完善,這里只能采用Ubuntu的apt方法來安裝。這里為了省去前面的6種節(jié)點角色的復(fù)雜,只用“主控”和“受控”兩種角色粗暴的示范安裝過程。
主控端操作
#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
安裝結(jié)束后,正常情況下,在你的/etc/init.d目錄下將會有一系列以shinken開頭的腳本。這個時候,如果你簡單粗暴的server shinken start的話肯定是一堆的報錯等著你。好吧,這個問題我找了很久才發(fā)現(xiàn)。 編輯/etc/default/shinken,將第34行修改為:
BIN=/usr/lib/python2.7/dist-packages/shinken/bin
這個時候再server shinken start應(yīng)該會成功。其實shinken start的腳本是啟動所有的關(guān)聯(lián)的服務(wù),你可以通過增加或刪除/etc/default/shinken 配置中的AVAIL_MODULES選項起到變更角色的目的。 全部OK之后,你可以通過瀏覽器訪問主節(jié)點7767端口看到一個Dashboard。不過目前僅僅只是監(jiān)控本地的健康狀況而已。
下面就假定主控節(jié)點監(jiān)控另一臺主機nfs的網(wǎng)絡(luò)連通狀況 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端口的監(jiān)控。
如果你只需要拿到遠端主機ping狀態(tài),TCP端口之類簡單的幾個指標的話,這種模式已經(jīng)足夠了,可如果需要知道遠端主機的進程數(shù)量、磁盤空間等數(shù)據(jù),那就需要在被控端上做文章。這里就簡單的介紹下通過被控端上安裝poller的方式實現(xiàn)。
被控端操作
開始都差不多,照貼
#apt-get install shinken
編輯/etc/default/shinken,將第34行修改為:
BIN=/usr/lib/python2.7/dist-packages/shinken/bin
由于被控端只需要一個poller即可,可以關(guān)閉其他服務(wù),修改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服務(wù),配置生效后,你會在webUI的’All’選項中發(fā)現(xiàn)新增test主機的各項指標。