zabbix的自定義鍵值key和自動發(fā)現(xiàn)規(guī)則監(jiān)控nginx的api請求響應(yīng)時間totaltime指標(biāo)(每分鐘指標(biāo))

接前一篇文章filebeat+logstash+elasticsearch+kibana解析nginx日志并展示

1.創(chuàng)建三個腳本

  • 1.1 getSourceApis.sh
    利用腳本,拼寫查詢語句,獲取最新一分鐘內(nèi)被調(diào)用的接口信息妒御,存入到一個臨時文件中result.json。利用crontab骤素,設(shè)置每分鐘查詢一次腳本。

    執(zhí)行crontab -e后愚屁,加入如下命令:

    */1 * * * * /path/to/getSourceApis.sh > /tmp/result.json
    
    • 腳本內(nèi)容如下:

      #!/bin/bash
      curl -XGET -H "Content-Type:application/json" 127.0.0.1:9200/filebeat-6.5.4-*/_search -d '
      {
        "aggs": {
          "apis": {
            "terms": {
              "field": "api",
              "size": 9000
            }          
          }
        },
        "query": {
          "bool": {
            "must": [
            
               "range": {
                  "@timestamp": {
                    "gte": "now-1m",
                    "lte": "now"
                  }
                }
            
              {
                "query_string": {
                  "default_field": "*",
                  "query": "(NOT nginx.access.url:*.js) AND (NOT nginx.access.url:*.css) AND (NOT nginx.access.url:*.ico) AND (NOT nginx.access.url:*.png) AND (NOT nginx.access.url:*.jpeg) AND (NOT nginx.access.url:*.jpg) AND (NOT nginx.access.url:*.gif)",
                  "analyze_wildcard": true
                }
              }
            ]
          }
        },
        "size": 0
      }'
      

      獲取的結(jié)果為json格式济竹,包含所有的api和對應(yīng)的數(shù)量。

    • 結(jié)果數(shù)據(jù)格式如下:(方便展示霎槐,對數(shù)據(jù)進(jìn)行了格式化)

      {
          "took" : 48,
          "timed_out" : false,
          "_shards" : {
              "total" : 5,
              "successful" : 5,
               "skipped" : 0,
              "failed" : 0
          },
          "hits" : {
              "total" : 494,
              "max_score" : 0.0,
              "hits" : [ ]
          },
          "aggregations" : {
               "apis" : {
                    "doc_count_error_upper_bound" : 0,
                    "sum_other_doc_count" : 0,
                    "buckets" : [
                        {
                            "key" : "/aaa/bbb/ccc",
                            "doc_count" : 50
                        },
                        {
                            ...
                        },
                        {
                            "key" : "/ddd/eee/fff",
                            "doc_count" : 13
                        }
                   ]
               }
          }
      }
      
    • 利用crontab設(shè)置定時器送浊,每分鐘執(zhí)行一次,結(jié)果輸出到一個臨時文件中result.json丘跌,便于getmetrics.py腳本獲取最新數(shù)據(jù)袭景,并轉(zhuǎn)換成特定的數(shù)據(jù)格式。

  • 1.2 getmetrics.py
    將臨時文件result.json中的數(shù)據(jù)轉(zhuǎn)換為特定的數(shù)據(jù)格式闭树,才能被zabbix自動發(fā)現(xiàn)耸棒。

    • 腳本內(nèi)容如下:

      import json
      with open("/tmp/result.json","r") as load_f:
          data = json.load(load_f)
      result = data['aggregations']['apis']['buckets']
      devices = []
      for one in result:
          devices.append({"{#URL}": one['key']})
      print json.dumps({'data': devices}, sort_keys=True, indent=4)
      

      設(shè)置宏變量#URL,在zabbix自動發(fā)現(xiàn)中可以獲取宏變量的值蔼啦。

    • 轉(zhuǎn)換后的特定數(shù)據(jù)格式如下:

      {
          "data": [
              {
                  "{#URL}": "/aaa/bbb/ccc"
              },
              {...},
              {
                  "{#URL}": "/ddd/eee/fff"
              }
          ]
      }
      
    • 在zabbix-agent配置文件中榆纽,執(zhí)行該腳本,將格式化后的數(shù)據(jù)打印在控制臺中捏肢,便于zabbix獲取宏變量{#URL}的值。

  • nginx_api_metrics.sh
    傳入url和metic饥侵,獲取該url的totaltime對應(yīng)的指標(biāo)值
    執(zhí)行 ./nginx_api_metrics.sh <URL> <METRIC>鸵赫,獲取各個Api的各項指標(biāo)數(shù)據(jù)。(METRIC為value_count躏升、avg辩棒、max、min。前一分鐘的數(shù)量一睁、平均值钻弄、最大值、最小值)

    • 腳本內(nèi)容為:
      #!/bin/bash
      
      HOST="127.0.0.1" PORT="9200"
      DATE=$(date +%Y.%m.%d)
      
      URL=$1
      METRIC=$2
      
      #截取json數(shù)據(jù)中的數(shù)據(jù)
      function get_json_value()
      {
        local json=$1
        local key=$2
      
        if [[ -z "$3" ]]; then
          local num=1
        else
          local num=$3
        fi
      
        local value=$(echo "${json}" | awk -F"[,:}]" '{for(i=1;i<=NF;i++){if($i~/'${key}'\042/){print $(i+1)}}}' | tr -d '"' | sed -n ${num}p)
      
        echo ${value}
      }
      RESPONSE=$(curl -XGET -s -H "Content-Type:application/json"  $HOST:$PORT/filebeat-6.5.4-$DATE/_search -d '
      {
        "aggs": {
          "result": {
            '\"$METRIC\"': {
              "field": "totaltime"
            }
          }
        },
        "query": {
          "bool": {
            "must": [
              {
                "range": {
                  "@timestamp": {
                    "gte": "now-1m",
                    "lte": "now"
                  }
                }
              },
              {
                "match_phrase": {
                  "nginx.access.url": '\"$URL\"'
                }
              }
            ]
          }
        },
        "size": 0
      }')
      get_json_value $RESPONSE value
      
    • 在zabbix-agent配置文件中者吁,執(zhí)行該腳本窘俺,獲取具體url的metric值。

2.zabbix-agent中的配置信息

  • zabbix_agentd.conf中复凳,設(shè)置腳本配置文件位置
    Include=/etc/zabbix/zabbix_agentd.d/*.conf
    #以root權(quán)限執(zhí)行
    AllowRoot=1
    User=root
    
  • /etc/zabbix/zabbix_agentd.d/下創(chuàng)建配置文件nginx_api_metrics.conf瘤泪,內(nèi)容如下:
    UserParameter=nginx.api.discovery,python /path/to/getmetrics.py
    #$1為`<URL>`,$2為`<METRIC>`
    UserParameter=nginx.api[*],sh /path/to/nginx_api_metrics.sh $1 $2
    
  • 注意:
    • 賦予腳本執(zhí)行權(quán)限,否則不能正常獲取key值育八。
      sudo chmod +x /path/to/getmetrics.py
      sudo chmod +x /path/to/nginx_api_metrics.sh
      

3.重啟zabbix-agent

  • 執(zhí)行命令systemctl restart zabbix-agent

4.測試鍵值nginx.api[<URL> <METRIC>]

  • 測試鍵值是否有效
    • 在zabbix-agent端執(zhí)行
      #命令:./zabbix_agent -t "nginx.api[<URL> <METRIC>]"
      #結(jié)果:<key> [t|<value>]
      ./zabbix_agent -t "nginx.api[/aaa/bbb/ccc,value_count]"
      nginx.api[/aaa/bbb/ccc,value_count] [t|12]
      
    • 在zabbix-server端執(zhí)行
      #命令:./zabbix_get -s 127.0.0.1 -k "nginx.api[<URL>,<METRIC>]"
      #結(jié)果:<value>
      ./zabbix_get -s 127.0.0.1 -k "nginx.api[/aaa/bbb/ccc,value_count]"
      23
      

5.在zabbix-agent下創(chuàng)建發(fā)現(xiàn)規(guī)則对途、監(jiān)控項原型、圖形原型

  • 創(chuàng)建自動發(fā)現(xiàn)規(guī)則
    名稱:nginx.api.discovery
    鍵值:nginx.api.discovery
    數(shù)據(jù)更新間隔:60s
    
  • 給發(fā)現(xiàn)規(guī)則創(chuàng)建監(jiān)控項原型
    #四個指標(biāo)(value_count髓棋、avg实檀、max、min)
    名稱:nginx.api[{#URL},value_count]
    
    鍵值:nginx.api[{#URL},value_count]
    
    新的應(yīng)用集:nginxapimetrics
    
  • 創(chuàng)建圖形原型
    名稱:nginx.api[{#URL}] monitor
    
    添加原型按声,將
    nginx.api[{#URL},value_count]劲妙,
    nginx.api[{#URL},max],
    nginx.api[{#URL},avg]儒喊,
    nginx.api[{#URL},min]全部加入監(jiān)控項中镣奋。
    
    • 時間和數(shù)據(jù)度量不一樣,最好創(chuàng)建兩個圖形原型分別展示怀愧。

6.查看最新數(shù)據(jù)和圖形界面

  • 在檢測->最新數(shù)據(jù)中侨颈,查看最新數(shù)據(jù)
  • 在主機(jī)->圖形中,查看生成的圖形芯义。
  • 在檢測->聚合圖像中哈垢,創(chuàng)建聚合圖像,多個組合展示圖形扛拨。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耘分,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子绑警,更是在濱河造成了極大的恐慌求泰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件计盒,死亡現(xiàn)場離奇詭異渴频,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)北启,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評論 2 382
  • 文/潘曉璐 我一進(jìn)店門卜朗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來拔第,“玉大人,你說我怎么就攤上這事场钉∥冒常” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評論 0 342
  • 文/不壞的土叔 我叫張陵逛万,是天一觀的道長泳猬。 經(jīng)常有香客問我,道長泣港,這世上最難降的妖魔是什么暂殖? 我笑而不...
    開封第一講書人閱讀 55,252評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮当纱,結(jié)果婚禮上呛每,老公的妹妹穿的比我還像新娘。我一直安慰自己坡氯,他們只是感情好晨横,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著箫柳,像睡著了一般手形。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上悯恍,一...
    開封第一講書人閱讀 49,031評論 1 285
  • 那天库糠,我揣著相機(jī)與錄音,去河邊找鬼涮毫。 笑死瞬欧,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的罢防。 我是一名探鬼主播艘虎,決...
    沈念sama閱讀 38,340評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼咒吐!你這毒婦竟也來了野建?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評論 0 259
  • 序言:老撾萬榮一對情侶失蹤恬叹,失蹤者是張志新(化名)和其女友劉穎候生,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體妄呕,經(jīng)...
    沈念sama閱讀 43,466評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡陶舞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了绪励。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肿孵。...
    茶點(diǎn)故事閱讀 38,039評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖疏魏,靈堂內(nèi)的尸體忽然破棺而出停做,到底是詐尸還是另有隱情,我是刑警寧澤大莫,帶...
    沈念sama閱讀 33,701評論 4 323
  • 正文 年R本政府宣布蛉腌,位于F島的核電站,受9級特大地震影響只厘,放射性物質(zhì)發(fā)生泄漏烙丛。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評論 3 307
  • 文/蒙蒙 一羔味、第九天 我趴在偏房一處隱蔽的房頂上張望河咽。 院中可真熱鬧,春花似錦赋元、人聲如沸忘蟹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媚值。三九已至,卻和暖如春护糖,著一層夾襖步出監(jiān)牢的瞬間褥芒,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工嫡良, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留锰扶,地道東北人。 一個月前我還...
    沈念sama閱讀 45,497評論 2 354
  • 正文 我出身青樓皆刺,卻偏偏與公主長得像少辣,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子羡蛾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評論 2 345

推薦閱讀更多精彩內(nèi)容

  • Zabbix簡介 Zabbix官方網(wǎng)站Zabbix中文文檔 本文系統(tǒng)環(huán)境是CentOS7x86_64, Zabbi...
    Zhang21閱讀 7,958評論 0 37
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵勝奧閱讀 4,764評論 0 1
  • 前段時間有監(jiān)控服務(wù)器主機(jī)漓帅、應(yīng)用、交換機(jī)等的需求痴怨,所以對zabbix進(jìn)行了學(xué)習(xí)忙干,現(xiàn)在整理記錄全過程。 1.zabbi...
    不好聽丶閱讀 801評論 0 4
  • pyspark.sql模塊 模塊上下文 Spark SQL和DataFrames的重要類: pyspark.sql...
    mpro閱讀 9,446評論 0 13
  • 七月中元祭祖先浪藻, 荷燈引路孝兒賢捐迫。 靈魂普渡懷英烈, 取義成仁為國全爱葵。 (注:中元節(jié)施戴。中國歲時節(jié)令有"三元":指正...
    筆名江風(fēng)閱讀 472評論 2 3