<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          如何在12個(gè)小時(shí),搞定http監(jiān)控?

          共 4661字,需瀏覽 10分鐘

           ·

          2020-12-01 14:16

          系統(tǒng)監(jiān)控,是做系統(tǒng)必須解決的一個(gè)問題。創(chuàng)業(yè)型公司,微服務(wù)以前,如何用半天的時(shí)間,搞定一個(gè)可擴(kuò)展,通用http監(jiān)控框架,是今天要聊的話題。

          有哪些常見http監(jiān)控需求?
          常見的http監(jiān)控需求有兩類:
          (1)html頁面監(jiān)控;
          (2)返回json數(shù)據(jù)的http接口;

          常見的http監(jiān)控怎么玩?
          可以通過access日志,觀測參數(shù)來實(shí)施告警:
          (1)http非200狀態(tài)碼;
          (2)http請(qǐng)求響應(yīng)時(shí)間;

          常見的http非200狀態(tài)碼,以及響應(yīng)時(shí)間監(jiān)控有什么弊端?
          大部分公司,都有自己的404頁面。
          畫外音:當(dāng)然,不排除有些公司把tomcat異常信息透傳到頁面的。
          這個(gè)頁面的http狀態(tài)碼是200,且返回速度極快,根本不能代表html頁面的真實(shí)運(yùn)行情況,很難起到真正的監(jiān)控作用。
          畫外音:不是說http狀態(tài)碼監(jiān)控沒用,相反,http狀態(tài)碼的監(jiān)控是很有必要的,http狀態(tài)碼404說明系統(tǒng)一定有問題,但http狀態(tài)碼200不能說明系統(tǒng)沒有問題。

          http狀態(tài)碼不能說明問題,那什么才能代表http沒有問題呢?
          每個(gè)http都有自己的業(yè)務(wù)特性,必須符合業(yè)務(wù)特性的頁面,才是正常的。

          特性一:需要返回特定的頁面內(nèi)容。
          例如,訪問http://daojia.com/,一定要返回一個(gè)含“家政”字眼的html頁面,才是正確的。

          特性二:需要返回特定的接口內(nèi)容。
          例如,RESTful的獲取用戶信息接口,假設(shè)傳入uid=123,會(huì)傳回:
          {“RET”:”SUCCESS”, “name”:”shenjian”, “uid”:”123”}
          即,http://daojia.com/userinfo/get/?uid=123,一定要返回一個(gè)含“shenjian”的字符串,才是正確的。

          于是乎,得到了可擴(kuò)展通用http監(jiān)控框架的思路:不僅僅要監(jiān)控http狀態(tài)碼,更重要的是,要監(jiān)控http返回內(nèi)容的業(yè)務(wù)特性。

          可擴(kuò)展通用http監(jiān)控框架的細(xì)節(jié)如何?
          整個(gè)http監(jiān)控平臺(tái)的架構(gòu)如上,分為監(jiān)控平臺(tái)模塊,信息管理模塊,基礎(chǔ)服務(wù)模塊

          一、監(jiān)控平臺(tái)模塊
          (1)http監(jiān)控中心:實(shí)施監(jiān)控的主程序;
          (2)http監(jiān)控配置:可擴(kuò)展的監(jiān)控項(xiàng)信息管理;

          監(jiān)控項(xiàng)核心信息包含:
          (1)被監(jiān)控的html頁面/RESTful接口屬于哪個(gè)集群;
          (2)被監(jiān)控的URL;
          (3)被監(jiān)控的URL需要傳入的數(shù)據(jù),包含GET/POST/COOKIE等數(shù)據(jù);
          (4)被監(jiān)控的http返回的數(shù)據(jù)中必須包含什么業(yè)務(wù)特性字符串;

          例如,到家官網(wǎng)html為例,監(jiān)控項(xiàng)核心信息為:

          [http.monitor.item]

          cluster.name : daojia_main

          url : http://daojia.com/

          result : 家政

          即,訪問http://daojia.com/,返回結(jié)果必須包含“家政”。
          ?
          以獲取用戶信息RESTful接口為例,監(jiān)控項(xiàng)核心信息為:

          [http.monitor.item]

          cluster.name : daojia_user

          url : http://daojia.com/userinfo/get/

          get.data : uid=123

          post.data : NULL

          cookie.data : NULL

          result : shenjian

          即,訪問http://daojia.com/userinfo/get/?uid=123,返回結(jié)果必須包含“shenjian”。

          框架初期,可以以配置的形式管理監(jiān)控項(xiàng),但如果要做成平臺(tái),需要有一個(gè)監(jiān)控項(xiàng)管理后臺(tái),來新增/修改/管理監(jiān)控項(xiàng)。

          監(jiān)控中心,會(huì)遍歷所有監(jiān)控項(xiàng),并發(fā)對(duì)各個(gè)http監(jiān)控項(xiàng)實(shí)施監(jiān)控。

          二、信息管理模塊
          信息管理模塊又分為:集群信息管理模塊,員工信息管理模塊,告警策略管理模塊。

          集群信息管理模塊,主要提供這個(gè)接口:
          Info Service::getClusterInfo(String clusterName)
          即,通過集群名,獲取集群信息

          集群信息有很多,和監(jiān)控相關(guān)的主要有這么幾個(gè)信息:
          (1)集群ip列表,每個(gè)web-server都應(yīng)該被監(jiān)控到;
          (2)集群負(fù)責(zé)人,如果監(jiān)控異常,要將告警發(fā)給誰;

          用戶信息管理模塊,主要提供這個(gè)接口:
          Info Service::getYuanGongInfo(String name)
          即,通過員工名,獲取員工信息。

          員工信息有很多,和監(jiān)控相關(guān)的主要有這么幾個(gè)信息:
          (1)員工手機(jī)號(hào),郵箱,微信號(hào),釘釘號(hào)等通訊信息;
          (2)如果要實(shí)現(xiàn)多級(jí)告警策略,還需要獲取員工部門及l(fā)eader的相關(guān)信息;

          告警策略管理模塊,主要提供這個(gè)接口:

          Bool Service::trySendAlarm(

          ???????? String clusterName,

          ???????? String yuangongName,

          ???????? String ip,

          ???????? String url,

          ???????? …

          )

          即,一旦發(fā)現(xiàn)接口有異常,嘗試發(fā)送告警。

          這個(gè)嘗試發(fā)送告警,并不意味著一定會(huì)發(fā)送短信或者郵件,因?yàn)樾枰獙?shí)現(xiàn)一系列人性化的告警策略:
          • 集群收斂策略,可以通過clusterName去重
          • 接口收斂策略,可以通過url去重
          • 定時(shí)定頻策略,可以通過yuangongName去重
          • 白天黑夜策略,可以通過告警發(fā)送時(shí)間實(shí)施

          三、基礎(chǔ)服務(wù)模塊
          進(jìn)行完告警策略過濾后,如果真實(shí)需要發(fā)送告警,調(diào)用基礎(chǔ)服務(wù)模塊發(fā)出。

          發(fā)送郵件,發(fā)送短信這些基礎(chǔ)服務(wù)模塊,相信每個(gè)公司都有,這里就不展開敘述了。

          進(jìn)一步的,可擴(kuò)展通用http監(jiān)控框架細(xì)節(jié)如何?
          早期,如果系統(tǒng)沒有平臺(tái)化和服務(wù)化,可以通過配置文件,搞定上面的各個(gè)可擴(kuò)展模塊:
          (1)http監(jiān)控項(xiàng)信息:通過配置文件搞;
          (2)集群信息:通過配置文件搞;
          (3)員工信息:通過配置文件搞;
          (4)告警策略信息:不搞告警策略了,異常就發(fā)短信;
          于是乎,http監(jiān)控框架變成了這個(gè)樣子,模塊都用配置文件代替了:
          http監(jiān)控項(xiàng)配置,monitor-item.config

          [http.monitor.item]

          cluster.name : daojia_main

          url : http://daojia.com/

          result : 家政


          [http.monitor.item]

          cluster.name : daojia_user

          url : http://daojia.com/userinfo/get/

          get.data : uid=123

          post.data : NULL

          cookie.data : NULL

          result : shenjian


          集群信息配置,cluster-info.config:

          [daojia_main]

          ip.list : ip1, ip2, ip3

          port : 80

          owner.list: shenjian, zhangsan, lisi


          [daojia_user]

          ip.list : ip11, ip22, ip33

          port : 8080

          owner.list: shenjian


          員工信息配置,owner-info.config

          [shenjian]

          email : [email protected]

          phone :15912345678


          [zhangsan]

          email : [email protected]

          phone :18611220099


          五、http監(jiān)控框架偽代碼

          // 解析配置文件,取出監(jiān)控項(xiàng)、集群、員工等信息

          Array[monitor-item] A1=Parse(monitor-item.config);

          Array[cluster-info] A2= Parse(cluster-info.config);

          Array[owner-info] A3=Parse(owner-info.config);


          // 遍歷所有監(jiān)控項(xiàng)

          for(each item in A1){

          ?// 取出監(jiān)控項(xiàng)的集群名,URL,http數(shù)據(jù),結(jié)果等信息

          ?clusterName= item.clusterName;

          ?url= item.url;

          ?getData= item.getData;

          ?postData= item.postData;

          ?cookieData= item.cookieData;

          ?result= item.result


          ?// 由集群名,獲取集群信息

          ?clusterInfo= A2[clusterName];

          ?// 由集群信息,獲取集群ip列表,集群負(fù)責(zé)人列表

          ?Listips = clusterInfo.ip;

          ?Listowners = clusterinfo.owner;


          ?// 集群內(nèi)的每一個(gè)ip實(shí)例web-server,都需要監(jiān)控

          ?for(each ip in ips){

          ? // 根據(jù)ip,url,http數(shù)據(jù)構(gòu)造請(qǐng)求

          ? httpClient client = new httpClient(ip, url, getData, postData, cookieData);

          ? // 獲取http請(qǐng)求執(zhí)行結(jié)果

          ? httpResponse resp = client.execute();

          ? // 如果返回為200,并且包含監(jiān)控項(xiàng)里的業(yè)務(wù)特性結(jié)果

          ? if(resp.code==200&& resp.contain(result)){

          ? ? //正常,繼續(xù)監(jiān)控

          ? ? continue;

          ? }


          ? // 否則,對(duì)所有集群負(fù)責(zé)人發(fā)送告警

          ? for(each owner in owners){

          ? ?// 取出負(fù)責(zé)人郵箱和手機(jī)號(hào)

          ? ?email =A3[owner].email;

          ? ?phone =A3[owner].phone;

          ? ?// 發(fā)送郵件與短信告警

          ? ?sendEmail(email, ip,url, owner);

          ? ?snedSM(phone, ip, url,owner);

          ? }

          ?}

          }


          如此一來,一個(gè)小型的,可擴(kuò)展的,滿足創(chuàng)業(yè)型公司需求的http監(jiān)控框架,就搞定了。
          畫外音:先不用糾結(jié)是用服務(wù),還是cron,還是多線程這些細(xì)節(jié),也不用糾結(jié)一行能不能parse完整個(gè)配置文件,用過xml的都懂,上面的配置文件只是demo示例而已。

          這個(gè)框架的擴(kuò)展性非常好,能很好的通過配置文件擴(kuò)展。

          monitor-item.config,監(jiān)控項(xiàng)擴(kuò)展性:
          (1)新增html頁面監(jiān)控,或者json的RESTful接口監(jiān)控,只需要在配置中增加一個(gè)item;
          (2)配置支持url,get,post,cookie等參數(shù)拼裝任意http監(jiān)控請(qǐng)求;
          (3)配置支持不同業(yè)務(wù)邏輯返回不同的result的業(yè)務(wù)特性檢查;

          cluster-info.config,集群信息擴(kuò)展性:
          (1)新增集群,只需在配置中增加一個(gè)item;
          (2)集群加了一個(gè)實(shí)例,只需增加一個(gè)ip;
          (3)集群加了一個(gè)負(fù)責(zé)人,只需增加一個(gè)owner;

          owner-info.config,負(fù)責(zé)人信息擴(kuò)展性:
          (1)新增負(fù)責(zé)人,只需要在配置中增加一個(gè)item;
          (2)換了手機(jī)號(hào)/郵箱,只需修改相應(yīng)配置;

          最后一個(gè)問題,為什么要拆分成3個(gè)配置文件,而不是只用一個(gè)?
          呵呵,設(shè)計(jì)解耦,我們都需要多多修煉。
          架構(gòu)師之路-分享技術(shù)思路


          思路比結(jié)論更重要,希望大家有收獲。


          調(diào)研
          貴司的http,是怎么監(jiān)控的?謝轉(zhuǎn)。
          瀏覽 72
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  经典素人-熊猫成人网 | 国产美女全裸网站 | 麻豆搜索结果 -- 爱色AV | 亚洲无码电影网我不卡 | 被操高潮视频 |