将salt取到的数据处理
#!/usr/bin/env python
#coding:utf-8 import json with open('minfo') as f,open('minfoMiddle','w') as fw:
for data in f.readlines():
if '-----' in data or 'mem_total' in data or 'num_cpus' in data:
continue
fw.write(data) with open('minfoMiddle') as f,open('minfoMiddle1','w') as fw:
for data in f.readlines():
if data.startswith('minion-'):
fw.write('\n')
data = data.strip('\n')
data = data + '\t'
fw.write(data)
salt取到的数据:salt '*' grains.item num_cpus mem_total localhost > minfo,然后通过上面的代码处理,然后将minfoMiddle1里的内容直接粘贴到excel里即可。
说明:
minfo里的数据如下:
minion-34.16:
----------
localhost:
nkt-service01-34-16
mem_total:
7872
num_cpus:
4
minion-34.12:
----------
localhost:
recommend-job-34-12
mem_total:
7872
num_cpus:
4
minfoMiddle里的数据如下:
minion-34.16:
localhost:
nkt-service01-34-16
7872
4
minion-34.12:
localhost:
recommend-job-34-12
7872
4 #去掉无用的信息,便于之后的更好处理。
minfoMiddle1里的数据:
minion-34.16: localhost: nkt-service01-34-16 7872 4
minion-34.12: localhost: recommend-job-34-12 7872 4
minion-34.13: localhost: mktadmin-34-13 7872 4 #这些数据可以直接粘贴到excel里
以上统计的是不包含磁盘使用的数据,下面将加上磁盘使用。
salt不能直接取到磁盘信息(后来得知可以通过disk.usage获取单个分区的使用情况),使用salt "*" cmd.run 'df -hl' | egrep -v '/dev/sda2|/dev/sda1|tmpfs' > /tmp/diskinfo得到硬盘信息,然后把硬盘和上面取到的cpu、内存、主机名信息整合,代码如下:
#!/usr/bin/env python
#coding:utf-8 list1 = []
dict_disk = {} with open('diskinfoMiddle1') as f:
for data in f.readlines():
key = data.split(':')[0]
value = data.split(':')[1]
dict_disk[key] = value with open('minfoMiddle') as f:
for data in f.readlines():
list1.append(data) flag = 0
while flag == 0:
for i in list1:
if 'minion-38.132' in i: #最后一个salt节点,循环到这个后就退出while循环
flag = 1
if i.startswith('minion-'):
delmh = i.strip(':\n')
index1 = list1.index(i, )
if dict_disk.get(delmh):
list1.insert(index1 + 5, dict_disk[delmh])
del dict_disk[delmh]
else:
print('没找到:',delmh) with open('ccc','w') as f:
for i in list1:
f.write(i) with open('ccc') as f,open('ccc1','w') as fw:
for data in f.readlines():
if data.startswith('minion-'):
fw.write('\n')
data = data.strip('\n')
data = data + '\t'
fw.write(data)
minfoMiddle的内容同上;
diskinfoMiddle1的内容如下:
minion-34.12: /dev/sda8 47G 11G 33G 25% /home
minion-34.13: /dev/sda8 47G 8.2G 36G 19% /home
minion-34.15: /dev/sda8 47G 877M 44G 2% /home
minion-34.16: /dev/sda8 47G 861M 44G 2% /home #通过salt得到/home的分区情况后,再处理成K-V的形式。
ccc1文件里的内容可以直接拷贝到excel里。
以下是网上搜的方法,目前用以下方法统计一台服务器的信息可以,但是统计“*”的总是报异常程序退出,代码如下:
#!/usr/bin/env python
#coding:utf-8
import salt.client as sc
import json
###salt调用
local = sc.LocalClient()
###目标主机指定
tgt = "minion-25.183"
###获取grains,disk信息
grains = local.cmd(tgt,"grains.items")
print grains
diskusage = local.cmd(tgt,"disk.usage")
cols = "主机名,IP地址,内存(GB),CPU核数,操作系统,数据盘/data(GB)"
###打开一个.csv文件,以便写入
ret_file = open("ret.csv","w")
###首先写入开头,有点字段名的意思
ret_file.write(cols + "\n")
try:
for i in grains.keys():
###可能一些主机没有/data数据盘1048576是1024x1024
if "/home" not in diskusage[i]:
print "diskusage" + ":" + "have no /data disk"
else:
data_vol = int(diskusage[i]["/home"]["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 "/home" not in diskusage[i]:
disk_data = "None"
else:
disk_data = data_vol / 1048576
c = ","
###连接并写入
line = hostname + c + ipv4 + c + str(mem) + c + str(num_cpu) + c + str(OS) + c + str(disk_data)
ret_file.write(line + "\n")
except Exception:
print "Exception:\n"
finally:
ret_file.close()
将salt取到的数据处理的更多相关文章
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统
使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...
- Beta阶段爬取数目预估
预计于12月29号能进行Beta版本发布. Beta阶段我们的爬取动作应该更有针对性,在爬取期间如若数据处理小组有需求,会优先爬取数据处理小组提供的种子链接.预估在项目展示之前能够爬取的数目: 普通网 ...
- 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)
原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...
- MySQL快速入门 基本技能篇
写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景,文中出现的局限性欢迎指出 MySQL有客户端式(SQLyog),可托拉拽和写代码:或者 ...
- django中使用sha1,md5加密
# salt 盐 使用sha1加密算法,返回str加密后的字符串 # 提高字符串的复杂的 from hashlib import sha1 def get_hash(str, salt=None): ...
- CSDN专访:大数据时代下的商业存储
原文地址:http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop 摘要:EMC公司作为全球信息存储及管理产品方面的领先公司,不久 ...
- Scrapy-redis 组件
scrapy-redis 简介 scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署. 特征 分布式爬取 可以启动多个spider工程,相互之间 ...
- 用Darwin开发RTSP级联server(拉模式转发)(附源代码)
源代码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描写叙述了流媒体serv ...
- CSDN专訪:大数据时代下的商业存储
原文地址:http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop 摘要:EMC公司作为全球信息存储及管理产品方面的率先公司,不久 ...
随机推荐
- Android Support Library控件详细介绍之RecyclerView
RecyclerView控件 依赖 compile 'com.android.support:recyclerview-v7:24.1.1'RecyclerView也是容器控件,大多数的效果显示可通 ...
- Spring Boot 环境变量读取 和 属性对象的绑定
网上看到的一些方法,结合我看到的 和我们现在使用的.整理成此文: 第一种方法 参见catoop的博客之 Spring Boot 环境变量读取 和 属性对象的绑定(尊重原创) 第二种方法 class不用 ...
- hdu 3908 Triple(组合计数、容斥原理)
Triple Time Limit: 5000/3000 MS (Java/Others) Memory Limit: 125536/65536 K (Java/Others) Total Su ...
- 批量Load/Store指令的寻址方式
批量Load/Store指令用于实现在一组寄存器和一块连续的内存单元之间传输数据.也称为多寄存器寻址方式,即一条指令可以完成多个寄存器值的传送.这种寻址方式可以用一条指令最多完成传送16个通用寄存器的 ...
- 聚类算法:ISODATA算法
1. 与K-均值算法的比较 –K-均值算法通常适合于分类数目已知的聚类,而ISODATA算法则更加灵活: –从算法角度看, ISODATA算法与K-均值算法相似,聚类中心都是通过样本均值的迭代运算来决 ...
- Chrome开发,debug的使用方法。(转)
怎样打开Chrome的开发者工具? 你可以直接在页面上点击右键,然后选择审查元素: 或者在Chrome的工具中找到: 或者,你直接记住这个快捷方式: Ctrl+Shift+I (或者Ctrl+Shif ...
- 你需要知道的三个 CSS3技巧(转)
1. 在CSS中用attr()显示HTML属性值 attr()功能早在CSS 2.1标准中就已经出现,但现在才开始普遍流行.它提供了一个巧妙的方法在CSS中使用HTML标签上的属性,在很多情况下都能帮 ...
- http 报文
HTTP报文详解 HTTP有两种报文:请求报文和响应报文,具体介绍如下 一.HTTP请求报文 先上个图,细细分析 HTTP请求报文主要包括请求行.请求头部以及请求的数据(实体)三部分 请求行(HTTP ...
- C char** 的一点儿理解
理解是就是char** 相当于字符串数组,我以往纠结于该用 **arr还是*arr还是 (*arr),还是(**arr): 对于**arr而言:*arr代表数组的最开头,也就是第一个字串的内容.**a ...
- Linux下的多线程编程
1 引言 线程(thread)技术早在60年代就被提出,但真正应用多线程到操作系统中去,是在80年代中期,solaris是这方面的佼佼者.传统的 Unix也支持线程的概念,但是在一个进程(proces ...