#!/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取到的数据处理的更多相关文章

  1. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统

    使用 Kafka 和 Spark Streaming 构建实时数据处理系统 来源:https://www.ibm.com/developerworks,这篇文章转载自微信里文章,正好解决了我项目中的技 ...

  2. Beta阶段爬取数目预估

    预计于12月29号能进行Beta版本发布. Beta阶段我们的爬取动作应该更有针对性,在爬取期间如若数据处理小组有需求,会优先爬取数据处理小组提供的种子链接.预估在项目展示之前能够爬取的数目: 普通网 ...

  3. 使用 Kafka 和 Spark Streaming 构建实时数据处理系统(转)

    原文链接:http://www.ibm.com/developerworks/cn/opensource/os-cn-spark-practice2/index.html?ca=drs-&ut ...

  4. MySQL快速入门 基本技能篇

    写在之前的话: 之前一直在用MSSERVER,刚用MySQL时有很多的不适应.就此小结一下工作中遇到的问题和场景,文中出现的局限性欢迎指出 MySQL有客户端式(SQLyog),可托拉拽和写代码:或者 ...

  5. django中使用sha1,md5加密

    # salt 盐 使用sha1加密算法,返回str加密后的字符串 # 提高字符串的复杂的 from hashlib import sha1 def get_hash(str, salt=None): ...

  6. CSDN专访:大数据时代下的商业存储

    原文地址:http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop 摘要:EMC公司作为全球信息存储及管理产品方面的领先公司,不久 ...

  7. Scrapy-redis 组件

    scrapy-redis 简介 scrapy-redis是scrapy框架基于redis数据库的组件,用于scrapy项目的分布式开发和部署. 特征 分布式爬取 可以启动多个spider工程,相互之间 ...

  8. 用Darwin开发RTSP级联server(拉模式转发)(附源代码)

    源代码下载地址:https://github.com/EasyDarwin orwww.easydarwin.org 在博客 在Darwin进行实时视频转发的两种模式 中,我们描写叙述了流媒体serv ...

  9. CSDN专訪:大数据时代下的商业存储

    原文地址:http://www.csdn.net/article/2014-06-03/2820044-cloud-emc-hadoop 摘要:EMC公司作为全球信息存储及管理产品方面的率先公司,不久 ...

随机推荐

  1. 5.6 TestNg的使用

          Java语言编写的WebDriver测试程序通常使用单元测试框架运行.TestNG单元测试框架比JUnit单元测试框架更强大,它提供了更多的扩展功能.目前很大一部分自动化测试工程师已经开始 ...

  2. 127. 126. Word Ladder *HARD* -- 单词每次变一个字母转换成另一个单词

    127. Given two words (beginWord and endWord), and a dictionary's word list, find the length of short ...

  3. 开发完iOS应用,接下去你该做的事

    iOS专项总结 关于 analyze Clang 静态分析器 Slender Faux Pas Warning Leaks Time Profiler 加载时间 iOS App启动过程 帧率等 如何优 ...

  4. linq分页扩展(转)

    原文地址:http://www.cnblogs.com/RainbowInTheSky/p/4590508.html public static List<T> ToPagedList&l ...

  5. 利用sklearn计算文本相似性

    利用sklearn计算文本相似性,并将文本之间的相似度矩阵保存到文件当中.这里提取文本TF-IDF特征值进行文本的相似性计算. #!/usr/bin/python # -*- coding: utf- ...

  6. C语言知识整理(3):内存管理(详细版)

    在计算机系统,特别是嵌入式系统中,内存资源是非常有限的.尤其对于移动端开发者来说,硬件资源的限制使得其在程序设计中首要考虑的问题就是如何有效地管理内存资源.本文是作者在学习C语言内存管理的过程中做的一 ...

  7. Java--常用类summary

    /* 2:API的概述(了解) (1)应用程序编程接口. (2)就是JDK提供给我们的一些提高编程效率的java类. 3:Object类(掌握) (1)Object是类层次结构的根类,所有的类都直接或 ...

  8. bat产生随机数并复制文件及生成文件列表

    有这样一个场景:我需要将同一个文件复制为上千个文件,并且文件名应为随机数.为了简单起见,不想写程序,直接写个BAT来,方便,简单,易用: 1. 搞定用BAT产生32位随机数,存为变量并使用,保存以下代 ...

  9. GUID

    前言 全局唯一标识符,简称GUID(发音为 /ˈɡuːɪd/或/ˈɡwɪd/),是一种由算法生成的唯一标识,通常表示成32个16进制数字(0-9,A-F)组成的字符串,如:{21EC2020-3AEA ...

  10. php的两个符号@和&---php总会要知道的系列

    在写代码的时候,碰到了在函数和变量前家 @和$的的问题,于是就借这个机会,学习下php的传值和传引用这两种方式 首先 @ 运算符只对表达式有效.对新手来说一个简单的规则就是:如果能从某处得到值,就能在 ...