设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 3663|回复: 2

优云实践:巧用Salt,实现CMDB配置自动发现 [复制链接]

Rank: 6Rank: 6

签到
82
注册时间
2016-6-8
最后登录
2018-10-26
在线时间
31 小时
阅读权限
70
积分
8254
帖子
59
主题
54
精华
0
UID
47276
发表于 2016-7-25 15:32:36 |显示全部楼层


随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)IT时代,信息化环境越来越复杂,既有IOE三层架构,也有VCE、Openstack等云虚拟化架构和互联网化的分布式大数据架构。所以,企业急需建立一套合适的配置管理库(CMDB),像人类“大脑”一样统一存储从基础架构到业务应用各层面的配置信息,以便协调“身体”(运维系统)各部分完成复杂的运维工作。

CMDB如此重要,但又是运维中最难建设好的部分,就连很多IT运维界大佬都感叹CMDB是运维人的最痛点,他们总结CMDB建设有3大难点,而保证配置数据的准确性更是难中之难。当前业界主要靠流程控制、人工维护和自动发现解决数据鲜活、准确的问题。流程控制和人工维护都脱不了人的参与,既然我们是人、不是“神”,就意味着会“偷懒”、会出错。在这个信息爆炸的大数据时代,再依靠人肉运维,我们已经伤不起。所以,要想数据准确,关键还是要靠自动发现。

今天,笔者就来谈一种配置信息的自动发现方案,望能解放运维人的双手和大脑,这样我们可以干一些更有意义的事,比如喝喝咖啡、陪陪家人。

一、采集工具的选型

要实现配置自动发现,需要有一个好用的基础采集工具(功若善其事、必先利其器嘛)。有些大佬可能会说:容易,自己写一个呗。但现在是互联网分享时代,前辈们已经踩过很多坑,并贡献出自己的心血,我们就不必要再重复造轮子了,大可以“拿来主义”,找一个最适合自己的开源工具来用。

谈到开源的自动化配置管理工具,就不得不说Puppet、Chef、Ansible和SaltStack这四驾马车。互联网上对这四款工具有很多详细的介绍和对比,这里不再详谈,主要说说我们选型的理由和结论。

首先,这四款工具的实现技术分两大派别:Ruby(Puppet、Chef)和Python(Ansible、SaltStack)。很多前辈都说过,要真正应用好一项开源技术,你必须要真正掌控它。所以技术类型的选择是至关重要的,Python号称是运维人的语言,其简洁统一、运行高效的特性更适合运维人使用。另外最重要的是Python有很多完善强大的OS、网络编程方面的第三方库,这些是Ruby无法比拟的。所以,从技术实现角度讲,Ansible和SaltStack这两个工具更适合我们运维人玩。

第二,Ansible和SaltStack两者最大的差别是代理技术的采用,当然SaltStack也可以通过salt-ssh命令实现类似Ansible的无代理执行能力,只是SaltStack的设计理念是通过执行代理(Minion)来实现高效和可扩展的配置管理体系。

总结下来,有代理和无代理对比优势主要有:

1)    无需保存账户密码等敏感信息,避免信息泄露,也便于管理员定期更换密码;
2)    可采集更丰富的配置信息和关联关系,比如可通过配置文件分析获取深层次配置信息;
3)    可快速感知配置变化,无代理模式只能定时轮询,增加了网络流量的消耗;
4)    可以实现快速的文件传输,比如可方便实现配置文件的收集。



通过以上分析对比,我们选择SaltStack作为配置自动采集的基础工具。

二、采集框架的搭建

SaltStack是一款强大的、集中化的配置自动化管理工具,它可以通过grains、pillar实现上千台服务器的配置自动收集和管理(关于SaltStack我就不普及了,大家自行问问谷哥或者度娘吧)。不过现在它只提供了比较好的命令行工具,当然官方也提供了一个名叫halite的简单WEB UI,只是这个WEB界面长得实在是挫了点,功能也有限,对不起SaltStack这个配置自动化管理“神器”的称号啊!

