歡迎您光臨本站 註冊首頁

配置nagios監控HA集群(一)

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

配置nagios來監控HA集群(一)

首先我們來看一下nagios.cfg文件

Log_file當然是定義日誌文件,我們可以看到有好多的cfg_file定義了一些文件路徑,這些文件都在/usr/local/nagios/etc/etc/objects/文件夾下,我們抽取localhost.cfg文件來查看一下:

我們一段一段的來看,首先是這個文件的說明,告訴我們這個文件是一個簡單的配置示例用來監控本地機器,接下來:

這段定義的是本地機器的主機設置,我們可以看到默認的設置都是在本地迴環下,接下來:

這段配置是告訴我們本地的組設置

這一段開始定義服務了,被定義的對象是根分區檢查,檢查check_local_disk後面參數意義是warning小於20% ctritical小於10% /表示根分區

這段是定義當前的用戶,warning 當大於20個用戶的時候,ctritical當大於50個用戶的時候.

這段定義的是總進程數,warning當大於250個進程,critical當大於400個進程.

這一段則是定義負載,具體的負載內容我不太清楚(

CUP資源,I/O,還是網路?


這一段定義的是交換分區的使用,當小於20%的空閑空間時候warning

這一段則是SSH的監控,注意的是默認情況下通知是disable的,不是所有的用戶都把SSH服務打開的.

這段是http服務的設置,還是一樣的默認是沒有通知的.

nagios的主頁上可以發現確實有兩個服務被disabled了,點進去瞧一瞧

原來通知被

disabled使用一個帶叉的喇叭來表示的..

現在我們來看command.cfg這個文件和這個目錄libexec,好熟悉啊,這不正是我們剛剛看到的配置文件里那些帶參數的命令么?這就是nagios的有趣之處了,首先在localhost.cfg調用命令,然後在command.cfg裡面定義這些命令,而這些命令的執行程序則是放在libexec下面的,而這些libexec就是插件提供的功能..真是一環套一環.不過這也是linux設計的初衷,由小模塊解決小問題,然後組合在一起就解決了大問題.

值得一提的是在objects文件夾下面,按照官網安裝的時候讓我們修改了其中的一個contact.cfg文件.裡面的是用戶和用戶組的一些配置信息,用裡面我們的EMAIL

地址來接收警告.

在開始真正的監控之前我們在來看下官方文檔

Your monitoring box should be viewed as a backdoor into your other systems. In many cases, the Nagios server might be allowed access through firewalls in order to monitor remote servers. In most all cases, it is allowed to query those remote servers for various information. Monitoring servers are always given a certain level of trust in order to query remote systems. This presents a potential attacker with an attractive backdoor to your systems. An attacker might have an easier time getting into your other systems if they compromise the monitoring server first. This is particularly true if you are making use of shared SSH keys in order to monitor remote systems.

Another area of concern is the ability for intruders to sniff monitoring data (status information) as it comes across the wire. If communication channels are not encrypted, attackers can gain valuable information by watching your monitoring information. Take as an example the following situation: An attacker captures monitoring data on the wire over a period of time and analyzes the typical CPU and disk load usage of your systems, along with the number of users that are typically logged into them. The attacker is then able to determine the best time to compromise a system and use its resources (CPU, etc.) without being noticed.

看完這段話不禁嚇出了一身冷汗,我們需要監控別的機器就需要獲得一定的許可權和級別來進入別的主機,這點像一個後門程序,當我的監控主機被人入侵,就很容易整個網路上的主機被黑客佔據了,例如我們使用共享的SSH keys去完成監控的時候就很可能發生,想遠程監控別的主機資源這種行為本身是極度不安全的.另一個重要的方面是入侵者可以通過sniff這種抓包工具去獲得我們的監控數據,這些數據對於一次成功的入侵是致命的,特別是當這些數據在沒有加密的情況下,例如入侵者在進行一段時間的數據收集之後,可以知道CPU和磁碟使用情況,然後用戶登錄情況,根據這些數據的分析可以選擇一個最好的時機去入侵系統而不被察覺到.

那麼怎麼解決?

1. Use a Dedicated Monitoring Box. 利用一個專用的機器去監控,

像這樣,將nagios專門放入一台機器運行,然後通過防火牆去監控其他的機器.

2. Don't Run Nagios As Root 這個對於每個服務都是如此,如果需要root許可權使用sudo

3. Lock Down The Check Result Directory. 監控結果目錄需要設置訪問許可權,如果其他用戶可以進入到這個目錄里,就可能發送假的監控數據,製造一些虛假的問題.

4. Lock Down The External Command File. 首先要給

/usr/local/nagios/var/rw目錄正確的許可權,然後只能rootnagios用戶寫命令文件.在監控機器上儘可能較少用戶數量,運行nagios命令時最好在cgi環境下,而不是用nobody的登錄許可權.

5. Require Authentication In The CGIs. 登錄CGI也就是web界面時候一定要用戶驗證.這點有很多資料上面都忽略了,這是極度不安全的.

6. Implement Enhanced CGI Security Measures.主要是在登錄CGI時候輸入的user

password不要被第三方截取到,要加強登錄和輸入環境的安全.

7. Use Full Paths In Command Definitions. 指定絕對路徑,在調用命令的時候.

8. Hide Sensitive Information With $USERn$ Macros.還是賬戶密碼信息的使用,不要將賬戶和密碼信息直接寫在某個文件處,盡量可能多的使用宏命令像$USER這種變數.

9. Strip Dangerous Characters From Macros.在命令里去除一些特殊的變數或者字元,主要是防止注入式攻擊,很有可能入侵者敲的一段字元就是一個執行命令,從而打開了一個系統安全後門.

10. Secure Access to Remote Agents. 不是所有的機器都能去搜集信息,防火牆之類的檢查工具是保證安全的前提,儘可能的檢查nagios使用的監控協議(NRPE,SNMP,NSclinet..

11. Secure Communication Channels. 加密,所有的經過的網路上的數據都要進行加密,以防止萬一入侵者截取到數據包不會輕易地獲取信息.

Additional Techniques

· Stronger Authentication using Digest Authentication. If you have followed the quickstart guides

, chances are that you are using Apache's Basic Authentication. Basic Authentication will send your username and password in "clear text" with every http request. Consider using a more secure method of authentication such as Digest Authentication which creates a MD5 Hash of your username and password to send with each request.

· Forcing TLS/SSL for all Web Communication. Apache provides TLS/SSL through the mod_ssl module. TLS/SSL provides a secure tunnel between the client and server that prevents eavesdropping and tampering using strong publickey/privatekey cryptography.

· Locking Down Apache Using Access Controls. Consider locking down access to the Nagios box to your IP address, IP address range, or IP subnet. If you require access outside your network you could use VPN or SSH Tunnels. This is a easy and strong to limit access to HTTP/HTTPS on your system.

CGI的安全措施分為三個步驟:第一步登錄的安全驗證,user/password的輸入不可少;第二步協議的安全,保證每個頁面都運行在SSL/TLS協議下;第三步訪問控制,主要是對訪問的IP地址的過濾.這些在apache配置時候都講爛了,這裡不提.

Nagios的監控分幾類我們在上面的圖裡已經看到了:Windows Server, Linux Server,Netware Server,Cisco Switch,而每類對象所用的協議的都不一樣,這裡我們用Linux Server來做詳細實驗:

首先這個邏輯圖告訴我們nagios是通過check_nrpe來進行監控的,被監控的機器上需要NRPE模塊,此模塊提供check_disk還有check_load等功能,通道需要加密.可惜官網的描述讓人蛋疼:

[Note: This document has not been completed. I would recommend you read the documentation on the NRPE addon for instructions on how to monitor a remote Linux/Unix server.]

不說了,先看下官方推薦的NRPE addon這個插件是個什麼樣的東東

大致的意思就是NRPE是一個插件能在遠程linux/unix主機上執行的,如果你需要監控遠程主機的CPU負載,內存使用等信息.簡單的監控能用check_by_ssh來完成,但是如果有上百或者上千的主機會大大增加CPU的負載.我們這裡可以看出之前在localhost.cfg里有個服務的定義是ping,localhost.cfg文件裡面定義的服務不僅僅是本地機器的服務,搜集了一下網上一些資深專家的意見:

這裡的服務並不是指被監測主機上運行的服務,而是指Nagios 所進行的“各種不同功能的監測”工作,一個監測工作就是一個服務.服務定義段就是要定義Nagios 將進行什麼樣的監測工作的配置段.服務當中也能夠定義服務的類,並且類也能繼承類,運用比較靈活.

全部的服務大致可以分為3 大種:第一種是“本地系統監測服務”,就是監測主機Nagios 所在主機對自己本地的一些情況的監測,比如本地磁碟佔用情況,本地CPU 使用情況等等.

第二種是“遠程系統監測服務”,就是遠程主機系統的內部情況,比如被監測主機的磁碟佔用情況,遠程主機的CPU 使用情況等等,但是要實現遠程系統監測服務,還必須要再安裝

NRPE 核心代理的C/S 擴展插件程序(這個以後講).第三種服務是“連通檢測服務”,就是

Nagios 主機到被監測的遠程主機當中的一些連通性的監測,比如Ping 操作,指定埠的TCP/UDP 監控,這些服務不需要NRPE 也能夠實現.

我們先不用NRPE來試驗下監控結果,也就是上面提到的第三種聯通檢測服務.首先修改localhost.cfg文件,添加host定義:

然後定義hostgroup

值得一提的是hostgroup裡面的members必須要在host裡面定義過的主機,定義服務:

同樣這裡的host_name也必須在前面被定義過的.我們重啟服務然後再來看:


多出了兩台主機,試驗成功.現在我們再來開始遠程系統監控服務,也就是NRPE.不說什麼先看官方文檔:

又提到了SSHNRPE,說SSHNRPE更安全,但給CPU造成的負擔會在監控的兩端同時發生,總的說來NRPE還是要比SSH消耗資源更低一些

這個內容是關鍵,很清楚的告訴了我們整個NRPE的工作流程,首先NRPE由兩部分組成:check_nrpenrpe服務,然後NRPE的工作流程:首先,

nagios執行check_nrpe,告訴它需要監控哪些內容;接下來check_nrpe鏈接遠程主機上的nrpe通過ssl加密后;然後nrpe服務運行nagios插件區檢查服務和資源;nrpe將結果返回給check_nrpe.值得注意的是:nrpe服務需要nagios插件(之前安裝在主機上的),如果沒有插件,單憑nrpe是沒法進行監控的.

這裡有一段假設,就是要告訴我們NRPE服務其實是一個xinetd服務,也就是除了iptables,TCP-wrappers也可以起作用,當然xinetd也是必須被安裝的.

第一步:創建用戶,和之前安裝

nagios一樣:

第二步:創建安裝目錄:

第三步:不解釋了(這裡多說幾句,什麼GCC GD都是需要提前被安裝的..)

第四步:真不解釋了

出錯了,提示說沒有找到SSL,yum -y install openssl-devel,搞定.

接下來,竟然是xinetd服務,配置當然要去/etc/xinetd.d下解決啊

only_from添加nagiosip地址.

這一段...老外太細緻了!重啟xinetd 服務,然後測試一下:

成功了!

文檔接著說要打開防火牆策略等等.

nagios監控主機上安裝nrpe,安裝完成測試一下:

成功了,下面開始配置遠程主機的服務,首先在command.cfg中定義:

接下來在localhost.cfg中把遠程主機在文件中定義的主機名重新定義服務,照著模板抄然後命令格式為check_nrpe!check_load這樣..還有use的類要用generic-service

所有配置完畢,node1node2監控條目和狀態欄出現了:

結束了嗎?我剛剛忘了說node1node2分別是集群的兩個節點,跑了一個http的服務,用luci的界面來查看下:

可以看到現在http運行在node1上面,那麼我要查看http的服務狀態是否像我在nagios這台機器上面localhost.cfg文件里定義一條服務監控http就行了呢?我們來試試,在node1/usr/local/nagios/etc/nagios.cfg里添加一條記錄:

有人要問了,這裡為什麼要添加 -H localhost參數?讓我們回憶一下在localhost.cfg里定義的命令首先要在command.cfg里進行描述吧?然後最終運行的是libexec目錄下的程序吧?好,打開command.cfg找到check_http的定義:

其中$USER1$ 這個變數分別在resouce.cfg里定義了具體值:

NRPE的配置文件里要把路徑寫全/usr/local/nagios/libexec/check_http,具體參數和參數值什麼意思呢?我們執行一下/check_http看下:

不用多解釋了吧?其實我們在nrpe.cfg

里添加的記錄就是相當於在nagios裡面command.cfg里添加一條記錄.解釋到此為止,在localhost.cfg里定義一條http的記錄,保存,重啟服務再來看下情況如何:

出現了!告訴我現在http有問題,警告級別是warning...怎麼回事呢?呵呵可能大家已經猜到了,和前一篇提到的一樣,沒有index文件,touch一個再看:

OY,這次沒問題了.

這個實驗真是做了一個通宵,走了各種彎路,不過還是成功了!感謝nagios提供的官方文檔,感謝網友們無私的貢獻出自己的學習經驗.

參考文檔:http://hi.baidu.com/kouzl/blog/category/Nagios

http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html

http://nagios.sourceforge.net/docs/nrpe/NRPE.pdf


本文出自 「no2實驗室」 博客,請務必保留此出處http://linuxfan.blog.51cto.com/1842325/427899


[火星人 ] 配置nagios監控HA集群(一)已經有710次圍觀

http://coctec.com/docs/linux/show-post-49722.html