0x01、前言

Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。主要是用来监控系统性能,如:cpu 、mem、硬盘利用率,I/O负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用。

ganglia还是很受欢迎的一个集群监控软件,能够在短短几秒之内就能知道数以千计的服务器运行状态,是一个企业监控/管理的软件,下面一起来看看如何配置服务器及客户端节点。

1、在这里,本文介绍配置的监控节点如下:
服务名称 节点
服务端 10.1.1.51
客户端 10.1.1.50
客户端 10.1.1.251

注意:服务端只能有一个,客户端可以有很多个,并且服务端是需要安装gmated的,如果你服务端也要监控它的运行状态的话,那么也要装上gmond;客户端只需要安装gmond就可以了。

在这里本文不介绍如何安装ganglia,只介绍配置服务端和客户端,如果你需要安装的步骤请自行搜索,敬请谅解。

0x0x2、服务端配置(10.1.1.51)
  1. 修改gmetad.conf文件,修改两个地方,一个是设置集群的名字及监控的客户端ip、端口;另外一个是设置信任的主机,相当于设置白名单。

vim /etc/ganglia/gemtad.conf # 这个路径可能不一样,你需要找一下这个gmetad.conf文件在哪

#data_source "my cluster" localhost   # 这个是默认的
data_source "my cluster" 10 10.1.1.51:8649 10.1.1.1.251:8649 10.1.1.50:8649   # 前面第一个是“my **”是集群名称,后面是需要监控的客户端的ip地址# trusted_hosts 127.0.0.1 169.229.50.165 my.gmetad.org  # 这个是默认的
trusted_hosts 127.0.0.1 10.1.1.51 10.1.1.251 10.1.1.50  # 添加这些信任的客户端ip
  1. 修改ganglia.conf,这个文件路径同样也是你需要查找一下,可能路径不太一样,后面将不再提醒这个路径问题

可能你们的需要注意复制才行: sudo cp /etc/ganglia-webfrontend/apache.conf /etc/apache2/sites-enabled/ganglia.conf(很关键的一步)
vim /etc/apache2/sites-enabled/ganglia.conf

Alias /ganglia /usr/share/ganglia-webfrontend<Directory "/usr/share/ganglia-webfrontend">AllowOverride AllOrder allow,denyAllow from allDeny from none
</Directory>
0x03、客户端配置(10.1.1.51、10.1.1.50、10.1.1.251)

需要注意的是,客户端在Ubuntu和CentOS上是不同的包名:
Ubuntu 是安装 Ganglia-monitor;CentOS 是安装ganglia-gmond

  1. 配置客户端10.1.1.51、10.1.1.50、10.1.1.251,gmond.conf

vim /etc/ganglia/gmond.conf
修改以下内容:

globals {daemonize = yessetuid = yesuser = gangliadebug_level = 0max_udp_msg_len = 1472mute = nodeaf = nohost_dmax = 604800 /*secs 超过这个秒数未汇报数据,那么节点则会被清除掉,86400为一天,这里配置的是7天*/cleanup_threshold = 60 /*secs 原来是300,这里修改为60是为了更新及时 */gexec = nosend_metadata_interval = 0
}cluster {#name = "unspecified"  name = "my cluster"  # cluster名称就是在gmetad.conf里配置的data_source名称owner = "unspecified"latlong = "unspecified"url = "unspecified"
}udp_send_channel { #mcast_join = 239.2.11.71host = 10.1.1.51  # 填写服务器端ip地址,表示当前的客户端发送udp报文给谁port = 8649ttl = 1
}/* You can specify as many udp_recv_channels as you like as well. */
udp_recv_channel {#mcast_join = 239.2.11.71port = 8649#bind = 239.2.11.71
}

至此,基础的监控功能的服务端、客户端配置完成,下面来看一下成果

0x04、查看ganglia-web,监控数据

打开:http://10.1.1.51:8088/ganglia即可看到监控的数据,如下:

