通过Python利用saltstack进行生成服务器资产清单

简介:

  前言:人工去对每一台服务器的硬件信息并记录早已经过去了,无论通过脚本还是自动化工具都是可以进行一次编写到处抓取的,本文主要使用saltstack作为使用工具,然后利用其提供的APi编写所需的Python脚本~~

    需求如下:生成服务器主机名,IP地址,内存,CPU核数,操作系统,数据盘配额,主要运行服务

    

    saltstack快速入门,可参考:http://youerning.blog.51cto.com/10513771/1708964

    

    这里主要用到saltstack的grains,就是saltstack minion端生成的一些静态信息,比如CPU,内存,主机名什么的,而这些就是我们所需要的

    执行salt \* grains.items,会打印一大堆的默认抓取的信息,其中一部分,如下

wKioL1bUA0vyz7jLAAAyER8kKtQ523.png spacer.gif

我们当然只挑我们需要的,操作如下

获取主机名

1
salt H-T-4 grains.item host

获取IP地址

1
salt zabbix grains.item ipv4

获取CPU核数

1
salt \* grains.item num_cpus

以此类推,根据自己所需,提取~~~

     

 值得注意的是,grains信息里面并没有硬盘信息,所以还需通过disk.usage这个选项,得到我们所需的硬盘信息

  执行salt zabbix disk.usage,得到结果如下    

  wKioL1bUA6qDqgZaAABQAUvjze8699.png

  其中1K-blocks即我们所需的硬盘信息,根据需求只需要数据盘/data,所以后面就会计算这个盘的配额

    

最终脚本如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#coding=utf-8
import  salt.client as sc
import  json
 
###salt调用
local  =  sc.LocalClient()
###目标主机指定
tgt  =  "*"
 
###获取grains,disk信息
grains  =  local.cmd(tgt, "grains.items" )
diskusage  =  local.cmd(tgt, "disk.usage" )
 
###主要应用列表即文件开头
app_name  =  [ "tomcat" , "zookeeper" , "redis" , "mysql" , "nginx" ]
cols  =  "主机名,IP地址,内存(GB),CPU核数,操作系统,数据盘/data(GB),所属项目,主要应用"
 
