前兩天接到了一個新的需求,需要在linux shell指令碼中監控到mongodb最大串連數、記憶體使用量情況等。
但是我對於linux shel很不瞭解,只是會一些簡單常用的linux的操作而已,只要一頓狂搜,最終多番嘗試下終於擷取到這些值。
成功的步驟大致如下:
0、
./mongostat -u admin -p admin --authenticationDatabase admin -n 1 --json >> aaa.txt
把mongodb監控到的一行資料以json格式寫入到aaa.txt檔案中
1、
a=`cat aaa.txt`
讀取aaa.txt中的內容並賦值給a
擷取mapped映射到記憶體的資料大小:
2、
indma=`echo $a | awk '{printf("%d\n",match($0,"mapped"))}'`
擷取字串變數a中的子字串“mapped”的下標,並賦值給indma
3、
indma1=$(($indma+8))
給變數ind加8,把結果賦值給indma1
4、
indma0=`echo $a | awk '{printf("%d\n",match($0,"netIn"))}'`
擷取字串變數a中的子字串“netIn”的下標,並賦值給indma0
5、
indma2=$(($indma0-4))
給變數indma0減4,把結果賦值給indma2
6、
mastr=`echo ${a:$indma1:$(($indma2-$indma1))}`
擷取字串a中下標indma1到indma2之間的子字串並賦值給mastr,即mapped的值
擷取實體記憶體使用量:
7、
indre=`echo $a | awk '{printf("%d\n",match($0,"res"))}'`
擷取字串變數a中的子字串“res”的下標,並賦值給indre
8、
indre1=$(($indre+5))
給變數indre加5,把結果賦值給indre1
9、
indre0=`echo $a | awk '{printf("%d\n",match($0,"time"))}'`
擷取字串變數a中的子字串“time”的下標,並賦值給indre0
10、
indre2=$(($indre0-4))
給變數indre0減4,把結果賦值給indre2
11、
restr=`echo ${a:$indre1:$(($indre2-$indre1))}`
擷取字串a中下標indre1到indre2之間的子字串並賦值給restr,即res的值
擷取虛擬記憶體使用量:
12、
indvs=`echo $a | awk '{printf("%d\n",match($0,"vsize"))}'`
擷取字串變數a中的子字串“vsize”的下標,並賦值給indvs
13、
indvs1=$(($indvs+7))
給變數indvs加5,把結果賦值給indvs1
14、
indvs0=${#a}
擷取字串變數a的總長度
15、
indvs2=$(($indvs0-3))
給變數indvs0減3,把結果賦值給indvs2
16、
vsstr=`echo ${a:$indvs1:$(($indvs2-$indvs1))}`
擷取字串a中下標indvs1到indvs2之間的子字串並賦值給vsstr,即vsize的值
擷取當前串連數:
17、
indco=`echo $a | awk '{printf("%d\n",match($0,"conn"))}'`
擷取字串變數a中的子字串“conn”的下標,並賦值給indco
18、
indco1=$(($indco+6))
給變數indco加6,把結果賦值給indco1
19、
indco0=`echo $a | awk '{printf("%d\n",match($0,"delete"))}'`
擷取字串變數a中的子字串“delete”的下標,並賦值給indco0
20、
indco2=$(($indco0-4))
給變數indco0減4,把結果賦值給indco2
21、
costr=`echo ${a:$indco1:$(($indco2-$indco1))}`
擷取字串a中下標indco1到indco2之間的子字串並賦值給costr,即conn的值
最大串連數819,空閑串連數可以根據最大串連數和當前串連數算出來。