可以看到在服务端设置的默认集群名字:my cluster
至于节点名字显示问题,已经在上图中介绍了,请注意留看

先来随便看一个节点的数据,下面展示的是50节点的数据:

来看看负载情况,这个是ganglia默认监控的数据,可以看出这个软件有多方便,自带好一些监控的服务

至此,基础的ganglia监控数据已经配置完毕,下面我们来设置一些额外的监控,比如监控cpu温度。

0x05、使用Python自定义扩展ganglia插件

这里只是介绍最简单的自定义插件扩展,监控CPU的温度,本教程使用的插件是来源于ganglia官网的插件,如需下载插件,请右键点击这里进行下载

这个插件资源包含很多监控服务的了,能满足所有的企业的基本监控需求,可以多尝试自定义去扩展监控服务

  1. 首先去客户端节点配置

请确保gmond.conf文件里面存在这一行配置,下面这个路径就是用来自定义扩展插件的:

vim /etc/ganglia/gmond.conf
include (’/etc/ganglia/conf.d/*.conf’)

然后创建目录conf.d,这个目录默认是不存在的

mkdir /etc/ganglia/conf.d

切换到conf.d目录下,创建自定义的python扩展插件的配置文件:modpython.conf

cd /etc/ganglia/conf.d
touch modpython.conf

然后保存以下内容:

modules {module {name = "python_module"path = "/usr/lib/ganglia/modpython.so"params="/etc/ganglia/python_modules"}
}
include("/etc/ganglia/conf.d/*.pyconf")

然后上传刚刚下载的资源里面,cpu_temp/conf.d/cpu_temp.pyconf,将cpu_temp.pyconf上传

rz -y # 弹出窗口之后,选择cpu_temp.pyconf文件上传

然后在/etc/ganglia/目录下创建目录python_modules,并且上传cpu_temp/python_modules/cpu_temp.py,上传cpu_temp.py脚本

mkdir /etc/ganglia/python_modules
cd /etc/ganglia/python_modules
rz -y # 弹出窗口之后,选择cpu_temp.py文件上传

至此,自定义扩展算完成了100%,也可以说完成了90%,为什么呢,因为脚本cpu_temp.py不是一定能够运行成功的,每个人的服务器的cpu温度缓存文件路径不一定都是一样的,首先我们来检查一下脚本能否正常启动读取数据:
python2 cpu_temp.py

如果你看到报错,并且是说找不到文件路径,或者文件路径不存在的错误的话,建议你去搜索一下cpu温度的相关缓存文件在哪,然后再和脚本的路径对比,你就可以修改脚本文件,最终得以正确运行脚本

下面我已经注释了修改的路径,如果你们的修改之后,这个路径还是不对的话,你们你们可以直接搜索下面这条命令,然后将搜索出来的文件路径和脚本的路径进行对比,就很快改好这个脚本了:

sudo find / -name coretemp*

下面我放一下我修改后的代码:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
# @Time    : 2019/8/15 19:43
# @Author  : qizai
# @File    : cpu_temp.py
# @Software: PyCharm
import osdescriptors = list()
sysdir = '/sys/devices/platform/'
handler_dict = dict()def metric_init(params):global descriptorstry:coretemp_list = [i for i in os.listdir(sysdir) if i.startswith('coretemp')]except OSError:print 'No dir named' + sysdiros._exit(1)if not coretemp_list:print 'No dir name starts with coretemp'os._exit(1)for coretemp in coretemp_list:  # 记得全部都要对应加上这个路径 /hwmon/hwmon1,不然全部都是找不到的,你们根据自己服务器来对应修改coreinput_list = [i for i in os.listdir(sysdir + coretemp + '/hwmon/hwmon1') if i.endswith('_input')]try:with open(sysdir + coretemp + '/hwmon/hwmon1' + '/temp1_label','r') as f:phy_id_prefix = f.read().split()[-1]except IOError:print 'No temp1_label file'os._exit(1)for coreinput in coreinput_list:build_descriptor(coretemp,coreinput,phy_id_prefix)return descriptorsdef build_descriptor(coretemp,coreinput,phy_id_prefix):global handler_dictif coreinput == 'temp1_input':name = 'cpu_temp_physical_' + phy_id_prefixdescription = 'Physical CPU id ' + phy_id_prefix + ' Temperature'groups = 'cpu_temp_physical'handler_dict[name] = sysdir + coretemp + '/hwmon/hwmon1' + '/temp1_input'else:with open(sysdir + coretemp + '/hwmon/hwmon1' + '/' + coreinput[:-6] + '_label','r') as f:coreid = f.read().split()[-1]name = 'cpu_temp_core_' + phy_id_prefix + '_' + coreiddescription = 'Physical CPU id ' + phy_id_prefix + ' Core ' + coreid + ' Temperature'groups = 'cpu_temp_core'handler_dict[name] = sysdir + coretemp + '/hwmon/hwmon1' + '/' + coreinputcall_back = metric_handlerd = {'name': name,'call_back': call_back,'time_max': 60,'value_type': 'float','units': 'C','slope': 'both','format': '%.1f','description': description,'groups': groups}try:call_back(name)descriptors.append(d)except:print 'Build descriptor Failed'def metric_handler(name):try:with open(handler_dict.get(name),'r') as f:temp = f.read()except:temp = 0temp_float = int(temp) / 1000.0return temp_floatdef metric_cleanup():passif __name__ == '__main__':metric_init({})for d in descriptors:v = d['call_back'](d['name'])print "----------------------------------------------------------------------------------------"print 'value for %s is %.1f %s' % (d['name'],v,d['units'])for k,v in d.iteritems():print k,v
0x06、重启服务端、客户端

在这里我又要提醒各位,重启的时候,貌似也有一定的顺序,个人测试了发现,重启顺序如下:

sudo /etc/init.d/gmetad restart  # 最先要重启服务端(或者理解为,先启动服务器)
sudo /etc/init.d/ganglia-monitor restart   # 然后再启动客户端
sudo /etc/init.d/apache2 restart  # 再启动Apache

上面重启的步骤当中,最主要就是:启动服务端要比启动客户端早才行,不然你在ganglia-web看不到客户端这些节点的,或者看到节点也是看不到数据的,我在这里已经踩坑很久了,找了很久原因才找到是这个原因,希望能够帮助你们。

0x07、最后来看一下自定义插件能否生效


如果你细心的话,在前面截图当中,你已经见到过这个监控服务了,本人在写这篇博客的时候,是已经配置好了的,所以你在前面见到这个监控服务当然是正常的。

但如果是新的节点,只是默认配置的话,是没有这个监控cpu温度的,因为前面也说了每个服务器的cpu温度缓存文件是不一定都是同一个,所以ganglia开发者是很难适配我们所有的用户的。

至此本文教程写完了,希望能够帮助到各位在运维路上的小伙伴们,觉得不错点个赞呗
感谢认真读完的这篇教程的您

先别走呗,这里有可能有你需要的干货文章:

最详细nagios配置说明及注意事项;

运维必备:ganglia集群监控服务端及客户端配置实战相关推荐

  1. 运维必备_ganglia集群监控服务端及客户端配置实战

    0x01.前言 Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监控系统性能 ...

  2. centos7 部署glusterfs集群,服务端和客户端演示

    centos7 部署glusterfs集群,服务端和客户端演示 说明 glusterfs 分布式文件服务,详细可以百度 官网文档: https://docs.gluster.org/en/latest ...

  3. 【运维】K8S集群部署系列之ETCD集群搭建(四)

    ETCD集群扩容和缩容 本文将介绍生产环境下如何对ETCD集群进行扩容和缩容. 文章目录 ETCD集群扩容和缩容 新节点环境准备(node3) 下载安装包并初始化环境 网络准备 生成`node3`对等 ...

  4. win2016开启ntp_WindowsServer2016NTP服务端和客户端配置【NTP时间同步服务器】

    目标:A.B两台Windows Server 2016系统的服务器.B要做为NTP服务器使用,而只有A可以连到互联网.所以先将A作为NTP服务端,再将B作为既是服务端又是客户端.其它设备同B服务器同步 ...

  5. 4.2.9 Kafka集群与运维, 应用场景, 集群搭建, 集群监控JMX(度量指标, JConsole, 编程获取, Kafka Eagle)

    目录 3.1 集群应用场景 1 消息传递 2 网站活动路由 3 监控指标 4 日志汇总 5 流处理 6 活动采集 7 提交日志 总结 3.2 集群搭建 3.2.1 Zookeeper集群搭建 3.2. ...

  6. CAS 使用 HTTPS 单向认证方式 服务端和客户端配置

    注:以下配置为本人亲测,如有问题请留言:转载请注明:http://blog.csdn.net/wqmain/article/details/8562602 目录结构如下: l  名词解释 l  测试环 ...

  7. java 集成 cas系统 服务端和客户端配置

    http://blog.csdn.net/yunye114105/article/details/7997041 参考: http://blog.csdn.net/diyagea/article/de ...

  8. 跟老男孩学 Linux 运维:Web 集群实战

    内容简介 本书针对中小规模网站集群的搭建.部署.优化进行了详细讲解,全书可分为三大部分,其中第一部分讲的是 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭 ...

  9. Ganglia集群监控系统搭建

    前段时间自己用两台工作站搭建了一个MPI的运行环境,那如何直观的看到每个节点的负载情况呢,于是就想到了用Ganglia搭建一个集群检测系统,相对比较简单,下面详细介绍一下过程 1.Ganglia概述 ...

最新文章

  1. 谷歌编程语言年度榜NO.1:知识体系总结(2021版)
  2. 软件测试用python一般用来做什么-python软件测试
  3. Laravel 手记(连接mysql)
  4. python numpy.arange() 函数的使用方法 (在给定间隔内返回均匀间隔的值)
  5. (二)使用xshell连接ubuntu
  6. java学习笔记2021.1.10
  7. js中this的指向问题
  8. timespan怎么比较大小_万能小哥丨厨房墙砖哪种好?厨房墙砖怎么挑选?
  9. 分析大数据对思维方式有何影响?了解大数据的特点、来源与数据呈现方式
  10. Java正则表达式中的捕获组的概念及相关API使用
  11. centos7 yum安装配置redis 并设置密码
  12. 一个基于 SpringBoot2+redis+Vue 的商城管理系统,拼团、砍价、秒杀等都有,可二次开发接私活!...
  13. 数据产品中的图表设计原则和方法
  14. 回天科技工程师房工对十大硬盘数据恢复软件简评!
  15. 《数学分析新讲》_张筑生,12.5节:隐函数定理(1)
  16. 双向循环链表的C++实现
  17. 服务器没有系统能配置ip地址嘛,win10系统没有有效的ip配置怎么解决
  18. 深入理解c语言的操作符 ----【汇总】
  19. 新装Ubuntu18.04调校笔记
  20. python数据分析考试题库_Python数据分析与数据可视化章节考试题库

热门文章

  1. 华为手机上方有“HD”标识?其实是开启了这个实用功能
  2. 想要网上赚钱,看懂这篇就够了
  3. 3de 移动物体的位置
  4. css line-height属性是什么
  5. M1芯片Mac安装brew和brew常用命令(附:安装docker)
  6. Excel无法更改日期格式计算天数——糖潮丽子
  7. eclipse代码中文乱码 - 问号框
  8. 康先生和哥德尔数配置——哥德尔读后之二十三
  9. 登什么求什么的成语(登什么求什么四字成语大全)
  10. Java设置Excel打印一页宽_Java Excel页面设置:页边距、页面大小/方向/背景、缩放比例、打印范围...