天天看点

Linux Shell脚本之通过json判断应用程序内部运行状态

成功:

1

2

3

4

<code>{    </code>

<code>    </code><code>"errcode"</code><code>: </code><code>"0"</code><code>,    </code>

<code>        </code><code>"errmsg"</code><code>: </code><code>"ok"</code>    

<code>}</code>

失败:

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

<code>    </code><code>"errcode"</code><code>: </code><code>"1"</code><code>,    </code>

<code>    </code><code>"errmsg"</code><code>: {    </code>

<code>        </code><code>"mysql"</code><code>: {    </code>

<code>            </code><code>"code"</code><code>: </code><code>"0"</code><code>,    </code>

<code>            </code><code>"msg"</code><code>: </code><code>"ok"</code>    

<code>        </code><code>},    </code>

<code>        </code><code>"memcache"</code><code>: {    </code>

<code>            </code><code>"msg"</code><code>: </code><code>"0"</code>    

<code>        </code><code>"mq"</code><code>: {    </code>

<code>        </code><code>"bs"</code><code>: {    </code>

<code>            </code><code>"code"</code><code>: </code><code>"1"</code><code>,    </code>

<code>            </code><code>"msg"</code><code>: </code><code>"os与bs连接出现故障"</code>    

<code>        </code><code>"redis"</code><code>: {    </code>

<code>        </code><code>}    </code>

<code>    </code><code>}    </code>

<code>        </code><code>"errmsg"</code><code>: {    </code>

由于今晚就要更新包含这段代码的应用,有可能来不及修改,因此我只能重新修改一下先前写好的脚本,现将脚本展示如下:

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

<code>#!/bin/bash</code>

<code># shell script details</code>

<code># name:                                 getdata_gwservice.sh</code>

<code># version:                              1.0</code>

<code># visual name(human readable format):   get data from web service(gwservice)</code>

<code># shell script function:                get data from web service with curl, data format is json</code>

<code># author:                               guodong ding</code>

<code># date:                                 thu aug 20 09:56:26 cst 2015</code>

<code># parameter is necessary</code>

<code>[ ! -z </code><code>"$1"</code> <code>] || </code><code>exit</code> <code>1</code>

<code># resolve "jq" command for parse json</code>

<code>if</code> <code>[[ ! `</code><code>which</code> <code>jq` ]]; </code><code>then</code>

<code>    </code><code>echo</code> <code>"jq is not installed on target system, please install it first! "</code>

<code>    </code><code># adaptive for centos or ubuntu</code>

<code>    </code><code>apt-get -qq -y </code><code>install</code> <code>jq || yum -y </code><code>install</code> <code>jq</code>

<code>    </code><code>[ $? -</code><code>ne</code> <code>0 ] &amp;&amp; </code><code>echo</code> <code>"trying install jq failed! "</code><code>;</code><code>echo</code> <code>"trying install jq successfully! "</code>

<code>    </code><code>echo</code> <code>"$(which jq) is found!"</code>

<code>    </code><code>echo</code> <code>1</code>

<code>fi</code>

<code># refactoring curl cli</code>

<code>curl=$(</code><code>which</code> <code>curl)</code>

<code>postdata=</code><code>"accesscode=somecode&amp;method=someapiname"</code>

<code># test environment</code>

<code>url=http:</code><code>//hostname/url/api</code>

<code># production environment</code>

<code>#url=http://hostname/url/api</code>

<code># todo</code>

<code># why not execute a string as command?</code>

<code># curlcli="$curl -d \"$postdata\" $url 2&gt;/dev/null"</code>

<code># make repeated cli to a function</code>

<code>function</code> <code>curlcli() {</code>

<code>    </code><code>$curl -m 10 --connect-timeout 10 -s -d </code><code>"$postdata"</code> <code>$url 2&gt;</code><code>/dev/null</code>

<code>    </code><code># for test purpose</code>

<code>    </code><code>#echo '{"errcode":"1","errmsg":{"mysql":{"code":"0","msg":"ok"},"memcache":{"code":"0","msg":"0"},"mq":{"code":"0","msg":"ok"},"bs":{"code":"1","errmsg":"os与bs连接出.故障"},"redis":{"code":"0","errmsg":"ok"}}}'</code>

<code>    </code><code>[ $? -</code><code>ne</code> <code>0 ] &amp;&amp; </code><code>exit</code> <code>$?</code>

<code># how to merge function totalstatus() and function total_error_status() into a function?</code>

<code>function</code> <code>totalstatus() {</code>

<code>    </code><code># another awk expression is: awk '{print int($1)}'</code>

<code>    </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>function</code> <code>total_error_status() {</code>

<code>    </code><code>outputswitch=`curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code><code>`</code>

<code>    </code><code>if</code> <code>[[ $outputswitch -</code><code>eq</code> <code>1 ]]; </code><code>then</code>

<code>        </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code> <code>&gt;</code><code>/dev/null</code> <code>2&gt;&amp;1</code>

<code>    </code><code>else</code>

<code>        </code><code>curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>    </code><code>fi</code>

<code>    </code><code># todo</code>

<code>    </code><code># why we need a return for this function ? because we will use "||" to determine result of cli</code>

<code>    </code><code># by the way , "||" is depended on the result which returned with keyword "return"</code>

<code>    </code><code># tested pass with return a numeric argument lager than 1</code>

<code>    </code><code>return</code> <code>`curlcli | jq </code><code>".errcode"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code><code>`</code>

<code>function</code> <code>mysqlstatus() {</code>

<code>    </code><code>curlcli | jq </code><code>".errmsg.mysql.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>function</code> <code>memcachedstatus() {</code>

<code>    </code><code>curlcli | jq </code><code>".errmsg.memcache.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>function</code> <code>messagequeuestatus() {</code>

<code>    </code><code>curlcli | jq </code><code>".errmsg.mq.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>function</code> <code>businessservicestatus() {</code>

<code>    </code><code>curlcli | jq </code><code>".errmsg.bs.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>function</code> <code>redisstatus() {</code>

<code>    </code><code>curlcli | jq </code><code>".errmsg.redis.code"</code> <code>| </code><code>awk</code> <code>-f </code><code>'"'</code> <code>'/[0-9]/ {print $2}'</code>

<code>case</code> <code>$1 </code><code>in</code>

<code>    </code><code>totalstatus )</code>

<code>        </code><code>totalstatus</code>

<code>        </code><code>;;</code>

<code>    </code><code>mysqlstatus )</code>

<code>        </code><code>total_error_status || mysqlstatus</code>

<code>    </code><code>memcachedstatus )</code>

<code>        </code><code>total_error_status || memcachedstatus</code>

<code>    </code><code>messagequeuestatus )</code>

<code>        </code><code>total_error_status || messagequeuestatus</code>

<code>    </code><code>businessservicestatus )</code>

<code>        </code><code>total_error_status || businessservicestatus</code>

<code>    </code><code>redisstatus )</code>

<code>        </code><code>total_error_status || redisstatus</code>

<code>esac</code>

<code># shell script details:</code>

<code># version:                              2.0</code>

<code># visual name(human readable format):   get data from web service(gwservice) for zabbix monitoring</code>

<code>    </code><code>#echo '{"errcode":"1","errmsg":{"mysql":{"code":"0","msg":"ok"},"memcatch":{"code":"0","msg":"0"},"mq":{"code":"0","msg":"ok"},"bs":{"code":"1","errmsg":"os与bs连接出.故障"},"redis":{"code":"0","errmsg":"ok"}}}'</code>

<code>    </code><code># todo, toremember</code>

<code>    </code><code># why we need a return for this function? because we will use "||" to determine result of cli, </code>

<code>    </code><code># such as "totalstatus &gt;/dev/null 2&gt;&amp;1 || mysqlstatus".</code>

<code>    </code><code># by the way , "||" is depended on the result which returned with keyword "return", </code>

<code>    </code><code># tested pass with return a numeric argument lager than 1 , such as 1001, 9003, etc</code>

<code>        </code><code>mysqlstatus</code>

<code>        </code><code>memcachedstatus</code>

<code>        </code><code>messagequeuestatus</code>

<code>        </code><code>businessservicestatus</code>

<code>        </code><code>redisstatus</code>

<code>    </code><code>* )</code>

<code>        </code><code>exit</code> <code>1</code>

tag:linux命令行解析json,linux shell解析json,zabbix业务监控,zabbix自定义用户参数,zabbix api

--end--

继续阅读