阅前提醒 这是一篇
夹带干货的文末有福利的
大数据运维工作分享心得
看完你就知道
运维工作中没有神马拯救世界的英雄
运维工作里只有一群不想被世界改变的职人
各行各业 各路人心
运维人员好比消防员 网络、系统、服务、硬件 哪里有故障就出现在哪里 归根结底就是一首诗 ▼ 文能日志找报错,武能上架拧螺丝 上能集群搭服务,下能系统拷文件 忙能全天候工作,闲能发呆想人生 外能上线挡攻击,内能安全与审计
讲真 每次节假日我们最不安 攻击、故障人员协调、异地机房等问题统统都来 那感觉就是 ▼
(图片版权来自网络,版权归作者)
▼ 我怂 所以 后面 想要 讲讲 服务器监控分享 之zabbix篇
❶平台建设背景
随着易观业务发展,公司产品、业务系统逐渐增多。服务器从最早10+到现在150+台,依靠过去人工巡检系统的方式发现故障、潜在风险及安全隐患的方式效率越来越低,且运维人员的工作强度也在不断增加。为了提高发现系统故障的及时性、解决问题的时效性、同时也能把运维人员从重复的工作中解放出来去做更多有意义的事情,因此我们急需引入新的监控手段、工具来解决当前的问题。
❷达成目标
为了保障各个系统平台的稳定运行、快速定位故障、一段时间内的历史运行图表等,建设监控平台的最终目标如下:
1、对服务器进行状态监控,指标如:CPU、ROM、HDD、NET等。
2、对故障及时报警,如邮件、微信。
3、对一段时间内提供运行统计报表,以便为以后故障排查、集群升级等提供数据依据。
4、提供WEB界面。
5、监控功能完备,如:数据库、web服务、进程等。
❸监控工具演进与选择
最早由于服务器较少业务相对较为简单使用iostat、free、netstat、top、pmap等命令就可以查看状态。随着服务器多于20台,此方法耗时耗力最终PASS。
中期使用CACTI对服务器、路由器、交换机进行监控。由于使用标准SNMP协议、对设备的改动很小,配置文件也相对很简单可以大规模的快速部署。并且至今认为CACTI的图形是非常不错的,对常规的监控显示非常的人性化。
CACTI只能使用标准的SNMP协议,在业务复杂需要对监控做一些定制化的需求下(如定制进程、安全监控),逐渐显得力不从心。并且在24小时监控大屏下WEB界面容易退出。
由于易观大数据业务的飞速增长与产品的快速迭代,目前业务比较复杂。需要监控系统对HADOOP、SPARK、KAFKA、GREENPLUM、ETL等大数据系统进行定制化监控,对比了主流开源监控系统:如Ganglia、Zabbix、Countly进行对比,最终选择Zabbix作为易观运维监控平台。
Zabbix优点如下:
1、 可以使用Agent,定制型强于CACTI。
2、 配置简单,支持自动发现、脚本批量部署。
3、 支持微信公众号API,及时报警。
4、文档完善,活跃的官方社区,更新也比较频繁。
❹安装并与微信整合
关于安装就不在详细描述了,网上有一大推。现在的主要版本有两个,分别为2.4和3.0。个人认为区别不大,就是3版本的UI重新设计增加了一些功能,主体功能都很完备。在测试中发现3版本有在选择模板时不能自动提示,如果熟悉Zabbix模板的可以略过。
微信的整合步骤如下:
1、 到 申请一个公众号
2、 在组织架构中开通部门和增加员工,并且记住部门的ID号。
3、发送邀请码发给相关人员。
4、创建一个应用。
5、分配权限,新建管理组。
6、 记录管理组对应的CorpID和Secret,API授权需要用到。
7、使用Python的发送脚本 安装simplejson 3.8.2 tar zxvf simplejson-3.8.2.tar.gz cd simplejson-3.8.2 python setup.py build python setup.py install 下载安装脚本 cp Zabbix-Alert-WeChat/wechat.py /etc/zabbix/alertscripts chmod +x /etc/zabbix/alertscripts/wechat.py 修改后为(微信公众号的ID) #!/usr/bin/python #_*_coding:utf-8 _*_ import urllib,urllib2 import json import sys import simplejson def gettoken(corpid,corpsecret): print gettoken_url try: token_file = urllib2.urlopen(gettoken_url) except urllib2.HTTPError as e: print e.code print e.read().decode("utf8") sys.exit() token_data = token_file.read().decode('utf-8') token_json = json.loads(token_data) token_json.keys() token = token_json['access_token'] return token def senddata(access_token,user,subject,content): send_url = 'cgi-bin/message/send?access_token=' + access_token send_values = { "touser":手机号, "toparty":"2", "msgtype":"text", "agentid":"1", "text":{ "content":subject + '\n' + content }, "safe":"0" } # send_data = json.dumps(send_values, ensure_ascii=False) send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8') send_request = urllib2.Request(send_url, send_data) response = json.loads(urllib2.urlopen(send_request).read()) print str(response) if __name__ == '__main__': user = str(sys.argv[1]) subject = str(sys.argv[2]) content = str(sys.argv[3]) corpid = 'XXXXXXXXXXX' corpsecret = 'XXXXXXXXXXXXXX' accesstoken = gettoken(corpid,corpsecret) senddata(accesstoken,user,subject,content)
8、Zabbix设置微信
添加示警媒介
管理-->示警媒介
名称填写微信报警,类型选择脚本,脚本名称填写wechat.py
图示如下:
附:
微信企业开发者中心接口文档 wiki/index.php?title=%E9%A6%96%E9%A1%B5
微信企业号开发者调试工具 debug
❺多机房部署
Zabbix的不是方式非常灵活,可以独立部署,也可以使用代理方式部署。
易观大数据北京区机房情况简单如下:
根据业务的不同,现有4个机房。初期打算使用Zabbix Proxy方式将所有的机房统一在A机房汇总,并且在一个后台呈现出来。愿望往往是美好的,现实是不理想的。在使用中发现由于抓取时间短并且Agent服务器较多(初始260台左右),导致A机房带宽占用严重,并且Zabbix Server服务器压力非常大,导致数据有断线或者卡死情况发生。通过一番的实验与寻找解决方案,最终发现一个“大宝剑”—Grafana。它提供一个非常直观漂亮的dashboards,可以引用多个数据源、显示自定义等,并且配置也是非常简单。
通过Grafana解决的痛点如下: 1、 不用部署Zabbix Proxy,直接在Grafana引用不通的数据源即可。
2、 就Dashboards而言,对比Zabbix原生的dashboards可以提供非常多的自定义功能。
3、 服务稳定,不会像Cacti一样总是需要重新登录账户。
4、 提供Playlists功能,这点对于监控类型多、监控服务器多,或者实时监控屏少时尤为实用。
5、 可以引用插件,如WordPing、Wordmap Panel等。
简单展示易观大数据接收集群的部分图表:
CPU监控
网络监控
Web监控
❻总结
使用Zabbix+Grafana+微信,实现监控、报警、图形化显示、实时微信预警,是一个非常不错的运维监控解决方案。在实际使用中对目前300台规模的服务器监控中稳定可靠,帮助运维人员通过图表快速的发现问题。由于Zabbix和Grafana都是开源软件,可玩方式大大提高。如:实现与Docker的整合、在报警的同时触发运维AI系统,尝试自我诊断与修复,并发出报告等等。
最后的福利 是我为你们准备的传说中的运维符一张 拿走不谢!
原创:张亮 (图片版权来自网络,版权归作者)
|