【背景】
爲了以曲線圖的方式展示項目每日的使用情況,包括對功能,用戶部門的分類報表,從而持續改進項目。
公司的所謂架構師,當前對外提供restful接口記錄項目的使用日誌。後臺架構是以寫文件的方式記錄用戶對項目軟件的數據,每天晚上通過chronjob定時上傳到hadoop裏,然後又通過hive的接口進行分類查詢,最後開發一個"Dashboard"來展示。
對此方案,我心裏很吐槽,不僅殺雞用了牛刀,還增加了對Dashboard的開發工作量,且用戶使用數據不能實時顯示,我們其他系統對接時還要等到第二天才能看到數據。
【新方案】
最近學習了Elastic Stack相關工具,並做了相應的驗證,我覺得這類需求完全就可以0開發,且這些系統的高可用,高併發,安全,監控都是可以配置出來的。 不過對於我們這種內部系統來說,前期越簡單越好,不就是給自己內部看個數據嗎
最精簡方案:用戶數據--->統一日誌Rest接口(簡單封裝下,避免後續下游系統修改)-->Elastic Search --> Kibana
隨着深入可改進爲:用戶數據--->統一日誌Rest接口(簡單封裝下,避免後續下游系統修改)-->RabbitMQ-->LogStash-->Elastic Search --> Kibana
後續要求高併發,高可靠,監控之類的話,再講這些組件配置成高可用方案
【方案細化】
1.定義用戶數據的數據結構,最簡單就這些數據
name:用戶ID
action:操作類型
detail:詳細數據
date:2018-05-18 12:00:200
因此可在kibana的Dev tools中定義Elastic Search的結構
PUT userlog
{
"settings" : {
"number_of_shards" : 1
},
"mappings" : {
"doc" : {
"properties" : {
"user" : { "type" : "keyword" },
"action" : { "type" : "keyword" },
"detail" : { "type" : "text" },
"logdate" : { "type" : "date","format": "yyyy-MM-dd HH:mm:ss" }
}
}
}
}
2.在kibana的Dev tools中手工創建一些數據,試着查詢
POST userlog/doc/
{
"user" : "m00371981",
"action" : "codeverify",
"detail" : "hello world",
"logdate" : "2018-06-01 12:00:00"
}
GET /_search
{
"query": {
"match" : {
"user" : "m00371981"
}
}
}
GET /ideaclient/doc/_search
{
"size" : 0,
"_source": {
"excludes": []
},
"aggs": {
"2": {
"date_histogram": {
"field": "logdate",
"interval": "1d",
"format": "yyyy-MM-dd"
}
}
}
}
3.在kibana Management中Create Index Pattern,選擇userlog
在Visualize和Dashboard中配置報表,我嘗試了Pie,Bar,MarkDwon,Metrics相關的報表,感覺效果很好
4.改用logstash從rabbitmq中獲取配置,可參考如下配置
input {
#stdin {}
rabbitmq {
host => "localhost"
exchange => "madixin"
}
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
stdout {}
}
【Elastic Stack使用說明】
網上多的是教程的,這些系統大多裝個JDK 1.8+,執行下bin的啓動文件就能跑了
多看官網吧:
https://www.elastic.co/guide/en/kibana/6.x/getting-started.html
PS:寫這篇文章的時候,Elastic Stack工具各版本都到了6.2.4版本