1. 程式人生 > >配置ganglia 監控 hadoop 節點

配置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