运维必备:ganglia集群监控服务端及客户端配置实战
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)
- 修改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
- 修改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
- 配置客户端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官网的插件,如需下载插件,请右键点击这里进行下载
这个插件资源包含很多监控服务的了,能满足所有的企业的基本监控需求,可以多尝试自定义去扩展监控服务
- 首先去客户端节点配置
请确保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集群监控服务端及客户端配置实战相关推荐
- 运维必备_ganglia集群监控服务端及客户端配置实战
0x01.前言 Ganglia是UC Berkeley发起的一个开源集群监视项目,设计用于测量数以千计的节点.Ganglia的核心包含gmond.gmetad以及一个Web前端.主要是用来监控系统性能 ...
- centos7 部署glusterfs集群,服务端和客户端演示
centos7 部署glusterfs集群,服务端和客户端演示 说明 glusterfs 分布式文件服务,详细可以百度 官网文档: https://docs.gluster.org/en/latest ...
- 【运维】K8S集群部署系列之ETCD集群搭建(四)
ETCD集群扩容和缩容 本文将介绍生产环境下如何对ETCD集群进行扩容和缩容. 文章目录 ETCD集群扩容和缩容 新节点环境准备(node3) 下载安装包并初始化环境 网络准备 生成`node3`对等 ...
- win2016开启ntp_WindowsServer2016NTP服务端和客户端配置【NTP时间同步服务器】
目标:A.B两台Windows Server 2016系统的服务器.B要做为NTP服务器使用,而只有A可以连到互联网.所以先将A作为NTP服务端,再将B作为既是服务端又是客户端.其它设备同B服务器同步 ...
- 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. ...
- CAS 使用 HTTPS 单向认证方式 服务端和客户端配置
注:以下配置为本人亲测,如有问题请留言:转载请注明:http://blog.csdn.net/wqmain/article/details/8562602 目录结构如下: l 名词解释 l 测试环 ...
- java 集成 cas系统 服务端和客户端配置
http://blog.csdn.net/yunye114105/article/details/7997041 参考: http://blog.csdn.net/diyagea/article/de ...
- 跟老男孩学 Linux 运维:Web 集群实战
内容简介 本书针对中小规模网站集群的搭建.部署.优化进行了详细讲解,全书可分为三大部分,其中第一部分讲的是 Linux 相关的基础且重要的知识,第二部分针对当下流行的 Web 环境架构(LNMP)的搭 ...
- Ganglia集群监控系统搭建
前段时间自己用两台工作站搭建了一个MPI的运行环境,那如何直观的看到每个节点的负载情况呢,于是就想到了用Ganglia搭建一个集群检测系统,相对比较简单,下面详细介绍一下过程 1.Ganglia概述 ...
最新文章
- 谷歌编程语言年度榜NO.1:知识体系总结(2021版)
- 软件测试用python一般用来做什么-python软件测试
- Laravel 手记(连接mysql)
- python numpy.arange() 函数的使用方法 (在给定间隔内返回均匀间隔的值)
- (二)使用xshell连接ubuntu
- java学习笔记2021.1.10
- js中this的指向问题
- timespan怎么比较大小_万能小哥丨厨房墙砖哪种好?厨房墙砖怎么挑选?
- 分析大数据对思维方式有何影响?了解大数据的特点、来源与数据呈现方式
- Java正则表达式中的捕获组的概念及相关API使用
- centos7 yum安装配置redis 并设置密码
- 一个基于 SpringBoot2+redis+Vue 的商城管理系统,拼团、砍价、秒杀等都有,可二次开发接私活!...
- 数据产品中的图表设计原则和方法
- 回天科技工程师房工对十大硬盘数据恢复软件简评!
- 《数学分析新讲》_张筑生,12.5节:隐函数定理(1)
- 双向循环链表的C++实现
- 服务器没有系统能配置ip地址嘛,win10系统没有有效的ip配置怎么解决
- 深入理解c语言的操作符 ----【汇总】
- 新装Ubuntu18.04调校笔记
- python数据分析考试题库_Python数据分析与数据可视化章节考试题库
热门文章
- 华为手机上方有“HD”标识?其实是开启了这个实用功能
- 想要网上赚钱,看懂这篇就够了
- 3de 移动物体的位置
- css line-height属性是什么
- M1芯片Mac安装brew和brew常用命令(附:安装docker)
- Excel无法更改日期格式计算天数——糖潮丽子
- eclipse代码中文乱码 - 问号框
- 康先生和哥德尔数配置——哥德尔读后之二十三
- 登什么求什么的成语(登什么求什么四字成语大全)
- Java设置Excel打印一页宽_Java Excel页面设置:页边距、页面大小/方向/背景、缩放比例、打印范围...