“凡是過去,皆為序曲”
創(chuàng)新互聯(lián)長(zhǎng)期為千余家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為城中企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè),城中網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
---莎士比亞
前言:本文其實(shí)是給公司寫的一篇文章,不過因?yàn)闀r(shí)間倉促,當(dāng)時(shí)文章并沒有關(guān)于代碼的分析,只是關(guān)于數(shù)據(jù)的展示,不過覺得很有價(jià)值,所以再做分享。
了解我的人,當(dāng)然知道,本寶寶要大家跟我做的第一件事是什么~
首先,大家跟我念,Python大fa好。
本文皆是一家之言,如有偏頗還望指正。
在筆者的看來,如果數(shù)據(jù)不能可視化話,那么很大程度來說就是在扯淡,當(dāng)然數(shù)據(jù)可視化也僅僅是×××長(zhǎng)征第一步。數(shù)據(jù)就像一堆堆的石子,也許不能就這一篇文章帶領(lǐng)大家觀其全貌,但至少管中窺豹,可見一斑。
那么數(shù)據(jù)到底長(zhǎng)什么樣呢?
它可能長(zhǎng)這樣。
又或者是這樣
如果你Excel足夠牛逼我想你是能夠用excel做出足夠厲害的圖的,但也只是足夠而已。
在筆者看來數(shù)據(jù)至少是長(zhǎng)這樣。
再或者是這樣的。
注:上面使用的是ELK套件
ELK安裝文檔,參考:http://youerning.blog.51cto.com/10513771/1726338
但這只是冰山一角,還遠(yuǎn)遠(yuǎn)不夠,工具誰能用,怎么用是一個(gè)層次,在這基礎(chǔ)上再次利用則是另一個(gè)層次,為了文章篇幅,本文主要著重于后者并將視線鎖定在日志數(shù)據(jù),其他數(shù)據(jù)暫不考慮。
日志的數(shù)據(jù)至少得有三個(gè)作用
一:數(shù)據(jù)應(yīng)該能說明問題或者現(xiàn)象。
二:數(shù)據(jù)應(yīng)該能解決問題。
三:數(shù)據(jù)應(yīng)該能預(yù)測(cè)與預(yù)防問題。
第一點(diǎn)很好理解那就是,數(shù)據(jù)在可視化的過程能夠很直觀的說明問題或者現(xiàn)象,即使通過最基本的提取過濾,我們能夠知道在一段時(shí)間內(nèi)多大的訪問量,客戶端的設(shè)備是什么,響應(yīng)時(shí)間多少,在往下細(xì)化,應(yīng)該是每個(gè)ip的訪問次數(shù),并且訪問了什么內(nèi)容,常訪問什么內(nèi)容,在知道響應(yīng)時(shí)間的前提上,了解哪個(gè)訪問鏈接耗時(shí)最長(zhǎng)等等,以及一些可能職責(zé)之外的事,具體細(xì)節(jié)請(qǐng)自行腦洞。
下面是簡(jiǎn)單的全球訪問IP熱點(diǎn)圖:
注:不要問我為什么不用ELK自帶的熱點(diǎn)圖,兩個(gè)字,任性~
第二點(diǎn),既然日志能說明問題當(dāng)然能解決問題,日志文件除了最基本的info記錄,當(dāng)然還有debug信息,通過debug信息我們知道程序運(yùn)行到什么地方拋出了這個(gè)bug,為什么拋出這個(gè)bug,為了第一時(shí)間響應(yīng),我們還得快速定位到拋出bug的主機(jī)。
通過簡(jiǎn)單的查詢我們可以快速定位到404狀態(tài)發(fā)生的主機(jī),及其發(fā)生時(shí)間,以及客戶端的使用設(shè)備為什么,以及在訪問什么的時(shí)候拋出404。
第三點(diǎn),問題在一定程度上并不可怕,可怕的是不能及時(shí)處理以及反復(fù)出現(xiàn)卻束手無策,所以怎樣有效的利用數(shù)據(jù)的基礎(chǔ)上再配合可靠并實(shí)時(shí)監(jiān)控報(bào)警機(jī)制就顯得至關(guān)重要了。而關(guān)于預(yù)測(cè),可以通過的一定的算法數(shù)據(jù)都量化,然后評(píng)估以及模擬。
談完了基礎(chǔ),我們著重談?wù)勅罩緮?shù)據(jù)的再次利用。
也主要分為三個(gè)部分:
一:簡(jiǎn)單統(tǒng)計(jì),無論通過rrdtool或者Excel,或者Python,只要有數(shù)據(jù),通過預(yù)選及數(shù)據(jù)清洗,就能得到自己想要的數(shù)據(jù),在擁有數(shù)據(jù)的情況下,可視化也就顯得自然而然了。
二:統(tǒng)計(jì)細(xì)化,數(shù)據(jù)的可視化可能只是數(shù)據(jù)分析的一部分,因?yàn)榭梢暬荒苷故竞芎?jiǎn)單的結(jié)果,并不能聽見數(shù)據(jù)內(nèi)心中吶喊的聲音,所以一定程度的統(tǒng)計(jì)技術(shù)以及編程基礎(chǔ)相當(dāng)重要,慶幸的是Python有足夠的支持庫。
三:統(tǒng)計(jì)分析,這一方面可能較于大多數(shù)人并無用處,并且并不關(guān)心,所以在此略過。
一:簡(jiǎn)單統(tǒng)計(jì)
單日的Top IP,Top URL,Top City開始吧。
Top IP
Top URL
Top 城市
由上面三個(gè)圖,我們就能直觀知道我們當(dāng)日最常訪問的IP,URL,以及城市,單個(gè)IP太頻繁并次數(shù)過多我們需要注意,URL可以幫助我們?cè)u(píng)估,而城市可以讓我們知道服務(wù)的受眾分布情況,而最簡(jiǎn)單的一個(gè)作用可能就是cdn加速了,其他方面請(qǐng)大家自行腦洞,這里不做展開。
二:統(tǒng)計(jì)細(xì)化
我們?cè)谏厦娴幕A(chǔ)上再次細(xì)化,比如每個(gè)城市中的終端設(shè)備使用情況,如下圖
當(dāng)然也可以反過來看
三:統(tǒng)計(jì)分析
我們簡(jiǎn)單看看用戶終端設(shè)備,安卓與蘋果的相關(guān)系數(shù)。
基本走勢(shì)圖分析
以及各終端相關(guān)關(guān)系,如下
再或者
相關(guān)關(guān)系。
無論是從走勢(shì)或者相關(guān)系數(shù),當(dāng)日安卓與蘋果存在一定的的相關(guān)性。
在第三部分的附圖中,可能大多數(shù)人除了走勢(shì)圖,大都看不懂,在這里也不會(huì)過多的講解各個(gè)參數(shù)以及所對(duì)應(yīng)的關(guān)系,因?yàn)橹v解這些內(nèi)容的時(shí)間可能比這一篇文章還會(huì)長(zhǎng),雖然這并算不上大數(shù)據(jù),但是還是想借用《大數(shù)據(jù)時(shí)代》里的一句話,作為本文的結(jié)尾。“大數(shù)據(jù)告訴我們“是什么”而不是“為什么”。在大數(shù)據(jù)時(shí)代,我們不必知道現(xiàn)象背后的原因,我們只要讓數(shù)據(jù)自己發(fā)聲?!?/p>
注:因?yàn)槭侨〉钠渲幸惶斓臄?shù)據(jù),在誤差存在的同時(shí)數(shù)據(jù)處理過程中也存在也有很多的不規(guī)范,但這篇文章主要是為了給大家一些關(guān)于數(shù)據(jù)的認(rèn)識(shí)。
好吧,上面就是傳說中的PPT了,就算你不看文字內(nèi)容,但是你也大概能知道通過數(shù)據(jù)可視化,我們能夠?qū)?shù)據(jù)的展現(xiàn)形式做到上面程度,而下面的內(nèi)容只要就是關(guān)于其中一部分可視化的代碼講解。
因?yàn)楸疚牡臄?shù)據(jù)是基于Elasticsearch存儲(chǔ)的,所以先決條件,你得有存在Elasticsearch里的數(shù)據(jù)內(nèi)容,如果你對(duì)Pandas有所了解,你可能看看代碼也就知道怎么回事了
# -*- coding: utf-8 -*- #============================================================================== # 用于生成Top IP,Top URL,歷史 Top IP,Top URL #============================================================================== import pandas as pd from pandas import DataFrame import matplotlib.pyplot as plt import numpy as np import seaborn as sns from elasticsearch import Elasticsearch import arrow ##es api es = Elasticsearch(["http://IP:9200/"]) ##時(shí)間設(shè)定 #time_now = arrow.now().format("X") + "000" index_today = "logstash-" + arrow.now().format("YYYY.MM.DD") index_all = "logstash-*" #time_yesterday = arrow.now().replace(days=-1).format("X") + "000" #time_year = arrow.now().replace(years=-1).format("X") + "000" ##查詢字段 q_url="xxx_url" q_ip="xxxx_ip" ##查詢語句設(shè)定函數(shù) def top_search(query_str): rets = """{ "size":0, "query":{ "filtered":{ "filter":{ "bool":{ "must":[ { "term":{"type":"xxxxx_access"}} ] } }, "query": { "query_string": { "query": "!xxxxx", "analyze_wildcard": true } } } }, "aggs":{ "%s":{ "terms":{"field":"%s", "size":15} } } }""" %(query_str,query_str + ".raw") return rets ##執(zhí)行查詢 today_top_ip = es.search(index=index_today,body=top_search(q_ip)) today_top_url = es.search(index=index_today,body=top_search(q_url)) year_top_ip = es.search(index=index_all,body=top_search(q_ip)) year_top_url = es.search(index=index_all,body=top_search(q_url)) df_today_ip = DataFrame(today_top_ip["aggregations"][q_ip]["buckets"]) df_today_url = DataFrame(today_top_url["aggregations"][q_url]["buckets"]) df_all_ip = DataFrame(year_top_ip["aggregations"][q_ip]["buckets"]) df_all_url = DataFrame(year_top_url["aggregations"][q_url]["buckets"]) p1 = sns.factorplot(x="key",y="doc_count",data=df_today_ip, kind="bar",palette="summer") p1.set_xticklabels(rotation=90) p1.set_titles("Today Top 15 IP") p1.savefig("topip_today.png",dpi=100) p3 = sns.factorplot(x="key",y="doc_count",data=df_all_ip, kind="bar",palette="summer") p3.set_xticklabels(rotation=90) p3.set_titles("Top 15 IP") p3.savefig("topip.png",dpi=100)
通過上面的代碼,我們能夠生成當(dāng)日的Top 15 IP以及歷史Top 15 IP。
值得注意的是,你是能夠單純通過Kibana過濾出這些數(shù)據(jù)的,并且也很好看,但是為什么用Python呢,因?yàn)橥ㄟ^Kibana能夠數(shù)據(jù)可視化,不過對(duì)于數(shù)據(jù)的再利用就不那么理想了,比如生成報(bào)表或者一些更高級(jí)的可視化定制,這里主要是為了給大家一個(gè)通過Python調(diào)用Elasticsearch APi的基本認(rèn)識(shí)。
下面主要挑幾個(gè)重要的部分講解。
首先安裝依賴庫:
pip install elasticsearch
至于pandas之類的科學(xué)分析庫安裝請(qǐng)參考:http://youerning.blog.51cto.com/10513771/1711008
然后基本調(diào)用。
from elasticsearch import Elasticsearch import arrow ##es api es = Elasticsearch(["http://IP:9200/"])
查詢語句參考官方:https://www.elastic.co/guide/en/elasticsearch/reference/1.7/search.html
doc = """{"size":0, "query":{ "filtered":{ "filter":{ "bool":{ "must":[ { "term":{"type":"xxxxx_access"}} ] } }, "query": { "query_string": { "query": "!xxxxx", "analyze_wildcard": true } } } }, "aggs":{ "ip":{ "terms":{"field":"xxx_ip", "size":15} } } }"""
上面的語句的意思分別是返回查詢結(jié)果0 =>size = 0
然后查詢條件type為“xxxx_access”的數(shù)據(jù),并查詢非"xxxxx"的內(nèi)容,即過濾有xxxx的字符串。
然后就是我們主要用到的aggs,aggs代表聚合,因?yàn)镋lasticsearch的其中一個(gè)強(qiáng)大之處,就是關(guān)于數(shù)據(jù)的處理,我們有過aggs,聚合條件為xxx_ip,所以返回的結(jié)果是統(tǒng)計(jì)過的結(jié)果,比如這個(gè)IP一共多少次,而這里的我們?cè)O(shè)置size=15,即返回15條聚合過的數(shù)據(jù)。
然后我們執(zhí)行查詢:
In [19]: es.search(index=index_today,body=top_search(q_ip))
查詢結(jié)果如上
總結(jié):數(shù)據(jù)的使用多種多樣,只要你腦洞夠大~~~
后記:其實(shí)運(yùn)維工程師手里擁有大量資源,但是無論上級(jí)或者運(yùn)維工程師本人卻不予重視,一方面是是因?yàn)榫幊痰囊欢ㄩT檻,再者就是畫地為牢,不過像我這樣的運(yùn)維工程師,應(yīng)該可能也不太像個(gè)傳統(tǒng)的運(yùn)維工程師了吧,畢竟最本質(zhì)的職責(zé)是對(duì)于系統(tǒng)的維護(hù),以及故障處理等,在本文的數(shù)據(jù)再利用的三個(gè)方面,我想大多數(shù)同行覺得第一層利用就遠(yuǎn)遠(yuǎn)足夠了,不過隨著時(shí)代的發(fā)展,數(shù)據(jù)爆發(fā)式的增長(zhǎng)的今天,我們真的能對(duì)自己手上的大量資源,不聞不問么。
新聞名稱:大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i
當(dāng)前路徑:http://jinyejixie.com/article32/psihsc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、品牌網(wǎng)站建設(shè)、營(yíng)銷型網(wǎng)站建設(shè)、云服務(wù)器、域名注冊(cè)、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)