NoSQL 是否可以用来做日志中心 ?
咨詢區(qū)
ikrain:
請(qǐng)問(wèn)大家在分布式程序中用 nosql 來(lái)做日志中心的經(jīng)驗(yàn)?我做了一些研究,發(fā)現(xiàn)用 Mongodb 做日志中心是一個(gè)非常好的選擇,而且我發(fā)現(xiàn) log4net 對(duì)它也是直接集成的,比如: log4mongo-net 。
不知道大家可推薦這種方式?或者有其他一些類似的方式嗎?
回答區(qū)
yamen:
其實(shí)在可擴(kuò)展程序中用 mongodb 做日志中心不是一個(gè)推薦的做法,嚴(yán)格來(lái)說(shuō)日志中心整體解決方案中,它只是解決了存儲(chǔ)這個(gè)單一case的問(wèn)題。
一個(gè)強(qiáng)大的日志中心需要解決如下幾個(gè)問(wèn)題:
數(shù)據(jù)采集
數(shù)據(jù)轉(zhuǎn)運(yùn)
數(shù)據(jù)清洗
數(shù)據(jù)存儲(chǔ)
數(shù)據(jù)查詢
數(shù)據(jù)可視化
再回頭看看mongodb只解決了第4點(diǎn),針對(duì)這六點(diǎn),我推薦的相關(guān)落地產(chǎn)品為:
Filebeat
它解決了對(duì)數(shù)據(jù)源的采集和轉(zhuǎn)運(yùn),如日志文件。
Logstash
它解決了數(shù)據(jù)清洗,你可以用正則表達(dá)式。
ElasticSearch
它解決了數(shù)據(jù)的存儲(chǔ)和查詢。
Kibana
它解決了數(shù)據(jù)的可視化問(wèn)題
值得一提的是,ElasticSearch 為了記錄日志底層就用了當(dāng)前最流行的nosql方式,這整體就是 Elastic 家族給出的解決方案。
Kazuki Ohta:
我見過(guò)很多公司都用 Mongodb 來(lái)記錄應(yīng)用程序的日志,畢竟它的 無(wú)模式 真的是太吸引人了,而且 mongodb 還提供了 Capped Collection 特性,它的固定大小模式可以周期性的用新數(shù)據(jù)替換老數(shù)據(jù)。
為了能夠?qū)θ罩具M(jìn)行精細(xì)化分析,一般大家都會(huì)采用 Grouping 和 MapReduce,但它不是很快,尤其是 js 的單線程引擎決定了 MapReduce 只能跑在單線程上,所以這種開銷是巨大的。
當(dāng)用 mongodb 記錄日志時(shí),還有一個(gè)不可避免的問(wèn)題就是 鎖競(jìng)爭(zhēng),畢竟日志場(chǎng)景是海量寫,即使 mongodb 是一種 fire-and-forget (發(fā)送即丟棄) 的模式,也會(huì)造成大量的寫鎖競(jìng)爭(zhēng),從而影響應(yīng)用程序的性能并在一定程序上影響 aggregate 和 filter 這些查詢操作。
一個(gè)通用做法是采用 日志采集組件,比如:Fluentd,Logstash,Flume,這些組件需要部署在每一個(gè)應(yīng)用程序節(jié)點(diǎn),并從攝取應(yīng)用程序產(chǎn)生的日志,參考如下圖:
這些框架會(huì)緩沖日志并將日志批量寫入到比如 Mongodb,PostgreSQL 等數(shù)據(jù)庫(kù)中,這種做法相比直寫的方式要高效的多。
Mongodb 還有一個(gè)問(wèn)題在于當(dāng)數(shù)據(jù)卷達(dá)到內(nèi)存上限時(shí),它的性能會(huì)急劇下降,可替換方案就是 Apache Hadoop 或 Cassandra。
點(diǎn)評(píng)區(qū)
其實(shí)在 mongodb 盛行的 14,15 年,曾經(jīng)確實(shí)把 mongodb 當(dāng)作緩存用,造成的后果就是特別吃內(nèi)存,那時(shí)候還是 mongodb 3.0 之前的內(nèi)存映射模式,后來(lái)被迫寫了一個(gè)自動(dòng)釋放內(nèi)存的服務(wù)。
總結(jié)
以上是生活随笔為你收集整理的NoSQL 是否可以用来做日志中心 ?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 对SQL server、Oracle、M
- 下一篇: PostgreSQL 统计所有数据表各自