接前一篇文章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值。
- 腳本內(nèi)容為:
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
- 賦予腳本執(zhí)行權(quán)限,否則不能正常獲取key值育八。
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
- 在zabbix-agent端執(zhí)行
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)建聚合圖像,多個組合展示圖形扛拨。