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

时间: 2024-08-03 09:37:30

Zabbix监控之Linux命令行/Shell脚本解析json的相关文章

在 Linux 命令行中使用和执行 PHP 代码(二):12 个 PHP 交互性 shell 的用法

在上一篇文章"在 Linux 命令行中使用和执行 PHP 代码(一)"中,我同时着重讨论了直接在Linux命令行中运行PHP代码以及在Linux终端中执行PHP脚本文件. Run PHP Codes in Linux Commandline 本文旨在让你了解一些相当不错的Linux终端中的PHP交互性 shell 的用法特性. 让我们先在PHP 的交互shell中来对php.ini设置进行一些配置吧. 6. 设置PHP命令行提示符 要设置PHP命令行提示,你需要在Linux终端中使用下

利用shell编程实现DOS风格的Linux命令行_unix linux

    如果你是习惯于Windows命令提示符的IT人,当你第一次使用Linux命令行时,一定会感到无所适从.你所熟悉的DOS命令再Linux中基本不存在.摆在你面前的是一大堆要记背的命令. 一种替代方案是利用强大的Linux外壳命令编写shell脚本,让你在Linux下也能用DOS命令.下面告诉你怎么做. shell脚本编写基础    从定时备份到执行简单命令,Linux的shell脚本可以执行各种功能.几乎所有的程序都可以用shell脚本来运行.在脚本中甚至可以包含一些简单的条件选择.she

《Linux命令行大全》——第1章 shell是什么 1.1终端仿真器

第1章 shell是什么 Linux命令行大全 当谈到命令行时,我们实际上指的是shell.shell是一个接收由键盘输入的命令,并将其传递给操作系统来执行的程序.几乎所有的Linux发行版都提供shell程序,该程序来自于称之为bash的GNU项目.bash是Bourne Again Shell的首字母缩写,Bourne Again Shell基于这样一个事实,即bash是sh的增强版本,而sh是最初的UNIX shell程序,由Steve Bourne编写. 1.1 终端仿真器 当使用图形用

linux 通过命令行执行脚本生成的文件所有者为root的解决办法

通过命令行执行脚本,生成和输出的文件所有者都是root,这就为webserver的二次处理增加了障碍. (1)通过 su www可以解决这一问题 然而通情况下为了安全www用户的shell指定的/sbin/nologin,这就意味这无法通过su来切换. (2)通过修改profile文件的umask来指定权限,等价于chmod 这一方法不仅麻烦,还不安全 (3)通过CURL激活 这也是一个办法,需要在代码中加入:  代码如下 复制代码 <?php ignore_user_abort(true);

linux命令行下使用curl命令查看自己机器的外网ip_linux shell

Linux命令行下如何查看自己机器的外网ip?可以在命令行下使用curl命令实现这个功能,试一下下面的命令吧 复制代码 代码如下: curl ifconfig.me 输入此条命令,就可以获取到本机的外网ip.

又一波你可能不知道的 Linux 命令行网络监控工具

又一波你可能不知道的 Linux 命令行网络监控工具 对任何规模的业务来说,网络监控工具都是一个重要的功能.网络监控的目标可能千差万别.比如,监控活动的目标可以是保证长期的网络服务.安全保护.对性能进行排查.网络使用统计等.由于它的目标不同,网络监控器使用很多不同的方式来完成任务.比如对包层面的嗅探,对数据流层面的统计数据,向网络中注入探测的流量,分析服务器日志等. 尽管有许多专用的网络监控系统可以365天24小时监控,但您依旧可以在特定的情况下使用命令行式的网络监控器,某些命令行式的网络监控器

如何在Linux中启用Shell脚本的调试模式

脚本是存储在一个文件的一系列命令.在终端上输入一个个命令,按顺序执行的方法太弱了,使用脚本,系统中的用户可以在一个文件中存储所有命令,反复调用该文件多次重新执行命令. 在学习脚本或写脚本的初期阶段,我们通常从写小脚本或者几行命令的短脚本开始,调试这样的脚本时我们通常无非就是通过观察它们的输出来确保其正常工作. 然而,当我们开始写非常长或上千行命令的高级脚本,例如改变系统设置的脚本,在网络上执行关键备份 等等,我们会意识到仅仅看脚本输出是不足以在脚本中找到 Bug 的! 因此,在 Linux 系列

推荐 | 基于Linux命令行的五个文件下载和网站浏览工具

Linux命令行是GNU/Linux中最神奇迷人的部分,它是非常强大的工具.命令行本身功能多样,多种内建或者第三方的命令行应用使得Linux变得更加健壮和强大.Linux Shell支持多种不同类型的网络应用,无论是BT下载软件,专用下载器或者互联网冲浪. 5个命令行互联网工具 这里我们介绍了5个很好的命令行互联网工具,它们非常有用,也很容易上手. 1. rTorrent rTorrent是基于文本,用C++编写,追求高性能的Torrent客户端.支持大部分标准的Linux发行版,包括FreeB

Linux 命令行工具使用小贴士及技巧(二)

在本系列的第一部分中,我们通过讨论 cd - 命令的用法,重点介绍了 Linux 中的命令行导航.还讨论了一些其他相关要点/概念.现在进一步讨论,在本文中,我们将讨论如何使用 pushd 和 popd 命令在 Linux 命令行上获得更快的导航体验. 在我们开始之前,值得说明的一点是,此后提到的所有指导和命令已经在 Ubuntu 14.04 和 Bash shell(4.3.11)上测试过. pushd 和 popd 命令基础 为了更好地理解 pushd 和 popd 命令的作用,让我们先讨论堆