摘要:是,經(jīng)過我的調(diào)研就發(fā)現(xiàn)這個玩意其實不太好用,性能差是主要原因。運營數(shù)據(jù)日志的日志內(nèi)容其實和消息系統(tǒng)很像,我就直接引用這里的概念,。
本文章首發(fā)于我的博客 基于 Eleasticsearch 和 Kibana 的運營數(shù)據(jù)可視化后臺,轉(zhuǎn)載請注明來源。
前一段時間在研究 ELK 這個東西,之前也用過一點,但都沒有深入研究,其實這回也沒有深入研究,但我找到了在現(xiàn)在情況下我該怎么用這個東西的方法。
ELK 是一個日志系統(tǒng)的全家桶工具,Elasticsearch 用的人比較多,很多人把這個當作搜索后臺,如果你選擇了 Django 這樣的框架的話也很容易繼承搜索功能進去,比如用這個庫 django-haystack,當然很多人是用來做日志存儲。
L 是 Logstash,經(jīng)過我的調(diào)研就發(fā)現(xiàn)這個玩意其實不太好用,性能差是主要原因。這個東西的用途就是一個中間件,把多個平臺的不同格式的日志全部進行預(yù)處理,然后再存入 ES 中,但是作為一個還很小,沒那么復(fù)雜的后臺服務(wù)來說,用不著,只有一個日志來源,日志格式也是固定的,一條日志里面有四個 JSON object,每個 object 的 key 不是固定的,只要處理一下時間戳就行了,其他都不用動,直接 mapping 到 ES 中,剛開始我甚至還用到了 filebeat,先用 filebeat 監(jiān)控文件,然后 filebeat output 給 logstash,然后 logstash 再 output 給 ES,簡直了,測試的時候沒什么問題,但一上線過了兩三天日志數(shù)量多了起來我就發(fā)現(xiàn)問題了,數(shù)量不對,每天都在累加前一天的日志條數(shù),等于說是 tail 文件沒成功,每次都從頭開始讀文件了,外加用了 rsync 這個東西從生產(chǎn)服務(wù)器上同步日志到 ES 機器上,我也沒整明白到底是哪里出了問題,索性直接棄用 logstash 和 filebeat,只用 ES 和 kibana,我自己寫腳本監(jiān)控文件、把日志寫入 ES 中,也把日志按天切分成文件,簡單又靠譜。
運營數(shù)據(jù)日志的日志內(nèi)容其實和消息系統(tǒng)很像,我就直接引用這里的概念 AVOT,Actor/Verb/Object/Target。舉例說明: xxx 關(guān)注了 yyy,xxx 是 Actor,關(guān)注 是 Verb,yyy 是 Target,這里沒有 Object,再舉一個例子,xxx 將 uuu 添加到了 yyy 中,這里的 Verb 是 添加,Object 是 uuu,Actor/Object/Target 就是模型,當然我們不用把模型的全部字段都放進去,放個 type/id/name 就夠了。按照這樣的規(guī)則規(guī)定好日志內(nèi)容之后就簡單了,在每個需要記錄日志的地方進行埋點,這個就是比較麻煩的地方,如果業(yè)務(wù)比較復(fù)雜的化,埋點很多,寫的時候一定要一次性寫對 Object 和 Target,不要寫了一次之后復(fù)制粘貼,很容易搞錯,一個個寫。還有一點就是 Actor/Object/Target 的 id 都轉(zhuǎn)成字符串存儲,因為用戶的 id 是 uuid,日志 object 直接 to_json(),django logger 直接用,用戶 id 會變成字符串,其他 model 的 id 還是 int,類型如果不一致再存到 ES 里面數(shù)據(jù)會有沖突。
最終的日志格式示例:
{"target": {"type": "Paper", "title": "Deep Depth Super-Resolution : Learning Depth Super-Resolution using Deep Convolutional Neural Network", "id": "791", "owner": "MKFMIKU"}, "object": {}, "actor": {"agent": "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.101 Safari/537.36", "accept_language": "en-US,en;q=0.8", "username": "qhl722", "host": "zijin.paperweekly.site", "referer": "http://www.paperweekly.site/getting-started"}, "verb": "點贊", "time": 1507000406.305043} {"target": {"type": "User", "id": "fcc3837f-1a61-4d2c-bdbf-0961085547a3", "owner": "gg5d"}, "object": {}, "actor": {"agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36", "accept_language": "zh-CN,zh;q=0.8", "username": "", "host": "zijin.paperweekly.site", "referer": "http://www.paperweekly.site/"}, "verb": "注冊", "time": 1507000688.429523}
我用了 Elasticsearch 的官方 Python API elasticsearch-py,腳本放在了 Gist 里面。
日志存到 ES 中是這個樣子:
KibanaKibana 是一個可是化工具,能看到 ES 中的數(shù)據(jù),做一些報表,只要把數(shù)據(jù)導(dǎo)入到 ES 中,做報表就很簡單了,簡單的也是有前提的,前提是你要定義好日志的內(nèi)容。
比如點贊數(shù)量,在 Visualize 里面新建一個柱狀圖,搜索 item.verb="點贊",然后第一個 Y 軸聚合搜索出來的日志條數(shù),就是點贊的數(shù)量,再添加一個 Y 軸 Unique Count item.actor.username.keyword 就能得出多少個用戶產(chǎn)生了這么多贊,X 軸就是按照時間,我都是按天來,選擇 Date Histogram,Interval選 Daily,如果你的日志系統(tǒng)要求的實時性比較高,還能選擇 Hourly,然后把實時刷新打開,就能看到比較實時的數(shù)據(jù)了。
Kibana 最終是這個樣子:
過幾天我把這個東西拆分出來變成一個倉庫再詳細寫一下教程。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/40901.html
摘要:應(yīng)用的研發(fā)上線運維運營形成閉環(huán),順利完成從對內(nèi)服務(wù)到公共平臺的升級。從功能角度,只能支持靜態(tài)方式設(shè)置反向代理,然后,而平臺有服務(wù)對應(yīng)的后端服務(wù)和端口是有動態(tài)調(diào)整需求。架構(gòu)上是基礎(chǔ)組件需要進行升級,數(shù)據(jù)訪問層日志監(jiān)控系統(tǒng)等。 介紹 ? ? ? ?MaxLeap早期是一家研發(fā)、運營移動應(yīng)用和手機游戲公司,發(fā)展過程中積累了很多通用組件。這些組件很大程度幫公司在移動研發(fā)過程中節(jié)省了時間和成本,...
摘要:現(xiàn)在用方式調(diào)用接口,中使用方式輸入內(nèi)容日志平臺網(wǎng)關(guān)層基于。日志平臺網(wǎng)關(guān)層基于到此為止,提取經(jīng)過網(wǎng)關(guān)的接口信息,并將其寫入日志文件就完成了,所有的接口日志都寫入了文件中。 背景介紹 1、問題現(xiàn)狀與嘗試 沒有做日志記錄的線上系統(tǒng),絕對是給系統(tǒng)運維人員留下的坑。尤其是前后端分離的項目,后端的接口日志可以解決對接、測試和運維時的很多問題。之前項目上發(fā)布的接口都是通過Oracle Service...
閱讀 2038·2021-11-22 09:34
閱讀 3361·2021-09-28 09:35
閱讀 13904·2021-09-09 11:34
閱讀 3692·2019-08-29 16:25
閱讀 2894·2019-08-29 15:23
閱讀 2101·2019-08-28 17:55
閱讀 2496·2019-08-26 17:04
閱讀 3098·2019-08-26 12:21