RedHat最簡單方便的Ganglia叢集監控安裝配置 以及 用python定時發送監控報表

來源:互聯網
上載者:User

上一章講了用django搭建了一個檢測網站是否可訪問的簡單監控系統 , 領導要求還需要有雲端服務器CPU 記憶體等硬體方面的監控資訊 ,並按時提供報表

看了下開源的這種叢集監控方案,決定先採用ganglia, 畢竟安裝簡單,報表豐富~


安裝ganglia

編譯安裝的方式非常繁瑣,直接採用yum安裝的方式。雲端服務器系統 redhat6.3 


到yum的設定檔 /etc/yum.repo/ 目錄下 ,將此目錄下的所有檔案刪除(刪除前先備份,可以直接將檔案名稱改名為xxx.repo.bak)

然後建立CentOS6-Base-sohu.repo   (直接採用sohu源,速度很快) ,檔案內容如下:

注意系統的版本,我的系統為redhat6.3,如果是7.x的版本,baseurl裡更改為/centos/7/  即可

# CentOS-Base.repo## The mirror system uses the connecting IP address of the client and the# update status of each mirror to pick mirrors that are updated to and# geographically close to the client.  You should use this for CentOS updates# unless you are manually picking other mirrors.## If the mirrorlist= does not work for you, as a fall back you can try the # remarked out baseurl= line instead.##[base]  name=CentOS-6.3 - Base  baseurl=http://mirrors.sohu.com/centos/6/os/x86_64/  gpgcheck=0  enabled=1    [epel]  name=epel  baseurl=http://mirrors.sohu.com/fedora-epel/6/x86_64/  gpgcheck=0  enabled=1    [extra]  name=extra  baseurl=http://mirrors.sohu.com/centos/6/extras/x86_64  gpgcheck=0  enabled=1    [update]  name=extra  baseurl=http://mirrors.sohu.com/centos/6/updates/x86_64  gpgcheck=0  enabled=1 [openstack]name=cloudbaseurl=http://mirrors.sohu.com/centos/6/cloud/x86_64/openstack-kilo/gpgcheck=0enabled=0

注意:如果是centos系統, 直接 yum install -y epel-release 安裝 epel包就可以了

server端安裝
yum install rrdtool ganglia-gmetad ganglia-gmond ganglia-web httpd php

client端安裝

yum install ganglia-gmond


ganglia配置

server端需要配置 /etc/ganglia/gmond.conf 以及 /etc/ganglia/gmetad.conf 兩個檔案

> vi /etc/ganglia/gmond.conf    採用組播的模式 ,只需要更改以下三個地方