所以,我们的目标是利用SaltStack的框架和扩展能力来实现配置自动化采集,采集到数据后可以输送到配置管理库或者集中管理。整个采集框架逻辑设计如下图所示:



SaltStack从部署上包含Master和Minion两大部分。一个网络域内只需要部署一个Master实现集中发现调度和管理,Minion安装在各个被管主机上负责接收和执行脚本,并将采集结果反馈给Master。因为本文不是重点介绍SaltSatck,所以其安装部署就不介绍了,大家还是可以去问问无所不知的谷哥和度娘。
      
三、自动发现的实现

框架确定了,那么我们接下来的主要任务就是编写一个自动发现调度脚本(框架图中的“自动发现Discovery”),定时从Master收集数据并进行集中处理。

脚本用什么写?当然就选运维人专用语言Python了,其可与SaltStack天然集成,脚本的主要逻辑就是定时通过grains模块从Master获取配置信息并集中存储或推送给其他需要的系统。在命令行下,我们可以用:

    salt '*' grains.items
    或
    salt '*' grains.item {key1} {key2} …
    获取所有配置信息或者指定关键字名称的配置信息,比如下图获取Tomcat_8080配置信息:



各位亲可能会觉得奇怪,常规的grains.item {Key} 命令获取到的数据只有1项,但这里得到一个多属性的复杂对象。这是因为实际环境中在一个主机上会安装多个服务,也就是存在多个配置项,所以我们采用Python的字典类型(dict)来存储每个配置项的属性信息,这样只要通过一个Key就能获取到配置项的所有信息。

注:如何进行配置信息的发现采集,如何让grains按字典格式存储配置项的采集结果会在第五节“信息采集的扩展”里细说。

我们也可以通过:salt '*' grains.ls 获取有哪些Key:



既然我们用了强大的Python,在实际开发时就没必要再通过Shell去调用SaltStack的命令行了,直接用salt.client模块调用就可以获得一个字典类型(dict)的返回结果,Python字典类型可直接输出成JSON格式字符串,在对这个JSON串进行解析处理即可。

代码示意如下:



四、配置采集的扩展

有了配置自动采集框架后,我们需要的便是不断的添砖加瓦,也就是根据管理需求和配置模型不断扩展丰富SaltStack的grains采集脚本,并将脚本文件放在Salt Master的grains目录下(默认为/srv/salt/_grains),然后通过“salt '*' saltutil.sync_grains ”命令将脚本文件同步到所有Minion主机端就行。

我们以Tomcat服务的配置发现为例,收集安装路径、WEB服务端口、Tomcat版本信息、最大线程数等信息,脚本大致如下:



通过自定义采集脚本,某个Tomcat实例的配置信息发现如下:



是不是感觉如点读机一样so easy!其他更多配置信息的获取就留个各位亲去大展手脚了。当然,SaltStack的应用并不只是实现配置发现这么简单,大家可以深入挖掘,发挥其最大的潜力,实现双态IT下的自动化运维!

作者简介:庞辉富
•  优云软件(全栈运维服务平台)资深架构师
•  10多年IT运维管理软件的研发经验
•  致力于自动化运维解决方案的研究和推广

优云软件:秉承devops的理念,从监控、到应用体验,到自动化持续交付,全栈运维服务平台:https://uyun.cn

更多运维技术文章请关注优云官方微信(broada_ops)

附件: 你需要登录才可以下载或查看附件。没有帐号?注册

Rank: 8Rank: 8

注册时间
2011-9-16
最后登录
2019-10-18
在线时间
913 小时
阅读权限
90
积分
252963
帖子
2158
主题
2
精华
0
UID
15647
发表于 2016-7-25 21:12:00 |显示全部楼层
路过了解一下

使用道具 举报

Rank: 6Rank: 6

注册时间
2012-12-17
最后登录
2016-7-26
在线时间
11 小时
阅读权限
70
积分
2857
帖子
1
主题
0
精华
0
UID
36497
发表于 2016-7-26 10:29:39 |显示全部楼层
邀请码给一个,测试一下,官方资料太少了,没办法看明白有什么用

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2019-10-19 05:49 , Processed in 0.016187 second(s), 10 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部