前言

zabbix里面有个功能是自动发现,比如文件系统和网卡的获取的时候,因为预先无法知道这个网卡的名称,所以就有了这个自动发现的功能,这里我是因为要用到存储池的自动发现,所以需要对数据进行生成

实现

我们看下原生的接口的数据类型:

[root@lab8106 ~]# zabbix_get -s 127.0.0.1 -k "net.if.discovery"
{"data":[{"{#IFNAME}":"enp3s0"},{"{#IFNAME}":"virbr0-nic"},{"{#IFNAME}":"docker0"},{"{#IFNAME}":"enp4s0"},{"{#IFNAME}":"enp2s0f0"},{"{#IFNAME}":"enp2s0f1"},{"{#IFNAME}":"virbr0"},{"{#IFNAME}":"lo"}]}

数据为格式化好了的json数据,这个地方弄了好半天,因为网上很多人是用字符串拼接的方式,实际这个是字典嵌套了列表,列表又嵌套了字典,就是后面的地方开始没弄懂怎么有大括号的

我们同样的来看看ceph原生的命令的json接口

[root@lab8106 ~]# ceph -s -f json

{"health":{"health":{"health_services":[{"mons":[{"name":"lab8106","kb_total":52403200,"kb_used":32905432,"kb_avail":19497768,"avail_percent":37,"last_updated":"2016-10-28 01:15:29.431854","store_stats"{"bytes_total":20206814,"bytes_sst":16929998,"bytes_log":3080192,"bytes_misc":196624,"last_updated":"0.000000"},"health":"HEALTH_OK"}]}]},"timechecks":{"epoch":4,"round":0,"round_status":"finished"},"summary":[],"overall_status":"HEALTH_OK","detail":[]},"fsid":"fae7a8db-c671-4b45-a784-ddb41e633905","election_epoch":4,"quorum":[0],"quorum_names":["lab8106"],"monmap":{"epoch":1,"fsid":"fae7a8db-c671-4b45-a784-ddb41e633905","modified":"2016-10-19 22:26:28.879232","created":"2016-10-19 22:26:28.879232","mons":[{"rank":0,"name":"lab8106","addr":"192.168.8.106:6789\/0"}]},"osdmap":{"osdmap":{"epoch":63,"num_osds":2,"num_up_osds":2,"num_in_osds":2,"full":false,"nearfull":false,"num_remapped_pgs":0}},"pgmap":{"pgs_by_state":[{"state_name":"active+clean","count":80}],"version":19174,"num_pgs":80,"data_bytes":45848191333,"bytes_used":45966077952,"bytes_avail":551592390656,"bytes_total":597558468608},"fsmap":{"epoch":5,"id":1,"up":1,"in":1,"max":1,"by_rank":[{"filesystem_id":1,"rank":0,"name":"lab8106","status":"up:active"}]}}

同样也是这个类型的数据,好了,这里直接上代码:

def get_cluster_pools():
try:
pool_list=[]
data_dic = {}
cluster_pools = commands.getoutput('timeout 10 ceph osd pool ls -f json 2>/dev/null')
json_str = json.loads(cluster_pools)
for item in json_str:
pool_dic = {}
pool_dic['{#POOLNAME}'] = str(item)
pool_list.append(pool_dic)
data_dic['data'] = pool_list
return json.dumps(data_dic,separators=(',', ':'))
except:
return 0

输出如下

{"data":[{"{#POOLNAME}":"rbd"},{"{#POOLNAME}":"metedata"},{"{#POOLNAME}":"data"}]}

跟上面的格式一样了,关键在对字典进行赋值的处理,然后进行一个空格处理就完成了

总结

还是接触的太少,造成简单的处理都需要花费比较久的时间

变更记录

Why Who When
创建 武汉-运维-磨渣 2016-10-28

