配置ganglia 監控 hadoop 節點
作業系統: CentOS
安裝
最方便的yum因為版本問題用不了
所以就用原始碼安裝咯,安裝之前,有一些需要前置依賴需要安裝的
rpm -q gcc glibc glibc-common rrdtool rrdtool-devel apr apr-devel expat expat-devel pcre pcre-devel dejavu-lgc-sans-mono-fonts dejavu-sans-mono-fonts
查一下,如果沒有就自動安裝一下
yum -y install 包名(支援*) :自動選擇y,全自動
yum install 包名(支援*) :手動選擇y or n
yum remove 包名(不支援*)
rpm -ivh 包名(支援*):安裝rpm包
rpm -e 包名(不支援*):解除安裝rpm包
#建立rrd資料庫
mkdir -p /var/lib/ganglia/rrds/
chown nobody:nobody -R /var/lib/ganglia/rrds/
除了上面的,還有個confuse-2.7,需要原始碼安裝
wget http://savannah.nongnu.org/download/confuse/confuse-2.7.tar.gz
tar -zxvf confuse-2.7.tar.gz
cd confuse-2.7.tar.gz
./configure CFLAGS=-fPIC --disable-nls
make && make install
依賴包裝好了,開始裝ganglia
ganglia分為gmond,gmetad,Ganglia-web
前者是客戶端用的, 後兩個是服務端用的
服務端-gmetad
注意需要加–with-gmetad
#安裝
wget http://downloads.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.7.1/ganglia-3.7.1.tar.gz
tar -zxvf ganglia-3.7.1.tar.gz
cd ganglia-3.7.1
./configure --with-gmetad --with-librrd=/usr/lib64/ --prefix=/usr/local/ganglia --enable-gexec --enable-status
make && make install
cp ./gmetad/gmetad.init /etc/init.d/gmetad
ip route add 239.2.11.71 dev em1
vi /etc/init.d/gmetad
根據安裝路徑修改/etc/init.d/gmetad
METAD=/usr/ganglia/sbin/gmetad
改為
METAD=/usr/local/ganglia/sbin/gmetad
之後修改配置檔案
vi /usr/local/ganglia/etc/gmetad.conf
rrd路徑與之前建立的路徑相同
data_source "hadoop" IP:埠
gridname "hadoop"
rrd_rootdir "/usr/local/ganglia/rrds"
需要注意的是,data_source指的是一個監控組,監控內網內gmond程序埠為設定埠的一組伺服器
修改service
vim /usr/lib/systemd/system/gmetad.service
將service修改為如下
[Unit]
Description=Ganglia Meta Daemon
After=network.target
[Service]
Type=forking
PIDFile=/var/run/gmetad.pid
ExecStart=/usr/local/ganglia/sbin/gmetad -c /usr/local/ganglia/etc/gmetad.conf --pid-file=/var/run/gmetad.pid
EnvironmentFile=-/usr/local/ganglia/sbin/gmetad
之後重新載入service
systemctl daemon-reload
service gmetad start
檢視狀態
service gmetad status
檢視獲取的監控資訊
telnet localhost 8651
遇到過的問題如下:
1.Unable to create tcp_accept_channel
這裡是因為志強未成功啟動,導致設定的tcp埠被佔用,而重新啟動時,並沒有釋放該埠,所以重新啟動發現該埠被佔用,啟動失敗
解決方法很簡單,獲取阻塞埠程序
netstat -nlp |grep 8649
ps -ef | grep gmated
kill -9 pid
kill程序之後重新啟動即可
2.找不到pid檔案,這個是因為service檔案中的路徑與實際不符合,而且編譯過程也沒有產生相應的pid檔案,依照上面的改動即可解決
服務端-ganglia-web
接下來安裝web相關的
php和apache(因為web端是php寫的,所以需要安裝php)
需要注意的是apache叫httpd
yum install -y php
yum install -y httpd
#設定Apache服務的啟動級別
chkconfig --levels 235 httpd on
#啟動
/etc/init.d/httpd start
#或者
service httpd start
修改ganglia-web Makefile
##########################################################
# User configurables:
##########################################################
# Location where gweb should be installed to (excluding conf, dwoo dirs).
#GDESTDIR = /usr/share/ganglia-webfrontend
GDESTDIR = /var/www/html
# Location where default apache configuration should be installed to.
GCONFDIR = /etc/ganglia-web
# Gweb statedir (where conf dir and Dwoo templates dir are stored)
GWEB_STATEDIR = /var/lib/ganglia-web
# Gmetad rootdir (parent location of rrd folder)
GMETAD_ROOTDIR = /var/lib/ganglia
APACHE_USER = apache
#APACHE_USER = www-data
##########################################################
注意:GDESTDIR 和 APACHE_USER 要與APACHE的配置檔案(/etc/httpd/conf/httpd.conf)中的 DocumentRoot 、 apache保持一致
之後直接make install
修改配置:
vi /var/www/html/conf_default.php
看看各個路徑有沒有不對的地方,修改了makefile應該是沒有問題
這時候ganglia-web就可以用了,可以通過瀏覽器開啟(IP地址)
這時候如果遇到這樣的問題
fsockopen error: Permission denied
說明,是防火牆的問題
需要關閉SELinux
檢視SELinux狀態:sestatus
關閉SELinux:setenforce 0
etenforce 這個指令可以即時切換 Enforcing 及 Permissive 這兩個模式,但這些改動在系統重新開機時不會被保留。
要想在下次開機後生效,需要在 /etc/selinux/config 內修改 SELINUX= 這一行為 enforcing。
這樣就可以開啟ganglia監控主頁啦
客戶端-gmond
wget http://downloads.sourceforge.net/project/ganglia/ganglia%20monitoring%20core/3.7.1/ganglia-3.7.1.tar.gz
tar -zxvf ganglia-3.7.1.tar.gz
cd ganglia-3.7.1
./configure --enable-gexec
make && make install
cp ./gmond/gmond.init /etc/init.d/gmond
ip route add 239.2.11.71 dev em1
vi /etc/init.d/gmond
根據安裝路徑修改/etc/init.d/gmond
METAD=/usr/ganglia/sbin/gmond
改為
METAD=/usr/local/sbin/gmond
因為編譯的時候沒用字首,所以跟上面有些不一樣
之後修改service
vim /usr/lib/systemd/system/gmond.service
[Unit]
Description=Ganglia Monitor Daemon
After=network.target
[Service]
Type=forking
PIDFile=/var/run/gmond.pid
ExecStart=/usr/local/sbin/gmond -c /etc/gmond.conf --pid-file=/var/run/gmond.pid
[Install]
WantedBy=multi-user.target
由於安裝過程中沒有配置檔案 gmond.conf
所以需要用gmond生成一個配置檔案
/usr/local/sbin/gmond -t |tee /etc/gmond.conf
修改配置檔案中的
cluster {
name = "hadoop"
owner = "nobody"
latlong = "unspecified"
url = "unspecified"
}
主要需要注意的是name需要和gmetad中的data_source中一致
還有就是檔案中的埠號需要gmetad中的data_source中一致
udp_send_channel {
#bind_hostname = yes # Highly recommended, soon to be default.
# This option tells gmond to use a source address
# that resolves to the machine's hostname. Without
# this, the metrics may appear to come from any
# interface and the DNS names associated with
# those IPs will be used to create the RRDs.
mcast_join = 239.2.11.71
# host= 10.24.84.200
port = 8649 //look here
ttl = 1
}
/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {
mcast_join = 239.2.11.71
# host=10.24.84.200
port = 8649 //look here
bind = 239.2.11.71
retry_bind = true
# Size of the UDP buffer. If you are handling lots of metrics you really
# should bump it up to e.g. 10MB or even higher.
# buffer = 10485760
}
/* You can specify as many tcp_accept_channels as you like to share
an xml description of the state of the cluster */
tcp_accept_channel {
port = 8649 //look here
# If you want to gzip XML output
gzip_output = no
}
這樣就配置好了
P.S.附一些除錯方法
telnet IP 埠
tcpdump port 8649 -i em1 -n
tail /var/log/messages