設計理念

1. 靈活定制

面對不同的業務集群,作為服務方需要兼顧靈活和標準, 首先通過從眾多的接口訪問信息中抽出來標準化的數據信息集,如集群名稱,接口uri,http Code,訪問量,訪問時長,超時量,失敗量等具體的數據,標準化的數據保證了傳輸的順暢,為后續的分析,統計,展示奠定基礎。其次提供靈活的可配置方案,兼容不同集群,不同采集間隔和自動化uri采集模型,去實現業務的靈活變通。

wrm.enable=1
wrm.tick=60
wrm.timeout=2000
wrm.collector_register_url=https://****.**.com/****/****
wrm.collector_port=****
wrm.cluster=***_***_***
wrm.total_url_num=500
wrm.enable_sync_uri=1
wrm.sync_uri_url=****.**.com/****/****

2. 低成本接入

利用PHP的底層特性以擴展形式在PHP進程啟動的時候加載,避免開發同學因接入監控服務而需要做出額外的開發,實現無感知的數據采集。

3. 資源利用率高

合理選型數據結構和接入方式,依托于PHP-FPM主進程的監控進程,避免對系統額外的cpu和內存資源占用,保證線程安全調用。

系統架構

1. ?首先啟動PHP Zend引擎后,在注冊動態擴展的過程中通過調用MINIT鉤子,fork出來監聽進程,從而在每次request開始/結束時 執行業務邏輯。

2. 監聽根據系統配置,初始化全局變量如上報時長,內存大小,上報地址等信息,以及通過mmap開辟共享內存空間和pthread去實現線程安全上報。

3. 每次request在請求時會初始化php_request_startup,并依次遍歷調用擴展中調用Rinit,在這個過程中收集到uri,http code,訪問時長等信息存儲如對應的結構體。

4. 監聽進程根據配置tick收集指定間隔時間的數據后,通過切換數據hash的內存塊指針,平滑變更hashtable的角色屬性,啟動上報線程,開始壓縮數據并異步上報至數據中心服務側。

功能設計&實踐

1. 進程啟動

PHP引擎啟動過程中通過php_module_startup遍歷php_extension_list中在php.ini注冊的動態擴展,并依次調用對應的Minit鉤子函數,在這個過程中我們在Minit中fork出來上報進程,根據配置的url個數初始化共享內存,并依據bkrdhash算法實現uri的hash存儲,同時一個hash做輸出,一個hash做存儲,并通過指針動態切換.該進程同時會監聽主進程。

2. 日志收集

在Rinit的鉤子中,依賴于sapi_getenv和SG去獲取本次請求的參數,如header和Server信息,根據uri路由,收集后存儲于trace實體中,在此鉤子中不做其他操作,保證最小粒度干擾線上的資源開銷,在Rshutdown鉤子中,統計響應狀態,耗時等日志信息,并存儲到對應的hash中。

typedef struct wrm_trace_analyze {
int mutex; // 互斥量
struct timeval total_duration;
int success_times;
int failed_times;
int timeout_times;
int server_port;
char server_addr[32];
char uri[256];
} wrm_trace_analyze;

3.? 數據上報

依托于配置中的上報周期,上報線程會將數據存儲的hash指針做切換,從這一刻起,另外一個空hash結構體開始接受新數據做存儲,同時原輸出hash開始壓縮并上報數據中心服務側,上報完成后等待下個周期的切換,如此循環往復。

關鍵問題

1. 如何避免對上報服務端的流量沖擊,合理利用資源

鑒于每次的http請求都會產生一條日志數據,如果每次都進行上報則對服務端是個很大的流量沖擊,針對這種情況我們通過合理設計本地存儲結構,實現時間周期內的日志數據匯總存儲,壓縮&定期上報匯總數據。


2. 如何設計一個有效的數據采集數據結構

數據實現hash存儲,key值采用bkrdhash算法,以質數作為種子,每個字符串的ascii加和,保證每個字符串都參與到運算中,同時hash中只存儲有效的日志數據,如http code 200/500次數,時間等信息,以10000個uri舉例,只額外占用不到10M內存,并在數據udp上報到服務側之前通過gz壓縮,保證資源的合理優化。

3. 如何去解決hash數據集的并發性寫入

我們采用的futex內核級同步鎖.在眾多php-fpm在同一時間點寫入同一個hash的,如果采用自旋鎖+等待,在線程較多的時候其他上下文的切換的資源開銷不低,但是通過futex內核級鎖,在通過雙向鏈表的隊列維護競爭的線程,在占用鎖資源的線程釋放資源后,會按順序從隊列中喚起等待的線程寫入。


4. 如何在保證對數據采集和上報流程隔離,實現線程安全的全流程監控

