博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过Python利用saltstack进行生成服务器资产清单
阅读量:7027 次
发布时间:2019-06-28

本文共 2786 字,大约阅读时间需要 9 分钟。

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

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

    

    saltstack快速入门,可参考:

    

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

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

 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,得到结果如下    

  

  其中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()

用记事本打开应该是这样

用Excel打开应该是这样

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

转载地址:http://bqlxl.baihongyu.com/

你可能感兴趣的文章
webservice 测试窗体只能用于来自本地计算机的请求
查看>>
14.9. 桌面支持
查看>>
部署Linux下的man慢查询中文帮助手册环境
查看>>
在VM重启之后,重新打开HANAStudio总是报用户名错误的解决方法
查看>>
算法分析实验题集
查看>>
模拟退火算法
查看>>
让WordPress主题支持语言本地化(使用poedit软件实现中文翻译功能)
查看>>
sql语句or与union all的执行效率比较
查看>>
[LeetCode] Binary Tree Inorder Traversal 二叉树的中序遍历
查看>>
[WinAPI] API 6 [操作驱动器挂载点]
查看>>
SQL 在查询中插入行号--自定义分页的另外一种实现方式
查看>>
另类Unity热更新大法:代码注入式补丁热更新
查看>>
(cljs/run-at (JSVM. :browser) "搭建刚好可用的开发环境!")
查看>>
有时我们需要调用一个函数时,返回多个不同类型的数据
查看>>
IdentityServer4 通过 AccessToken 获取 UserClaims
查看>>
HIVE json格式数据的处理
查看>>
淘宝API开发系列---阿里.聚石塔.开放平台的使用
查看>>
I.MX6 KEY_ROW4 can't as GPIO pin
查看>>
[大数据之Spark]——Actions算子操作入门实例
查看>>
5.4. package / compress and decompress
查看>>