欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

java微服務(wù)日志處理的最合適方案是什么

java微服務(wù)日志處理的最合適方案是什么?

情況及需求描述:1.java spring boot開(kāi)發(fā)的微服務(wù)有多個(gè),每個(gè)微服務(wù)在4臺(tái)云服務(wù)器上部署4個(gè)節(jié)點(diǎn)2.有1個(gè)網(wǎng)關(guān),部署在一臺(tái)服務(wù)器上,所有請(qǐng)求都通過(guò)網(wǎng)關(guān)進(jìn)行轉(zhuǎn)發(fā)和負(fù)載均衡3.需要對(duì)網(wǎng)關(guān)發(fā)起的每一請(qǐng)求都記錄日志,例如請(qǐng)求的時(shí)間、ip、參數(shù)、耗時(shí)、返回結(jié)果等4.網(wǎng)關(guān)的訪問(wèn)日志需要保證安全持久化,即不能丟失,以便后期對(duì)賬5.希望網(wǎng)關(guān)的訪問(wèn)日志的保存,能夠具有一定的實(shí)時(shí)性,以便后臺(tái)能夠即時(shí)看到訪問(wèn)的變化、做數(shù)據(jù)分析等6.每個(gè)微服務(wù)、節(jié)點(diǎn)上的錯(cuò)誤日志能夠遠(yuǎn)程訪問(wèn)查看,而不是登錄每一臺(tái)與服務(wù)器去查日志文件7.一共有4臺(tái)云服務(wù)器,2臺(tái)阿里、2臺(tái)華為,每臺(tái)雙核16g,數(shù)據(jù)庫(kù)只有一個(gè)阿里的rds和redis

嘗試方案1:在網(wǎng)關(guān)配置logback,將訪問(wèn)日志輸出到logstash,再由logstash輸出到elastic,最后kibana展示,即ELK方案問(wèn)題:1.logstash的過(guò)濾器grok配置有點(diǎn)難,默認(rèn)如果log.info(RequestModel)這樣打日志,RequestModel中的信息會(huì)在logstash中單獨(dú)以一個(gè)"message"字段進(jìn)行保存,這對(duì)后面kibana寫(xiě)過(guò)濾表達(dá)式很難處理。后來(lái)采取java代碼中"log.info("{} {} {}", request_uri, request_ip, request_param)"這種日志產(chǎn)生后,僅希望將這些request_*字段輸出至logstash,多余的字段不要,可用grok過(guò)濾,但一些自定義的字段不太會(huì)處理,正則表達(dá)式也不怎么會(huì)用2.對(duì)elastic掌握還不是很深,之前有遇到過(guò)數(shù)據(jù)丟失的情況,由于這次需求要保證數(shù)據(jù)不能丟失,所以暫不太敢貿(mào)然使用嘗試方案2:仍然在網(wǎng)關(guān)配置logback,但輸出至db mysql,然后用logstash把數(shù)據(jù)導(dǎo)到elastic,最后kibana展示問(wèn)題:仍然是關(guān)于僅保存自定義字段的需求,網(wǎng)上了解了一圈,默認(rèn)是要3張表,肯定不是我要的;還有用繼承重寫(xiě)方法的,但看起來(lái)仍然沒(méi)有達(dá)到我要的要求。并且還有一個(gè)連接池的問(wèn)題沒(méi)有解決,就也沒(méi)有研究下去。嘗試方案3:網(wǎng)關(guān)處理好需要保存的日志信息后,直接調(diào)用dao層持久化到db mysql,然后用logstash把數(shù)據(jù)導(dǎo)到elastic,最后kibana展示問(wèn)題:網(wǎng)關(guān)上的請(qǐng)求肯定是量很大的,考慮單獨(dú)架設(shè)一個(gè)mysql服務(wù),專門用來(lái)保存日志,也就是只有寫(xiě)操作,不去影響到業(yè)務(wù)db。保存的話,肯定不能單條寫(xiě)入,那就想到用隊(duì)列,隊(duì)列滿一定條數(shù)后,批量寫(xiě)入,但這似乎又不能達(dá)到實(shí)時(shí)性的要求

所以想問(wèn),分布式服務(wù)的訪問(wèn)日志以及后臺(tái)業(yè)務(wù)日志,究竟應(yīng)該如何設(shè)計(jì),使其具備一定實(shí)時(shí)性、持久化、可分析、可擴(kuò)展、可視化等要求