我們采用的方案是通過監聽進程的存儲層開辟一個共享內存區域,分別為分為存儲區A和上報區B,在監控服務收集的過程中所有數據沉淀在A上,等待上報周期時間點一到則會將數據寫入的指針指向B,此時B角色切換為存儲區,A角色變更為上報區,線程將A上的數據進行上報,上報成功后clean掉數據,等待下一次的角色變更,如此循環往復,實現線程安全的異步上報流程。


5. 如何低成本部署和兼容

我們以php擴展為獨立載體,不依賴任何框架,支持公司內部物理機和私有云等集群環境。業務集群需要監控服務則可將此.so文件加載到項目extension/下目錄或者 php配置級的extension下,同時在項目中的extension.conf配置采集參數即可方便使用,也因此實現項目級的日志采集能力。此擴展語法同時支持PHP7.0.0以上的版本集群環境。

總結成果

Restful的自動化日志監控服務,在租房業務線集群以擴展的形式已成功部署至生產環境,各業務線負責人可以方便的通過公司的提供的可視化工具平臺(WF manager)直觀看到所屬的接口訪問詳情,從而節省各個業務線手動開發,標準不一的開發代價和維護成本。?目前租房業務線累計已有幾十個集群先后通過此擴展接入wfmanager系統,覆蓋百余臺PHP服務器,每分鐘采集日志超上百萬次,覆蓋90%的租房業務線上流量,為服務的平穩運行提供有力保障。通過可視化的線上接口實時訪問數據,對應服務的負責人實現了對所屬服務的主動關注/被動報警能力,為服務質量和穩定性提供了有力的支持,具體體現在以下兩個方面:

1. 在工程效率方面,過往線上出現接口訪問超時現象到問題解決的時間跨度周期往往超過1天,通過此擴展接入日志采集能力后,實現了線上的訪問實時監控預警,從問題出現到解決的時間跨度也降低為分鐘級別,如 一些APP端的詳情頁在優化之前接口加載時長達到300ms以上,接入日志監控擴展后清晰看到線上的真實耗時,對應同學收到預警后,經過幾輪實時技術優化對比,已成功將耗時降低為100ms以下。

2. 在數據分析維度,過往分析日志從單機awk統計到現在集群整體視角,粒度甚至細分至單機uri的級別,直觀監測到實時訪問數據,實現了同比,環比的流量波動分析,精準掌握產品的線上的訪問流量,為保證服務可用性的增擴容以及優化提供有力決策支持。?

文章轉自微信公眾號@58技術

