摘要:問題初衷最近有個項目需求,需要統計下用戶的使用情況,比如什么時候登錄的,查詢了什么內容等信息。缺點擴展能力需要靠自己設計,統計展示畫面需要自己做。可輕松應對分布式,數據量大的情況。通過,如下修改,在重啟后又會恢復原值。
問題初衷
最近有個項目需求,需要統計下用戶app的使用情況,比如:什么時候登錄的,查詢了什么內容等信息。
解決方案1.定義用戶軌跡模型,每步操作都寫到數據庫中,然后在前端展示。
優(yōu)點:可以針對業(yè)務需求自定義模型,操作靈活,有針對性。
缺點:擴展能力需要靠自己設計,統計展示畫面需要自己做。
2.用現成的用戶數據分析平臺,網上有很多成熟的平臺,對接其api接口即可。
優(yōu)點:各種分析圖,什么有的沒有的,見過的沒見過的一應俱全。ps:現在用不上以后可能會用上。
缺點:受制于人,主要還要看自身業(yè)務是否適用。
3.ELK,集中式日志管理,特點:收集,傳輸,存儲,管理,告警。
優(yōu)點:開源,可以通過日志記錄各種你想要記錄的東西。豐富的分析圖表。可輕松應對分布式,數據量大的情況。
ELK對接Elasticsearch+Logstash+Kibana(ELK)是一套開源的日志管理方案。
Elasticsearch:負責日志檢索和分析
Logstash:負責日志的收集,處理和儲存
Kibana:負責日志的可視化
對于保存日志到文件的的項目,可以用logstash的logstash-input-file插件直接進行文件讀取,處理后轉存到Elasticsearch中。處理可以用logstash-filter-kv鍵值插件或者logstash-filter-mutate等插件進行解析。具體查看Filter plugins。
由于我們的項目沒有記錄日志文件,所以選擇直接發(fā)送日志信息到logstash,(對于log4j,logstash有專門的input插件)。
log4j2的配置
{"logger": "%logger", "level": "%level", "msg": "%message"}%n
logstash的配置
input { tcp { host => "127.0.0.1" port => 4560 codec => json { charset => "UTF-8" } } } filter { } output { elasticsearch { hosts => ["localhost"] manage_template => false index => "logstash-%{+YYYY.MM.dd}" document_type => "logstash" } }
轉存到Elasticsearch的message就是我們log4j2配置中的Json形式,如果想要將message拉平,那么只需要加入logstash-filter-json。
filter { json { source => "message" } }
這樣保存到Elasticsearch中的數據,就會變成如下形式
{ ... "message" => "{"logger": "elk", "level": "INFO", "msg": "logstash test"} ", "logger" => "elk", "level" => "INFO", "msg" => "logstash test" }
這樣對于Kibana分析的時候比較方便。
log4j2用Socket的方式會有一個問題,當logstash斷掉,重啟后你會發(fā)現收不到log4j2的日志了,傳輸斷掉沒有重連。在生產環(huán)境中,elk斷掉,我們不可能在去重啟所有與之相連的服務。所以接下來我們采用gelf方式。
修改pom
biz.paluch.logging logstash-gelf 1.12.0
修改log4j2的配置
修改logstash配置
input { gelf { host => "127.0.0.1" port => 4560 use_tcp => true codec => json { charset => "UTF-8" } } } filter { json { source => "message" } } output { elasticsearch { hosts => ["localhost"] manage_template => false index => "logstash-%{+YYYY.MM.dd}" document_type => "logstash" } }
保存到Elasticsearch中的數據就會如同log4j2中的配置格式一樣,由于我們這里依然配置了json filter,如果你的message是json字串,這里依然會拉平處理。
ELK搭建以上我們log4j2與logstash的對接就完成了,對于docker部署elk,比較簡單,網上有很多教程,當然還是推薦大家先去官網看看,注意版本對應。我選擇的是sebp/elk,集成好的elk容器。詳細的文檔elk-docker
這里主要說說需要注意的地方,強烈建議安裝之前看下文檔中的Prerequisites。
首先,我就遇見了vm.max_map_count限制問題,在Elasticsearch version 5這是最常出現的問題。通過,如下修改,在重啟后又會恢復原值。
sysctl -w vm.max_map_count=262144
持久性的做法是修改/etc/sysctl.conf文件中的vm.max_map_count
echo "vm.max_map_count=262144" > /etc/sysctl.conf sysctl -p
其次,logstash的配置文件在/etc/logstash/conf.d/目錄下,將input,filter,out分開,最終組合成一個,建議將/etc/logstash/conf.d映射出來,自行管理。
最后,因為log4j2在發(fā)送日志是是通過4560接口,所以啟動docker的時候需要映射此接口。
以上是我在對接elk的時候遇到的問題,再次記錄下,更多的elk內容后續(xù)會繼續(xù)探索。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/28087.html
摘要:簡介是簡稱是一個分布式的搜索和分析引擎,可以用于全文檢索結構化檢索和分析,并能將這三者結合起來。基于開發(fā),現在是使用最廣的開源搜索引擎之一。是一個開源的分析與可視化平臺,設計出來用于和一起使用的。 ELK簡介ELK是Elasticsearch+Logstash+Kibana簡稱 Elasticsearch 是一個分布式的搜索和分析引擎,可以用于全文檢索、結構化檢索和分析,并能將這三者結...
摘要:新增了一個,它是一個輕量級的日志收集處理工具,占用資源少,適合于在各個服務器上搜集日志后傳輸給,官方也推薦此工具。具體的結構如下主機系統部署服務安裝準備是需要的,建議安裝。先下載通用安裝包。 ELK簡介 ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日志收集處理工...
閱讀 2866·2021-10-08 10:12
閱讀 3966·2021-09-22 15:45
閱讀 2555·2019-08-30 15:52
閱讀 2625·2019-08-29 18:44
閱讀 2644·2019-08-29 12:37
閱讀 1154·2019-08-26 13:36
閱讀 2561·2019-08-26 13:34
閱讀 1473·2019-08-26 12:20