zabbix自动发现的python方式数据生成的更多相关文章

  1. 转 zabbix 自动发现和 zabbix自定义用户key与参数User parameters

    ########31 https://www.cnblogs.com/yjt1993/p/10883345.html 1.概念 在配置Iterms的过程中,有时候需要对类似的Iterms进行添加,这些 ...

  2. zabbix自动发现主机并加入组绑定模板

    在被监控主机多的情况下,怎样将这些主机加入zabbix server进行监控呢?下面将介绍下zabbix自动发现功能 1.创建自动发现规则 创建“规则名称,配置ip范围及检查方式”,点击“增加”,完成 ...

  3. Zabbix自动发现之fping

    原文发表于cu:2016-06-21 Zabbix自动发现功能从配置流程上比较简单:Discovery与Action. 在做Zabbix的自动发现验证时,使用"ICMP ping" ...

  4. zabbix自动发现监控mysql

    一. 数据库给只读权限 1.1 grant usage on *.* to 'zabbix'@'127.0.0.1' identified by 'zabbix'; flush privileges; ...

  5. zabbix自动发现功能实现批量web url监控

    需求: 现在有大量url需要监控,形式如http://www.baidu.com ,要求url状态不为200即报警. 需求详细分析: 大量的url,且url经常变化,现在监控用的是zabbix,如果手 ...

  6. zabbix/自动发现规则

      对于zabbix 我们并不陌生 他是开源的监控系统,现在的一部分企业都在用zabbix,今天给大家分享的是企业级监控zabbix的自动发现规则,有了它我们自定义健康的时候根据宏值可以让他自动发现对 ...

  7. zabbix 自动发现

    转自:https://blog.csdn.net/yyy72999/article/details/76065374 zabbix自动发现/zabbix自动发现规则 置顶2017年07月25日 14: ...

  8. zabbix 自动发现 相关

    zabbix自动发现,是zabbix精髓所在. 生产中,一台服务器上可能会存在多个监控实例,比如:A服务器2个,B服务器4个, C服务器1个.单单靠套模板来完成监控,做法那太糟糕了.比如小明有100台 ...

  9. zabbix自动发现主机(转)

    zabbix自动发现主机 2018年06月15日 18:02:52 loyal-Wang 阅读数:817更多 个人分类: zabbix   版权声明:本文为博主原创文章,转载请注明出处. https: ...

随机推荐

  1. 协同开发功能——Github团队协作

    最近需要写一个HoloLens开发的简明介绍,其中要测试几个demo.用到github以团队协作,像下面是简单的事件记录. 一.创建项目 1. 2.项目设置 名称 描述description Init ...

  2. CentOS 7的安装与部署 02

    2.2 操作系统安装过程 第01步:加载系统镜像 第02步:启动虚拟主机 第03步:系统安装选择界面修改网卡名称 启动虚拟机后,会出现选择菜单,首先用方向键选择 install centos7选项,然 ...

  3. mac安装go环境

    下载pkg文件 https://golang.google.cn/dl/   sudo vim /etc/profile export GOROOT=/usr/local/go export GOPA ...

  4. 通透,23 个问题 TCP 疑难杂症全解析

    每个时代,都不会亏待会学习的人. 在进入今天主题之前我先抛几个问题,这篇文章一共提出 23 个问题. TCP 握手一定是三次?TCP 挥手一定是四次? 为什么要有快速重传,超时重传不够用?为什么要有 ...

  5. Python中while循环初识

    基本结构 ​ while 条件: ​ 循环体 基本原理: ​ 1.先判断条件是否为True ​ 2.如果是True进入循环体 ​ 3.执行到循环体的底部 ​ 4.继续判断条件,条件为True,再次进入 ...

  6. JavaSE学习笔记02运算符、帮助文档生成与Scanner输入

    1. 运算符 1. 算术运算符:+,-,*,/,%,++,-- //二元运算符 int a = 10; int b = 20; int c = 25; int d = 25; System.out.p ...

  7. 【Azure Redis 缓存 Azure Cache For Redis】当使用Jedis客户端连接Redis时候,遇见JedisConnectionException: Could not get a resource from the pool / Redis connection lost

    问题情形 当在执行Redis一直指令时,有可能会遇见如下几种错误: 1) redis.clients.jedis.exceptions.JedisConnectionException: Could ...

  8. vue知识点16

    1. 数组用下标改变,或者对象增加属性,这样的改变数据   是不能触发视图更新的,要用 Vue.set(对象,属性,值) 或this.$set(对象,属性,值) 2. this.$forceUpdat ...

  9. Java 悲观锁 synchronized (member){代码块}

    Java 如果遇到会出现高并发的情况,一般建议使用悲观锁 :synchronized (member){代码块}  需要对数据库进行修改或新增的时候,建议写上事务--@Transactional @T ...

  10. Python使用psycopg2模块操作PostgreSQL

    https://blog.csdn.net/pcent/article/details/78643611