Zabbix监控之Linux命令行/Shell脚本解析json

简介:
原创作品,允许转载,转载时请务必以超链接形式标明文章  原始出处 、作者信息和本声明。否则将追究法律责任。 http://dgd2010.blog.51cto.com/1539422/1684266

本文主要写了在Linux下如何用Shell脚本解析json数据,以便于在Zabbix中添加适合于业务应用的监控项。

为什么要使用json?

json作为一种文本化的数据格式(文本化协议),符合UNIX编程的哲学,既符合透明性(透明性:设计可见,便于审查和调试)又符合文本性(文本性:数据应该保存为文本文件)。关键在于json对Web程序或者java程序非常友好,对于开发人员来说,他们也喜欢使用json数据。业务逻辑、内部的依赖关系以及状态信息由程序员去做,运维人员只需要调用程序员开放出来的API接口就行了。

利于Zabbix监控报警的json数据格式

json数据格式的定制原则(仅供参考)

  1. human readable format 适合人阅读的格式

  2. 区分依赖模块和总体状态

  3. 每一个模块带有一个code(返回值)和一个msg(代表含义),这是便于Zabbix报警的核心设计,code用来作为触发器(Trigger)报警条件,msg作为触发器名称,也是短信报警的实际内容之一

#1没有问题的json格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{    
     "errcode" :  "0" ,     
     "errmsg" : {     
         "requirement1" : {     
             "code" :  "0" ,     
             "msg" :  "requirement1 Ok"     
         },     
         "requirement2" : {     
             "code" :  "0" ,     
             "msg" :  "requirement2 Ok"     
         },     
         "totalstatus" : {     
             "code" :  "0" ,     
             "msg" :  "totalstatus Ok"     
         }     
     }     
}

#2有问题的json格式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{    
     "errcode" :  "1" ,     
     "errmsg" : {     
         "requirement1" : {     
             "code" :  "0" ,     
             "msg" :  "requirement1 Ok"     
         },     
         "requirement2" : {     
             "code" :  "1" ,     
             "msg" :  "requirement2 Failed"     
         },     
         "totalstatus" : {     
             "code" :  "1" ,     
             "msg" :  "totalstatus Failed"     
         }     
     }     
}

Linux Shell/命令行获取json数据

可以使用Linux通常自带的curl命令获取json数据

  1. 通过POST方式提交数据(而不是使用GET),如果有多个参数,则用“&”连接起来,post提交的数据相当于一种口令,而避免搜索引擎或爬虫搜索到或被恶意利用

  2. 合理设置curl的超时时间,并启用silent模式,防止curl输出一些没用的信息,甚至可以与2>/dev/null连用,参见下面的例子

例子:

1
curl -m 10 --connect-timeout 10 -s -d  "getcode=secret"  http: //servername/url/api  2> /dev/null

Linux Shell/命令行解析json数据

可以使用jq命令,结合python的demjson模块,先验证json的合法性,再用jq解析json。

为什么要使用jq?jq作为Linux命令行解析json的神器,具有丰富json解析功能,而且其设计非常符合UNIX编程哲学中的“所有的程序都是数据的过滤器”,相比于按行与列处理文本的awk、grep和sed“文本三剑客”而言,jq就是处理json的利器。而且jq支持CentOS和Ubuntu等Linux主流发行版本。

例如以上面例子中的json,要想获取requirement1的状态,只需要将这个json作为jq的标准输入,命令行如下(二者选一,或者自己改写,awk的用途主要是去掉双引号):

1
2
cat  name.json | jq  '.errmsg.requirement1.code'  |  awk  '{print int($2)}'
cat  test .json | jq  '.errmsg.requirement1.code'  |  awk  -F  '"'  '{print $2}'

补充一个需要注意的点

Zabbix里面的自定义参数作为key时,自定义参数后面跟的命令行与Linux命令行/脚本略有不同,如果命令行中显式引用awk中使用了$,则需要使用两个$,可以参考《解决Zabbix自定义用户参数无法获取到数据的问题》。

--end--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1684266

