国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

基于 Eleasticsearch 和 Kibana 的運營數據可視化后臺

zzbo / 1896人閱讀

摘要:是,經過我的調研就發現這個玩意其實不太好用,性能差是主要原因。運營數據日志的日志內容其實和消息系統很像,我就直接引用這里的概念,。

本文章首發于我的博客 基于 Eleasticsearch 和 Kibana 的運營數據可視化后臺,轉載請注明來源。

前一段時間在研究 ELK 這個東西,之前也用過一點,但都沒有深入研究,其實這回也沒有深入研究,但我找到了在現在情況下我該怎么用這個東西的方法。

ELK 是一個日志系統的全家桶工具,Elasticsearch 用的人比較多,很多人把這個當作搜索后臺,如果你選擇了 Django 這樣的框架的話也很容易繼承搜索功能進去,比如用這個庫 django-haystack,當然很多人是用來做日志存儲。

L 是 Logstash,經過我的調研就發現這個玩意其實不太好用,性能差是主要原因。這個東西的用途就是一個中間件,把多個平臺的不同格式的日志全部進行預處理,然后再存入 ES 中,但是作為一個還很小,沒那么復雜的后臺服務來說,用不著,只有一個日志來源,日志格式也是固定的,一條日志里面有四個 JSON object,每個 object 的 key 不是固定的,只要處理一下時間戳就行了,其他都不用動,直接 mapping 到 ES 中,剛開始我甚至還用到了 filebeat,先用 filebeat 監控文件,然后 filebeat output 給 logstash,然后 logstash 再 output 給 ES,簡直了,測試的時候沒什么問題,但一上線過了兩三天日志數量多了起來我就發現問題了,數量不對,每天都在累加前一天的日志條數,等于說是 tail 文件沒成功,每次都從頭開始讀文件了,外加用了 rsync 這個東西從生產服務器上同步日志到 ES 機器上,我也沒整明白到底是哪里出了問題,索性直接棄用 logstash 和 filebeat,只用 ES 和 kibana,我自己寫腳本監控文件、把日志寫入 ES 中,也把日志按天切分成文件,簡單又靠譜。

運營數據日志的日志內容其實和消息系統很像,我就直接引用這里的概念 AVOT,Actor/Verb/Object/Target。舉例說明: xxx 關注了 yyy,xxx 是 Actor,關注 是 Verb,yyy 是 Target,這里沒有 Object,再舉一個例子,xxx 將 uuu 添加到了 yyy 中,這里的 Verb 是 添加,Object 是 uuuActor/Object/Target 就是模型,當然我們不用把模型的全部字段都放進去,放個 type/id/name 就夠了。按照這樣的規則規定好日志內容之后就簡單了,在每個需要記錄日志的地方進行埋點,這個就是比較麻煩的地方,如果業務比較復雜的化,埋點很多,寫的時候一定要一次性寫對 Object 和 Target,不要寫了一次之后復制粘貼,很容易搞錯,一個個寫。還有一點就是 Actor/Object/Target 的 id 都轉成字符串存儲,因為用戶的 id 是 uuid,日志 object 直接 to_json(),django logger 直接用,用戶 id 會變成字符串,其他 model 的 id 還是 int,類型如果不一致再存到 ES 里面數據會有沖突。

最終的日志格式示例:

{"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 中是這個樣子:

Kibana

Kibana 是一個可是化工具,能看到 ES 中的數據,做一些報表,只要把數據導入到 ES 中,做報表就很簡單了,簡單的也是有前提的,前提是你要定義好日志的內容。

比如點贊數量,在 Visualize 里面新建一個柱狀圖,搜索 item.verb="點贊",然后第一個 Y 軸聚合搜索出來的日志條數,就是點贊的數量,再添加一個 Y 軸 Unique Count item.actor.username.keyword 就能得出多少個用戶產生了這么多贊,X 軸就是按照時間,我都是按天來,選擇 Date Histogram,IntervalDaily,如果你的日志系統要求的實時性比較高,還能選擇 Hourly,然后把實時刷新打開,就能看到比較實時的數據了。


Kibana 最終是這個樣子:


過幾天我把這個東西拆分出來變成一個倉庫再詳細寫一下教程。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/40901.html

相關文章

  • 從應用到平臺 - 云服務架構演進過程

    摘要:應用的研發上線運維運營形成閉環,順利完成從對內服務到公共平臺的升級。從功能角度,只能支持靜態方式設置反向代理,然后,而平臺有服務對應的后端服務和端口是有動態調整需求。架構上是基礎組件需要進行升級,數據訪問層日志監控系統等。 介紹 ? ? ? ?MaxLeap早期是一家研發、運營移動應用和手機游戲公司,發展過程中積累了很多通用組件。這些組件很大程度幫公司在移動研發過程中節省了時間和成本,...

    LiangJ 評論0 收藏0
  • 日志平臺(網關層) - 基于Openresty+ELKF+Kafka

    摘要:現在用方式調用接口,中使用方式輸入內容日志平臺網關層基于。日志平臺網關層基于到此為止,提取經過網關的接口信息,并將其寫入日志文件就完成了,所有的接口日志都寫入了文件中。 背景介紹 1、問題現狀與嘗試 沒有做日志記錄的線上系統,絕對是給系統運維人員留下的坑。尤其是前后端分離的項目,后端的接口日志可以解決對接、測試和運維時的很多問題。之前項目上發布的接口都是通過Oracle Service...

    xumenger 評論0 收藏0

發表評論

0條評論

zzbo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<