###打开一个.csv文件,以便写入
ret_file  =  open ( "ret.csv" , "w" )
###首先写入开头,有点字段名的意思
ret_file.write(cols  +  "\n" )
try :
     for  in  grains.keys():
         ###打印信息可注释掉
         print  grains[i][ "nodename" ]
         print  "ipv4"  +  ":"  ,grains[i][ "ipv4" ]
         print  "mem_total"  +  ":"  , grains[i][ "mem_total" /  1024  +  1
         print  "num_cpus"  +  ":"  , grains[i][ "num_cpus" ]
         print  "osfullname"  +  ":"  , grains[i][ "osfullname" ]
         print  "release"  +  ":"  , grains[i][ "lsb_distrib_release" ]
         ###可能一些主机没有/data数据盘1048576是1024x1024
         if  "/data"  not  in  diskusage[i]:
             print  "diskusage"  +  ":"  +  "have no /data disk"
         else :
             data_vol  =  int (diskusage[i][ "/data" ][ "1K-blocks" ])
             print  "diskusage"  +  ":"  , data_vol  /  1048576 
         ###去掉127.0.0.1这个地址
         ipv4  =  str (grains[i][ "ipv4" ]).replace( ", '127.0.0.1'" ,"")
         
         ###因为一些历史遗留问题,这里取得不是主机名,而是salt-minion的id名,用以判断主要应用
         hostname  =  grains[i][ "id" ]
         ipv4  =  str (grains[i][ "ipv4" ]).replace( ", '127.0.0.1'" ,"")
         ipv4  =  ipv4.replace( "," , "and" )
         mem  =  grains[i][ "mem_total" /  1024  +  1
         num_cpu  =  grains[i][ "num_cpus" ]
         OS  =  grains[i][ "osfullname" +  grains[i][ "lsb_distrib_release" ]
         if  "/data"  not  in  diskusage[i]:
             disk_data  =  "None"
         else :
             disk_data  =  data_vol  /  1048576
         
         ###项目名为空
         project  =  ""
         ###通过minion ID名来判断主要运行服务,比如xx-mysql-1,则运行mysql
         for  in  app_name:
             if  in  hostname.lower():
                 app  =   j
                 break
             else :
                 app  =  "undefined"
         =  ","
         
         ###连接并写入
         line  =  hostname  +  +  ipv4  +  +  str (mem)  +  +  str (num_cpu)  +  +  str (OS)  +  +  str (disk_data)  +  +  project  +  +  app
         ret_file.write(line  +  "\n" )
except  Exception,e:
     print  "Exception:\n" ,e
finally :
     ret_file.close()

用记事本打开应该是这样

wKiom1bUBSLCcFkDAAFuacqW6Ao882.png

用Excel打开应该是这样

wKioL1bUBaaQ9w7xAADq1H32mGk828.png


本文转自 youerning 51CTO博客,原文链接:http://blog.51cto.com/youerning/1746075

相关文章
|
1月前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
2月前
|
缓存 监控 Linux
Python 实时获取Linux服务器信息
Python 实时获取Linux服务器信息
|
3月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
199 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
2月前
|
JSON 安全 数据安全/隐私保护
告别密码泄露!Python OAuth与JWT双剑合璧,守护你的数字资产💰
本文探讨了在Python环境中利用OAuth 2.0和JSON Web Tokens (JWT) 提高系统安全性的方法。OAuth 2.0是一种开放标准授权协议,通过用户授权和令牌颁发来保护资源访问。JWT则是一种紧凑、自包含的认证方式,用于安全传输信息。文章详细介绍了如何使用Flask-OAuthlib实现OAuth 2.0认证,以及使用PyJWT生成和验证JWT。结合这两种技术,可以构建出既安全又高效的认证体系,为数据安全提供双重保障。
50 3
|
3月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
222 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
3月前
|
IDE 网络安全 开发工具
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
本文介绍了如何在PyCharm专业版中连接远程服务器并配置远程Python环境解释器,以便在服务器上运行代码。
665 0
IDE之pycharm:专业版本连接远程服务器代码,并配置远程python环境解释器(亲测OK)。
|
14天前
|
弹性计算 数据挖掘 应用服务中间件
阿里云轻量应用服务器68元与云服务器99元和199元区别及选择参考
目前阿里云有三款特惠云服务器,第一款轻量云服务器2核2G68元一年,第二款经济型云服务器2核2G3M带宽99元1年,第三款通用算力型2核4G5M带宽199元一年。有的新手用户并不是很清楚他们之间的区别,因此不知道如何选择。本文来介绍一下它们之间的区别以及选择参考。
278 87
|
7天前
|
存储 弹性计算 应用服务中间件
阿里云轻量应用服务器出新品通用型实例了,全球26个地域可选
近日,阿里云再度发力,推出了首款全新升级的轻量应用服务器——通用型实例。这款服务器实例不仅标配了200Mbps峰值公网带宽,更在计算、存储、网络等基础资源上进行了全面优化,旨在为中小企业和开发者提供更加轻量、易用、普惠的云计算服务,满足其对于通用计算小算力的迫切需求。目前,这款新品已在全球26个地域正式上线,为全球用户提供了更加便捷、高效的上云选择。
|
24天前
|
机器学习/深度学习 人工智能 PyTorch
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
阿里云GPU云服务器怎么样?阿里云GPU结合了GPU计算力与CPU计算力,主要应用于于深度学习、科学计算、图形可视化、视频处理多种应用场景,本文为您详细介绍阿里云GPU云服务器产品优势、应用场景以及最新活动价格。
阿里云GPU云服务器怎么样?产品优势、应用场景介绍与最新活动价格参考
|
23天前
|
存储 运维 安全
阿里云弹性裸金属服务器是什么?产品规格及适用场景介绍
阿里云服务器ECS包括众多产品,其中弹性裸金属服务器(ECS Bare Metal Server)是一种可弹性伸缩的高性能计算服务,计算性能与传统物理机无差别,具有安全物理隔离的特点。分钟级的交付周期将提供给您实时的业务响应能力,助力您的核心业务飞速成长。本文为大家详细介绍弹性裸金属服务器的特点、优势以及与云服务器的对比等内容。
110 23