smokeping 安裝配置使用


smokeping 安裝配置使用

2016-09

環境

時間:2016-08

系統:CentOS 6.5 x64

軟件版本:smokeping-2.6.11

smokeping + nginx

依賴包

軟件包

fping wget dig curl bind-utils 
rrdtool
gcc make

perl模塊

perl perl-Net-Telnet perl-Net-DNS perl-LDAP perl-libwww-perl perl-RadiusPerl perl-IO-Socket-SSL perl-Socket6 perl-FCGI perl-RRD-Simple  perl-CPAN rrdtool-perl perl-CGI-SpeedCGI perl-ExtUtils-MakeMaker
FCGI
CGI
CGI::Fast
Config::Grammar
Digest::HMAC_MD5
Net::Telnet
Net::OpenSSH
Net::SNMP
Net::LDAP
Net::DNS
IO::Pty(perl-IO-Pty-Easy.noarch)
LWP

smokeping提供了自動安裝所需perl模塊的腳本,使用方法

./setup/build-perl-modules.sh /usr/local/smokeping/thirdparty

可惜源站在國外,下載經常會失敗。

下載失敗的話有兩種比較方便的模塊安裝方法

  1. 修改cpan源
    vim /usr/share/perl5/CPAN/Config.pm
    'urllist' => [], -> 'urllist' => [q[http://mirrors.163.com/cpan/]],
    然后手動通過cpan安裝模塊
  2. yum安裝perl模塊
    如果不知道模塊對應的rpm包名稱,yum search + grep找···

安裝

./configure --prefix=/usr/local/smokeping

如果報錯,提示缺少依賴的包或perl模塊,缺啥補啥···

如果configure過程正常,會看到


** Ready to install Smokeping ******************************

   Settings:

     PERL5LIB = not set
     PERL = /usr/bin/perl

   The Smokeping Makefiles use GNU make functionality.
   Continue installation with

     /usr/bin/gmake install

/usr/bin/gmake install

安裝完畢后,需要建立三個目錄mkdir {data,cache,var},並確保smokeing進程具有這些目錄的讀寫權限。這些目錄一般建立在smokeping的安裝目錄下,或者htdocs下。

OK 安裝完畢 配置之后就可以使用

配置文件在安裝目錄的etc下

可執行腳本在安裝目錄的bin下

基本配置

config

主配置文件是etc目錄下的config

按照本文的安裝路徑,配置文件為/usr/local/smokeping/etc/config

如果etc目錄下沒有config,可以以config.dist為模板拷貝一份cp config.dist config

講一下常用的配置參數(下面只摘取了部分配置文件內容,不是一個完整的配置文件)

** General ***
http://smokeping.xxx.com/smokeping.cgi	# 訪問smokeping網頁的URL,必須與web服務器配置一致

*** Database ***
step     = 300	# ping檢測的周期,單位s
pings    = 100	# 每個周期內ping的次數
				# 調整step和pings參數 會使之前的監控記錄失效(?)

*** Presentation ***
charset = utf-8	# 指定字符集為UTF-8。默認沒有該參數,網頁上顯示的中文是亂碼

+ overview		# overview視圖的尺寸
width = 1000
height = 150
range = 12h

+ detail		# detail視圖的尺寸
width = 1000
height = 200
unison_tolerance = 2

						# 詳細視圖中要顯示的幾個圖表,前面的字符串是標題,后面的數字+單位控制時間范圍
"Last 3 Hours"    1h	# 最近1小時的丟包率
"Last 24 Hours"   24h
"Last 7 Days"    7d		# 最近7天的丟包率
"Last 30 Days"   30d

*** Slaves ***	# (單節點模式可以不配置slave)
secrets=/usr/local/smokeping/etc/smokeping_secrets	# 用於驗證slave的密碼文件

+192.168.X.X				# 一個slave節點的配置樣例
display_name = 192.168.X.X
color = 00ff00				# slave的丟包率曲線顏色(要與其他節點的曲線顏色有區別)

*** Targets ***		# 配置要監控的目標

+ IDC1
menu = IDC1			# 瀏覽器左欄的節點名
title = IDC_1		# 標題
remark = IDC_1		# 注釋

++ host1
menu = host1
title = host_1
host = 192.168.1.1

++ host2
menu = host2
title = host_2
host = 192.168.1.2
slaves=192.168.X.X	# (單節點模式可以不配置slave)
					# 這樣,在瀏覽器的左欄會有一個樹狀的監控對象列表。根節點是IDC1,展開之后可以看到host1、host2。點擊host1、host2可以看到詳細的監控記錄。 其中host2除了有master ping host2的監控圖、還有slave ping host2的監控圖

啟動

運行smokeping

./bin/smokeping

bin是smokeping安裝目錄的一個子目錄

這里的smokeping是一個shell腳本,不帶參數運行時,會作為守護進程啟動

./bin/smokeping --help可以查看更多參數和用法

其他常用命令

smokeping --restart 重啟

smokeping --reload 重載。修改smokeping配置后可以通過reload使配置生效

smokeping --debug-daemon 以調試模式運行

WEB服務器配置

本次使用的web服務器是nginx

虛擬主機(vhost)的配置如下,僅供參考

server
{
      listen       80;
      server_name  smokeping.xxx.com;
      root  /usr/local/smokeping/htdocs/;
      index smokeping.fcgi
      access_log /var/log/smokeping_access.log;
      error_log  /var/log/smokeping_error.log;

      location ~ .*\.(cgi|fcgi)$ 
{
          root  /usr/local/smokeping/htdocs/;
          fastcgi_index smokeping.fcgi;
          fastcgi_pass unix:/tmp/perl-cgi.sock;

          fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
          include fcgi.conf;	# fcgi配置的文件名,安裝fcgi支持時自定
      }
}

web服務器必須支持fcgi(perl、fcgi部署以及如何讓nginx支持fcgi,此處不講解)

該配置使用了“smokeping.xxx.com"作為server name,訪問該站點時通過域名訪問。沒有條件做dns解析的話可以做host。

主從

做主從模式,可以在smokeping頁面上看到不同節點(master和各slave)ping目標的檢測情況,有助於判斷故障所在的網絡節點

工作模式

多節點的主從模式中,只有master節點上有監控配置文件。slave節點只需要配置驗證密碼(用於master-slave之間的驗證)、在啟動smokeping時附上相應的啟動參數(參數中包括master的URL等),slave就會在找到master,從master上獲取需要檢測的節點,在本機(slave)進行ping檢測,並將檢測結果反饋給master。

master-slave之間信息交流的方式,是通過URL(瀏覽器訪問smokeping的URL)進行的。 所以slave必須能正常訪問master端的URL

slave軟件安裝

從機只需要安裝smokeping,不需要web服務器。當然安裝smokeping之前需要裝好其依賴的軟件和perl模塊。安裝過程與單節點模式的安裝過程一樣,不贅述

注意除了編譯安裝smokeping外,也要建立data,var,cache目錄

slave配置

slave只需要配置一個密碼文件,用於連接master時的驗證。不需要做其他配置。

創建密碼文件(文件名自定)

echo "******" > /usr/local/smokeping/etc/smokeping_slave_secrets
chmod 600 smokeping_slave_secrets

master配置

創建密碼文件

vim smokeping_secrets

${slave_1節點名稱}:*******
${slave_2節點名稱}:*******

master的密碼文件可以配有多個slave的節點和密碼,每個以":"分隔的節點名稱和密碼一行 (這點與slave不同,slave的密碼文件中只有一個密碼)

修改主配置文件

vim etc/config

# 指定使用的密碼文件
*** Slaves ***
secrets=/usr/local/smokeping/etc/smokeping_secrets

# 指定要讓slave檢測哪些目標
+ IDC1
menu = IDC1
title = DIC1
remark = IDC機房1號
slaves = ${slave節點名稱}

兩點說明

  1. 只有當slave節點在某些目標的檢測配置中被使用,slave端才能成功連上master並進行檢測工作
  2. 可以把一個slave配置在一個底層節點上(例如一個受監控的IP),使slave檢測該服務器
    也可以把slave配置在一個上層節點上,使slave檢測該節點下屬的所有服務器

slave啟動

bin/smokeping --master-url=http://smokeping.master.com/smokeping.fcgi --cache-dir=/usr/local/smokeping/htdocs/cache/ --shared-secret=/usr/local/smokeping/etc/smokeping_slave_secrets --slave-name=192.168.X.X 

Oh 參數太長,容易斷行···

注意幾點

--slave-name 節點名稱,必須與master端配置的名稱一致
--shared-secret=/usr/local/smokeping/etc/smokeping_slave_secrets 指定要使用的密碼文件
--cache-dir 必須讓進程具有讀寫權限。smokeping.pid會存放在該目錄下

正常啟動時的輸出

Sent data to Server and got new config in response.
Note: logging to syslog as local0/info.
Daemonizing /usr/local/smokeping/bin/smokeping ...

進階-優化

設置登錄密碼

問題

smokeping自身是沒有訪問控制功能的。能到達master服務器的用戶都可以訪問監控頁面,存在安全隱患

處理

修改nginx的vhost配置,使訪問該站點需要驗證賬戶密碼

生成驗證文件

需要借助apache的工具htpasswd

htpasswd -c ./passwd admin

按照提示輸入兩次密碼,之后會生成一個包含賬號(這里的賬號是admin)密碼(密文)的文件passwd,筆者把生成的文件放到smokeping安裝目錄的htdocs下面,並設置權限chmod 600 passwd

修改nginx vhost配置

在location{}中加入兩行

auth_basic            Restricted;
auth_basic_user_file /usr/local/smokeping/htdocs/passwd;

重啟nginx使配置生效,之后登錄便會要求驗證賬號密碼

處理主從驗證

問題

如果在master的站點配置賬號密碼驗證,smokeping slave端就無法訪問master的URL。

啟動slave會得到報錯

WARNING Master said 401 Unauthorized
ERROR: we did not get config from the master. Maybe we are not configured as a slave for any of the targets on the master ?

master端的日志也會有報錯

2016/09/05 02:05:36 [error] 7667#0: *1774986 no user/password was provided for basic authentication, client: 192.168.X.X, server: xxx.com, request: "POST /smokeping.fcgi HTTP/1.1", host: "xxx.com"

從兩端的日志可以得出結論:

master端的web服務器收到來自slave端的連接請求時,要求使用賬號密碼登錄,而slave的請求不帶賬號密碼,所有web服務器拒絕了本次訪問

slave由於連不上master,獲取不到master上的smokeping配置信息,就判斷master上並沒有配置該slave,並退出結束進程

處理

從smaleping的啟動腳本參數看,讓slave帶上賬號密碼去訪問master的cgi是沒什么希望的了,人家沒這功能

只能去掉網站驗證的環節了

有幾種去掉驗證的方式:

  • 完全去掉smakeping頁面的登錄驗證
  • 去掉smakeping頁面的登錄驗證,用iptables限制允許訪問的IP
  • 在nginx vhost配置上做IP白名單,使slave服務器訪問URL時不用登錄驗證;非白名單IP訪問時依然需要驗證賬號密碼

個人推薦最后一種方法。既實現了業務需求,對安全性的影響也較低

nginx vhost配置IP白名單的方法

vim nginx/vhost/smokeping.conf

在location{}中加入以下部分

satisfy any;
allow 192.168.X.X;	# slave服務器的IP
deny all;

reload nginx使配置生效即可

以后用slave的IP訪問該站點,不再需要驗證賬號密碼

關於nginx訪問控制(allow、deny等)的更多知識可以學習ngx_http_access_module

其他

關於圖表

圖中彩色的曲線,是取ping的延時的中位數畫出的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM