Lab: Nagios 網路監控主機架設
Server
OS: openSUSE 11.3
IP: 192.168.3.128
Linux Client: 192.168.3.130
Windows Client: 192.168.3.129
Part I: Nagios伺服器的建置
Server:
1. 安裝Nagios 套件
於server 上面使用 one-click install 安裝 Nagios 套件
Nagios
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios.ymp
Nagios Plugins
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins.ymp
Nagios Addons Extras
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins-extras.ymp
2.建立nagiosadmin 密碼
第一次建立密碼的時候 請加上 -c 選項,
新增第二個使用者, 則不需要加上 -c ( 會清空現有的密碼)
請於server 上面
#htpasswd2 -c /etc/nagios/htpasswd.users nagiosadmin
輸入密碼
再次輸入
3.建立nagiosuser 密碼
請於server 上面
#htpasswd2 /etc/nagios/htpasswd.users nagiosuser
輸入密碼
再次輸入
4.檢視並設定開機啟動nagios
#chkconfig nagios --list
#chkconfig nagios on
#chkconfig nagios --list
5.重新啟動.apache2 並設定開機啟動
#rcapache2 restart
#chkconfig apache2 --list
#chkconfig apache2 on
#chkconfig apache2 --list
6.啟動Nagios
#rcnagios start
7.測試Nagios 主機運作
開啟瀏覽器 於 URL上面輸入 http://127.0.0.1/nagios/
會出現需要授權的視窗
請輸入
使用者名稱 nagiosadmin
密碼 之前設定的密碼
這個時候應該會出現 Nagios 的相關畫面
如下圖所示
可以觀察相關服務狀況
此時會發現 HTTP 呈現警告狀態
原因為 Apache2 有啟動但是沒有預設的網頁
要解除這個情形可以 建立一個預設網頁
#vi /srv/www/htdocs/index.html
加入
<html> It works ! </html>
受監控的相關主機都會被紀錄在 /etc/nagios/nagios.cfg
Linux 的本機的監控設定也是設定於 /etc/nagios/nagios.cfg 內的
# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios/objects/localhost.cfg
故可以得知之後要監控的主機,
相關的設定檔都要放在 /etc/nagios/objects 資料夾內,
且於/etc/nagios/nagios.cfg 要有cfg_file=xxxx.cfg的設定
另外如果要檢視 Nagios 設定有沒有問題
可以使用
#nagios -v /etc/nagios/nagios.cfg
來觀察匯入那些設定檔, 以及有沒有問題
更多的文件也可以參考這邊
http://wiki.nagios.org/index.php/Main_Page
**修改通知 e-mail **
# vi /etc/nagios/objects/contacts.cfg
修改預設的 e-mail
define contact{
contact_name nagiosadmi ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email sakana@study-area.org ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
檢視 Nagios 設定有沒有問題
#nagios -v /etc/nagios/nagios.cfg
重新啟動 Nagios
#rcnagios restart
**以上 Nagios 伺服器建置完成**
Part II: Nagios 用戶端-- Linux 伺服器用戶端建置
1.安裝 nagios-nrpe套件
請於Client端啟動 YaST 軟體管理
#yast2 sw_single
並搜尋 nrpe 應該就會看到
nagios-nrpe 套件
nagios-plugins-nrpe 套件
→ 安裝 → 套用
( 或是考慮使用 #yast -i nagios-nrpe nagios-plugins-nrpe)
(根據官方的說法是 相較於 check_by_ssh 的方式比較省資源)
2.設定nagios-nrpe 套件
(另外最好去確認 /etc/services 有沒有 nrpe 5666/tcp # nagios nrpe 的設定)
#grep 5666 /etc/services
修改設定檔 允許 Nagios 伺服器連線
# vi /etc/nagios/nrpe.cfg
allowed_hosts=127.0.0.1,192.168.3.128
這邊要注意 127.0.0.1後面要加上 逗點 , 然後主機 IP 不能有空格
不然會出現沒有辦法建立 SSL HandShake
(這個部份可以解釋, 如果nrpe是使用 SystemV 的形式啟動後面都會出現不能建立SSL Handshake ,但是以Xinetd 就不會)
#rcnrpe start
4.測試nagios-nrpe
設定完成之後 可以於本機及遠端測試
請於Client 端
執行 check_nrpe 測試, 成功應該會出現 NRPE的版本
# /usr/lib/nagios/plugins/check_nrpe -H localhost
NRPE v2.12
*************************************************************
請於 Server 端
安裝 nagios-nrpe 套件
#yast -i nagios-nrpe
#yast -i nagios-plugins-nrpe
針對 nagios client 測試 nagios-nrpe 成功應該會出現 NRPE的版本
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130
NRPE v2.12
*************************************************************
接下來來測試本機相關資訊
請於 Client 端
執行相關測試
線上使用者人數
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users
平均負載
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_load
目前使用的process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_total_procs
Zombie Process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_zombie_procs
磁碟狀況
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_hda1
(這個部份command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
因為現在 IDE的硬碟以及使用 Kernel 2.6.20 以前的主機越來越少, 所以應該是對應到 /dev/sda1)
故可以修改 /etc/nagios/nrpe.cfg 內的 command 對應
(複製原來的 hda1 改為要監控的 Partition)
#vi /etc/nagios/nrpe.cfg
#command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_sda2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda2
command[check_sda3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda3
command[check_ssh]=/usr/lib/nagios/plugins/check_ssh localhost
command[check_smtp]=/usr/lib/nagios/plugins/check_smtp localhost
(針對想要加入的指令 可以參考 /usr/lib/nagios/plugins 目錄)
重新啟動 nrpe 服務( 修改完 /etc/nagios/nrpe.cfg 請記得重新啟動服務)
#rcnrpe restart
再次測試
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda2
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda3
另外於 Server端測試 相關的指令
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130 -c check_sda3
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130 -c check_sda3
Part III: 將linux 伺服器(Nagios Client)加入到 Nagios監控範圍
*************************************************************
請於Server上面
複製 windows 的設定檔 來當成 linux server的設定檔
# cp /etc/nagios/objects/windows.cfg /etc/nagios/objects/linux.cfg
修改 /etc/nagios/objects/linux.cfg 內的設定 加上主機名稱 及 修改為Client 的IP
#vi /etc/nagios/objects/linux.cfg
將原來的
define host{
use windows-server ; Inherit default values from a template
host_name winserver ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.1.2 ; IP address of the host
}
改為 (定義遠端Linux主機的名稱及IP)
define host{
use linux-server ; 這邊的名稱要參照 template 內的名稱,故不能亂取
host_name suseserver130 ; The name we're giving to this host 主機名稱(簡稱)
alias penSUSE Server2 ; A longer name associated with the host 主機名稱(長)
address 192.168.3.130 ; IP address of the host
}
接下來處理服務的部份, 因為所有要監控的服務都會認主機名稱
使用 :%s/winserver/suseserver130/gc 將 define service{ } 內的
host_name winserver
改為
host_name suseserver130
接下來定義群組
將原來的
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
}
改為
define hostgroup{
hostgroup_name suse-servers ; The name of the hostgroup 可自行定義的群組名稱(短)
alias SUSE Servers ; Long name of the group 可自行定義的群組名稱(長)
members suseserver130 ;群組內的主機, 故要把相關的host_name寫入
}
設定要監控的服務
將define service{ } 內的 service_description 及 check_command
修改(由check_nt 改為check_nrpe)
define service{
use generic-service
host_name suseserver130
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
改為(以線上使用者為例)
define service{
use generic-service
host_name suseserver130
service_description Online Users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name suseserver130
service_description Check /
check_command check_nrpe!check_sda2
}
define service{
use generic-service
host_name suseserver130
service_description Check /home
check_command check_nrpe!check_sda3
}
define service{
use generic-service
host_name suseserver130
service_description Check Load
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name suseserver130
service_description Total_Procs
check_command check_nrpe!check_total_procs
}
define service{
use generic-service
host_name suseserver130
service_description Check SSH
check_command check_nrpe!check_ssh
}
define service{
use generic-service
host_name suseserver130
service_description Check SMTP
check_command check_nrpe!check_smtp
}
請注意主機名稱需對應 define host { } 區段內的 host_name
整理一下對應關係
Server:
Client:
**設定 NRPE 指令對應**
修改 /etc/nagios/objects/commands.cfg 加入 check_nrpe 的指令對應
# vi /etc/nagios/objects/commands.cfg
加入
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
**設定 Nagios 載入 linux.cfg **
最後修改 /etc/nagios/nagios.cfg 內的設定 讓 linux.cfg 設定載入, 可以監控nagios Clinet
#vi /etc/nagios/nagios.cfg
加入
#Definitions for monitoring the Linux server
cfg_file=/etc/nagios/objects/linux.cfg
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
Part IV: Nagios 用戶端-- Windows 伺服器/ Windows PC用戶端建置
1.安裝 NSClient++ 軟體
請於 Window 伺服器 或是用戶端
開啟瀏覽器 連線至 NSClient++ 的專案網頁下載軟體
http://sourceforge.net/projects/nscplus/
依造機器的平台 x86 or x86_64 下載軟體 這邊以0.3.8-Win32 為例
http://downloads.sourceforge.net/project/nscplus/nscplus/NSClient%2B%2B%200.3.8/NSClient%2B%2B-0.3.8-Win32.msi?use_mirror=ncu&ts=1280992189&r=http://sourceforge.net/projects/nscplus/files/
出現安裝精靈
請按 Next
接下來 End-User License Agreement
請勾選 ' I accept the terms in the License Agreement' → Next
接下來Custom Setup
請按 Next
NSClient 會偵測是否有舊的設定檔
由於是新的安裝 請按 Next
這個部份是最重要的部份
Allow hosts: 請輸入 Nagios Server的IP (只允許這台機器連線)
再針對要載入的模組 勾選 → Next
開始安裝
點選 Install
安裝完成後
請勾選 Start service → Finish
Part V: 將Windows 伺服器/PC (Nagios Client)加入到 Nagios監控範圍
請於Server上面
複製 windows.cfg 給 Windows 伺服器或是PC 使用
這邊設定檔的名稱 假定為 windows129.cfg
(這邊個人處理方式目前以 IP命名)
# cp /etc/nagios/objects/windows.cfg /etc/nagios/objects/windows129.cfg
修改相關設定
# vi /etc/nagios/objects/windows129.cfg
Step1:
請將文件內 主機名稱(host_name) winserver 改為Windows 主機名稱
例如 winpc129
Step 2:
請將預設 IP 修改為 正確的 IP 位址
將
define host{
use windows-server ; 需參考template不可以自己亂取名稱
host_name winserver ; The name we're giving to this host 主機名稱
alias My Windows Server ; A longer name associated with the host 主機名稱(長)
address 192.168.1.2 ; IP address of the host 用戶端IP位址
}
改為
define host{
use windows-server ; Inherit default values from a template
host_name winpc129 ; The name we're giving to this host
alias Windows PC 192.168.3.129 ; A longer name associated with the host
address 192.168.3.129 ; IP address of the host
}
另外確認所有的 define service 內的設定 host_name都是新的主機名稱(winpc129)
define service{
use generic-service
host_name winpc129
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
另外一般的 PC 不會開 網頁伺服器 故註解 W3SVC
#define service{
# use generic-service
# host_name winpc129
# service_description W3SVC
# check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
# }
最後修改 /etc/nagios/nagios.cfg 內的設定
讓 windows129.cfg 設定載入, 可以監控nagios Clinet
#vi /etc/nagios/nagios.cfg
加入
cfg_file=/etc/nagios/objects/windows129.cfg
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
這樣第一份 Windows 機器的設定檔就設定完成
如果要加入第二台 Windows 機器設定
可以複製 原來的Windows 設定, 例如
# cp /etc/nagios/objects/windows129.cfg /etc/nagios/objects/windows131.cfg
但是要注意的是 主機群組只能定義一次, 也是說第二台PC 以後的 windowsxxx.cfg 內的主機群組定義
都要註解起來, 才不會發生錯誤!!
故請將 第二台的設定檔內的
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
}
註解起來
#define hostgroup{
# hostgroup_name windows-servers ; The name of the hostgroup
# alias Windows Servers ; Long name of the group
# }
以上 ^__^ 大功告成
相關畫面如下
Lab: 建立新的範本 windows-pc
在上面的練習, 是使用 windows-servers 的範本
但是如果要自訂 監控的時間或是 預設的群組
舉例來說 一般的 workstation 不會 24 小時開機, 只會在上班時間開機
所以接下來練習建立, windows-pc 的範本,針對一般的 PC, 指定 上班時間監控.
Nagios 範本設定檔 /etc/nagios/objects/templates.cfg
Nagios 時間範本設定檔 /etc/nagios/objects/timeperiods.cfg
修改 Nagios 的範本檔, 將 windows-servers 複製一份改為 windows-pc
並修改 檢查時間為 workhours
#vi /etc/nagios/objects/templates.cfg
# Windows host definition template - This is NOT a real host, just a template!
define host{
name windows-pc ; The name of this host template 範本的名稱
use generic-host ; Inherit default values from the generic-host template
check_period workhours ; 檢查的時間範圍
check_interval 5 ; Actively check the server every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive; Default command to check if servers are "alive"
notification_period workhours ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
hostgroups windows-pc ; window-pc 主機預設會歸屬的群組
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
workhours 的檢查時間為 早上 9:00 到 下午 5:00
可以 參考 /etc/nagios/objects/timeperiods.cfg
設定內容如下
# 'workhours' timeperiod definition
define timeperiod{
timeperiod_name workhours
alias Normal Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
修改剛剛 windows129 的設定檔
# vi /etc/nagios/objects/windows129.cfg
修改以下內容 定義群組名稱 windows-pc
define hostgroup{
hostgroup_name windows-pc ; The name of the hostgroup
alias Windows pc ; Long name of the group
}
修改以下內容 修改套用 windows-pc 的範本
define host{
use windows-pc ; Inherit default values from a template
host_name winpc129 ; The name we're giving to this host
alias Windows PC 192.168.3.129; A longer name associated with the host
address 192.168.3.129 ; IP address of the host
}
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
請重新觀察 Nagios
Lab: 透過 即時通訊 軟體來通知
以上預設的通知方式是透過 e-mail 來傳送通知
如果希望使用更即時的通知方式, 也可以透過 即時通訊軟體來通知管理者
這邊建議使用 Jabber 的方式來通知管理者 ( 也就是透過 Google Talk )
設定的方式可以參考
http://www.gridpp.ac.uk/wiki/Nagios_jabber_notification
但是要使用 Jabber ( Google talk's XMPP ) 的服務要安裝相關套件
這邊我們使用 zypper ( openSUSE Linux 的文字介面套件管理指令) 的方式來安裝套件
先查詢相關套件
# zypper search perl-Net*
正在載入套件庫資料...
讀取已安裝的套件...
S | 名稱 | 摘要 | 類型
--+------------------------------------+-----------------------------------------------------+-----
| perl-Net-CIDR-Lite | Perl extension for merging IPv4 or IPv6 CIDR addr-> | 套件
| perl-Net-DBus | Perl extension for the DBus message system | 套件
| perl-Net-DNS | Perl interface to the DNS resolver | 套件
| perl-Net-DNS-Resolver-Programmable | Programmable DNS resolver class for offline emula-> | 套件
i | perl-Net-Daemon | Net::Daemon - Perl extension for portable daemons | 套件
| perl-Net-HTTPServer | A simple perl Http Server | 套件
| perl-Net-IP | allow easy manipulation of IPv4 and IPv6 addresses | 套件
| perl-Net-IPv4Addr | Net::IPv4Addr Module for Perl | 套件
| perl-Net-Ident | Lookup the username on the remote end of a TCP/IP-> | 套件
| perl-Net-Jabber | Jabber Perl Library | 套件
| perl-Net-Libproxy | Perl bindings for libproxy | 套件
| perl-Net-Netmask | Parse, manipulate and lookup IP network blocks | 套件
i | perl-Net-SNMP | Net::SNMP Perl Module | 套件
| perl-Net-SSLGlue | Add/extend SSL support for common perl modules | 套件
| perl-Net-SSLeay | Net::SSLeay Perl Module | 套件
| perl-Net-Server | Net::Server - Extensible, general Perl server eng-> | 套件
| perl-Net-Telnet | Net::Telnet - interact with TELNET port or other -> | 套件
| perl-Net-Whois-RIPE | Perl module for implementation of RIPE Whois | 套件
| perl-Net-XMPP | Collection of Perl Modules for Accessing the XMPP-> | 套件
| perl-Net-ext | Network extension modules for Perl | 套件
| perl-NetAddr-IP | Manages IPv4 and IPv6 addresses and subnets | 套件
i | perl-NetxAP | Interface to the protocol family IMAP, IMSP, ACAP-> | 套件
這邊我們需要 perl-Net-Jabber 以及 perl-Net-XMPP 兩個套件
# zypper install perl-Net-Jabber perl-Net-XMPP
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...
將會安裝下列新的套件:
perl-Authen-SASL perl-IO-Socket-SSL perl-Net-Jabber perl-Net-SSLeay perl-Net-XMPP
perl-Unicode-String perl-XML-Stream
7 新套件將被安裝.
全部下載大小: 702.0 KiB。 完成操作後,將增加 2.8 MiB 的使用。
要繼續嗎? [y/n/?] (y): Y
將網頁上的 程式儲存為 notify_via_jabber 並修改自己的 google 帳號以及google密碼
# vi /usr/local/bin/notify_via_jabber
測試 一下傳送訊息
#perl /usr/local/bin/notify_via_jabber 自己的google帳號 "testmesg"
接下來修改相關設定
將 notify-by-jabber 以及 host-notify-by-jabber 加入到/etc/nagios/objects/commands.cfg
# vi /etc/nagios/objects/commands.cfg
加入 請複製參考網頁上面的設定
( 請注意 -Info: 需在同一行, 複製貼上會斷行, 另外 $SERVICEDESC$ 也 會中斷)
# 'host-notify-by-jabber' command definition
define command{ command_name host-notify-by-jabber
command_line /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "Host '$HOSTALIAS$' is $HOSTSTATE$ - Info: $HOSTOUTPUT$"
} # 'notify-by-jabber' command definition define command{ command_name notify-by-jabber
command_line /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$ $LONGDATETIME$"
}
由上面的指令可以看出 notify_via_jabber 後面傳送的 Google 帳號是由 $CONTACTPAGER$ 來指定
所以我們要新增 聯絡人的 PAGER, 也就是 google 帳號
# vi /etc/nagios/objects/contacts.cfg
請加入 pager 的設定, 就是要傳送的 google 帳號
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email sakana@study-area.org
pager 要傳送的google帳號
}
故我們接下來修改範本設定檔 /etc/nagios/objects/templetes.cfg
# vi /etc/nagios/objects/templates.cfg
修改 generic-contact 內容, 加入 jabber 的設定
define contact{
name generic-contact ; The name of this contact template
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service statesents
host_notification_options d,u,r,f,s ; send notifications for all host states
service_notification_commands notify-service-by-email,notify-by-jabber ; 加入設定
host_notification_commands notify-host-by-email,host-notify-by-jabber ; 加入設定
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
Server
OS: openSUSE 11.3
IP: 192.168.3.128
Linux Client: 192.168.3.130
Windows Client: 192.168.3.129
Part I: Nagios伺服器的建置
Server:
1. 安裝Nagios 套件
於server 上面使用 one-click install 安裝 Nagios 套件
Nagios
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios.ymp
Nagios Plugins
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins.ymp
Nagios Addons Extras
http://software.opensuse.org/ymp/openSUSE:11.3/standard/nagios-plugins-extras.ymp
2.建立nagiosadmin 密碼
第一次建立密碼的時候 請加上 -c 選項,
新增第二個使用者, 則不需要加上 -c ( 會清空現有的密碼)
請於server 上面
#htpasswd2 -c /etc/nagios/htpasswd.users nagiosadmin
輸入密碼
再次輸入
3.建立nagiosuser 密碼
請於server 上面
#htpasswd2 /etc/nagios/htpasswd.users nagiosuser
輸入密碼
再次輸入
4.檢視並設定開機啟動nagios
#chkconfig nagios --list
#chkconfig nagios on
#chkconfig nagios --list
5.重新啟動.apache2 並設定開機啟動
#rcapache2 restart
#chkconfig apache2 --list
#chkconfig apache2 on
#chkconfig apache2 --list
6.啟動Nagios
#rcnagios start
7.測試Nagios 主機運作
開啟瀏覽器 於 URL上面輸入 http://127.0.0.1/nagios/
會出現需要授權的視窗
請輸入
使用者名稱 nagiosadmin
密碼 之前設定的密碼
這個時候應該會出現 Nagios 的相關畫面
如下圖所示
可以觀察相關服務狀況
此時會發現 HTTP 呈現警告狀態
原因為 Apache2 有啟動但是沒有預設的網頁
要解除這個情形可以 建立一個預設網頁
#vi /srv/www/htdocs/index.html
加入
<html> It works ! </html>
受監控的相關主機都會被紀錄在 /etc/nagios/nagios.cfg
Linux 的本機的監控設定也是設定於 /etc/nagios/nagios.cfg 內的
# Definitions for monitoring the local (Linux) host
cfg_file=/etc/nagios/objects/localhost.cfg
故可以得知之後要監控的主機,
相關的設定檔都要放在 /etc/nagios/objects 資料夾內,
且於/etc/nagios/nagios.cfg 要有cfg_file=xxxx.cfg的設定
另外如果要檢視 Nagios 設定有沒有問題
可以使用
#nagios -v /etc/nagios/nagios.cfg
來觀察匯入那些設定檔, 以及有沒有問題
更多的文件也可以參考這邊
http://wiki.nagios.org/index.php/Main_Page
**修改通知 e-mail **
# vi /etc/nagios/objects/contacts.cfg
修改預設的 e-mail
define contact{
contact_name nagiosadmi ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email sakana@study-area.org ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}
檢視 Nagios 設定有沒有問題
#nagios -v /etc/nagios/nagios.cfg
重新啟動 Nagios
#rcnagios restart
**以上 Nagios 伺服器建置完成**
Part II: Nagios 用戶端-- Linux 伺服器用戶端建置
1.安裝 nagios-nrpe套件
請於Client端啟動 YaST 軟體管理
#yast2 sw_single
並搜尋 nrpe 應該就會看到
nagios-nrpe 套件
nagios-plugins-nrpe 套件
→ 安裝 → 套用
( 或是考慮使用 #yast -i nagios-nrpe nagios-plugins-nrpe)
(根據官方的說法是 相較於 check_by_ssh 的方式比較省資源)
2.設定nagios-nrpe 套件
(另外最好去確認 /etc/services 有沒有 nrpe 5666/tcp # nagios nrpe 的設定)
#grep 5666 /etc/services
修改設定檔 允許 Nagios 伺服器連線
# vi /etc/nagios/nrpe.cfg
allowed_hosts=127.0.0.1,192.168.3.128
這邊要注意 127.0.0.1後面要加上 逗點 , 然後主機 IP 不能有空格
不然會出現沒有辦法建立 SSL HandShake
(這個部份可以解釋, 如果nrpe是使用 SystemV 的形式啟動後面都會出現不能建立SSL Handshake ,但是以Xinetd 就不會)
#rcnrpe start
4.測試nagios-nrpe
設定完成之後 可以於本機及遠端測試
請於Client 端
執行 check_nrpe 測試, 成功應該會出現 NRPE的版本
# /usr/lib/nagios/plugins/check_nrpe -H localhost
NRPE v2.12
*************************************************************
請於 Server 端
安裝 nagios-nrpe 套件
#yast -i nagios-nrpe
#yast -i nagios-plugins-nrpe
針對 nagios client 測試 nagios-nrpe 成功應該會出現 NRPE的版本
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130
NRPE v2.12
*************************************************************
接下來來測試本機相關資訊
請於 Client 端
執行相關測試
線上使用者人數
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_users
平均負載
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_load
目前使用的process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_total_procs
Zombie Process
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_zombie_procs
磁碟狀況
#/usr/lib/nagios/plugins/check_nrpe -H localhost -c check_hda1
(這個部份command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
因為現在 IDE的硬碟以及使用 Kernel 2.6.20 以前的主機越來越少, 所以應該是對應到 /dev/sda1)
故可以修改 /etc/nagios/nrpe.cfg 內的 command 對應
(複製原來的 hda1 改為要監控的 Partition)
#vi /etc/nagios/nrpe.cfg
#command[check_hda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/hda1
command[check_sda2]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda2
command[check_sda3]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda3
command[check_ssh]=/usr/lib/nagios/plugins/check_ssh localhost
command[check_smtp]=/usr/lib/nagios/plugins/check_smtp localhost
(針對想要加入的指令 可以參考 /usr/lib/nagios/plugins 目錄)
重新啟動 nrpe 服務( 修改完 /etc/nagios/nrpe.cfg 請記得重新啟動服務)
#rcnrpe restart
再次測試
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda2
# /usr/lib/nagios/plugins/check_nrpe -H localhost -c check_sda3
另外於 Server端測試 相關的指令
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130 -c check_sda3
#/usr/lib/nagios/plugins/check_nrpe -H 192.168.3.130 -c check_sda3
Part III: 將linux 伺服器(Nagios Client)加入到 Nagios監控範圍
*************************************************************
請於Server上面
複製 windows 的設定檔 來當成 linux server的設定檔
# cp /etc/nagios/objects/windows.cfg /etc/nagios/objects/linux.cfg
修改 /etc/nagios/objects/linux.cfg 內的設定 加上主機名稱 及 修改為Client 的IP
#vi /etc/nagios/objects/linux.cfg
將原來的
define host{
use windows-server ; Inherit default values from a template
host_name winserver ; The name we're giving to this host
alias My Windows Server ; A longer name associated with the host
address 192.168.1.2 ; IP address of the host
}
改為 (定義遠端Linux主機的名稱及IP)
define host{
use linux-server ; 這邊的名稱要參照 template 內的名稱,故不能亂取
host_name suseserver130 ; The name we're giving to this host 主機名稱(簡稱)
alias penSUSE Server2 ; A longer name associated with the host 主機名稱(長)
address 192.168.3.130 ; IP address of the host
}
接下來處理服務的部份, 因為所有要監控的服務都會認主機名稱
使用 :%s/winserver/suseserver130/gc 將 define service{ } 內的
host_name winserver
改為
host_name suseserver130
接下來定義群組
將原來的
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
}
改為
define hostgroup{
hostgroup_name suse-servers ; The name of the hostgroup 可自行定義的群組名稱(短)
alias SUSE Servers ; Long name of the group 可自行定義的群組名稱(長)
members suseserver130 ;群組內的主機, 故要把相關的host_name寫入
}
設定要監控的服務
將define service{ } 內的 service_description 及 check_command
修改(由check_nt 改為check_nrpe)
define service{
use generic-service
host_name suseserver130
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
改為(以線上使用者為例)
define service{
use generic-service
host_name suseserver130
service_description Online Users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name suseserver130
service_description Check /
check_command check_nrpe!check_sda2
}
define service{
use generic-service
host_name suseserver130
service_description Check /home
check_command check_nrpe!check_sda3
}
define service{
use generic-service
host_name suseserver130
service_description Check Load
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name suseserver130
service_description Total_Procs
check_command check_nrpe!check_total_procs
}
define service{
use generic-service
host_name suseserver130
service_description Check SSH
check_command check_nrpe!check_ssh
}
define service{
use generic-service
host_name suseserver130
service_description Check SMTP
check_command check_nrpe!check_smtp
}
請注意主機名稱需對應 define host { } 區段內的 host_name
整理一下對應關係
Server:
- /etc/nagios/object/linux.cfg
Client:
- /etc/nagios/nrpe.cfg
**設定 NRPE 指令對應**
修改 /etc/nagios/objects/commands.cfg 加入 check_nrpe 的指令對應
# vi /etc/nagios/objects/commands.cfg
加入
# 'check_nrpe' command definition
define command{
command_name check_nrpe
command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}
**設定 Nagios 載入 linux.cfg **
最後修改 /etc/nagios/nagios.cfg 內的設定 讓 linux.cfg 設定載入, 可以監控nagios Clinet
#vi /etc/nagios/nagios.cfg
加入
#Definitions for monitoring the Linux server
cfg_file=/etc/nagios/objects/linux.cfg
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
Part IV: Nagios 用戶端-- Windows 伺服器/ Windows PC用戶端建置
1.安裝 NSClient++ 軟體
請於 Window 伺服器 或是用戶端
開啟瀏覽器 連線至 NSClient++ 的專案網頁下載軟體
http://sourceforge.net/projects/nscplus/
依造機器的平台 x86 or x86_64 下載軟體 這邊以0.3.8-Win32 為例
http://downloads.sourceforge.net/project/nscplus/nscplus/NSClient%2B%2B%200.3.8/NSClient%2B%2B-0.3.8-Win32.msi?use_mirror=ncu&ts=1280992189&r=http://sourceforge.net/projects/nscplus/files/
出現安裝精靈
請按 Next
接下來 End-User License Agreement
請勾選 ' I accept the terms in the License Agreement' → Next
接下來Custom Setup
請按 Next
NSClient 會偵測是否有舊的設定檔
由於是新的安裝 請按 Next
這個部份是最重要的部份
Allow hosts: 請輸入 Nagios Server的IP (只允許這台機器連線)
再針對要載入的模組 勾選 → Next
開始安裝
點選 Install
安裝完成後
請勾選 Start service → Finish
Part V: 將Windows 伺服器/PC (Nagios Client)加入到 Nagios監控範圍
請於Server上面
複製 windows.cfg 給 Windows 伺服器或是PC 使用
這邊設定檔的名稱 假定為 windows129.cfg
(這邊個人處理方式目前以 IP命名)
# cp /etc/nagios/objects/windows.cfg /etc/nagios/objects/windows129.cfg
修改相關設定
# vi /etc/nagios/objects/windows129.cfg
Step1:
請將文件內 主機名稱(host_name) winserver 改為Windows 主機名稱
例如 winpc129
- 可以利用 vi 的取代功能 :%s/winserver/winpc129/gc
Step 2:
請將預設 IP 修改為 正確的 IP 位址
將
define host{
use windows-server ; 需參考template不可以自己亂取名稱
host_name winserver ; The name we're giving to this host 主機名稱
alias My Windows Server ; A longer name associated with the host 主機名稱(長)
address 192.168.1.2 ; IP address of the host 用戶端IP位址
}
改為
define host{
use windows-server ; Inherit default values from a template
host_name winpc129 ; The name we're giving to this host
alias Windows PC 192.168.3.129 ; A longer name associated with the host
address 192.168.3.129 ; IP address of the host
}
另外確認所有的 define service 內的設定 host_name都是新的主機名稱(winpc129)
define service{
use generic-service
host_name winpc129
service_description NSClient++ Version
check_command check_nt!CLIENTVERSION
}
另外一般的 PC 不會開 網頁伺服器 故註解 W3SVC
#define service{
# use generic-service
# host_name winpc129
# service_description W3SVC
# check_command check_nt!SERVICESTATE!-d SHOWALL -l W3SVC
# }
最後修改 /etc/nagios/nagios.cfg 內的設定
讓 windows129.cfg 設定載入, 可以監控nagios Clinet
#vi /etc/nagios/nagios.cfg
加入
cfg_file=/etc/nagios/objects/windows129.cfg
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
這樣第一份 Windows 機器的設定檔就設定完成
如果要加入第二台 Windows 機器設定
可以複製 原來的Windows 設定, 例如
# cp /etc/nagios/objects/windows129.cfg /etc/nagios/objects/windows131.cfg
但是要注意的是 主機群組只能定義一次, 也是說第二台PC 以後的 windowsxxx.cfg 內的主機群組定義
都要註解起來, 才不會發生錯誤!!
故請將 第二台的設定檔內的
define hostgroup{
hostgroup_name windows-servers ; The name of the hostgroup
alias Windows Servers ; Long name of the group
}
註解起來
#define hostgroup{
# hostgroup_name windows-servers ; The name of the hostgroup
# alias Windows Servers ; Long name of the group
# }
以上 ^__^ 大功告成
相關畫面如下
Lab: 建立新的範本 windows-pc
在上面的練習, 是使用 windows-servers 的範本
但是如果要自訂 監控的時間或是 預設的群組
舉例來說 一般的 workstation 不會 24 小時開機, 只會在上班時間開機
所以接下來練習建立, windows-pc 的範本,針對一般的 PC, 指定 上班時間監控.
Nagios 範本設定檔 /etc/nagios/objects/templates.cfg
Nagios 時間範本設定檔 /etc/nagios/objects/timeperiods.cfg
修改 Nagios 的範本檔, 將 windows-servers 複製一份改為 windows-pc
並修改 檢查時間為 workhours
#vi /etc/nagios/objects/templates.cfg
# Windows host definition template - This is NOT a real host, just a template!
define host{
name windows-pc ; The name of this host template 範本的名稱
use generic-host ; Inherit default values from the generic-host template
check_period workhours ; 檢查的時間範圍
check_interval 5 ; Actively check the server every 5 minutes
retry_interval 1 ; Schedule host check retries at 1 minute intervals
max_check_attempts 10 ; Check each server 10 times (max)
check_command check-host-alive; Default command to check if servers are "alive"
notification_period workhours ; Send notification out at any time - day or night
notification_interval 30 ; Resend notifications every 30 minutes
notification_options d,r ; Only send notifications for specific host states
contact_groups admins ; Notifications get sent to the admins by default
hostgroups windows-pc ; window-pc 主機預設會歸屬的群組
register 0 ; DONT REGISTER THIS - ITS JUST A TEMPLATE
}
workhours 的檢查時間為 早上 9:00 到 下午 5:00
可以 參考 /etc/nagios/objects/timeperiods.cfg
設定內容如下
# 'workhours' timeperiod definition
define timeperiod{
timeperiod_name workhours
alias Normal Work Hours
monday 09:00-17:00
tuesday 09:00-17:00
wednesday 09:00-17:00
thursday 09:00-17:00
friday 09:00-17:00
}
修改剛剛 windows129 的設定檔
# vi /etc/nagios/objects/windows129.cfg
修改以下內容 定義群組名稱 windows-pc
define hostgroup{
hostgroup_name windows-pc ; The name of the hostgroup
alias Windows pc ; Long name of the group
}
修改以下內容 修改套用 windows-pc 的範本
define host{
use windows-pc ; Inherit default values from a template
host_name winpc129 ; The name we're giving to this host
alias Windows PC 192.168.3.129; A longer name associated with the host
address 192.168.3.129 ; IP address of the host
}
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
(註: 重新啟動之後不會馬上偵測, 會過幾分鐘才偵測)
請重新觀察 Nagios
Lab: 透過 即時通訊 軟體來通知
以上預設的通知方式是透過 e-mail 來傳送通知
如果希望使用更即時的通知方式, 也可以透過 即時通訊軟體來通知管理者
這邊建議使用 Jabber 的方式來通知管理者 ( 也就是透過 Google Talk )
設定的方式可以參考
http://www.gridpp.ac.uk/wiki/Nagios_jabber_notification
但是要使用 Jabber ( Google talk's XMPP ) 的服務要安裝相關套件
這邊我們使用 zypper ( openSUSE Linux 的文字介面套件管理指令) 的方式來安裝套件
先查詢相關套件
# zypper search perl-Net*
正在載入套件庫資料...
讀取已安裝的套件...
S | 名稱 | 摘要 | 類型
--+------------------------------------+-----------------------------------------------------+-----
| perl-Net-CIDR-Lite | Perl extension for merging IPv4 or IPv6 CIDR addr-> | 套件
| perl-Net-DBus | Perl extension for the DBus message system | 套件
| perl-Net-DNS | Perl interface to the DNS resolver | 套件
| perl-Net-DNS-Resolver-Programmable | Programmable DNS resolver class for offline emula-> | 套件
i | perl-Net-Daemon | Net::Daemon - Perl extension for portable daemons | 套件
| perl-Net-HTTPServer | A simple perl Http Server | 套件
| perl-Net-IP | allow easy manipulation of IPv4 and IPv6 addresses | 套件
| perl-Net-IPv4Addr | Net::IPv4Addr Module for Perl | 套件
| perl-Net-Ident | Lookup the username on the remote end of a TCP/IP-> | 套件
| perl-Net-Jabber | Jabber Perl Library | 套件
| perl-Net-Libproxy | Perl bindings for libproxy | 套件
| perl-Net-Netmask | Parse, manipulate and lookup IP network blocks | 套件
i | perl-Net-SNMP | Net::SNMP Perl Module | 套件
| perl-Net-SSLGlue | Add/extend SSL support for common perl modules | 套件
| perl-Net-SSLeay | Net::SSLeay Perl Module | 套件
| perl-Net-Server | Net::Server - Extensible, general Perl server eng-> | 套件
| perl-Net-Telnet | Net::Telnet - interact with TELNET port or other -> | 套件
| perl-Net-Whois-RIPE | Perl module for implementation of RIPE Whois | 套件
| perl-Net-XMPP | Collection of Perl Modules for Accessing the XMPP-> | 套件
| perl-Net-ext | Network extension modules for Perl | 套件
| perl-NetAddr-IP | Manages IPv4 and IPv6 addresses and subnets | 套件
i | perl-NetxAP | Interface to the protocol family IMAP, IMSP, ACAP-> | 套件
這邊我們需要 perl-Net-Jabber 以及 perl-Net-XMPP 兩個套件
# zypper install perl-Net-Jabber perl-Net-XMPP
正在載入套件庫資料...
讀取已安裝的套件...
正在解決套件相依性...
將會安裝下列新的套件:
perl-Authen-SASL perl-IO-Socket-SSL perl-Net-Jabber perl-Net-SSLeay perl-Net-XMPP
perl-Unicode-String perl-XML-Stream
7 新套件將被安裝.
全部下載大小: 702.0 KiB。 完成操作後,將增加 2.8 MiB 的使用。
要繼續嗎? [y/n/?] (y): Y
將網頁上的 程式儲存為 notify_via_jabber 並修改自己的 google 帳號以及google密碼
# vi /usr/local/bin/notify_via_jabber
#!/usr/bin/perl -w # # script for nagios notify via Jabber / Google Talk Instant Messaging # using XMPP protocol and SASL PLAIN authentication. # # author: Andrew Elwell <A.Elwell@physics.gla.ac.uk> # based on work by Thus0 <Thus0@free.fr> and David Cox # # released under the terms of the GNU General Public License v2 # Copyright 2007 Andrew Elwell. use strict; use Net::XMPP; ## Configuration my $username = "填入你的google.username"; my $password = "填入你的google.password"; my $resource = "nagios"; ## End of configuration my $len = scalar @ARGV; if ($len ne 2) { die "Usage...\n $0 [jabberid] [message]\n"; } my @field=split(/,/,$ARGV[0]); #------------------------------------ # Google Talk & Jabber parameters : my $hostname = 'talk.google.com'; my $port = 5222; my $componentname = 'gmail.com'; my $connectiontype = 'tcpip'; my $tls = 1; #------------------------------------ my $Connection = new Net::XMPP::Client(); # Connect to talk.google.com my $status = $Connection->Connect( hostname => $hostname, port => $port, componentname => $componentname, connectiontype => $connectiontype, tls => $tls); if (!(defined($status))) { print "ERROR: XMPP connection failed.\n"; print " ($!)\n"; exit(0); } # Change hostname my $sid = $Connection->{SESSION}->{id}; $Connection->{STREAM}->{SIDS}->{$sid}->{hostname} = $componentname; # Authenticate my @result = $Connection->AuthSend( username => $username, password => $password, resource => $resource); if ($result[0] ne "ok") { print "ERROR: Authorization failed: $result[0] - $result[1]\n"; exit(0); } # Send messages foreach ( @field ) { $Connection->MessageSend( to => "$_\@$componentname", resource => $resource, subject => "Notification", type => "chat", body => $ARGV[1]); }
測試 一下傳送訊息
#perl /usr/local/bin/notify_via_jabber 自己的google帳號 "testmesg"
接下來修改相關設定
將 notify-by-jabber 以及 host-notify-by-jabber 加入到/etc/nagios/objects/commands.cfg
# vi /etc/nagios/objects/commands.cfg
加入 請複製參考網頁上面的設定
( 請注意 -Info: 需在同一行, 複製貼上會斷行, 另外 $SERVICEDESC$ 也 會中斷)
# 'host-notify-by-jabber' command definition
define command{ command_name host-notify-by-jabber
command_line /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "Host '$HOSTALIAS$' is $HOSTSTATE$ - Info: $HOSTOUTPUT$"
} # 'notify-by-jabber' command definition define command{ command_name notify-by-jabber
command_line /usr/local/bin/notify_via_jabber $CONTACTPAGER$ "$NOTIFICATIONTYPE$ $HOSTNAME$ $SERVICEDESC$ $SERVICESTATE$ $SERVICEOUTPUT$ $LONGDATETIME$"
}
由上面的指令可以看出 notify_via_jabber 後面傳送的 Google 帳號是由 $CONTACTPAGER$ 來指定
所以我們要新增 聯絡人的 PAGER, 也就是 google 帳號
# vi /etc/nagios/objects/contacts.cfg
請加入 pager 的設定, 就是要傳送的 google 帳號
define contact{
contact_name nagiosadmin ; Short name of user
use generic-contact ; Inherit default values from generic-contact template (defined above)
alias Nagios Admin ; Full name of user
email sakana@study-area.org
pager 要傳送的google帳號
}
故我們接下來修改範本設定檔 /etc/nagios/objects/templetes.cfg
# vi /etc/nagios/objects/templates.cfg
修改 generic-contact 內容, 加入 jabber 的設定
define contact{
name generic-contact ; The name of this contact template
service_notification_period 24x7 ; service notifications can be sent anytime
host_notification_period 24x7 ; host notifications can be sent anytime
service_notification_options w,u,c,r,f,s ; send notifications for all service statesents
host_notification_options d,u,r,f,s ; send notifications for all host states
service_notification_commands notify-service-by-email,notify-by-jabber ; 加入設定
host_notification_commands notify-host-by-email,host-notify-by-jabber ; 加入設定
register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!
}
確認設定檔是否無誤
# nagios -v /etc/nagios/nagios.cfg
重新啟動 nagios 使其生效
#rcnagios restart
2 則留言:
您好,我有關於Nagios的問題想請教您,不知道是否可以聯絡您呢?
如果可以,這是我的E-mail:Support@twnfi.com
因為實在不知道該如何聯絡您所以才在這裡留言,如果造成您的困擾深感抱歉。
請問我要查詢各server 目前監控狀況跟設定的條件現狀, 要去那裡做查詢?有指令能叫出來嗎?感謝
張貼留言