nagios nrdp

源碼

不用從nagios主頁獲取源碼,那份源碼已經陳舊,而且存在不少問題,直接從做者php

<pre> git clone https://github.com/NagiosEnterprises/nrdp.git </pre>html

NRDP的特性:

  • NRDP使用標準的端口和協議,須要對防火牆進行配置,客戶端開發簡單;
  • NRDP使用了Apache Web服務器提供的SSL加密傳輸和認證;
  • NRDP支持host和service多行檢測輸
  • NRDP寫檢測輸出可以直接輸出到Nagios 內核的spool目錄——繞過外部命令文件,從而提升了性能

工做原理

  • 第一步、遠程客戶端向NRDP服務API提交一個請求,客戶端提交包括:有效的「令牌(token)」;請求NRDP服務處理的命令,或檢測結果
  • 第二步、NRDP校驗「令牌(token)」而且將客戶端需求傳遞到恰當的NRDP插件;
  • 第三步、NRDP插件處理客戶端需求,而且將數據提交到Nagios或者其它應用程序;
  • 第四步、NRDP以XML的格式向客戶端返回結果信息;

配置過程

將應用拷貝到apache根目錄下python

<pre> git clone https://github.com/NagiosEnterprises/nrdp.git cp -rp nrdp/server /var/www/html/nrdp chown -R nagios.nagios /var/www/html/nrdp </pre>ios

修改nrdp插件配置 /var/www/html/nrdp/config.inc.phpgit

$cfg['authorized_tokens'] = array(
    "k&d@dlz9x",
    "df23m7jadI34",
   );
$cfg["command_file"]="/var/lib/nagios3/rw/nagios.cmd";
$cfg["check_results_dir"]="/var/lib/nagios3/spool/checkresults";
$cfg["tmp_dir"]="/var/lib/nagios3/spool/tmp/";

apache 配置

添加 http 配置 /etc/apache2/conf-enabled/nrdp.confgithub

<Directory "/var/www/html/nrdp">
#  SSLRequireSSL
Options None
AllowOverride None
Order allow,deny
Allow from 10.0.0.0/8
#  Order deny,allow
#  Deny from all
#  使用與nagios相同的認證用戶
#AuthName "NRDP"
#AuthType Basic
#AuthUserFile       /etc/nagios3/htpasswd.users
#Require valid-user
</Directory>

修改 apache 守護進程用戶 /etc/apache2/envvarsapache

<pre> export APACHE_RUN_USER=nagios export APACHE_RUN_GROUP=nagios </pre>ubuntu

重啓服務,訪問 URLvim

/etc/init.d/httpd restart
http://server_ip/nrdp/

若是提交數據返回 OK 的結果,說明 http 配置正確,正確結果以下:安全

<result>
  <status>0</status>
  <message>OK</message>
</result>

<result>
  <status>0</status>
  <message>OK</message>
  <meta>
    <output>2 checks processed.</output>
  </meta>
</result>

主機檢測發送結果

參考 Nagios被動檢測的配置 定義要被動監控的主機及其服務,使用nrdp客戶端向服務器發送檢測結果,看nagios是否正確接收到並正確反饋處理!

<pre> python send_nrdp.py --url=http://server_ip/server/ --token="l@bs&d" --host=localhost --service=check_disk_passive --state=0 --output="ok ok ok" </pre>

<pre> python send_nrdp.py --url=http://server_ip/server/ --token="l@bs&d" --host=localhost --state=0 --output="ok ok ok" </pre>

安全

因爲 nrdp-server 是運行在 apache 服務器上的應用,能夠充分利用apache提供的安全機制,好比

1 SSL加密傳輸 ,對應配置

SSLRequireSSL

2 限制IP訪問

Order allow,deny
Allow from 10.0.0.0/8

3 用戶認證

#使用與nagios相同的認證用戶
#AuthName "NRDP"
#AuthType Basic
#AuthUserFile        /etc/nagios3/htpasswd.users
#Require valid-user

遇到的問題

在ubuntu 14.04 系統探索部署 nagios nrdp 插件過程當中,測試 http: ip /nrdp/ 提交結果的頁面中,老是報以下錯誤:

<result>
<status>-1</status>
<message>BAD COMMAND FILE</message>
</result>

<result>
<status>-1</status>
<message>BAD CHECK RESULTS DIR</message>
</result>

「BAD COMMAND FILE」 「BAD CHECK RESULTS DIR」 開發者定義的這兩條運行錯誤提示信息,語義解誤差很大,弄了兩天依然無頭緒, 只能在閱讀插件的源碼,分別找到了源碼中對應的位置,如今把報錯信息出處的調用的函數寫成兩個測試腳本

test_file_exists.php
 <?php
 $result=file_exists("/var/lib/nagios3/spool/checkresults","c");
 print $result."\n\r";
 ?>

 test_tempnam.php
 <?php
 $tmpname=tempnam("/var/lib/nagios3/spool/checkresults","c");
 print $tmpname."\n\r";
 ?>

分別以nagios www-data 用戶身份執行,會返回不一樣的結果,插件不能工做的正常緣由就這裏!

sudo -u nagios  php test_tempnam.php 
sudo -u nagios  php test_file_exists.php
sudo -u www-data  php test_tempnam.php 
sudo -u www-data  php test_file_exists.php

最後給出一種解決辦法,更改apache服務的運行時用戶 vim /etc/apache2/envvars

<pre> export APACHE_RUN_USER=nagios export APACHE_RUN_GROUP=nagios </pre>

最後測試一切OK

相關文章
相關標籤/搜索