大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i-創(chuàng)新互聯(lián)

“凡是過去,皆為序曲”

成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供新源網(wǎng)站建設(shè)、新源做網(wǎng)站、新源網(wǎng)站設(shè)計(jì)、新源網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、新源企業(yè)網(wǎng)站模板建站服務(wù),10余年新源做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。

                          ---莎士比亞

 前言:本文其實(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ù)可視化也僅僅是×××長征第一步。數(shù)據(jù)就像一堆堆的石子,也許不能就這一篇文章帶領(lǐng)大家觀其全貌,但至少管中窺豹,可見一斑。

  那么數(shù)據(jù)到底長什么樣呢?

  它可能長這樣。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

又或者是這樣

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

如果你Excel足夠牛逼我想你是能夠用excel做出足夠厲害的圖的,但也只是足夠而已。

在筆者看來數(shù)據(jù)至少是長這樣。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

再或者是這樣的。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

注:上面使用的是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í)最長等等,以及一些可能職責(zé)之外的事,具體細(xì)節(jié)請(qǐng)自行腦洞。

 下面是簡單的全球訪問IP熱點(diǎn)圖:

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 注:不要問我為什么不用ELK自帶的熱點(diǎn)圖,兩個(gè)字,任性~

第二點(diǎn),既然日志能說明問題當(dāng)然能解決問題,日志文件除了最基本的info記錄,當(dāng)然還有debug信息,通過debug信息我們知道程序運(yùn)行到什么地方拋出了這個(gè)bug,為什么拋出這個(gè)bug,為了第一時(shí)間響應(yīng),我們還得快速定位到拋出bug的主機(jī)。

通過簡單的查詢我們可以快速定位到404狀態(tài)發(fā)生的主機(jī),及其發(fā)生時(shí)間,以及客戶端的使用設(shè)備為什么,以及在訪問什么的時(shí)候拋出404。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 第三點(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)估以及模擬。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 談完了基礎(chǔ),我們著重談?wù)勅罩緮?shù)據(jù)的再次利用。

 也主要分為三個(gè)部分:

 一:簡單統(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)榭梢暬荒苷故竞芎唵蔚慕Y(jié)果,并不能聽見數(shù)據(jù)內(nèi)心中吶喊的聲音,所以一定程度的統(tǒng)計(jì)技術(shù)以及編程基礎(chǔ)相當(dāng)重要,慶幸的是Python有足夠的支持庫。

 三:統(tǒng)計(jì)分析,這一方面可能較于大多數(shù)人并無用處,并且并不關(guān)心,所以在此略過。

 一:簡單統(tǒng)計(jì)

 單日的Top IP,Top URL,Top City開始吧。

 Top IP

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 Top URL

 大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 Top 城市

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

 由上面三個(gè)圖,我們就能直觀知道我們當(dāng)日最常訪問的IP,URL,以及城市,單個(gè)IP太頻繁并次數(shù)過多我們需要注意,URL可以幫助我們?cè)u(píng)估,而城市可以讓我們知道服務(wù)的受眾分布情況,而最簡單的一個(gè)作用可能就是CDN加速了,其他方面請(qǐng)大家自行腦洞,這里不做展開。

二:統(tǒng)計(jì)細(xì)化

我們?cè)谏厦娴幕A(chǔ)上再次細(xì)化,比如每個(gè)城市中的終端設(shè)備使用情況,如下圖

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

當(dāng)然也可以反過來看

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

三:統(tǒng)計(jì)分析

我們簡單看看用戶終端設(shè)備,安卓與蘋果的相關(guān)系數(shù)。

基本走勢(shì)圖分析            大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

以及各終端相關(guān)關(guān)系,如下

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

再或者

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

相關(guān)關(guān)系。

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

無論是從走勢(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ì)長,雖然這并算不上大數(shù)據(jù),但是還是想借用《大數(shù)據(jù)時(shí)代》里的一句話,作為本文的結(jié)尾。“大數(shù)據(jù)告訴我們“是什么”而不是“為什么”。在大數(shù)據(jù)時(shí)代,我們不必知道現(xiàn)象背后的原因,我們只要讓數(shù)據(jù)自己發(fā)聲。”

  注:因?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))

大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i

查詢結(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ā)式的增長的今天,我們真的能對(duì)自己手上的大量資源,不聞不問么。

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。

名稱欄目:大數(shù)據(jù)時(shí)代里,運(yùn)維工程師的自我修養(yǎng)i-創(chuàng)新互聯(lián)
轉(zhuǎn)載注明:http://muchs.cn/article16/dsppdg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供搜索引擎優(yōu)化、標(biāo)簽優(yōu)化、網(wǎng)站策劃、網(wǎng)站營銷、域名注冊(cè)、云服務(wù)器

廣告

聲明:本網(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)

成都定制網(wǎng)站網(wǎng)頁設(shè)計(jì)