cluster {name = "toltech_launcher" // 這個名稱相當於叢集分組....}udp_send_channel {mcast_join = 239.2.11.72port = 8649ttl = 1}udp_recv_channel {  mcast_join = 239.2.11.72  port = 8649  bind = 239.2.11.72  retry_bind = true}
   為server端配置資料來源 ,toltech_launcher 與gmond.conf中的cluster name值一致。

    由於server端也安裝了gmond作為被監控端,這裡的資料來源直接配置server本機localhost就可以,也可以配置為叢集被監控端的其他IP。或者配置多個資料來源

> vi /etc/ganglia/gmetad.conf

data_source "toltech_launcher" localhost:8649


將server端的/etc/ganglia/gmond.conf 檔案分發到client端,配置結束

> scp /etc/ganglia/gmond.conf root@{ip}:/etc/ganglia/gmond.conf


運行ganglia

Server端
service gmond start
service gmetad start
service httpd start
Client端
service gmond start
測試

# 命令列列印當前活動client
gstat -a

web訪問 http://{your_ip}/ganglia



python抓取報表圖片並郵件發送

ganglia已經安裝完成, 可以從web上看到各種硬體的監控報表  。但是領導並沒有時間來開啟網站看如此多的報表,

如何讓領導知道我們在努力工作呢,當然是主動把報表發送領導郵箱了~


仔細觀察下ganglia中各種報表的圖片地址, 可以發現每張報表圖片都是一個有規律的地址

比如叢集總cpu報表 :

http://ip/ganglia/graph.php?r=day&z=xlarge&c=toltech_launcher&m=load_one&s=by+name&mc=2&g=cpu_report

參數r=day  ,表示上一天的監控報表,如果想要上一小時的報表,改成r=hour 就可以 ,還有按周、按月等等可以自己去觀察相應的參數

c=toltech_launcher ,很明顯代表報表所對應的資料來源,我這裡代表的是叢集分組,不同的應用使用不同的分組,方便營運查看

g=cpu_report ,表示為cpu的報表, 其他的還有 g=network_report 網路報表 ,g=mem_report  記憶體報表等 。


還有叢集內各個節點的監控資訊

比如 #叢集內各節點剩餘記憶體 http://ip/ganglia/stacked.php?m=mem_free&c=toltech_launcher&r=day&st=1514511038&host_regex=

m=mem_free ,表示當前是剩餘可用記憶體的監控報表, 還可以設定為 m=cpu_user 、 m=disk_free、m=load_one 等各種其他的監控資訊 ,具體參數可去查看相應的報表圖片url

其他的 r=day ,c=toltech_launcher 與上面叢集總監控報表參數一致


弄清楚url參數含義後,只需要組裝出我們想要產生的監控報表圖片url ,然後下載並郵件發送就可以了


採用python ,伺服器上配置定時執行此指令碼 。指令碼比較簡單, 直接貼代碼

#coding:utf-8import urllib,urllib2,socket,reimport time,osimport smtplib ,sys,datetimefrom email.mime.text import MIMETextfrom email.mime.image import MIMEImage  from email.mime.multipart import MIMEMultipartfrom email.header import Headerreload(sys)sys.setdefaultencoding("utf-8")downloadpath = 'E:\\2014\\'def getHtml(url):    # 要佈建要求頭,讓伺服器知道不是機器人    user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'    headers = {'User-Agent': user_agent}    request=urllib2.Request(url,headers=headers);    page = urllib2.urlopen(request);    html = page.read()    return htmldef sendMail(body,urls):    # 第三方 SMTP 服務    mail_host="smtp.xxx.cn"  #設定伺服器    mail_user="xxxx@xxxx.cn"    #使用者名稱    mail_pass="xxxx"   #口令               sender = 'xxxxx@xxxx.cn'    receivers = ['xxxx@qq.com']  # 內送郵件,可設定為你的QQ郵箱或者其他郵箱         #建立一個帶附件的執行個體    message = MIMEMultipart()         message['From'] = Header("xx", 'utf-8')    message['To'] =  Header(" , ".join(receivers), 'utf-8')    today = datetime.datetime.today();    subject = 'xxxxx叢集監控日報表' + today.strftime('%Y-%m-%d %H:%M:%S')    message['Subject'] = Header(subject, 'utf-8')         #郵件內文內容    message.attach(MIMEText(body, 'html', 'utf-8'))      #設定郵件名片(html格式)    # html =  file('qianming.html').read().decode("utf-8")    # message.attach(MIMEText(html, 'html', 'utf-8'))         for index, item in enumerate(urls):        downloadimg(item,index,downloadpath) #下載報表圖片         # 二進位模式讀取圖片         with open(downloadpath + '%s.jpg' % index , 'rb') as f:              msgImage1 = MIMEImage(f.read())          # 定義圖片ID          msgImage1.add_header('Content-ID', '%s' % index)          message.attach(msgImage1)              try:        smtpObj = smtplib.SMTP()         smtpObj.connect(mail_host, 25)    # 25 為 SMTP 連接埠號碼        smtpObj.login(mail_user,mail_pass)          smtpObj.sendmail(sender, receivers, message.as_string())        print "郵件發送成功"    except smtplib.SMTPException,e:        print "Error: 無法發送郵件" + repr(e)        deletimg(downloadpath)    #下載圖片def downloadimg(url,id ,path):    urllib.urlretrieve(url, path+ '%s.jpg' % id)#刪除下載檔案夾內的圖片def deletimg(path):    for file in os.listdir(path):        targetFile = os.path.join(path,  file)        if os.path.isfile(targetFile):             os.remove(targetFile) #圖片url   urls = []#叢集總負載urls.insert(0,"http://ip/ganglia/graph.php?r=day&z=xlarge&c=toltech_launcher&m=load_one&s=by+name&mc=2&g=load_report")    #叢集記憶體使用量urls.insert(1,"http://ip/ganglia/graph.php?r=day&z=xlarge&c=toltech_launcher&m=load_one&s=by+name&mc=2&g=mem_report")   #叢集CPUurls.insert(2,"http://ip/ganglia/graph.php?r=day&z=xlarge&c=toltech_launcher&m=load_one&s=by+name&mc=2&g=cpu_report") #叢集網路IO使用urls.insert(3,"http://ip/ganglia/graph.php?r=day&z=xlarge&c=toltech_launcher&m=load_one&s=by+name&mc=2&g=network_report") #叢集內各節點負載概況urls.insert(4,"http://ip/ganglia/stacked.php?m=load_one&c=toltech_launcher&r=day&st=34533545") #叢集內各節點CPU使用urls.insert(5,"http://ip/ganglia/stacked.php?m=cpu_user&c=toltech_launcher&r=day&st=3454532&host_regex=")#叢集內各節點剩餘記憶體urls.insert(6,"http://ip/ganglia/stacked.php?m=mem_free&c=toltech_launcher&r=day&st=3454532&host_regex=")#叢集內各節點剩餘硬碟容量urls.insert(7,"http://ip/ganglia/stacked.php?m=disk_free&c=toltech_launcher&r=day&st=3453453&host_regex=") today = datetime.datetime.today();body = """     <h2>xxx伺服器叢集每日監控報表 %s  (自動發送)</h2>     <font color="#FF0000">叢集總概況</font> <br/>    <img src="cid:0" /> <br/>   <font color="#FF0000"> 叢集總記憶體使用量   </font>          <br/>    <img src="cid:1" /> <br/>     <font color="#FF0000">   叢集總CPU  </font>  <br/>    <img src="cid:2" /> <br/>   <font color="#FF0000">叢集總網路IO使用 </font>   <br/>    <img src="cid:3" />  <br/>     <font color="#FF0000"> 叢集內各節點負載概況   </font>  <br/>    <img src="cid:4" />  <br/>   <font color="#FF0000">叢集內各節點CPU使用    </font> <br/>    <img src="cid:5" /> <br/>     <font color="#FF0000">叢集內各節點剩餘記憶體 </font>  <br/>    <img src="cid:6" />  <br/>   <font color="#FF0000">叢集內各節點剩餘硬碟容量  </font> <br/>    <img src="cid:7" />      """ % today.strftime('%Y-%m-%d')  sendMail(body, urls)  


郵件效果


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.