目录
相关文章
|
运维 监控 中间件
Linux运维笔记 - 如何使用WGCLOUD监控交换机的流量
WGCLOUD是一款开源免费的通用主机监控工具,安装使用都非常简单,它可以监控主机、服务器的cpu、内存、磁盘、流量等数据,也可以监控数据库、中间件、网络设备
|
运维 Shell 数据库
Python执行Shell命令并获取结果:深入解析与实战
通过以上内容,开发者可以在实际项目中灵活应用Python执行Shell命令,实现各种自动化任务,提高开发和运维效率。
655 20
|
Prometheus 监控 Cloud Native
Prometheus+Grafana监控Linux主机
通过本文的步骤,我们成功地在 Linux 主机上使用 Prometheus 和 Grafana 进行了监控配置。具体包括安装 Prometheus 和 Node Exporter,配置 Grafana 数据源,并导入预设的仪表盘来展示监控数据。通过这种方式,可以轻松实现对 Linux 主机的系统指标监控,帮助及时发现和处理潜在问题。
1741 7
|
Prometheus 运维 监控
Prometheus+Grafana+NodeExporter:构建出色的Linux监控解决方案,让你的运维更轻松
本文介绍如何使用 Prometheus + Grafana + Node Exporter 搭建 Linux 主机监控系统。Prometheus 负责收集和存储指标数据,Grafana 用于可视化展示,Node Exporter 则采集主机的性能数据。通过 Docker 容器化部署,简化安装配置过程。完成安装后,配置 Prometheus 抓取节点数据,并在 Grafana 中添加数据源及导入仪表盘模板,实现对 Linux 主机的全面监控。整个过程简单易行,帮助运维人员轻松掌握系统状态。
2722 3
|
存储 监控 Linux
监控Linux服务器
详细介绍了如何监控Linux服务器,包括监控CPU、内存、磁盘存储和带宽的使用情况,以及使用各种系统监控工具如vmstat、iostat、sar、top和dstat来分析系统性能,并推荐了一些开源监控系统。
534 1
监控Linux服务器
|
监控 安全 Linux
使用NRPE和Nagios监控Linux系统资源的方法
通过遵循以上步骤,可以有效地使用NRPE和Nagios监控Linux系统资源,确保系统运行稳定,并及时响应任何潜在的问题。这种方法提供了高度的可定制性和灵活性,适用于从小型环境到大型分布式系统的各种监控需求。
417 2
|
API C# Shell
WPF与Windows Shell完美融合:深入解析文件系统操作技巧——从基本文件管理到高级Shell功能调用,全面掌握WPF中的文件处理艺术
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的关键组件,用于构建 Windows 桌面应用程序。WPF 提供了丰富的功能来创建美观且功能强大的用户界面。本文通过问题解答的形式,探讨了如何在 WPF 应用中集成 Windows Shell 功能,并通过具体示例代码展示了文件系统的操作方法,包括列出目录下的所有文件、创建和删除文件、移动和复制文件以及打开文件夹或文件等。
647 0
|
12月前
|
监控 应用服务中间件 nginx
基于Zabbix的SLA监控体系构建与实践
本文由Zabbix社区专家褚凤彬分享,详解SLA在Zabbix中的应用。通过Trigger与Service联动,构建Web应用的多层级监控体系,并介绍SLA计算规则、维护期处理及升级注意事项,助力企业精准掌控服务可用性。
809 36
|
监控 安全 Linux
在Linux中,zabbix如何监控脑裂?
在Linux中,zabbix如何监控脑裂?
|
运维 监控 安全
【案例分享】中国通号卡斯柯公司:ZABBIX如何破解轨道交通监控难题
本文根据2023上海峰会上朱林贤的演讲整理,聚焦中国通号卡斯柯公司如何借助Zabbix实现轨道交通信号系统的智能化管理。作为中外合资企业,卡斯柯通过统一平台整合设备监控,大幅降低成本并提升灵活性,成功应用于国内外项目。文章探讨了传统监控系统的痛点、研发维护经验及国产化与开源技术挑战,为行业转型提供了宝贵启示。未来,开放协作将是推动轨道交通智能化发展的关键。
876 8

热门文章

最新文章