巧用Salt,实现CMDB配置自动发现

随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)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运维管理软件的研发经验

?致力于自动化运维解决方案的研究和推广

时间: 2024-07-29 02:54:02

巧用Salt,实现CMDB配置自动发现的相关文章

优云实践:巧用Salt,实现CMDB配置自动发现

随着互联网+新形势的发展,越来越多的企业步入双态(稳敏双态)IT时代,信息化环境越来越复杂,既有IOE三层架构,也有VCE.Openstack等云虚拟化架构和互联网化的分布式大数据架构.所以,企业急需建立一套合适的配置管理库(CMDB),像人类"大脑"一样统一存储从基础架构到业务应用各层面的配置信息,以便协调"身体"(运维系统)各部分完成复杂的运维工作. CMDB如此重要,但又是运维中最难建设好的部分,就连很多IT运维界大佬都感叹CMDB是运维人的最痛点,他们总结C

CentOS7下搭建zabbix监控(五)——Web端配置自动发现并注册

(1).自动发现主机并注册 1)创建发现规则 2)编辑自动发现规则信息(这两步不配置问题也不大,因为在动作中也有主机IP地址) 3)添加自动发现的动作 4)编辑动作细节,然后转到操作 5)编辑操作信息 默认接收人自动发现主机: {DISCOVERY.DEVICE.STATUS} {DISCOVERY.DEVICE.IPADDRESS} 默认信息发现规则: {DISCOVERY.RULE.NAME} 设备IP:{DISCOVERY.DEVICE.IPADDRESS}设备DNS: {DISCOVER

zabbix自动发现网络节点

zabbix自动发现网络,大大的降低人工操作,分分钟钟就可以监控n台主机节点. 1.创建自动发现规则,示例如下. Configuration >>Discovery>>Create rule,新建网络发现规则 上面规则的意思是每60秒扫描ip范围为192.168.75.136-200的地址,以ip地址为唯一的标识. 规则属性  属性 描述 Name 规则名称,唯一  Discovery by proxy    谁执行当前发现规则:no proxy - zabbix server&l

zabbix监控之进程自动发现

1,获取要监控的进程到/tmp/process_list.txt文件 cat process_list.sh #!/bin/bashcat /dev/null >/tmp/process_list.txt if [ `ps aux|grep "/data/apache_projects/tomcat7-express-18034"|grep -v grep |wc -l` -gt 0 ];then echo "/data/apache_projects/tomcat7-

zabbix 自动发现和注册

第一步 配置自动发现 第二步配置自动发现的动作 -->> 自动发现 步骤一 步骤二

Zabbix实战-简易教程--动作(Actions)--自动发现

一.概述 Zabbix提供了有效和非常灵活的网络自动发现功能. 设置网络发现后你可以: 加快Zabbix部署(自动添加主机.添加模板) 简化管理(自动删除主机.删除模板.禁用主机) 无需过多管理就能在快速变化的环境中使用Zabbix Zabbix可以根据以下条件自动发现设备: IP范围(根据IP网段.指定IP地址发现主机) 可用的外部服务(FTP,SSH,WEB,POP3,IMAP,TCP等) 来自 zabbix agent 的信息(仅支持未加密模式) 来自 snmp agent 的信息 Zab

ZABBIX配置自动添加端口监控,并触发重启服务

1.配置自动发现脚本 #!/bin/bash # ------------------------------------------------------------------------------- # Script_name: discovery_port.sh # Revision: 1.0 # Date: 2017/05/08 # Author: kbsonlong # Email: [email protected] # Website: www.along.party # -

zabbix 自动发现与指定动作处理

一般zabbix服务器跟客户端部署好之后,都是通过建主机,然后添加主机到主机组这样的一个过程如果主机过多的话这样手动添加就比较繁琐了.今天介绍一下zabbix的自动发现功能 1.配置自动发现之前服务器端需要修改以下配置     [[email protected] ~]# vim /usr/local/zabbix/etc/zabbix_server.conf        FpingLocation=/usr/sbin/fping        StartSNMPTrapper=1      

linux上ping脚本及zabbix3.xx上自动发现

有时候,我们需要在linux上ping一些地址,判断地址是否被占用 一.编写shell脚本 脚本如下: #!/bin/bash for i in 192.168.16.{1..255}       do     (         ping $i -c 2 > /dev/null 2>&1         [ $? -eq 0 ] && echo "$i is alive"      )& done 效果如下 二.使用fping fping需