熱門推薦
一個賬號試用1000+ API
助力AI無縫鏈接物理世界 · 無需多次注冊
3000+提示詞助力AI大模型
和專業工程師共享工作效率翻倍的秘密
返回頂部
上一篇
實用 Web API 規范
下一篇
接口優化的幾個技巧
国内精品久久久久影院日本,日本中文字幕视频,99久久精品99999久久,又粗又大又黄又硬又爽毛片
一区二区成人在线观看| 亚洲嫩草精品久久| 免费视频最近日韩| 五月婷婷久久丁香| 337p亚洲精品色噜噜| 一区二区三区精品在线观看| 91同城在线观看| 中文字幕日韩一区二区| 国产成人午夜高潮毛片| 久久久久久99久久久精品网站| 麻豆精品国产91久久久久久| 日韩三级在线观看| 高潮精品一区videoshd| 亚洲国产精品视频| 欧美精品一区二区在线播放| 国产福利一区在线| 久久精品久久99精品久久| 国产精品亲子乱子伦xxxx裸| 欧美一级午夜免费电影| 在线观看av不卡| 91视频免费观看| 97精品电影院| 国产精品一区免费视频| 亚洲1区2区3区视频| 欧美日韩aaaaaa| 欧美日韩午夜在线视频| 色综合欧美在线视频区| 成人黄色777网| 成人午夜大片免费观看| 精品一区二区三区av| 国内精品嫩模私拍在线| 蜜桃传媒麻豆第一区在线观看| 欧美一级二级在线观看| 日韩一卡二卡三卡国产欧美| jiyouzz国产精品久久| 国产成人精品一区二区三区网站观看| 久久99这里只有精品| 国产成人精品免费在线| 色综合一区二区三区| 天天av天天翘天天综合网色鬼国产| 欧美一区二区在线观看| 日韩欧美色综合网站| 欧美激情中文不卡| 亚洲另类中文字| 国产一区二区0| 91在线视频免费观看| 337p粉嫩大胆噜噜噜噜噜91av| 国产精品久久久久久久久快鸭 | 一区二区三区中文字幕精品精品| 亚洲天堂网中文字| 琪琪一区二区三区| 国产精一区二区三区| 色婷婷av一区二区三区之一色屋| 777a∨成人精品桃花网| 日韩一区中文字幕| 久久66热re国产| 欧美日韩激情一区二区| 亚洲欧美在线视频| 五月天亚洲精品| 欧美午夜精品一区二区三区 | 亚洲精品国产a久久久久久 | 99视频有精品| 国产精品污网站| 色先锋久久av资源部| 一区在线中文字幕| 色狠狠一区二区| 日本在线不卡视频| 国产视频一区二区在线| 色哟哟国产精品| 免费在线看一区| 亚洲免费色视频| 国产美女在线精品| 国产精品福利一区| 色噜噜久久综合| 毛片av一区二区| 亚洲欧美日韩国产综合| 日韩美一区二区三区| 亚洲主播在线播放| 日韩欧美黄色影院| 99久久精品免费观看| 麻豆一区二区99久久久久| 国产精品欧美极品| 久久久一区二区三区捆绑**| 成人黄色小视频| 国内精品伊人久久久久影院对白| 国产精品国产三级国产| 精品国产乱子伦一区| 一本色道久久综合亚洲aⅴ蜜桃| 日韩av一二三| 日韩精品一级二级| 一区二区三区不卡在线观看 | 精品国产乱码久久久久久浪潮| 国产中文字幕精品| 亚洲精品乱码久久久久久日本蜜臀 | 一本一道久久a久久精品| 免费成人美女在线观看.| 亚洲国产一区二区三区| 综合电影一区二区三区| 国产精品久久久久久久第一福利 | 亚洲欧美日韩国产中文在线| 中文字幕一区二区三区四区不卡 | 一二三四社区欧美黄| 一区二区三区中文字幕精品精品| 欧美性猛交xxxxxxxx| 在线观看日韩电影| 欧美高清在线一区二区| 亚洲精品久久嫩草网站秘色| 秋霞午夜鲁丝一区二区老狼| 成人一区二区视频| 欧美成人video| 亚洲国产综合91精品麻豆| 国产麻豆精品95视频| 国产精品天美传媒| 成人小视频免费观看| 欧美色男人天堂| 国产视频一区二区在线| 视频在线观看一区二区三区| 成人精品视频一区二区三区尤物| 欧美在线观看一区二区| 久久免费精品国产久精品久久久久| 国产网红主播福利一区二区| 视频一区国产视频| 在线日韩国产精品| 中文字幕一区二区不卡| 成人久久视频在线观看| 国产午夜精品一区二区三区嫩草| 日韩精品一级二级| 欧美视频日韩视频| 亚洲国产日韩综合久久精品| 成人午夜在线视频| 亚洲国产精品久久一线不卡| 欧美在线影院一区二区| 一区二区三区免费观看| 欧美亚洲禁片免费| 国内精品久久久久影院薰衣草| 91精品视频网| 久久97超碰色| 久久综合狠狠综合| 国产亲近乱来精品视频| 国产盗摄一区二区三区| 欧美精品久久久久久久多人混战| 国产精品久久国产精麻豆99网站| 国产成人av电影在线观看| 椎名由奈av一区二区三区| 欧美制服丝袜第一页| 久久精品国内一区二区三区| 精品久久久久久亚洲综合网| 国产成人小视频| 一区二区三区高清在线| 26uuu另类欧美| 欧美色成人综合| 国产在线视频一区二区三区| 亚洲国产激情av| 精品不卡在线视频| 欧美曰成人黄网| av成人免费在线| 九九九精品视频| 日韩av成人高清| 婷婷丁香久久五月婷婷| 亚洲自拍偷拍图区| 中文字幕在线一区| 亚洲欧洲av另类| 亚洲色图在线视频| 亚洲免费av网站| 一级女性全黄久久生活片免费| 国产精品成人在线观看| 国产三区在线成人av| 亚洲精品一区二区三区99| 国产欧美日韩综合精品一区二区| 日韩欧美久久一区| 久久综合九色综合97婷婷女人| 欧美精品一区二区不卡| 日韩美女在线视频| 中文一区二区在线观看| 亚洲精品国产无套在线观| 亚洲成人高清在线| 丰满少妇在线播放bd日韩电影| 国产91丝袜在线播放0| 国产精品资源在线观看| 国产精品影视天天线| 不卡的av中国片| 色婷婷久久99综合精品jk白丝| 日韩女优av电影| 亚洲精品一二三区| 亚洲精品福利视频网站| 国产精品久久久久久久午夜片| 国产精品国产自产拍高清av王其 | 精品乱人伦小说| 欧美久久久久免费| 中文字幕一区不卡| 国产在线精品一区二区夜色| 97se亚洲国产综合自在线观| 欧洲激情一区二区| 欧美极品少妇xxxxⅹ高跟鞋| 久久99久久99| 日韩欧美视频在线| 国产高清精品在线| 26uuu亚洲| 成人黄色在线网站| 亚洲免费毛片网站|