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
可惜源站在國外,下載經常會失敗。
下載失敗的話有兩種比較方便的模塊安裝方法
- 修改cpan源
vim /usr/share/perl5/CPAN/Config.pm
'urllist' => [],
->'urllist' => [q[http://mirrors.163.com/cpan/]],
然后手動通過cpan安裝模塊 - 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節點名稱}
兩點說明
- 只有當slave節點在某些目標的檢測配置中被使用,slave端才能成功連上master並進行檢測工作
- 可以把一個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的延時的中位數畫出的