采集系統上云
采集系統上云(pbsp地址轉換器,8gram+msddhdd!注意是無(wú)線(xiàn)的sdd)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-02-19 04:00
采集系統上云本質(zhì)上是數據與設備,為了更好的服務(wù)于車(chē)輛在公路管理,提升車(chē)輛整體性能與收費過(guò)程,此次采用思科minipci路由器加pwm控制電路,只要是思科usb接口采集系統就可以采集數據。通過(guò)搭建電腦采集臺stun后,做出相應路由器的端口映射即可接入相應端口實(shí)現云采集。成本方面采用百元的思科路由器足夠滿(mǎn)足各種采集需求,采用15元的kype型號,只需要一臺250g硬盤(pán)的設備即可隨時(shí)讀取硬盤(pán)內容,云采集與物聯(lián)網(wǎng)的結合也將更加的方便有效。
此次采用物聯(lián)網(wǎng)的方式進(jìn)行車(chē)輛的采集,一是本身物聯(lián)網(wǎng)的原理,二是通過(guò)云采集對pb級以下的車(chē)輛數據進(jìn)行篩選,特別是未來(lái)對車(chē)輛的邊界定位,考慮如何打造云采集平臺也是項目的一大亮點(diǎn)?。?!希望對各位有所啟發(fā)?。?!。
pbsp地址轉換器,8gram+512msddhdd!注意是無(wú)線(xiàn)的sdd,可以上網(wǎng),usb端口,終端,
物聯(lián)網(wǎng)行業(yè)目前應用最廣泛的應該是applewatch的wifi版本手表,連接手機,手表通過(guò)wifi功能實(shí)現無(wú)線(xiàn)傳遞數據。所以可以采用p2p網(wǎng)絡(luò )實(shí)現數據傳輸。以下app推薦請慎重采用。從現有版本來(lái)看applewatch內置airpod標準通訊模塊,所以采用這種方式傳輸數據是更加適宜的,通過(guò)一個(gè)無(wú)線(xiàn)信號將手表與手機連接,每次你通過(guò)自家的有線(xiàn)端口即可將數據傳送給自家的移動(dòng)網(wǎng)關(guān)。
我目前采用的思科路由器就是采用的這種實(shí)現方式。缺點(diǎn)是價(jià)格相對其他方式來(lái)說(shuō)有些高。應該說(shuō)便宜些思科路由器在物聯(lián)網(wǎng)/無(wú)線(xiàn)通訊領(lǐng)域的應用是比較豐富的,各種不同的硬件模塊也可以適用于物聯(lián)網(wǎng)網(wǎng)絡(luò )架構。但如果你是做從物聯(lián)網(wǎng)抓取數據的應用,等。建議還是選用bluetoothlineinterface或者思科路由器更適合。根據你的應用不同,所有解決方案成本都會(huì )不同。 查看全部
采集系統上云(pbsp地址轉換器,8gram+msddhdd!注意是無(wú)線(xiàn)的sdd)
采集系統上云本質(zhì)上是數據與設備,為了更好的服務(wù)于車(chē)輛在公路管理,提升車(chē)輛整體性能與收費過(guò)程,此次采用思科minipci路由器加pwm控制電路,只要是思科usb接口采集系統就可以采集數據。通過(guò)搭建電腦采集臺stun后,做出相應路由器的端口映射即可接入相應端口實(shí)現云采集。成本方面采用百元的思科路由器足夠滿(mǎn)足各種采集需求,采用15元的kype型號,只需要一臺250g硬盤(pán)的設備即可隨時(shí)讀取硬盤(pán)內容,云采集與物聯(lián)網(wǎng)的結合也將更加的方便有效。
此次采用物聯(lián)網(wǎng)的方式進(jìn)行車(chē)輛的采集,一是本身物聯(lián)網(wǎng)的原理,二是通過(guò)云采集對pb級以下的車(chē)輛數據進(jìn)行篩選,特別是未來(lái)對車(chē)輛的邊界定位,考慮如何打造云采集平臺也是項目的一大亮點(diǎn)?。?!希望對各位有所啟發(fā)?。?!。
pbsp地址轉換器,8gram+512msddhdd!注意是無(wú)線(xiàn)的sdd,可以上網(wǎng),usb端口,終端,
物聯(lián)網(wǎng)行業(yè)目前應用最廣泛的應該是applewatch的wifi版本手表,連接手機,手表通過(guò)wifi功能實(shí)現無(wú)線(xiàn)傳遞數據。所以可以采用p2p網(wǎng)絡(luò )實(shí)現數據傳輸。以下app推薦請慎重采用。從現有版本來(lái)看applewatch內置airpod標準通訊模塊,所以采用這種方式傳輸數據是更加適宜的,通過(guò)一個(gè)無(wú)線(xiàn)信號將手表與手機連接,每次你通過(guò)自家的有線(xiàn)端口即可將數據傳送給自家的移動(dòng)網(wǎng)關(guān)。
我目前采用的思科路由器就是采用的這種實(shí)現方式。缺點(diǎn)是價(jià)格相對其他方式來(lái)說(shuō)有些高。應該說(shuō)便宜些思科路由器在物聯(lián)網(wǎng)/無(wú)線(xiàn)通訊領(lǐng)域的應用是比較豐富的,各種不同的硬件模塊也可以適用于物聯(lián)網(wǎng)網(wǎng)絡(luò )架構。但如果你是做從物聯(lián)網(wǎng)抓取數據的應用,等。建議還是選用bluetoothlineinterface或者思科路由器更適合。根據你的應用不同,所有解決方案成本都會(huì )不同。
采集系統上云(DeepFlow部署在容器計算節點(diǎn)上的應用的訪(fǎng)問(wèn)路徑分析)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 166 次瀏覽 ? 2022-02-16 19:04
通過(guò)梳理業(yè)務(wù),添加相關(guān)資源組和鏈接,描述關(guān)鍵業(yè)務(wù)應用的訪(fǎng)問(wèn)路徑。資源池中的流量會(huì )根據該規則進(jìn)行過(guò)濾,實(shí)現業(yè)務(wù)應用的網(wǎng)絡(luò )監控,并根據需要設置告警。在服務(wù)路徑中,可以直觀(guān)查看不同網(wǎng)段的網(wǎng)絡(luò )狀態(tài),快速縮小問(wèn)題范圍,定位異常原因。
對于關(guān)鍵業(yè)務(wù)應用,獲取容器環(huán)境的整個(gè)網(wǎng)絡(luò )流量,通常包括完整的容器資源、應用、網(wǎng)絡(luò )幾個(gè)維度。物理網(wǎng)絡(luò )流量通常通過(guò)光學(xué)分裂圖像獲得。DeepFlow?通過(guò)連接容器平臺(如Kubernetes)來(lái)學(xué)習容器環(huán)境中的Cluster、Node、Pod、Service、Ingress等信息。采集器部署在容器計算節點(diǎn)上,以Pod為單元獲取網(wǎng)絡(luò )流量并進(jìn)行流量預處理,從而實(shí)現全鏈路監控。
DeepFlow可以連接物理網(wǎng)絡(luò )的sFlow、NetFlow等數據,支持拆分和鏡像流量采集。通過(guò)采集點(diǎn)的分布式部署和過(guò)濾策略,可以逐段準確檢查客戶(hù)系統中任意已知IP對的每一跳(網(wǎng)元配置和流量信息),從而實(shí)現端到端端端診斷。
對于重點(diǎn)業(yè)務(wù),建議進(jìn)行追溯分析和配置。遇到突發(fā)故障時(shí),可通過(guò)鉆取時(shí)序數據庫中存儲的網(wǎng)絡(luò )流量信息,回放故障的詳細過(guò)程(支持秒粒度查詢(xún));還可以配置按需 PCAP采集 策略,借助其他第三方工具對此類(lèi)故障進(jìn)行深入分析。 查看全部
采集系統上云(DeepFlow部署在容器計算節點(diǎn)上的應用的訪(fǎng)問(wèn)路徑分析)
通過(guò)梳理業(yè)務(wù),添加相關(guān)資源組和鏈接,描述關(guān)鍵業(yè)務(wù)應用的訪(fǎng)問(wèn)路徑。資源池中的流量會(huì )根據該規則進(jìn)行過(guò)濾,實(shí)現業(yè)務(wù)應用的網(wǎng)絡(luò )監控,并根據需要設置告警。在服務(wù)路徑中,可以直觀(guān)查看不同網(wǎng)段的網(wǎng)絡(luò )狀態(tài),快速縮小問(wèn)題范圍,定位異常原因。
對于關(guān)鍵業(yè)務(wù)應用,獲取容器環(huán)境的整個(gè)網(wǎng)絡(luò )流量,通常包括完整的容器資源、應用、網(wǎng)絡(luò )幾個(gè)維度。物理網(wǎng)絡(luò )流量通常通過(guò)光學(xué)分裂圖像獲得。DeepFlow?通過(guò)連接容器平臺(如Kubernetes)來(lái)學(xué)習容器環(huán)境中的Cluster、Node、Pod、Service、Ingress等信息。采集器部署在容器計算節點(diǎn)上,以Pod為單元獲取網(wǎng)絡(luò )流量并進(jìn)行流量預處理,從而實(shí)現全鏈路監控。
DeepFlow可以連接物理網(wǎng)絡(luò )的sFlow、NetFlow等數據,支持拆分和鏡像流量采集。通過(guò)采集點(diǎn)的分布式部署和過(guò)濾策略,可以逐段準確檢查客戶(hù)系統中任意已知IP對的每一跳(網(wǎng)元配置和流量信息),從而實(shí)現端到端端端診斷。
對于重點(diǎn)業(yè)務(wù),建議進(jìn)行追溯分析和配置。遇到突發(fā)故障時(shí),可通過(guò)鉆取時(shí)序數據庫中存儲的網(wǎng)絡(luò )流量信息,回放故障的詳細過(guò)程(支持秒粒度查詢(xún));還可以配置按需 PCAP采集 策略,借助其他第三方工具對此類(lèi)故障進(jìn)行深入分析。
采集系統上云( SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2022-02-14 08:02
SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
GIS云存儲,云端數據安全
如果您需要在線(xiàn)使用空間數據,可以使用SuperMap GIS云存儲服務(wù),幾分鐘就可以安全地將數據上傳到云端。
具體來(lái)說(shuō),您只需在網(wǎng)頁(yè)或SuperMap iDesktop上登錄您的SuperMap Online賬號,即可在云平臺上傳存儲GIS數據—workspace/UDB/Shapefile/Excel/CSV/GEOJson等空間數據.
GIS數據在線(xiàn)存儲后,您可以通過(guò)Web/PC/移動(dòng)應用程序或地圖、數據、3D等REST API方便地在線(xiàn)使用數據。您可以直接在2D地圖或3D場(chǎng)景中瀏覽數據,也可以在線(xiàn)檢索或查詢(xún)數據。當需要更新數據時(shí),您可以直接在線(xiàn)編輯數據,實(shí)時(shí)快速更新,無(wú)需下載、編輯、重新上傳等繁瑣步驟。更重要的是,您可以使用專(zhuān)業(yè)的GIS分析算法,直接在線(xiàn)分析您的數據,挖掘空間價(jià)值。
GIS云存儲不僅可以滿(mǎn)足企業(yè)用戶(hù)高并發(fā)、高可用的在線(xiàn)數據調用需求,還可以為個(gè)人用戶(hù)提供服務(wù)。您只需注冊一個(gè)SuperMap Online賬號,即可享受500M的無(wú)限免費空間。
此外,在 SuperMap Online 中,您可以自定義和發(fā)布業(yè)務(wù)數據,為您運營(yíng)和維護各種企業(yè)級、穩定可靠的在線(xiàn) GIS 服務(wù)。您只需準備好業(yè)務(wù)數據,即可直接調用SuperMAap Online提供的REST API,無(wú)需關(guān)心軟硬件環(huán)境,無(wú)需部署和運維。從業(yè)務(wù)數據到您的Web應用,所有的中間環(huán)節都由SuperMap Online為您實(shí)現。 查看全部
采集系統上云(
SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
GIS云存儲,云端數據安全
如果您需要在線(xiàn)使用空間數據,可以使用SuperMap GIS云存儲服務(wù),幾分鐘就可以安全地將數據上傳到云端。
具體來(lái)說(shuō),您只需在網(wǎng)頁(yè)或SuperMap iDesktop上登錄您的SuperMap Online賬號,即可在云平臺上傳存儲GIS數據—workspace/UDB/Shapefile/Excel/CSV/GEOJson等空間數據.
GIS數據在線(xiàn)存儲后,您可以通過(guò)Web/PC/移動(dòng)應用程序或地圖、數據、3D等REST API方便地在線(xiàn)使用數據。您可以直接在2D地圖或3D場(chǎng)景中瀏覽數據,也可以在線(xiàn)檢索或查詢(xún)數據。當需要更新數據時(shí),您可以直接在線(xiàn)編輯數據,實(shí)時(shí)快速更新,無(wú)需下載、編輯、重新上傳等繁瑣步驟。更重要的是,您可以使用專(zhuān)業(yè)的GIS分析算法,直接在線(xiàn)分析您的數據,挖掘空間價(jià)值。

GIS云存儲不僅可以滿(mǎn)足企業(yè)用戶(hù)高并發(fā)、高可用的在線(xiàn)數據調用需求,還可以為個(gè)人用戶(hù)提供服務(wù)。您只需注冊一個(gè)SuperMap Online賬號,即可享受500M的無(wú)限免費空間。
此外,在 SuperMap Online 中,您可以自定義和發(fā)布業(yè)務(wù)數據,為您運營(yíng)和維護各種企業(yè)級、穩定可靠的在線(xiàn) GIS 服務(wù)。您只需準備好業(yè)務(wù)數據,即可直接調用SuperMAap Online提供的REST API,無(wú)需關(guān)心軟硬件環(huán)境,無(wú)需部署和運維。從業(yè)務(wù)數據到您的Web應用,所有的中間環(huán)節都由SuperMap Online為您實(shí)現。
采集系統上云(【開(kāi)源項目】數棧:云原生—站式數據中臺PaaS )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2022-02-08 17:15
)
DataStack 是云原生的一站式數據中心 PaaS。我們在github和gitee上有一個(gè)有趣的開(kāi)源項目:FlinkX,記得給我們一個(gè)star!星星!星星!
gitee開(kāi)源項目:
github開(kāi)源項目:
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式找一個(gè)文件,首先要找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或pv中,在host和pv中也是可見(jiàn)的。這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們每天用 kubectl log 看到的日志。此類(lèi)日志在主機上的存儲路徑為/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,導致短時(shí)間內大量日志被推送到loki的時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模式采用PLG的主流模式。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志容器和master容器共享一個(gè)日志目錄,這樣可以在promtail容器中獲取日志文件,但是promtail不知道哪些日志到采集,它們的標簽是什么是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,而grafana和prometheus已經(jīng)是云原生監控的事實(shí)標準。熟悉開(kāi)發(fā)、運維,降低學(xué)習成本。
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
查看全部
采集系統上云(【開(kāi)源項目】數棧:云原生—站式數據中臺PaaS
)
DataStack 是云原生的一站式數據中心 PaaS。我們在github和gitee上有一個(gè)有趣的開(kāi)源項目:FlinkX,記得給我們一個(gè)star!星星!星星!
gitee開(kāi)源項目:
github開(kāi)源項目:
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式找一個(gè)文件,首先要找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或pv中,在host和pv中也是可見(jiàn)的。這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們每天用 kubectl log 看到的日志。此類(lèi)日志在主機上的存儲路徑為/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,導致短時(shí)間內大量日志被推送到loki的時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模式采用PLG的主流模式。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志容器和master容器共享一個(gè)日志目錄,這樣可以在promtail容器中獲取日志文件,但是promtail不知道哪些日志到采集,它們的標簽是什么是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,而grafana和prometheus已經(jīng)是云原生監控的事實(shí)標準。熟悉開(kāi)發(fā)、運維,降低學(xué)習成本。
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
采集系統上云(阿里云InfluxDB數據采集服務(wù)優(yōu)勢我們能做些什么?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 196 次瀏覽 ? 2022-02-08 05:14
背景
隨著(zhù)時(shí)序數據的快速增長(cháng),時(shí)序數據庫不僅需要解決系統穩定性和性能問(wèn)題,還需要實(shí)現從采集到分析的鏈接,讓時(shí)序數據真正生成價(jià)值。在時(shí)間序列數據采集領(lǐng)域,一直缺乏自動(dòng)化的采集工具。雖然用戶(hù)可以使用一些開(kāi)源的采集工具來(lái)實(shí)現data采集,比如Telegraf、Logstash、TCollector等,但是這些采集工具都需要用戶(hù)自己構建和維護運行環(huán)境,增加了用戶(hù)的學(xué)習成本,大大提高了數據的門(mén)檻采集。另一方面,現有的采集工具缺乏對多個(gè)采集源的自動(dòng)化管理,使得用戶(hù)難以統一管理多個(gè)不同的采集源并監控每個(gè)采集 實(shí)時(shí) 工具是否正常運行,采集數據。
阿里云InfluxDB?不僅提供穩定可靠的時(shí)序數據庫服務(wù),還提供非常便捷的數據采集服務(wù)。用戶(hù)可以輕松查看每個(gè)采集源的運行狀態(tài)并進(jìn)行管理,采集的數據會(huì )自動(dòng)存儲在阿里云InfluxDB?中。用戶(hù)無(wú)需擔心運維問(wèn)題,實(shí)現從數據采集到分析的一站式服務(wù)。本文主要介紹如何使用InfluxDB?的數據采集服務(wù)實(shí)現數據從采集到存儲的自動(dòng)化管理。
阿里巴巴云InfluxDB?Data采集服務(wù)優(yōu)勢我們能做什么? 1.簡(jiǎn)單采集數據
目前,阿里云InfluxDB?支持采集四種不同類(lèi)型的數據,分別涉及MySQL、Redis、MongoDB和系統監控。針對每類(lèi)數據,采集多個(gè)監控指標,方便用戶(hù)對監控對象有更全面的了解。用戶(hù)可以通過(guò)InfluxDB?實(shí)例的管理控制臺添加新的采集源,無(wú)需編寫(xiě)代碼,一鍵安裝。
采集數據操作流程如下:
2.采集來(lái)源的實(shí)時(shí)監控
采集源運行過(guò)程中,可以實(shí)時(shí)監控數據采集的狀態(tài),查看數據采集最后到達InfluxDB?的時(shí)間;并且您可以隨時(shí)停止Data采集,并在您認為合適的時(shí)候重新打開(kāi)data采集服務(wù)。
3.一鍵切換采集數據類(lèi)型
如果要更改被監控機器上的采集數據類(lèi)型,不需要重新添加新的采集源,選擇你想要的采集配置即可,數據采集工具會(huì )自動(dòng)切換到采集你指定的監控數據。
4. 采集數據自動(dòng)存儲在 InfluxDB? 中
您可以在采集配置中選擇數據流的數據庫和保留策略,數據采集工具會(huì )自動(dòng)將采集數據存儲到指定的數據庫和保留策略中,并且您可以在 采集 源運行時(shí)修改要寫(xiě)入數據的數據庫和保留策略,只需修改 采集 配置即可。
最佳實(shí)踐
本節介紹如何采集系統監控數據并實(shí)時(shí)顯示采集結果。系統監控的數據包括處理器、磁盤(pán)、內存、網(wǎng)絡(luò )、進(jìn)程和系統等信息。采集到的數據存儲在 8 個(gè)不同的測量值中(測量值是 cpu、disk、diskio、mem、net、processes、swap 和 system)。在開(kāi)始之前,請確保您已成功創(chuàng )建數據庫以及對該數據庫具有讀寫(xiě)權限的用戶(hù)帳戶(hù)。
1. 創(chuàng )建采集系統監控數據配置
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集配置”,進(jìn)入采集配置添加界面,如下圖所示。填寫(xiě)“采集配置名稱(chēng)”,選擇“采集數據類(lèi)型”為“系統監控”,然后選擇“授權賬戶(hù)”、“數據寫(xiě)入數據庫”和“數據庫存儲策略”,并填寫(xiě)在“授權密碼”中。點(diǎn)擊“添加”成功創(chuàng )建采集配置。
2. 添加采集來(lái)源
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集Source”,進(jìn)入采集Source Add頁(yè)面。
(1)選擇網(wǎng)絡(luò )類(lèi)型,“Public Network”或“Private Network”,然后點(diǎn)擊“Next”,如下圖。
(2)在數據源所在的主機上安裝采集工具。將安裝命令復制到主機上運行采集工具。采集@之后> 工具運行,會(huì )與 InfluxDB ? 建立連接,可以在“New 采集 Source Scan Result List”中看到新添加的采集 source,如果沒(méi)有顯示在列表中,您可以點(diǎn)擊“刷新”或“自動(dòng)刷新”。如下圖。
(3)選擇采集系統監控的數據。在上圖中點(diǎn)擊“選擇采集配置”進(jìn)入如下界面,從下拉框。采集“采集系統”的配置。選擇后點(diǎn)擊“保存”。
(4)啟動(dòng)數據采集.勾選需要啟動(dòng)的采集源,然后點(diǎn)擊“Finish and start采集”,采集工具可以在采集源上啟動(dòng)采集數據,如下圖。
3.查看數據狀態(tài)采集
在“采集Source List”中,您可以看到所有連接到 InfluxDB? 實(shí)例的 采集 源,如下圖所示。每個(gè) 采集 源由一個(gè) uuid 唯一標識,“運行中”的“采集 狀態(tài)”表示 采集 工具是 采集 數據并報告給 InfluxDB?, “最新采集上報成功時(shí)間”表示采集數據最后一次成功發(fā)送到InfluxDB?的時(shí)間。
4. 可視化 采集數據
使用 Grafana
(1)安裝 Grafana。請參閱有關(guān)如何安裝 Grafana 的文檔。
(2)添加數據源。將“URL”設置為InfluxDB?實(shí)例的地址,并填寫(xiě)寫(xiě)入采集數據的數據庫和用戶(hù)賬號,如下圖。
(3)配置Dashboard并編寫(xiě)查詢(xún)規則。這里以查詢(xún)磁盤(pán)使用情況為例。查詢(xún)語(yǔ)句為:
SELECT MEAN("used_percent") FROM "disk" GROUP BY time(10s)
實(shí)時(shí)查詢(xún)結果如下圖所示。
您可以根據實(shí)際需要查看其他測量和字段的數據,并分別在FROM和SELECT語(yǔ)句中指定。
總結
阿里云InfluxDB?提供方便快捷的數據采集服務(wù),自動(dòng)管理數據源,幫你解決數據采集問(wèn)題,實(shí)現數據從采集到存儲的自動(dòng)化。未來(lái),我們將支持 采集 獲取更多數據類(lèi)型和指標,敬請期待。
原文鏈接 查看全部
采集系統上云(阿里云InfluxDB數據采集服務(wù)優(yōu)勢我們能做些什么?)
背景
隨著(zhù)時(shí)序數據的快速增長(cháng),時(shí)序數據庫不僅需要解決系統穩定性和性能問(wèn)題,還需要實(shí)現從采集到分析的鏈接,讓時(shí)序數據真正生成價(jià)值。在時(shí)間序列數據采集領(lǐng)域,一直缺乏自動(dòng)化的采集工具。雖然用戶(hù)可以使用一些開(kāi)源的采集工具來(lái)實(shí)現data采集,比如Telegraf、Logstash、TCollector等,但是這些采集工具都需要用戶(hù)自己構建和維護運行環(huán)境,增加了用戶(hù)的學(xué)習成本,大大提高了數據的門(mén)檻采集。另一方面,現有的采集工具缺乏對多個(gè)采集源的自動(dòng)化管理,使得用戶(hù)難以統一管理多個(gè)不同的采集源并監控每個(gè)采集 實(shí)時(shí) 工具是否正常運行,采集數據。
阿里云InfluxDB?不僅提供穩定可靠的時(shí)序數據庫服務(wù),還提供非常便捷的數據采集服務(wù)。用戶(hù)可以輕松查看每個(gè)采集源的運行狀態(tài)并進(jìn)行管理,采集的數據會(huì )自動(dòng)存儲在阿里云InfluxDB?中。用戶(hù)無(wú)需擔心運維問(wèn)題,實(shí)現從數據采集到分析的一站式服務(wù)。本文主要介紹如何使用InfluxDB?的數據采集服務(wù)實(shí)現數據從采集到存儲的自動(dòng)化管理。
阿里巴巴云InfluxDB?Data采集服務(wù)優(yōu)勢我們能做什么? 1.簡(jiǎn)單采集數據
目前,阿里云InfluxDB?支持采集四種不同類(lèi)型的數據,分別涉及MySQL、Redis、MongoDB和系統監控。針對每類(lèi)數據,采集多個(gè)監控指標,方便用戶(hù)對監控對象有更全面的了解。用戶(hù)可以通過(guò)InfluxDB?實(shí)例的管理控制臺添加新的采集源,無(wú)需編寫(xiě)代碼,一鍵安裝。
采集數據操作流程如下:

2.采集來(lái)源的實(shí)時(shí)監控
采集源運行過(guò)程中,可以實(shí)時(shí)監控數據采集的狀態(tài),查看數據采集最后到達InfluxDB?的時(shí)間;并且您可以隨時(shí)停止Data采集,并在您認為合適的時(shí)候重新打開(kāi)data采集服務(wù)。

3.一鍵切換采集數據類(lèi)型
如果要更改被監控機器上的采集數據類(lèi)型,不需要重新添加新的采集源,選擇你想要的采集配置即可,數據采集工具會(huì )自動(dòng)切換到采集你指定的監控數據。
4. 采集數據自動(dòng)存儲在 InfluxDB? 中
您可以在采集配置中選擇數據流的數據庫和保留策略,數據采集工具會(huì )自動(dòng)將采集數據存儲到指定的數據庫和保留策略中,并且您可以在 采集 源運行時(shí)修改要寫(xiě)入數據的數據庫和保留策略,只需修改 采集 配置即可。
最佳實(shí)踐
本節介紹如何采集系統監控數據并實(shí)時(shí)顯示采集結果。系統監控的數據包括處理器、磁盤(pán)、內存、網(wǎng)絡(luò )、進(jìn)程和系統等信息。采集到的數據存儲在 8 個(gè)不同的測量值中(測量值是 cpu、disk、diskio、mem、net、processes、swap 和 system)。在開(kāi)始之前,請確保您已成功創(chuàng )建數據庫以及對該數據庫具有讀寫(xiě)權限的用戶(hù)帳戶(hù)。
1. 創(chuàng )建采集系統監控數據配置
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集配置”,進(jìn)入采集配置添加界面,如下圖所示。填寫(xiě)“采集配置名稱(chēng)”,選擇“采集數據類(lèi)型”為“系統監控”,然后選擇“授權賬戶(hù)”、“數據寫(xiě)入數據庫”和“數據庫存儲策略”,并填寫(xiě)在“授權密碼”中。點(diǎn)擊“添加”成功創(chuàng )建采集配置。

2. 添加采集來(lái)源
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集Source”,進(jìn)入采集Source Add頁(yè)面。
(1)選擇網(wǎng)絡(luò )類(lèi)型,“Public Network”或“Private Network”,然后點(diǎn)擊“Next”,如下圖。

(2)在數據源所在的主機上安裝采集工具。將安裝命令復制到主機上運行采集工具。采集@之后> 工具運行,會(huì )與 InfluxDB ? 建立連接,可以在“New 采集 Source Scan Result List”中看到新添加的采集 source,如果沒(méi)有顯示在列表中,您可以點(diǎn)擊“刷新”或“自動(dòng)刷新”。如下圖。

(3)選擇采集系統監控的數據。在上圖中點(diǎn)擊“選擇采集配置”進(jìn)入如下界面,從下拉框。采集“采集系統”的配置。選擇后點(diǎn)擊“保存”。

(4)啟動(dòng)數據采集.勾選需要啟動(dòng)的采集源,然后點(diǎn)擊“Finish and start采集”,采集工具可以在采集源上啟動(dòng)采集數據,如下圖。

3.查看數據狀態(tài)采集
在“采集Source List”中,您可以看到所有連接到 InfluxDB? 實(shí)例的 采集 源,如下圖所示。每個(gè) 采集 源由一個(gè) uuid 唯一標識,“運行中”的“采集 狀態(tài)”表示 采集 工具是 采集 數據并報告給 InfluxDB?, “最新采集上報成功時(shí)間”表示采集數據最后一次成功發(fā)送到InfluxDB?的時(shí)間。

4. 可視化 采集數據
使用 Grafana
(1)安裝 Grafana。請參閱有關(guān)如何安裝 Grafana 的文檔。
(2)添加數據源。將“URL”設置為InfluxDB?實(shí)例的地址,并填寫(xiě)寫(xiě)入采集數據的數據庫和用戶(hù)賬號,如下圖。

(3)配置Dashboard并編寫(xiě)查詢(xún)規則。這里以查詢(xún)磁盤(pán)使用情況為例。查詢(xún)語(yǔ)句為:
SELECT MEAN("used_percent") FROM "disk" GROUP BY time(10s)
實(shí)時(shí)查詢(xún)結果如下圖所示。

您可以根據實(shí)際需要查看其他測量和字段的數據,并分別在FROM和SELECT語(yǔ)句中指定。
總結
阿里云InfluxDB?提供方便快捷的數據采集服務(wù),自動(dòng)管理數據源,幫你解決數據采集問(wèn)題,實(shí)現數據從采集到存儲的自動(dòng)化。未來(lái),我們將支持 采集 獲取更多數據類(lèi)型和指標,敬請期待。
原文鏈接
采集系統上云(loki就是云原生下日志的采集方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 197 次瀏覽 ? 2022-02-01 21:02
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。 查看全部
采集系統上云(loki就是云原生下日志的采集方案)
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
采集系統上云(webstorm和websessionstorage中,一種是把原來(lái)的cookie直接推送到webweb端)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-01-29 10:04
采集系統上云后,很多用戶(hù)開(kāi)始要求將自己的cookie推送到手機端,可以到除去網(wǎng)絡(luò )的依賴(lài)性。如果能有個(gè)bot直接把cookie推送到手機端,就省去了安裝第三方cookie管理工具,又省去了安裝cookieagent。如果推送到手機端,接收和推送都需要手機本地權限,對于wp安卓手機來(lái)說(shuō),需要先在手機上申請一個(gè)bot賬號才能進(jìn)行推送。
這個(gè)在手機上玩安卓游戲,過(guò)幾天就有可能需要清理手機緩存和重新安裝這個(gè)bot才能玩新游戲??傊枰?lián)網(wǎng)玩手機游戲的小伙伴,請在使用瀏覽器的前提下,有一個(gè)獨立的cookie推送agent。如果你有native安卓或者微信web開(kāi)發(fā)經(jīng)驗,那么就可以使用native推送,或者直接采用cp提供的api,直接接入。
你好,谷歌是有的,按照他的描述可以采用reactor框架實(shí)現,這個(gè)就不在這里做贅述了,百度就可以。
有,小牛web服務(wù)器,我也是最近在找找看這個(gè)方案,
簡(jiǎn)單的可以用js+gwx.cookie來(lái)接收。專(zhuān)業(yè)的也有socketcookie的庫,例如localstorageandwebsessionstoragedriverandpregistry。
有。目前已經(jīng)有localstorage和websessionstorage解決方案了。
推薦用webstorm開(kāi)發(fā)者工具開(kāi)發(fā)。然后用jenkins分發(fā)到生產(chǎn)環(huán)境。
在推送方案上最新出了兩種,一種是把原來(lái)的cookie直接推送到webweb端,一種是寫(xiě)到localstorage和websessionstorage中,webstorm是支持的。我只有webstorm2015。 查看全部
采集系統上云(webstorm和websessionstorage中,一種是把原來(lái)的cookie直接推送到webweb端)
采集系統上云后,很多用戶(hù)開(kāi)始要求將自己的cookie推送到手機端,可以到除去網(wǎng)絡(luò )的依賴(lài)性。如果能有個(gè)bot直接把cookie推送到手機端,就省去了安裝第三方cookie管理工具,又省去了安裝cookieagent。如果推送到手機端,接收和推送都需要手機本地權限,對于wp安卓手機來(lái)說(shuō),需要先在手機上申請一個(gè)bot賬號才能進(jìn)行推送。
這個(gè)在手機上玩安卓游戲,過(guò)幾天就有可能需要清理手機緩存和重新安裝這個(gè)bot才能玩新游戲??傊枰?lián)網(wǎng)玩手機游戲的小伙伴,請在使用瀏覽器的前提下,有一個(gè)獨立的cookie推送agent。如果你有native安卓或者微信web開(kāi)發(fā)經(jīng)驗,那么就可以使用native推送,或者直接采用cp提供的api,直接接入。
你好,谷歌是有的,按照他的描述可以采用reactor框架實(shí)現,這個(gè)就不在這里做贅述了,百度就可以。
有,小牛web服務(wù)器,我也是最近在找找看這個(gè)方案,
簡(jiǎn)單的可以用js+gwx.cookie來(lái)接收。專(zhuān)業(yè)的也有socketcookie的庫,例如localstorageandwebsessionstoragedriverandpregistry。
有。目前已經(jīng)有localstorage和websessionstorage解決方案了。
推薦用webstorm開(kāi)發(fā)者工具開(kāi)發(fā)。然后用jenkins分發(fā)到生產(chǎn)環(huán)境。
在推送方案上最新出了兩種,一種是把原來(lái)的cookie直接推送到webweb端,一種是寫(xiě)到localstorage和websessionstorage中,webstorm是支持的。我只有webstorm2015。
采集系統上云(采集系統上云之后,第一個(gè)難題就是采集數據)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-01-28 02:02
采集系統上云之后,第一個(gè)難題就是采集數據。常用的采集方式有以下幾種:1.用戶(hù)自己下載錄制好的視頻2.用戶(hù)購買(mǎi)硬件錄制設備3.錄制分析軟件輔助工具,在采集環(huán)節中進(jìn)行采集4.直接采集移動(dòng)端數據(簡(jiǎn)單快捷,不需要用戶(hù)專(zhuān)門(mén)下載錄制設備或者硬件)sdk上云,第一個(gè)難題就是要做什么準備。常見(jiàn)的做數據采集的廠(chǎng)商包括清華大學(xué)方案提供商思迅,中科大ai方案提供商北京小戴(使用人臉關(guān)鍵點(diǎn)定位+雙目測距+視頻分析+人臉識別),自動(dòng)駕駛方案提供商百度drive,最大的就是愛(ài)數了,但是愛(ài)數目前支持的數據類(lèi)型有限,需要升級支持。
愛(ài)數的優(yōu)勢在于可以推送市場(chǎng)對數據需求比較高的直播、視頻等類(lèi)型的內容。如果想把采集引擎做的更好更穩定,可以考慮先從流媒體服務(wù)商做起來(lái),比如ims,nox。這方面海外市場(chǎng)做的比較好的就是googleplay,因為它平臺相對比較穩定和相對來(lái)說(shuō)市場(chǎng)化度比較高。其實(shí)我們在北京望京的酒店里見(jiàn)到過(guò)幾個(gè)關(guān)于視頻錄制功能的產(chǎn)品,只是我們只是初步嘗試了一下,在之后,我們可能會(huì )做相關(guān)的分析報告。
如果不考慮價(jià)格,建議使用apigateway,因為它具有完整的鏈路匹配能力,去過(guò)itunesconnect和flickr的人肯定知道這個(gè)方法。一般這樣的產(chǎn)品都是由海外團隊(美國,歐洲)負責的,在中國沒(méi)有合適的客戶(hù)(主要是國內的直播平臺還是很難開(kāi)發(fā)出像樣的數據采集服務(wù)的)。至于采集系統上云,如果其實(shí)人工操作的話(huà),算是折騰,還不如直接定制化。如果說(shuō)好用一點(diǎn)的話(huà),還是可以參考一下360云,它支持中國各個(gè)時(shí)段全球視頻。 查看全部
采集系統上云(采集系統上云之后,第一個(gè)難題就是采集數據)
采集系統上云之后,第一個(gè)難題就是采集數據。常用的采集方式有以下幾種:1.用戶(hù)自己下載錄制好的視頻2.用戶(hù)購買(mǎi)硬件錄制設備3.錄制分析軟件輔助工具,在采集環(huán)節中進(jìn)行采集4.直接采集移動(dòng)端數據(簡(jiǎn)單快捷,不需要用戶(hù)專(zhuān)門(mén)下載錄制設備或者硬件)sdk上云,第一個(gè)難題就是要做什么準備。常見(jiàn)的做數據采集的廠(chǎng)商包括清華大學(xué)方案提供商思迅,中科大ai方案提供商北京小戴(使用人臉關(guān)鍵點(diǎn)定位+雙目測距+視頻分析+人臉識別),自動(dòng)駕駛方案提供商百度drive,最大的就是愛(ài)數了,但是愛(ài)數目前支持的數據類(lèi)型有限,需要升級支持。
愛(ài)數的優(yōu)勢在于可以推送市場(chǎng)對數據需求比較高的直播、視頻等類(lèi)型的內容。如果想把采集引擎做的更好更穩定,可以考慮先從流媒體服務(wù)商做起來(lái),比如ims,nox。這方面海外市場(chǎng)做的比較好的就是googleplay,因為它平臺相對比較穩定和相對來(lái)說(shuō)市場(chǎng)化度比較高。其實(shí)我們在北京望京的酒店里見(jiàn)到過(guò)幾個(gè)關(guān)于視頻錄制功能的產(chǎn)品,只是我們只是初步嘗試了一下,在之后,我們可能會(huì )做相關(guān)的分析報告。
如果不考慮價(jià)格,建議使用apigateway,因為它具有完整的鏈路匹配能力,去過(guò)itunesconnect和flickr的人肯定知道這個(gè)方法。一般這樣的產(chǎn)品都是由海外團隊(美國,歐洲)負責的,在中國沒(méi)有合適的客戶(hù)(主要是國內的直播平臺還是很難開(kāi)發(fā)出像樣的數據采集服務(wù)的)。至于采集系統上云,如果其實(shí)人工操作的話(huà),算是折騰,還不如直接定制化。如果說(shuō)好用一點(diǎn)的話(huà),還是可以參考一下360云,它支持中國各個(gè)時(shí)段全球視頻。
采集系統上云(Linux系統中有很多日志類(lèi)型分析系統產(chǎn)生的文件介紹(二))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 165 次瀏覽 ? 2022-01-27 16:17
提供服務(wù)的Linux服務(wù)器通常會(huì )一直產(chǎn)生大量的日志信息。如果生產(chǎn)環(huán)境有幾十臺甚至上百臺服務(wù)器,要一一查看系統日志是很麻煩的。的。
在技??術(shù)不斷更新的今天,可以集中管理日志的技術(shù)有很多。最常見(jiàn)的操作是ELK日志分析系統,但是這些日志是怎么產(chǎn)生的呢?使用哪個(gè)服務(wù)進(jìn)行統一管理?這個(gè) 文章 將圍繞系統日志服務(wù) - rsyslog。
Linux 系統中有多種日志類(lèi)型。以下是系統自身產(chǎn)生的一些日志文件:
/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/lastlog
/var/log/maillog或/var/log/mail/*
/var/log/messages
/var/log/secure
/var/log/wtmp,/var/log/faillog
/var/log/httpd/* , /var/log/samba/*
如果想詳細了解日志文件中記錄了哪些信息,可以參考這篇博文:Linux中常見(jiàn)日志文件介紹,其中還收錄了7個(gè)錯誤級別的介紹!這里不亂說(shuō)。
系統中的大部分日志都由 rsyslog 服務(wù)管理。該服務(wù)的主要配置文件如下:
[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #過(guò)濾配置文件中的空行和注釋行
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
上面行開(kāi)頭的星號表示所有服務(wù),點(diǎn)號后面的等級表示那些等級記錄下來(lái),/var/lo....表示記錄到哪里
authpriv.* /var/log/secure #表示authpriv所有等級的信息都記錄到secure文件中
mail.* /var/log/maillog #表示mail服務(wù)的所有級別信息都記錄到/var/log/maillog中
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點(diǎn)號前面表示某個(gè)服務(wù),點(diǎn)號后面表示哪些報錯等級要記錄。
#點(diǎn)號前后都可以使用通配符星號來(lái)表示,如第一列為“*.*”,則表示所有服務(wù)的所有等級
#若為“*.info”,則表示所有服務(wù)的info等級及比info更嚴重的等級都記錄起來(lái)。
在上面的配置文件中,可以更改日志的存放位置,以及應該記錄哪些日志級別,但一般不建議這樣做。
其實(shí)依靠配置文件/etc/rsyslog.conf,也可以將其日志發(fā)送到另一臺服務(wù)器,然后在另一臺服務(wù)器上進(jìn)行統一管理。如果生產(chǎn)環(huán)境小,服務(wù)器不多,這種情況可以使用,但是如果生產(chǎn)環(huán)境的服務(wù)器數量比較多,建議部署ELK日志分析系統。
配置 rsyslog 服務(wù)實(shí)例
我這里有兩臺服務(wù)器,主機名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現在要實(shí)現以下要求:
開(kāi)始配置:
1、將info級別以上aaa服務(wù)器的所有系統服務(wù)日志同步發(fā)送給bbb服務(wù)器統一管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件
#..............省略部分內容
$ModLoad imudp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp協(xié)議
$UDPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp的514端口
# Provides TCP syslog reception
$ModLoad imtcp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp協(xié)議
$InputTCPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp的514端口
#..............省略部分內容
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info @@192.168.1.2 #星號表示所有服務(wù)“*.info”表示info等級及以上的信息
#@@表示使用tcp協(xié)議傳輸,192.168.1.2是指定要發(fā)送到哪臺服務(wù)器
#若使用一個(gè)@符號,則表示使用udp協(xié)議傳輸
#..............省略部分內容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog #重啟rsyslog服務(wù),以便更改生效
(2)在 bbb 服務(wù)器上執行以下操作:
[root@bbb ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件,開(kāi)啟udp和tcp的514端口
#..............省略部分內容
$ModLoad imudp #去掉該行開(kāi)頭的“#”注釋符號
$UDPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
# Provides TCP syslog reception
$ModLoad imtcp #去掉該行開(kāi)頭的“#”注釋符號
$InputTCPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
#..............省略部分內容
[root@bbb ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
[root@bbb ~]# tailf /var/log/secure #動(dòng)態(tài)監控著(zhù)本機的日志文件
Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003
Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003....
#..............省略部分內容
?。?)在aaa服務(wù)器上進(jìn)行如下操作(主要是生成日志信息):
[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶(hù) admini 的密碼 。
passwd:所有的身份驗證令牌已經(jīng)成功更新。
(4)查看bbb生成的新日志如下:
2、將編譯安裝好的Nginx日志發(fā)送到bbb服務(wù)器進(jìn)行管理;
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #寫(xiě)入以下文件,指定阿里鏡像站
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統默認自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫(xiě)入后保存退出即可。
[root@aaa ~]# yum repolist #最好執行一下該命令
#..............省略部分內容
(7/7): base/7/x86_64/primary_db | 6.0 MB 00:01
源標識 源名稱(chēng) 狀態(tài)
base/7/x86_64 CentOS-7 - Base 10,097
epel epel 13,384
#上面一行就是我們剛寫(xiě)入的文件生效的,表示沒(méi)問(wèn)題
extras/7/x86_64 CentOS-7 - Extras 304
updates/7/x86_64 CentOS-7 - Updates 311
repolist: 24,096
#若命令yum repolist執行后沒(méi)有顯示出上述內容,排除配置文件的錯誤后,可以執行以下命令
[root@aaa ~]# yum makecache #用來(lái)建立元數據緩存的
#..............省略部分內容
元數據緩存已建立
[root@aaa ~]# yum -y install nginx #安裝nginx服務(wù)
[root@aaa ~]# systemctl start nginx #啟動(dòng)Nginx服務(wù)
[root@aaa ~]# netstat -anpt | grep nginx #確定Nginx服務(wù)已啟動(dòng)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6609/nginx: master
tcp6 0 0 :::80 :::* LISTEN 6609/nginx: master
[root@aaa ~]# ls /var/log/nginx/ #以下是yum安裝Nginx后,Nginx兩個(gè)日志文件的存放位置
access.log error.log
#記住Nginx日志的存放路徑,一會(huì )要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來(lái)
[root@aaa ~]# vim /etc/rsyslog.conf #編輯rsyslog服務(wù)的配置文件
#..............省略部分內容
#在配置文件末尾寫(xiě)入以下內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info-access;
$InputFilestateFile state-nginx-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù)以便生效
上面寫(xiě)的配置項解釋如下:
$ModLoad imfile #加載模塊
$InputFilePollInterval 1 #間隔多久采集次,默認單位是秒
$InputFileName /var/log/nginx/access.log #指定要采集的日志文件
$InputFileTag nginx-info-access; #給對應的日志打一個(gè)標簽
$InputFilestateFile state-nginx-info-accesslog #給這個(gè)日志命名
$InputRunFileMonitor #啟動(dòng)監控
#以下的配置和上面類(lèi)似,因為要采集兩個(gè)日志文件嘛!
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
#以下是指定將采集的日志發(fā)送到哪里,同理,一個(gè)@符號表示使用的udp協(xié)議,兩個(gè)表示tcp協(xié)議
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~ #這的~,表示本地的意思
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
(2)bbb服務(wù)器上的監控日志:
(3)客戶(hù)端為了生成日志,訪(fǎng)問(wèn)aaa的Nginx服務(wù)。
?。?)回到bbb服務(wù)器看看aaa服務(wù)器上是否有生成Nginx訪(fǎng)問(wèn)日志(如果沒(méi)有生成新的日志,客戶(hù)端可以在排除配置錯誤的前提下刷新幾次):
可見(jiàn)Nginx的日志信息應該不會(huì )太詳細了吧?日志信息中是否收錄日志的生成時(shí)間?哪個(gè)服務(wù)器生成的?標簽名稱(chēng)是什么?訪(fǎng)問(wèn)了哪個(gè) IP 地址?訪(fǎng)問(wèn)時(shí)間是什么時(shí)候?訪(fǎng)問(wèn)的狀態(tài)碼是什么?客戶(hù)端訪(fǎng)問(wèn)的是什么系統,系統的位數是多少?比如(Windows NT 10.0; Win64; x64,表示是64位win10系統),你用什么瀏覽器訪(fǎng)問(wèn)呢?我用谷歌在這里訪(fǎng)問(wèn)它,它甚至記錄了我客戶(hù)的谷歌瀏覽器的版本號。
至此,Nginx日志文件采集就完成了,接下來(lái)就是執行apache日志采集了。有了前面的鋪墊,這個(gè)就簡(jiǎn)單多了,只需要更改配置項即可。
3、將編譯安裝的apache日志發(fā)送到bbb服務(wù)器進(jìn)行管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# yum -y install httpd #安裝apache服務(wù)
[root@aaa ~]# systemctl stop nginx #為了避免端口沖突,停止Nginx服務(wù)
[root@aaa ~]# systemctl start httpd #啟動(dòng)apache服務(wù)
[root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路徑
#..............省略部分內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log #主要是改這個(gè)
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個(gè)
#其余配置項可不改,但是建議改一下,以免看起來(lái)日志不太直觀(guān)。
$InputFileTag httpd-info-error;
$InputFilestateFile state-httpd-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'httpd-info-access' then @192.168.1.2:514
if $programname == 'httpd-info-access' then ~
if $programname == 'httpd-info-error' then @192.168.1.2:514
if $programname == 'httpd-info-error' then ~
#主要就是將上面配置中的Nginx都換成了httpd。
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
(2)bbb服務(wù)器上的監控日志:
(3)客戶(hù)端訪(fǎng)問(wèn)aaa的Nginx服務(wù)是為了生成日志(刷新幾次)。
(4)回到bbb服務(wù)器看看有沒(méi)有關(guān)于aaa服務(wù)器的httpd訪(fǎng)問(wèn)日志。
行!沒(méi)問(wèn)題,采集 來(lái)了。. .
————————— 本文到此結束,感謝您的閱讀—————— 查看全部
采集系統上云(Linux系統中有很多日志類(lèi)型分析系統產(chǎn)生的文件介紹(二))
提供服務(wù)的Linux服務(wù)器通常會(huì )一直產(chǎn)生大量的日志信息。如果生產(chǎn)環(huán)境有幾十臺甚至上百臺服務(wù)器,要一一查看系統日志是很麻煩的。的。
在技??術(shù)不斷更新的今天,可以集中管理日志的技術(shù)有很多。最常見(jiàn)的操作是ELK日志分析系統,但是這些日志是怎么產(chǎn)生的呢?使用哪個(gè)服務(wù)進(jìn)行統一管理?這個(gè) 文章 將圍繞系統日志服務(wù) - rsyslog。
Linux 系統中有多種日志類(lèi)型。以下是系統自身產(chǎn)生的一些日志文件:
/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/lastlog
/var/log/maillog或/var/log/mail/*
/var/log/messages
/var/log/secure
/var/log/wtmp,/var/log/faillog
/var/log/httpd/* , /var/log/samba/*
如果想詳細了解日志文件中記錄了哪些信息,可以參考這篇博文:Linux中常見(jiàn)日志文件介紹,其中還收錄了7個(gè)錯誤級別的介紹!這里不亂說(shuō)。
系統中的大部分日志都由 rsyslog 服務(wù)管理。該服務(wù)的主要配置文件如下:
[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #過(guò)濾配置文件中的空行和注釋行
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
上面行開(kāi)頭的星號表示所有服務(wù),點(diǎn)號后面的等級表示那些等級記錄下來(lái),/var/lo....表示記錄到哪里
authpriv.* /var/log/secure #表示authpriv所有等級的信息都記錄到secure文件中
mail.* /var/log/maillog #表示mail服務(wù)的所有級別信息都記錄到/var/log/maillog中
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點(diǎn)號前面表示某個(gè)服務(wù),點(diǎn)號后面表示哪些報錯等級要記錄。
#點(diǎn)號前后都可以使用通配符星號來(lái)表示,如第一列為“*.*”,則表示所有服務(wù)的所有等級
#若為“*.info”,則表示所有服務(wù)的info等級及比info更嚴重的等級都記錄起來(lái)。
在上面的配置文件中,可以更改日志的存放位置,以及應該記錄哪些日志級別,但一般不建議這樣做。
其實(shí)依靠配置文件/etc/rsyslog.conf,也可以將其日志發(fā)送到另一臺服務(wù)器,然后在另一臺服務(wù)器上進(jìn)行統一管理。如果生產(chǎn)環(huán)境小,服務(wù)器不多,這種情況可以使用,但是如果生產(chǎn)環(huán)境的服務(wù)器數量比較多,建議部署ELK日志分析系統。
配置 rsyslog 服務(wù)實(shí)例
我這里有兩臺服務(wù)器,主機名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現在要實(shí)現以下要求:
開(kāi)始配置:
1、將info級別以上aaa服務(wù)器的所有系統服務(wù)日志同步發(fā)送給bbb服務(wù)器統一管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件
#..............省略部分內容
$ModLoad imudp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp協(xié)議
$UDPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp的514端口
# Provides TCP syslog reception
$ModLoad imtcp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp協(xié)議
$InputTCPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp的514端口
#..............省略部分內容
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info @@192.168.1.2 #星號表示所有服務(wù)“*.info”表示info等級及以上的信息
#@@表示使用tcp協(xié)議傳輸,192.168.1.2是指定要發(fā)送到哪臺服務(wù)器
#若使用一個(gè)@符號,則表示使用udp協(xié)議傳輸
#..............省略部分內容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog #重啟rsyslog服務(wù),以便更改生效
(2)在 bbb 服務(wù)器上執行以下操作:
[root@bbb ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件,開(kāi)啟udp和tcp的514端口
#..............省略部分內容
$ModLoad imudp #去掉該行開(kāi)頭的“#”注釋符號
$UDPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
# Provides TCP syslog reception
$ModLoad imtcp #去掉該行開(kāi)頭的“#”注釋符號
$InputTCPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
#..............省略部分內容
[root@bbb ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
[root@bbb ~]# tailf /var/log/secure #動(dòng)態(tài)監控著(zhù)本機的日志文件
Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003
Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003....
#..............省略部分內容
?。?)在aaa服務(wù)器上進(jìn)行如下操作(主要是生成日志信息):
[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶(hù) admini 的密碼 。
passwd:所有的身份驗證令牌已經(jīng)成功更新。
(4)查看bbb生成的新日志如下:

2、將編譯安裝好的Nginx日志發(fā)送到bbb服務(wù)器進(jìn)行管理;
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #寫(xiě)入以下文件,指定阿里鏡像站
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統默認自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫(xiě)入后保存退出即可。
[root@aaa ~]# yum repolist #最好執行一下該命令
#..............省略部分內容
(7/7): base/7/x86_64/primary_db | 6.0 MB 00:01
源標識 源名稱(chēng) 狀態(tài)
base/7/x86_64 CentOS-7 - Base 10,097
epel epel 13,384
#上面一行就是我們剛寫(xiě)入的文件生效的,表示沒(méi)問(wèn)題
extras/7/x86_64 CentOS-7 - Extras 304
updates/7/x86_64 CentOS-7 - Updates 311
repolist: 24,096
#若命令yum repolist執行后沒(méi)有顯示出上述內容,排除配置文件的錯誤后,可以執行以下命令
[root@aaa ~]# yum makecache #用來(lái)建立元數據緩存的
#..............省略部分內容
元數據緩存已建立
[root@aaa ~]# yum -y install nginx #安裝nginx服務(wù)
[root@aaa ~]# systemctl start nginx #啟動(dòng)Nginx服務(wù)
[root@aaa ~]# netstat -anpt | grep nginx #確定Nginx服務(wù)已啟動(dòng)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6609/nginx: master
tcp6 0 0 :::80 :::* LISTEN 6609/nginx: master
[root@aaa ~]# ls /var/log/nginx/ #以下是yum安裝Nginx后,Nginx兩個(gè)日志文件的存放位置
access.log error.log
#記住Nginx日志的存放路徑,一會(huì )要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來(lái)
[root@aaa ~]# vim /etc/rsyslog.conf #編輯rsyslog服務(wù)的配置文件
#..............省略部分內容
#在配置文件末尾寫(xiě)入以下內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info-access;
$InputFilestateFile state-nginx-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù)以便生效
上面寫(xiě)的配置項解釋如下:
$ModLoad imfile #加載模塊
$InputFilePollInterval 1 #間隔多久采集次,默認單位是秒
$InputFileName /var/log/nginx/access.log #指定要采集的日志文件
$InputFileTag nginx-info-access; #給對應的日志打一個(gè)標簽
$InputFilestateFile state-nginx-info-accesslog #給這個(gè)日志命名
$InputRunFileMonitor #啟動(dòng)監控
#以下的配置和上面類(lèi)似,因為要采集兩個(gè)日志文件嘛!
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
#以下是指定將采集的日志發(fā)送到哪里,同理,一個(gè)@符號表示使用的udp協(xié)議,兩個(gè)表示tcp協(xié)議
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~ #這的~,表示本地的意思
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
(2)bbb服務(wù)器上的監控日志:

(3)客戶(hù)端為了生成日志,訪(fǎng)問(wèn)aaa的Nginx服務(wù)。

?。?)回到bbb服務(wù)器看看aaa服務(wù)器上是否有生成Nginx訪(fǎng)問(wèn)日志(如果沒(méi)有生成新的日志,客戶(hù)端可以在排除配置錯誤的前提下刷新幾次):

可見(jiàn)Nginx的日志信息應該不會(huì )太詳細了吧?日志信息中是否收錄日志的生成時(shí)間?哪個(gè)服務(wù)器生成的?標簽名稱(chēng)是什么?訪(fǎng)問(wèn)了哪個(gè) IP 地址?訪(fǎng)問(wèn)時(shí)間是什么時(shí)候?訪(fǎng)問(wèn)的狀態(tài)碼是什么?客戶(hù)端訪(fǎng)問(wèn)的是什么系統,系統的位數是多少?比如(Windows NT 10.0; Win64; x64,表示是64位win10系統),你用什么瀏覽器訪(fǎng)問(wèn)呢?我用谷歌在這里訪(fǎng)問(wèn)它,它甚至記錄了我客戶(hù)的谷歌瀏覽器的版本號。
至此,Nginx日志文件采集就完成了,接下來(lái)就是執行apache日志采集了。有了前面的鋪墊,這個(gè)就簡(jiǎn)單多了,只需要更改配置項即可。
3、將編譯安裝的apache日志發(fā)送到bbb服務(wù)器進(jìn)行管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# yum -y install httpd #安裝apache服務(wù)
[root@aaa ~]# systemctl stop nginx #為了避免端口沖突,停止Nginx服務(wù)
[root@aaa ~]# systemctl start httpd #啟動(dòng)apache服務(wù)
[root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路徑
#..............省略部分內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log #主要是改這個(gè)
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個(gè)
#其余配置項可不改,但是建議改一下,以免看起來(lái)日志不太直觀(guān)。
$InputFileTag httpd-info-error;
$InputFilestateFile state-httpd-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'httpd-info-access' then @192.168.1.2:514
if $programname == 'httpd-info-access' then ~
if $programname == 'httpd-info-error' then @192.168.1.2:514
if $programname == 'httpd-info-error' then ~
#主要就是將上面配置中的Nginx都換成了httpd。
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
(2)bbb服務(wù)器上的監控日志:

(3)客戶(hù)端訪(fǎng)問(wèn)aaa的Nginx服務(wù)是為了生成日志(刷新幾次)。

(4)回到bbb服務(wù)器看看有沒(méi)有關(guān)于aaa服務(wù)器的httpd訪(fǎng)問(wèn)日志。

行!沒(méi)問(wèn)題,采集 來(lái)了。. .
————————— 本文到此結束,感謝您的閱讀——————
采集系統上云(阿里巴巴高級開(kāi)發(fā)工程師徐榜江版本的核心特性(詳解Flink-CDC))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 264 次瀏覽 ? 2022-01-24 15:22
簡(jiǎn)介:本文由社區志愿者陳正宇整理,內容來(lái)自阿里巴巴高級開(kāi)發(fā)工程師徐邦江(薛勁)7月10日在北京站Flink Meetup上分享的《Flink-CDC詳解》。深度解讀 Flink CDC 新版本 2.0.0 帶來(lái)的核心特性,包括:全量數據并發(fā)讀取、檢查點(diǎn)、無(wú)鎖讀取等重大改進(jìn)。
一、CDC 概述
CDC的全稱(chēng)是Change Data Capture。從廣義上講,只要是能夠捕捉到數據變化的技術(shù),我們就可以稱(chēng)之為CDC。目前常用的CDC技術(shù)主要面向數據庫變化,是一種用于捕捉數據庫中數據變化的技術(shù)。CDC技術(shù)的應用場(chǎng)景非常廣泛:
CDC有很多技術(shù)解決方案。目前業(yè)界主流的實(shí)現機制可以分為兩種:
比較常見(jiàn)的開(kāi)源CDC解決方案,我們可以發(fā)現:
二、Flink CDC 項目
說(shuō)了這么多,讓我們回顧一下開(kāi)發(fā) Flink CDC 項目的動(dòng)機。
1. 動(dòng)態(tài)表和變更日志流
大家都知道 Flink 有兩個(gè)基本概念:Dynamic Table 和 Changelog Stream。
如果你想想 MySQL 中的表和 binlog 日志,你會(huì )發(fā)現 MySQL 數據庫中一張表的所有更改都記錄在 binlog 日志中。如果不斷更新表,binlog日志流會(huì )一直追加,數據庫中的表就相當于binlog日志流在某個(gè)時(shí)間點(diǎn)的物化結果;日志流是不斷捕獲表的變化數據的結果。由此可見(jiàn),Flink SQL 的 Dynamic Table 可以非常自然地表示一個(gè)不斷變化的 MySQL 數據庫表。
在此基礎上,我們研究了一些 CDC 技術(shù),最終選擇了 Debezium 作為 Flink CDC 的底層 采集 工具。Debezium支持全同步、增量同步、全+增量同步,非常靈活。同時(shí),基于日志的CDC技術(shù)使得提供Exactly-Once成為可能。
對比 Flink SQL 的內部數據結構 RowData 和 Debezium 的數據結構,可以發(fā)現兩者非常相似。
通過(guò)分析這兩種數據結構,可以很容易地連接 Flink 和 Debezium 的底層數據。你可以發(fā)現 Flink 在技術(shù)上是適合 CDC 的。
2. 傳統 CDC ETL 分析
我們來(lái)看看傳統CDC的ETL分析環(huán)節,如下圖所示:
在傳統的基于 CDC 的 ETL 分析中,數據 采集 工具是必不可少的。國外用戶(hù)常用Debezium,國內用戶(hù)常用阿里巴巴開(kāi)源Canal。采集 工具負責采集 數據庫的增量數據。,部分采集工具還支持同步全量數據。采集 接收到的數據一般會(huì )輸出到 Kafka 等消息中間件,然后 Flink 計算引擎會(huì )消費這部分數據并寫(xiě)入目的地。目的地可以是各種數據庫、數據湖、實(shí)時(shí)數倉和離線(xiàn)數倉。倉庫。
注意Flink提供了changelog-json格式,可以將changelog數據寫(xiě)入Hive/HDFS等離線(xiàn)數據倉庫;對于實(shí)時(shí)數據倉庫,Flink 支持通過(guò) upsert-kafka 連接器將變更日志直接寫(xiě)入 Kafka。
我們一直在思考是否可以使用 Flink CDC 來(lái)代替上圖中虛線(xiàn)框內的 采集 組件和消息隊列,從而簡(jiǎn)化分析環(huán)節,降低維護成本。同時(shí),更少的組件也意味著(zhù)可以進(jìn)一步提高數據的時(shí)效性。答案是肯定的,所以我們有了基于 Flink CDC 的 ETL 分析流程。
3. 基于 Flink CDC 的 ETL 分析
使用 Flink CDC 之后,除了組件更少、維護更方便之外,另一個(gè)好處是 Flink SQL 大大降低了用戶(hù)門(mén)檻。您可以看到以下示例:
本示例使用 Flink CDC 同步數據庫數據并寫(xiě)入 TiDB。用戶(hù)直接使用 Flink SQL 創(chuàng )建產(chǎn)品和訂單的 MySQL-CDC 表,然后對數據流進(jìn)行 JOIN 處理,處理后直接寫(xiě)入下游數據庫。CDC 的數據分析、處理和同步是通過(guò)一個(gè) Flink SQL 作業(yè)完成的。
你會(huì )發(fā)現這是一個(gè)純SQL的工作,也就是說(shuō)只要你懂SQL BI,行業(yè)的同學(xué)就可以完成這樣的工作。同時(shí),用戶(hù)還可以使用 Flink SQL 提供的豐富語(yǔ)法進(jìn)行數據清洗、分析和聚合。
有了這些功能,現有的 CDC 解決方案很難清理、分析和匯總數據。
此外,使用 Flink SQL 雙流 JOIN、維表 JOIN、UDTF 語(yǔ)法,可以輕松完成數據拓寬和各種業(yè)務(wù)邏輯處理。
4. Flink CDC 項目開(kāi)發(fā)
三、Flink CDC 2.0 詳細信息
1. Flink CDC 痛點(diǎn)
MySQL CDC 是 Fl??ink CDC 中使用最多、最重要的 Connector。本文的以下部分將 Flink CDC Connector 描述為 MySQL CDC Connector。
隨著(zhù) Flink CDC 項目的發(fā)展,得到了社區眾多用戶(hù)的反饋,主要可以總結為三點(diǎn):
2. Debezium 鎖分析
Flink CDC 在底部封裝了 Debezium。Debezium 分兩個(gè)階段同步表:
用戶(hù)使用的場(chǎng)景大多是全量+增量同步。鎖定發(fā)生在全量階段。目的是確定滿(mǎn)卷階段的初始位置,保證增量+滿(mǎn)卷可以做到一多一少,從而保證數據的一致性。從下圖中,我們可以分析出全局鎖和表鎖的一些加鎖過(guò)程。左邊的紅線(xiàn)是鎖的生命周期,右邊是MySQL啟用可重復讀事務(wù)的生命周期。
以全局鎖為例,首先獲取一個(gè)鎖,然后啟動(dòng)一個(gè)可重復讀事務(wù)。這里的加鎖操作是讀取binlog的起始位置和當前表的schema。這樣做的目的是保證binlog的起始位置和當前讀取的schema可以對應,因為表的schema會(huì )發(fā)生變化,比如刪除或者增加列。讀取這兩條信息后,SnapshotReader 將讀取可重復讀取事務(wù)中的全量數據。數據量全讀完后,會(huì )啟動(dòng)BinlogReader從binlog讀取的起始位置開(kāi)始增量讀取,以保證數據量全。數據+增量數據無(wú)縫對接。
表鎖是全局鎖的退化版本,因為全局鎖的權限比較高,所以在某些場(chǎng)景下,用戶(hù)只有表鎖。表鎖鎖需要更長(cháng)的時(shí)間,因為表鎖有一個(gè)特點(diǎn):如果提前釋放鎖,默認會(huì )提交可重復讀事務(wù),所以需要在讀取全量數據后釋放鎖。
經(jīng)過(guò)上面的分析,我們來(lái)看看這些鎖的嚴重后果:
Flink CDC 1.x 可以解鎖,可以滿(mǎn)足大部分場(chǎng)景,但要犧牲一定的數據準確性。Flink CDC 1.x 默認添加全局鎖。雖然可以保證數據的一致性,但存在上述數據掛起的風(fēng)險。
3. Flink CDC 2.0 設計(以 MySQL 為例)
通過(guò)以上分析可知,2.0的設計方案,核心需要解決以上三個(gè)問(wèn)題,即支持無(wú)鎖、水平擴展、檢查點(diǎn)。
DBLog論文中描述的無(wú)鎖算法如下圖所示:
左邊是塊的分割算法的描述。chunk的切分算法其實(shí)和很多數據庫中分庫分表的原理類(lèi)似。表中的數據按表的主鍵分片。假設每個(gè)Chunk的步長(cháng)為10,按照這個(gè)規則進(jìn)行劃分,只需要將這些Chunk區間分為左開(kāi)右閉或左閉右開(kāi)區間,保證連通區間can等于表的主鍵區間,即Can。
右邊是每個(gè) Chunk 的無(wú)鎖讀取算法的描述。該算法的核心思想是在對Chunk進(jìn)行劃分后,對每個(gè)Chunk的全讀和增量讀,完成無(wú)鎖一致性合并。Chunk的分割如下圖所示:
因為每個(gè)chunk只負責自己主鍵范圍內的數據,所以不難推斷,只要能保證讀取每個(gè)chunk的一致性,就可以保證讀取整個(gè)表的一致性。這就是無(wú)鎖算法的基本原理。.
Netflix 的 DBLog 論文中的 Chunk 讀取算法是在 DB 中維護一個(gè)信號表,然后通過(guò)信號表檢查 binlog 文件,記錄每個(gè) chunk 讀取前的 Low Position(低位)和讀取結束后的 High Position . (高點(diǎn)),查詢(xún)低點(diǎn)和高點(diǎn)之間的Chunk全量數據。讀取這部分chunk數據后,將這兩個(gè)站點(diǎn)之間的binlog增量數據合并為該chunk所屬的全量數據,從而得到該chunk在高點(diǎn)時(shí)間對應的全量數據。
結合自身情況,Flink CDC 對塊讀取算法進(jìn)行了改進(jìn),去除了信號表。它不需要額外維護信號表。binlog 中的標記功能被直接讀取 binlog 站點(diǎn)所取代。整體分塊讀取算法說(shuō)明如下圖:
比如讀取Chunk-1時(shí),chunk范圍為[K1,K10],先直接選擇這個(gè)范圍內的數據,存入buffer,在select前記錄一個(gè)binlog的位置(低位),select完成后記錄binlog的一個(gè)軌跡(high locus)。然后啟動(dòng)增量部分,從低點(diǎn)到高點(diǎn)消費binlog。
觀(guān)察圖片右下角的最終輸出,你會(huì )發(fā)現在消費chunk的binlog時(shí),出現的key是k2、k3、k5,我們去buffer標記這些鍵。
這樣,chunk的最終輸出就是高點(diǎn)的chunk中最新的數據。
上圖描述了單個(gè)Chunk的一致性讀,但是如果有多個(gè)表劃分為很多不同的Chunk,這些Chunk分布到不同的任務(wù)中,那么如何分布Chunk,保證全局一致讀呢?
這是基于 FLIP-27 優(yōu)雅地實(shí)現的。您可以在下圖中看到帶有 SourceEnumerator 的組件。該組件主要用于Chunk劃分。分割后的 Chunk 會(huì )提供給下游的 SourceReader 讀取,并按 chunk 分發(fā) Snapshot Chunk 的過(guò)程是針對不同的 SourceReader 實(shí)現的,并且基于 FLIP-27,我們可以很容易地在 chunk 粒度上進(jìn)行 checkpoint。
在讀取Snapshot Chunk時(shí),需要有一個(gè)上報流程,如下圖橙色的上報信息,將Snapshot Chunk完成信息上報給SourceEnumerator。
上報的主要目的是為了后續分發(fā)binlog chunks(如下圖)。因為 Flink CDC 支持全量+增量同步,所以在所有 Snapshot Chunk 讀取完成后,需要消費增量 binlog。這是通過(guò)將 binlog 塊發(fā)送到任何 Source Reader 以進(jìn)行單個(gè)并發(fā)讀取來(lái)實(shí)現的。
對于大部分用戶(hù)來(lái)說(shuō),其實(shí)沒(méi)必要過(guò)多關(guān)注如何進(jìn)行無(wú)鎖算法和分片的細節,了解一下整體流程就好了。
整個(gè)過(guò)程可以概括為:首先通過(guò)主鍵將表劃分為Snapshot Chunk,然后將Snapshot Chunk分發(fā)給多個(gè)SourceReader。在讀取每個(gè) Snapshot Chunk 時(shí),它使用一種算法來(lái)實(shí)現無(wú)鎖條件下的一致性讀取。SourceReader 支持閱讀。Chunk粒度檢查點(diǎn),讀取完所有的Snapshot Chunk后,下發(fā)一個(gè)binlog chunk用于增量binlog讀取,即Flink CDC 2.0的整體流程,如下圖所示:
Flink CDC 是一個(gè)完全開(kāi)源的項目。該項目的所有設計和源代碼都已貢獻給開(kāi)源社區。Flink CDC 2.0 也已經(jīng)正式發(fā)布。核心改進(jìn)和增強包括:
作者用TPC-DS數據集中的customer表進(jìn)行了測試。Flink版本為1.13.1,客戶(hù)表數據量6500萬(wàn),源并發(fā)8,全讀階段:
為了提供更好的文檔支持,Flink CDC 社區構建了文檔網(wǎng)站、網(wǎng)站來(lái)支持文檔版本管理:
Document網(wǎng)站 支持關(guān)鍵字搜索功能,非常有用:
四、未來(lái)規劃
關(guān)于CDC項目的未來(lái)規劃,我們希望重點(diǎn)關(guān)注三個(gè)方面:穩定性、高級特性和生態(tài)融合。
“關(guān)聯(lián)” 查看全部
采集系統上云(阿里巴巴高級開(kāi)發(fā)工程師徐榜江版本的核心特性(詳解Flink-CDC))
簡(jiǎn)介:本文由社區志愿者陳正宇整理,內容來(lái)自阿里巴巴高級開(kāi)發(fā)工程師徐邦江(薛勁)7月10日在北京站Flink Meetup上分享的《Flink-CDC詳解》。深度解讀 Flink CDC 新版本 2.0.0 帶來(lái)的核心特性,包括:全量數據并發(fā)讀取、檢查點(diǎn)、無(wú)鎖讀取等重大改進(jìn)。
一、CDC 概述
CDC的全稱(chēng)是Change Data Capture。從廣義上講,只要是能夠捕捉到數據變化的技術(shù),我們就可以稱(chēng)之為CDC。目前常用的CDC技術(shù)主要面向數據庫變化,是一種用于捕捉數據庫中數據變化的技術(shù)。CDC技術(shù)的應用場(chǎng)景非常廣泛:
CDC有很多技術(shù)解決方案。目前業(yè)界主流的實(shí)現機制可以分為兩種:
比較常見(jiàn)的開(kāi)源CDC解決方案,我們可以發(fā)現:
二、Flink CDC 項目
說(shuō)了這么多,讓我們回顧一下開(kāi)發(fā) Flink CDC 項目的動(dòng)機。
1. 動(dòng)態(tài)表和變更日志流
大家都知道 Flink 有兩個(gè)基本概念:Dynamic Table 和 Changelog Stream。
如果你想想 MySQL 中的表和 binlog 日志,你會(huì )發(fā)現 MySQL 數據庫中一張表的所有更改都記錄在 binlog 日志中。如果不斷更新表,binlog日志流會(huì )一直追加,數據庫中的表就相當于binlog日志流在某個(gè)時(shí)間點(diǎn)的物化結果;日志流是不斷捕獲表的變化數據的結果。由此可見(jiàn),Flink SQL 的 Dynamic Table 可以非常自然地表示一個(gè)不斷變化的 MySQL 數據庫表。
在此基礎上,我們研究了一些 CDC 技術(shù),最終選擇了 Debezium 作為 Flink CDC 的底層 采集 工具。Debezium支持全同步、增量同步、全+增量同步,非常靈活。同時(shí),基于日志的CDC技術(shù)使得提供Exactly-Once成為可能。
對比 Flink SQL 的內部數據結構 RowData 和 Debezium 的數據結構,可以發(fā)現兩者非常相似。
通過(guò)分析這兩種數據結構,可以很容易地連接 Flink 和 Debezium 的底層數據。你可以發(fā)現 Flink 在技術(shù)上是適合 CDC 的。
2. 傳統 CDC ETL 分析
我們來(lái)看看傳統CDC的ETL分析環(huán)節,如下圖所示:
在傳統的基于 CDC 的 ETL 分析中,數據 采集 工具是必不可少的。國外用戶(hù)常用Debezium,國內用戶(hù)常用阿里巴巴開(kāi)源Canal。采集 工具負責采集 數據庫的增量數據。,部分采集工具還支持同步全量數據。采集 接收到的數據一般會(huì )輸出到 Kafka 等消息中間件,然后 Flink 計算引擎會(huì )消費這部分數據并寫(xiě)入目的地。目的地可以是各種數據庫、數據湖、實(shí)時(shí)數倉和離線(xiàn)數倉。倉庫。
注意Flink提供了changelog-json格式,可以將changelog數據寫(xiě)入Hive/HDFS等離線(xiàn)數據倉庫;對于實(shí)時(shí)數據倉庫,Flink 支持通過(guò) upsert-kafka 連接器將變更日志直接寫(xiě)入 Kafka。
我們一直在思考是否可以使用 Flink CDC 來(lái)代替上圖中虛線(xiàn)框內的 采集 組件和消息隊列,從而簡(jiǎn)化分析環(huán)節,降低維護成本。同時(shí),更少的組件也意味著(zhù)可以進(jìn)一步提高數據的時(shí)效性。答案是肯定的,所以我們有了基于 Flink CDC 的 ETL 分析流程。
3. 基于 Flink CDC 的 ETL 分析
使用 Flink CDC 之后,除了組件更少、維護更方便之外,另一個(gè)好處是 Flink SQL 大大降低了用戶(hù)門(mén)檻。您可以看到以下示例:
本示例使用 Flink CDC 同步數據庫數據并寫(xiě)入 TiDB。用戶(hù)直接使用 Flink SQL 創(chuàng )建產(chǎn)品和訂單的 MySQL-CDC 表,然后對數據流進(jìn)行 JOIN 處理,處理后直接寫(xiě)入下游數據庫。CDC 的數據分析、處理和同步是通過(guò)一個(gè) Flink SQL 作業(yè)完成的。
你會(huì )發(fā)現這是一個(gè)純SQL的工作,也就是說(shuō)只要你懂SQL BI,行業(yè)的同學(xué)就可以完成這樣的工作。同時(shí),用戶(hù)還可以使用 Flink SQL 提供的豐富語(yǔ)法進(jìn)行數據清洗、分析和聚合。
有了這些功能,現有的 CDC 解決方案很難清理、分析和匯總數據。
此外,使用 Flink SQL 雙流 JOIN、維表 JOIN、UDTF 語(yǔ)法,可以輕松完成數據拓寬和各種業(yè)務(wù)邏輯處理。
4. Flink CDC 項目開(kāi)發(fā)
三、Flink CDC 2.0 詳細信息
1. Flink CDC 痛點(diǎn)
MySQL CDC 是 Fl??ink CDC 中使用最多、最重要的 Connector。本文的以下部分將 Flink CDC Connector 描述為 MySQL CDC Connector。
隨著(zhù) Flink CDC 項目的發(fā)展,得到了社區眾多用戶(hù)的反饋,主要可以總結為三點(diǎn):
2. Debezium 鎖分析
Flink CDC 在底部封裝了 Debezium。Debezium 分兩個(gè)階段同步表:
用戶(hù)使用的場(chǎng)景大多是全量+增量同步。鎖定發(fā)生在全量階段。目的是確定滿(mǎn)卷階段的初始位置,保證增量+滿(mǎn)卷可以做到一多一少,從而保證數據的一致性。從下圖中,我們可以分析出全局鎖和表鎖的一些加鎖過(guò)程。左邊的紅線(xiàn)是鎖的生命周期,右邊是MySQL啟用可重復讀事務(wù)的生命周期。
以全局鎖為例,首先獲取一個(gè)鎖,然后啟動(dòng)一個(gè)可重復讀事務(wù)。這里的加鎖操作是讀取binlog的起始位置和當前表的schema。這樣做的目的是保證binlog的起始位置和當前讀取的schema可以對應,因為表的schema會(huì )發(fā)生變化,比如刪除或者增加列。讀取這兩條信息后,SnapshotReader 將讀取可重復讀取事務(wù)中的全量數據。數據量全讀完后,會(huì )啟動(dòng)BinlogReader從binlog讀取的起始位置開(kāi)始增量讀取,以保證數據量全。數據+增量數據無(wú)縫對接。
表鎖是全局鎖的退化版本,因為全局鎖的權限比較高,所以在某些場(chǎng)景下,用戶(hù)只有表鎖。表鎖鎖需要更長(cháng)的時(shí)間,因為表鎖有一個(gè)特點(diǎn):如果提前釋放鎖,默認會(huì )提交可重復讀事務(wù),所以需要在讀取全量數據后釋放鎖。
經(jīng)過(guò)上面的分析,我們來(lái)看看這些鎖的嚴重后果:
Flink CDC 1.x 可以解鎖,可以滿(mǎn)足大部分場(chǎng)景,但要犧牲一定的數據準確性。Flink CDC 1.x 默認添加全局鎖。雖然可以保證數據的一致性,但存在上述數據掛起的風(fēng)險。
3. Flink CDC 2.0 設計(以 MySQL 為例)
通過(guò)以上分析可知,2.0的設計方案,核心需要解決以上三個(gè)問(wèn)題,即支持無(wú)鎖、水平擴展、檢查點(diǎn)。
DBLog論文中描述的無(wú)鎖算法如下圖所示:
左邊是塊的分割算法的描述。chunk的切分算法其實(shí)和很多數據庫中分庫分表的原理類(lèi)似。表中的數據按表的主鍵分片。假設每個(gè)Chunk的步長(cháng)為10,按照這個(gè)規則進(jìn)行劃分,只需要將這些Chunk區間分為左開(kāi)右閉或左閉右開(kāi)區間,保證連通區間can等于表的主鍵區間,即Can。
右邊是每個(gè) Chunk 的無(wú)鎖讀取算法的描述。該算法的核心思想是在對Chunk進(jìn)行劃分后,對每個(gè)Chunk的全讀和增量讀,完成無(wú)鎖一致性合并。Chunk的分割如下圖所示:
因為每個(gè)chunk只負責自己主鍵范圍內的數據,所以不難推斷,只要能保證讀取每個(gè)chunk的一致性,就可以保證讀取整個(gè)表的一致性。這就是無(wú)鎖算法的基本原理。.
Netflix 的 DBLog 論文中的 Chunk 讀取算法是在 DB 中維護一個(gè)信號表,然后通過(guò)信號表檢查 binlog 文件,記錄每個(gè) chunk 讀取前的 Low Position(低位)和讀取結束后的 High Position . (高點(diǎn)),查詢(xún)低點(diǎn)和高點(diǎn)之間的Chunk全量數據。讀取這部分chunk數據后,將這兩個(gè)站點(diǎn)之間的binlog增量數據合并為該chunk所屬的全量數據,從而得到該chunk在高點(diǎn)時(shí)間對應的全量數據。
結合自身情況,Flink CDC 對塊讀取算法進(jìn)行了改進(jìn),去除了信號表。它不需要額外維護信號表。binlog 中的標記功能被直接讀取 binlog 站點(diǎn)所取代。整體分塊讀取算法說(shuō)明如下圖:
比如讀取Chunk-1時(shí),chunk范圍為[K1,K10],先直接選擇這個(gè)范圍內的數據,存入buffer,在select前記錄一個(gè)binlog的位置(低位),select完成后記錄binlog的一個(gè)軌跡(high locus)。然后啟動(dòng)增量部分,從低點(diǎn)到高點(diǎn)消費binlog。
觀(guān)察圖片右下角的最終輸出,你會(huì )發(fā)現在消費chunk的binlog時(shí),出現的key是k2、k3、k5,我們去buffer標記這些鍵。
這樣,chunk的最終輸出就是高點(diǎn)的chunk中最新的數據。
上圖描述了單個(gè)Chunk的一致性讀,但是如果有多個(gè)表劃分為很多不同的Chunk,這些Chunk分布到不同的任務(wù)中,那么如何分布Chunk,保證全局一致讀呢?
這是基于 FLIP-27 優(yōu)雅地實(shí)現的。您可以在下圖中看到帶有 SourceEnumerator 的組件。該組件主要用于Chunk劃分。分割后的 Chunk 會(huì )提供給下游的 SourceReader 讀取,并按 chunk 分發(fā) Snapshot Chunk 的過(guò)程是針對不同的 SourceReader 實(shí)現的,并且基于 FLIP-27,我們可以很容易地在 chunk 粒度上進(jìn)行 checkpoint。
在讀取Snapshot Chunk時(shí),需要有一個(gè)上報流程,如下圖橙色的上報信息,將Snapshot Chunk完成信息上報給SourceEnumerator。
上報的主要目的是為了后續分發(fā)binlog chunks(如下圖)。因為 Flink CDC 支持全量+增量同步,所以在所有 Snapshot Chunk 讀取完成后,需要消費增量 binlog。這是通過(guò)將 binlog 塊發(fā)送到任何 Source Reader 以進(jìn)行單個(gè)并發(fā)讀取來(lái)實(shí)現的。
對于大部分用戶(hù)來(lái)說(shuō),其實(shí)沒(méi)必要過(guò)多關(guān)注如何進(jìn)行無(wú)鎖算法和分片的細節,了解一下整體流程就好了。
整個(gè)過(guò)程可以概括為:首先通過(guò)主鍵將表劃分為Snapshot Chunk,然后將Snapshot Chunk分發(fā)給多個(gè)SourceReader。在讀取每個(gè) Snapshot Chunk 時(shí),它使用一種算法來(lái)實(shí)現無(wú)鎖條件下的一致性讀取。SourceReader 支持閱讀。Chunk粒度檢查點(diǎn),讀取完所有的Snapshot Chunk后,下發(fā)一個(gè)binlog chunk用于增量binlog讀取,即Flink CDC 2.0的整體流程,如下圖所示:
Flink CDC 是一個(gè)完全開(kāi)源的項目。該項目的所有設計和源代碼都已貢獻給開(kāi)源社區。Flink CDC 2.0 也已經(jīng)正式發(fā)布。核心改進(jìn)和增強包括:
作者用TPC-DS數據集中的customer表進(jìn)行了測試。Flink版本為1.13.1,客戶(hù)表數據量6500萬(wàn),源并發(fā)8,全讀階段:
為了提供更好的文檔支持,Flink CDC 社區構建了文檔網(wǎng)站、網(wǎng)站來(lái)支持文檔版本管理:
Document網(wǎng)站 支持關(guān)鍵字搜索功能,非常有用:
四、未來(lái)規劃
關(guān)于CDC項目的未來(lái)規劃,我們希望重點(diǎn)關(guān)注三個(gè)方面:穩定性、高級特性和生態(tài)融合。
“關(guān)聯(lián)”
采集系統上云(互聯(lián)網(wǎng)系統圖一圖一是的遷移到云端,以便獲取這種能力 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 207 次瀏覽 ? 2022-01-16 00:15
)
在互聯(lián)網(wǎng)大行其道的今天,毫不夸張地說(shuō),對市場(chǎng)的反應速度甚至將決定一家公司的生死存亡。我們的客戶(hù)(房地產(chǎn)垂直搜索平臺)就是這樣一家互聯(lián)網(wǎng)公司。為了縮短開(kāi)發(fā)周期,減少系統上市時(shí)間,我們將現有的基于傳統數據中心的基礎設施遷移到云端,以獲得這種能力。
在此之前,我們先來(lái)看看他們現有的系統。
1、現有系統
圖1
圖 1 是現有核心系統的簡(jiǎn)單抽象。我們維護三個(gè)業(yè)務(wù)線(xiàn)(這里指的是業(yè)務(wù)為主,有獨立的產(chǎn)品經(jīng)理、銷(xiāo)售團隊、獨立的結算團隊,以下簡(jiǎn)稱(chēng)LoB),每個(gè)業(yè)務(wù)線(xiàn)對應不同類(lèi)別的房產(chǎn)搜索網(wǎng)站@ >,如商業(yè)和住宅。User是一個(gè)用戶(hù)管理模塊,可以提供用戶(hù)管理、書(shū)簽和搜索管理;Location是一個(gè)定位模塊,根據用戶(hù)的搜索條件給出實(shí)際地址和相鄰地址;搜索引擎用于存儲所有信息并提供搜索功能??梢钥闯?,三個(gè)LoB雖然不同網(wǎng)站@>,但提供的服務(wù)卻是相似的。不僅,
基于以上原因,它們應該集成在一個(gè)系統中,但它們不是。這些業(yè)務(wù)線(xiàn)雖然有如此高的相似度,但在以下幾個(gè)方面卻大相徑庭:
由于不同的屬性有不同的搜索條件,所以部署時(shí)需要對不同的網(wǎng)站@>進(jìn)行不同的配置。
不同的樓盤(pán)有不同的目標市場(chǎng),需求決定了要開(kāi)發(fā)哪些特色,開(kāi)展哪些營(yíng)銷(xiāo)活動(dòng)。因此,每個(gè)業(yè)務(wù)線(xiàn)都有自己的銷(xiāo)售和開(kāi)發(fā)團隊,并根據市場(chǎng)變化開(kāi)發(fā)和發(fā)布相應的功能。計劃。
在圖1中,不同的顏色表示不同的流量級別,紅色表示最大流量,黃色表示中等流量,綠色表示較低流量。對于不同類(lèi)型的物業(yè),市場(chǎng)需求是不同的。
商業(yè)地產(chǎn)的目標客戶(hù)是需要開(kāi)展商業(yè)活動(dòng)的人,而住宅地產(chǎn)的目標客戶(hù)是希望為子女生活或提供更好教育機會(huì )的普通人。
2、商業(yè)愿景
了解了現有系統之后,再來(lái)看看他們的業(yè)務(wù)愿景,因為沒(méi)有一家公司的 IT 轉型是獨立于業(yè)務(wù)驅動(dòng)的,了解業(yè)務(wù)愿景有助于更清楚地了解遷移上云背后的原因。同時(shí),對云策略的適用場(chǎng)景也有了更直觀(guān)的認識。
這意味著(zhù)每個(gè)團隊都將是一個(gè)完全獨立的全功能團隊,擁有獨立的系統和獨立開(kāi)發(fā)、部署、運維、營(yíng)銷(xiāo)和銷(xiāo)售的能力。這為每個(gè)團隊提供了非常大的自主權,以及對業(yè)務(wù)擴展和收縮的非常好的適應能力。
這里所說(shuō)的效率主要是指IT生產(chǎn)活動(dòng)的效率。本質(zhì)上,他們是一家互聯(lián)網(wǎng)公司。如何提高IT系統的效率來(lái)支持業(yè)務(wù)的發(fā)展是他們看重的。比如提高人的效率,開(kāi)發(fā)、上線(xiàn)、測試、運維、在線(xiàn)反饋等等,全方面的效率。
中國可能是世界上最活躍的房地產(chǎn)市場(chǎng)之一。與此同時(shí),海外房地產(chǎn)投資在中國持續升溫。他們沒(méi)有理由錯過(guò)這個(gè)機會(huì ),不僅在德國、意大利和中國香港。
基于以上差異,圖1所示的系統架構顯然不能滿(mǎn)足客戶(hù)對業(yè)務(wù)愿景的實(shí)現。主要問(wèn)題如下:
由于這是一個(gè)集成了所有 LoB 的系統,因此業(yè)務(wù)線(xiàn)之間存在耦合。試想這個(gè)場(chǎng)景,LoB1已經(jīng)根據市場(chǎng)反饋完成了房產(chǎn)中介品牌的提升,希望在漲價(jià)前上線(xiàn),因為這將是漲價(jià)的合理理由。同時(shí),LoB2正在開(kāi)發(fā)新的頁(yè)面以滿(mǎn)足業(yè)主品牌的需求,但這個(gè)功能只開(kāi)發(fā)了一半。按照目前的模式,我們要等LoB2完成功能開(kāi)發(fā)后才能一起上線(xiàn),這樣就錯過(guò)了LoB1漲價(jià)的機會(huì ),下一個(gè)漲價(jià)窗口將在幾個(gè)月后。
通過(guò)流量監控,我們發(fā)現網(wǎng)站@>的流量并不是一成不變的。按年計算,網(wǎng)站@> 的流量會(huì )在圣誕節前下降到平時(shí)水平的 50% 左右,圣誕節后可能會(huì )上升到 50%。平均水平在200%左右,這么大的流量會(huì )持續一周左右。其實(shí)這種情況也不難理解,因為圣誕節期間大家都在放假,放假后還會(huì )有一波工作。從圖1我們也可以清楚的看到不同組件的不同流量。為了保證整體的響應速度,系統總是以較高的流量部署。但是,由于每個(gè) LoB 都不能獨立部署,因此浪費了資源。情況非常明顯。
我們之前提到了全球擴張計劃。他們想進(jìn)入中國市場(chǎng),所以需要設計一個(gè)獨立的網(wǎng)站@>給中國用戶(hù)提供住房。為國家房地產(chǎn)市場(chǎng)的擴張做準備,為了實(shí)現這個(gè)目標,我們需要IT基礎設施的支持,可以快速靈活地橫向擴張。但基于現有的數據中心模式,這將是一個(gè)痛苦的過(guò)程。
3、架構愿景
通過(guò)對原有IT架構的分析,我們發(fā)現很難支撐業(yè)務(wù)愿景的實(shí)現。因此,對于這樣的業(yè)務(wù)愿景,我們已經(jīng)勾勒出了一個(gè)能夠很好地支持業(yè)務(wù)愿景的 IT 架構愿景。
必須能夠根據業(yè)務(wù)線(xiàn)獨立運作
易于擴展或可擴展
解決從開(kāi)發(fā)到部署的所有問(wèn)題,開(kāi)發(fā)者更關(guān)注如何更快地交付功能,而不是各種環(huán)境問(wèn)題、部署問(wèn)題、發(fā)布問(wèn)題
提高資源利用率,根據不同流量情況自適應分配資源。
基于這個(gè)愿景,我們發(fā)現云平臺可以幫助我們實(shí)現這樣的IT愿景。圖 2 描述了系統上云后的架構。
圖二
一是所有業(yè)務(wù)線(xiàn)獨立運營(yíng),可以自主選擇何時(shí)發(fā)布上線(xiàn),選擇合適的SLA和資源以適應流量變化;其次,所有業(yè)務(wù)線(xiàn)共享的組件獨立于業(yè)務(wù)線(xiàn)。此外,它們分別部署和運行,還可以調整不同的資源以適應流量的變化。
4、遷移三部曲
在我們知道了現有系統的目標狀態(tài)之后,下一步就是如何實(shí)現這個(gè)目標。
圖 3
如圖3所示,在遷移上云時(shí),從現有系統遷移到目標系統的過(guò)程不是一次性的過(guò)程,也不是一次性的遷移,而是一個(gè)周期性的、持續的過(guò)程。是相關(guān)系統整合的結果。如果我們關(guān)注其中一個(gè)遷移周期,則該過(guò)程大致可以分為三個(gè)階段:
階段 1:識別
識別就是弄清楚要遷移的內容。
對于原來(lái)的集成系統來(lái)說(shuō),這個(gè)過(guò)程與聚合相反,就是對聚合的所有功能特征進(jìn)行分析和分解。本次活動(dòng)的目的是深入了解當前系統的職責。明確職責后,我們可以更好地確定哪些職責可以剝離、拆分、獨立。比如這個(gè)房產(chǎn)搜索網(wǎng)站@>,經(jīng)過(guò)識別發(fā)現我們的主要職責是:前端展示(桌面、手機)、房產(chǎn)搜索、搜索管理、用戶(hù)管理、地理位置查詢(xún)、并且還提供了部分API。識別完成后,我們要選擇從哪個(gè)職責開(kāi)始遷移。這個(gè)過(guò)程不是隨機的,而是基于現有的團隊能力,
我的建議是從簡(jiǎn)單且相對獨立的職責開(kāi)始。如果能同時(shí)支持業(yè)務(wù)發(fā)展,那就更好了。因為難度低,可以在遷移初期給團隊帶來(lái)信心和經(jīng)驗。隨著(zhù)遷移經(jīng)驗和信心的積累,那些高耦合、多依賴(lài)的職責可以輕松遷移。以這個(gè)房產(chǎn)搜索平臺為例,在遷移初期,我們選擇用戶(hù)管理職責進(jìn)行遷移,一方面是因為它比較簡(jiǎn)單,相對獨立,另一方面是因為它為我們提供了API支持。 iOS開(kāi)發(fā)。
第 2 階段:提取
在確定了系統職責并確定了要遷移的職責之后,是時(shí)候將該職責提取為獨立的云服務(wù)了。
圖 4
如上圖所示,這個(gè)階段的核心是將識別出的職責從原有系統中分離出來(lái),成為獨立的云服務(wù)。這個(gè)過(guò)程有幾點(diǎn)需要注意:創(chuàng )建快,需要多快?理想狀態(tài)是創(chuàng )建成功(空服)后上線(xiàn)(灰度發(fā)布)?;蛟S這個(gè)目標在遷移之初并不容易實(shí)現,但隨著(zhù)遷移信心和經(jīng)驗的積累,是完全可行的,當然這也是我們從簡(jiǎn)單且相對獨立的職責入手的另一個(gè)原因;為了快速部署,我們從一個(gè)空服務(wù)創(chuàng )建一個(gè)新服務(wù),這意味著(zhù)它可以做任何事情,除了在生產(chǎn)環(huán)境中運行。不。在這個(gè)階段,我們的目標是抽象出服務(wù)的兩個(gè)痛苦階段:創(chuàng )建和部署,
第三階段:整合
集成是將新的云服務(wù)與原有系統連接起來(lái)。
如果說(shuō)前兩個(gè)階段都是準備,那么這個(gè)階段就是實(shí)施遷移的過(guò)程??梢哉f(shuō)這是最重要的階段,因為這是新舊系統交付的時(shí)期。這個(gè)階段會(huì )有一些活動(dòng)。首先,確定新服務(wù)需要哪些外部接口,這需要對現有系統有更深入的了解(當然,如果接口比較簡(jiǎn)單,這一步也可以在提取階段實(shí)現);其次,將現有系統中待遷移職責的依賴(lài)切換到新服務(wù)。這個(gè)過(guò)程可以一次完成,也可以連續完成,這取決于職責的獨立程度和現有系統依賴(lài)管理的復雜程度。最后,從原創(chuàng )系統中刪除責任。以用戶(hù)管理職責為例,這個(gè)階段是將現有系統與用戶(hù)服務(wù)進(jìn)行整合,并將該職責從系統中移除。
5、遷移提示
了解了這三個(gè)階段之后,不難看出兩個(gè)階段之間的過(guò)渡是否高效、順暢、無(wú)障礙,對整個(gè)系統上云的遷移起到至關(guān)重要的作用。隨著(zhù)長(cháng)期遷移經(jīng)驗的積累,我們發(fā)現以下技巧可以幫助我們在整個(gè)遷移階段順利過(guò)渡。如圖 5 所示,在明確遷移職責后,Stencil+DevOps 可以幫助我們快速創(chuàng )建和部署云服務(wù)。原系統對接云服務(wù)后,可通過(guò)測試驅動(dòng)。對接后,監控可以為我們提供這個(gè)遷移周期。偉大的反饋開(kāi)始下一個(gè)遷移周期。讓我們也拿這個(gè) 網(wǎng)站@>
圖 5
提示 1:快速啟動(dòng):Stencil + devOps
如上所述,這個(gè)過(guò)程必須高效,即快速創(chuàng )建和部署新服務(wù)。只有這樣,我們才能使這個(gè)過(guò)程正?;?。我們該怎么做?我們采用了 Stencil+devOps。
Stencil 是一個(gè)服務(wù)模板,它可以幫助我們快速生成一個(gè)空服務(wù),包括一個(gè)遵循組織規范的目錄結構、標準的監控配置和接口、初始化的構建腳本等。使用 Stencil 的好處是可以快速創(chuàng )建一個(gè)組織標準化服務(wù)。服務(wù); devOps 用于服務(wù)部署、維護、持續集成和發(fā)布環(huán)境的建立。當然,它也遵循組織的標準規范。如下圖,模板主要由3部分組成:應用程序本身、部署腳本(AWS Cloudformation)、docker配置(用于構建)。
提示 2:測試:消費者驅動(dòng)的測試
當我們快速啟動(dòng)一個(gè)空服務(wù)時(shí),下一步是如何在兩個(gè)系統之間快速集成。系統間集成時(shí),基本上可以分為兩個(gè)小步驟:??定義新服務(wù)的接口+與現有系統對接的接口。定義一個(gè)服務(wù)接口可以是一個(gè)簡(jiǎn)單的過(guò)程,也可以是一個(gè)復雜的過(guò)程,這取決于原創(chuàng )系統中職責的復雜性。不管復雜與否,定義服務(wù)接口的過(guò)程都是一樣的——消費驅動(dòng)。不同于預先定義新服務(wù)的所有接口,它驅動(dòng)新服務(wù)根據消費者的需求提供合適的接口。當然,這里的消費者指的是現有的系統。
圖 6
從圖6可以看出,現有系統(即消費者)與新服務(wù)(即服務(wù))的集成過(guò)程是由兩組失敗+成功的測試,或兩組BDD組成的。首先是消費者端的 BDD。中間人扮演著(zhù)服務(wù)的角色,我們假設新服務(wù)的接口已經(jīng)按照消費者的要求實(shí)現了。這時(shí)候,由于消費者還沒(méi)有寫(xiě)完相應的代碼,我們會(huì )得到一個(gè)失敗,然后才是真正的編碼。當我們得到一個(gè)成功的測試,就意味著(zhù)消費者端的集成工作已經(jīng)完成;然后是服務(wù)端的 BDD。這時(shí),中間人就扮演了消費者的角色。該服務(wù)沒(méi)有定義預期的接口,所以我們會(huì )得到一個(gè)失敗的測試。編碼后,
提示 3:監控
在我們拆分原系統之前,所有模塊都集成到同一個(gè)系統中,對系統的監控是統一的。但是當我們將現有系統拆分成多個(gè)獨立的系統時(shí),如何保證新服務(wù)的良好運行,或者如何實(shí)時(shí)監控新服務(wù)的運行狀態(tài),對整個(gè)系統的穩定性非常重要。在實(shí)施監控時(shí),我們應該考慮以下幾個(gè)方面:
基于虛擬機節點(diǎn)整體監控系統資源
比如CPU利用率、硬盤(pán)讀寫(xiě)、內存利用率等,主要目的是檢查當前節點(diǎn)是否過(guò)載或空閑。過(guò)載意味著(zhù)資源不能滿(mǎn)足當前的流量。應增加節點(diǎn)并部署更多服務(wù)以適應大流量情況??臻e意味著(zhù)資源過(guò)剩,應減少節點(diǎn)以降低成本。
對服務(wù)整體進(jìn)行粗粒度監控
主要目的是檢查當前服務(wù)是否正在運行。如果檢測到該服務(wù)不可用,云負載均衡會(huì )根據預先配置刪除該服務(wù),并添加一個(gè)新的服務(wù)來(lái)填補空缺。也就是說(shuō),基于當前的架構,我們更愿意重建服務(wù)而不是修復不可用的服務(wù)。
監控所有服務(wù)的內部狀態(tài)
以上兩種監控都無(wú)法獲取到服務(wù)內部的運行狀態(tài),所以日志監控在這里顯得尤為重要,尤其是兩個(gè)系統之間集成的日志。通過(guò)監控系統日志,我們就有了監控系統內部邏輯的能力,有了這個(gè)能力,我們就可以跟蹤事故的發(fā)生,獲取關(guān)鍵信息來(lái)優(yōu)化服務(wù)。
總結
從傳統數據中心基礎設施遷移到云端是一個(gè)長(cháng)期的過(guò)程,可能還有很多未知的問(wèn)題在等著(zhù)我們,但我們發(fā)現同時(shí)也是一個(gè)重新認識現有系統的過(guò)程。在此期間,我們發(fā)現了一些規律。每個(gè)功能的遷移都有自己的特點(diǎn),同時(shí)又是相似的。這種相似性的提取是:識別、提取和整合。
查看全部
采集系統上云(互聯(lián)網(wǎng)系統圖一圖一是的遷移到云端,以便獲取這種能力
)
在互聯(lián)網(wǎng)大行其道的今天,毫不夸張地說(shuō),對市場(chǎng)的反應速度甚至將決定一家公司的生死存亡。我們的客戶(hù)(房地產(chǎn)垂直搜索平臺)就是這樣一家互聯(lián)網(wǎng)公司。為了縮短開(kāi)發(fā)周期,減少系統上市時(shí)間,我們將現有的基于傳統數據中心的基礎設施遷移到云端,以獲得這種能力。
在此之前,我們先來(lái)看看他們現有的系統。
1、現有系統

圖1
圖 1 是現有核心系統的簡(jiǎn)單抽象。我們維護三個(gè)業(yè)務(wù)線(xiàn)(這里指的是業(yè)務(wù)為主,有獨立的產(chǎn)品經(jīng)理、銷(xiāo)售團隊、獨立的結算團隊,以下簡(jiǎn)稱(chēng)LoB),每個(gè)業(yè)務(wù)線(xiàn)對應不同類(lèi)別的房產(chǎn)搜索網(wǎng)站@ >,如商業(yè)和住宅。User是一個(gè)用戶(hù)管理模塊,可以提供用戶(hù)管理、書(shū)簽和搜索管理;Location是一個(gè)定位模塊,根據用戶(hù)的搜索條件給出實(shí)際地址和相鄰地址;搜索引擎用于存儲所有信息并提供搜索功能??梢钥闯?,三個(gè)LoB雖然不同網(wǎng)站@>,但提供的服務(wù)卻是相似的。不僅,
基于以上原因,它們應該集成在一個(gè)系統中,但它們不是。這些業(yè)務(wù)線(xiàn)雖然有如此高的相似度,但在以下幾個(gè)方面卻大相徑庭:
由于不同的屬性有不同的搜索條件,所以部署時(shí)需要對不同的網(wǎng)站@>進(jìn)行不同的配置。
不同的樓盤(pán)有不同的目標市場(chǎng),需求決定了要開(kāi)發(fā)哪些特色,開(kāi)展哪些營(yíng)銷(xiāo)活動(dòng)。因此,每個(gè)業(yè)務(wù)線(xiàn)都有自己的銷(xiāo)售和開(kāi)發(fā)團隊,并根據市場(chǎng)變化開(kāi)發(fā)和發(fā)布相應的功能。計劃。
在圖1中,不同的顏色表示不同的流量級別,紅色表示最大流量,黃色表示中等流量,綠色表示較低流量。對于不同類(lèi)型的物業(yè),市場(chǎng)需求是不同的。
商業(yè)地產(chǎn)的目標客戶(hù)是需要開(kāi)展商業(yè)活動(dòng)的人,而住宅地產(chǎn)的目標客戶(hù)是希望為子女生活或提供更好教育機會(huì )的普通人。
2、商業(yè)愿景
了解了現有系統之后,再來(lái)看看他們的業(yè)務(wù)愿景,因為沒(méi)有一家公司的 IT 轉型是獨立于業(yè)務(wù)驅動(dòng)的,了解業(yè)務(wù)愿景有助于更清楚地了解遷移上云背后的原因。同時(shí),對云策略的適用場(chǎng)景也有了更直觀(guān)的認識。
這意味著(zhù)每個(gè)團隊都將是一個(gè)完全獨立的全功能團隊,擁有獨立的系統和獨立開(kāi)發(fā)、部署、運維、營(yíng)銷(xiāo)和銷(xiāo)售的能力。這為每個(gè)團隊提供了非常大的自主權,以及對業(yè)務(wù)擴展和收縮的非常好的適應能力。
這里所說(shuō)的效率主要是指IT生產(chǎn)活動(dòng)的效率。本質(zhì)上,他們是一家互聯(lián)網(wǎng)公司。如何提高IT系統的效率來(lái)支持業(yè)務(wù)的發(fā)展是他們看重的。比如提高人的效率,開(kāi)發(fā)、上線(xiàn)、測試、運維、在線(xiàn)反饋等等,全方面的效率。
中國可能是世界上最活躍的房地產(chǎn)市場(chǎng)之一。與此同時(shí),海外房地產(chǎn)投資在中國持續升溫。他們沒(méi)有理由錯過(guò)這個(gè)機會(huì ),不僅在德國、意大利和中國香港。
基于以上差異,圖1所示的系統架構顯然不能滿(mǎn)足客戶(hù)對業(yè)務(wù)愿景的實(shí)現。主要問(wèn)題如下:
由于這是一個(gè)集成了所有 LoB 的系統,因此業(yè)務(wù)線(xiàn)之間存在耦合。試想這個(gè)場(chǎng)景,LoB1已經(jīng)根據市場(chǎng)反饋完成了房產(chǎn)中介品牌的提升,希望在漲價(jià)前上線(xiàn),因為這將是漲價(jià)的合理理由。同時(shí),LoB2正在開(kāi)發(fā)新的頁(yè)面以滿(mǎn)足業(yè)主品牌的需求,但這個(gè)功能只開(kāi)發(fā)了一半。按照目前的模式,我們要等LoB2完成功能開(kāi)發(fā)后才能一起上線(xiàn),這樣就錯過(guò)了LoB1漲價(jià)的機會(huì ),下一個(gè)漲價(jià)窗口將在幾個(gè)月后。
通過(guò)流量監控,我們發(fā)現網(wǎng)站@>的流量并不是一成不變的。按年計算,網(wǎng)站@> 的流量會(huì )在圣誕節前下降到平時(shí)水平的 50% 左右,圣誕節后可能會(huì )上升到 50%。平均水平在200%左右,這么大的流量會(huì )持續一周左右。其實(shí)這種情況也不難理解,因為圣誕節期間大家都在放假,放假后還會(huì )有一波工作。從圖1我們也可以清楚的看到不同組件的不同流量。為了保證整體的響應速度,系統總是以較高的流量部署。但是,由于每個(gè) LoB 都不能獨立部署,因此浪費了資源。情況非常明顯。
我們之前提到了全球擴張計劃。他們想進(jìn)入中國市場(chǎng),所以需要設計一個(gè)獨立的網(wǎng)站@>給中國用戶(hù)提供住房。為國家房地產(chǎn)市場(chǎng)的擴張做準備,為了實(shí)現這個(gè)目標,我們需要IT基礎設施的支持,可以快速靈活地橫向擴張。但基于現有的數據中心模式,這將是一個(gè)痛苦的過(guò)程。
3、架構愿景
通過(guò)對原有IT架構的分析,我們發(fā)現很難支撐業(yè)務(wù)愿景的實(shí)現。因此,對于這樣的業(yè)務(wù)愿景,我們已經(jīng)勾勒出了一個(gè)能夠很好地支持業(yè)務(wù)愿景的 IT 架構愿景。
必須能夠根據業(yè)務(wù)線(xiàn)獨立運作
易于擴展或可擴展
解決從開(kāi)發(fā)到部署的所有問(wèn)題,開(kāi)發(fā)者更關(guān)注如何更快地交付功能,而不是各種環(huán)境問(wèn)題、部署問(wèn)題、發(fā)布問(wèn)題
提高資源利用率,根據不同流量情況自適應分配資源。
基于這個(gè)愿景,我們發(fā)現云平臺可以幫助我們實(shí)現這樣的IT愿景。圖 2 描述了系統上云后的架構。

圖二
一是所有業(yè)務(wù)線(xiàn)獨立運營(yíng),可以自主選擇何時(shí)發(fā)布上線(xiàn),選擇合適的SLA和資源以適應流量變化;其次,所有業(yè)務(wù)線(xiàn)共享的組件獨立于業(yè)務(wù)線(xiàn)。此外,它們分別部署和運行,還可以調整不同的資源以適應流量的變化。
4、遷移三部曲
在我們知道了現有系統的目標狀態(tài)之后,下一步就是如何實(shí)現這個(gè)目標。

圖 3
如圖3所示,在遷移上云時(shí),從現有系統遷移到目標系統的過(guò)程不是一次性的過(guò)程,也不是一次性的遷移,而是一個(gè)周期性的、持續的過(guò)程。是相關(guān)系統整合的結果。如果我們關(guān)注其中一個(gè)遷移周期,則該過(guò)程大致可以分為三個(gè)階段:
階段 1:識別
識別就是弄清楚要遷移的內容。
對于原來(lái)的集成系統來(lái)說(shuō),這個(gè)過(guò)程與聚合相反,就是對聚合的所有功能特征進(jìn)行分析和分解。本次活動(dòng)的目的是深入了解當前系統的職責。明確職責后,我們可以更好地確定哪些職責可以剝離、拆分、獨立。比如這個(gè)房產(chǎn)搜索網(wǎng)站@>,經(jīng)過(guò)識別發(fā)現我們的主要職責是:前端展示(桌面、手機)、房產(chǎn)搜索、搜索管理、用戶(hù)管理、地理位置查詢(xún)、并且還提供了部分API。識別完成后,我們要選擇從哪個(gè)職責開(kāi)始遷移。這個(gè)過(guò)程不是隨機的,而是基于現有的團隊能力,
我的建議是從簡(jiǎn)單且相對獨立的職責開(kāi)始。如果能同時(shí)支持業(yè)務(wù)發(fā)展,那就更好了。因為難度低,可以在遷移初期給團隊帶來(lái)信心和經(jīng)驗。隨著(zhù)遷移經(jīng)驗和信心的積累,那些高耦合、多依賴(lài)的職責可以輕松遷移。以這個(gè)房產(chǎn)搜索平臺為例,在遷移初期,我們選擇用戶(hù)管理職責進(jìn)行遷移,一方面是因為它比較簡(jiǎn)單,相對獨立,另一方面是因為它為我們提供了API支持。 iOS開(kāi)發(fā)。
第 2 階段:提取
在確定了系統職責并確定了要遷移的職責之后,是時(shí)候將該職責提取為獨立的云服務(wù)了。

圖 4
如上圖所示,這個(gè)階段的核心是將識別出的職責從原有系統中分離出來(lái),成為獨立的云服務(wù)。這個(gè)過(guò)程有幾點(diǎn)需要注意:創(chuàng )建快,需要多快?理想狀態(tài)是創(chuàng )建成功(空服)后上線(xiàn)(灰度發(fā)布)?;蛟S這個(gè)目標在遷移之初并不容易實(shí)現,但隨著(zhù)遷移信心和經(jīng)驗的積累,是完全可行的,當然這也是我們從簡(jiǎn)單且相對獨立的職責入手的另一個(gè)原因;為了快速部署,我們從一個(gè)空服務(wù)創(chuàng )建一個(gè)新服務(wù),這意味著(zhù)它可以做任何事情,除了在生產(chǎn)環(huán)境中運行。不。在這個(gè)階段,我們的目標是抽象出服務(wù)的兩個(gè)痛苦階段:創(chuàng )建和部署,
第三階段:整合
集成是將新的云服務(wù)與原有系統連接起來(lái)。
如果說(shuō)前兩個(gè)階段都是準備,那么這個(gè)階段就是實(shí)施遷移的過(guò)程??梢哉f(shuō)這是最重要的階段,因為這是新舊系統交付的時(shí)期。這個(gè)階段會(huì )有一些活動(dòng)。首先,確定新服務(wù)需要哪些外部接口,這需要對現有系統有更深入的了解(當然,如果接口比較簡(jiǎn)單,這一步也可以在提取階段實(shí)現);其次,將現有系統中待遷移職責的依賴(lài)切換到新服務(wù)。這個(gè)過(guò)程可以一次完成,也可以連續完成,這取決于職責的獨立程度和現有系統依賴(lài)管理的復雜程度。最后,從原創(chuàng )系統中刪除責任。以用戶(hù)管理職責為例,這個(gè)階段是將現有系統與用戶(hù)服務(wù)進(jìn)行整合,并將該職責從系統中移除。
5、遷移提示
了解了這三個(gè)階段之后,不難看出兩個(gè)階段之間的過(guò)渡是否高效、順暢、無(wú)障礙,對整個(gè)系統上云的遷移起到至關(guān)重要的作用。隨著(zhù)長(cháng)期遷移經(jīng)驗的積累,我們發(fā)現以下技巧可以幫助我們在整個(gè)遷移階段順利過(guò)渡。如圖 5 所示,在明確遷移職責后,Stencil+DevOps 可以幫助我們快速創(chuàng )建和部署云服務(wù)。原系統對接云服務(wù)后,可通過(guò)測試驅動(dòng)。對接后,監控可以為我們提供這個(gè)遷移周期。偉大的反饋開(kāi)始下一個(gè)遷移周期。讓我們也拿這個(gè) 網(wǎng)站@>

圖 5
提示 1:快速啟動(dòng):Stencil + devOps
如上所述,這個(gè)過(guò)程必須高效,即快速創(chuàng )建和部署新服務(wù)。只有這樣,我們才能使這個(gè)過(guò)程正?;?。我們該怎么做?我們采用了 Stencil+devOps。
Stencil 是一個(gè)服務(wù)模板,它可以幫助我們快速生成一個(gè)空服務(wù),包括一個(gè)遵循組織規范的目錄結構、標準的監控配置和接口、初始化的構建腳本等。使用 Stencil 的好處是可以快速創(chuàng )建一個(gè)組織標準化服務(wù)。服務(wù); devOps 用于服務(wù)部署、維護、持續集成和發(fā)布環(huán)境的建立。當然,它也遵循組織的標準規范。如下圖,模板主要由3部分組成:應用程序本身、部署腳本(AWS Cloudformation)、docker配置(用于構建)。
提示 2:測試:消費者驅動(dòng)的測試
當我們快速啟動(dòng)一個(gè)空服務(wù)時(shí),下一步是如何在兩個(gè)系統之間快速集成。系統間集成時(shí),基本上可以分為兩個(gè)小步驟:??定義新服務(wù)的接口+與現有系統對接的接口。定義一個(gè)服務(wù)接口可以是一個(gè)簡(jiǎn)單的過(guò)程,也可以是一個(gè)復雜的過(guò)程,這取決于原創(chuàng )系統中職責的復雜性。不管復雜與否,定義服務(wù)接口的過(guò)程都是一樣的——消費驅動(dòng)。不同于預先定義新服務(wù)的所有接口,它驅動(dòng)新服務(wù)根據消費者的需求提供合適的接口。當然,這里的消費者指的是現有的系統。

圖 6
從圖6可以看出,現有系統(即消費者)與新服務(wù)(即服務(wù))的集成過(guò)程是由兩組失敗+成功的測試,或兩組BDD組成的。首先是消費者端的 BDD。中間人扮演著(zhù)服務(wù)的角色,我們假設新服務(wù)的接口已經(jīng)按照消費者的要求實(shí)現了。這時(shí)候,由于消費者還沒(méi)有寫(xiě)完相應的代碼,我們會(huì )得到一個(gè)失敗,然后才是真正的編碼。當我們得到一個(gè)成功的測試,就意味著(zhù)消費者端的集成工作已經(jīng)完成;然后是服務(wù)端的 BDD。這時(shí),中間人就扮演了消費者的角色。該服務(wù)沒(méi)有定義預期的接口,所以我們會(huì )得到一個(gè)失敗的測試。編碼后,
提示 3:監控
在我們拆分原系統之前,所有模塊都集成到同一個(gè)系統中,對系統的監控是統一的。但是當我們將現有系統拆分成多個(gè)獨立的系統時(shí),如何保證新服務(wù)的良好運行,或者如何實(shí)時(shí)監控新服務(wù)的運行狀態(tài),對整個(gè)系統的穩定性非常重要。在實(shí)施監控時(shí),我們應該考慮以下幾個(gè)方面:
基于虛擬機節點(diǎn)整體監控系統資源

比如CPU利用率、硬盤(pán)讀寫(xiě)、內存利用率等,主要目的是檢查當前節點(diǎn)是否過(guò)載或空閑。過(guò)載意味著(zhù)資源不能滿(mǎn)足當前的流量。應增加節點(diǎn)并部署更多服務(wù)以適應大流量情況??臻e意味著(zhù)資源過(guò)剩,應減少節點(diǎn)以降低成本。
對服務(wù)整體進(jìn)行粗粒度監控

主要目的是檢查當前服務(wù)是否正在運行。如果檢測到該服務(wù)不可用,云負載均衡會(huì )根據預先配置刪除該服務(wù),并添加一個(gè)新的服務(wù)來(lái)填補空缺。也就是說(shuō),基于當前的架構,我們更愿意重建服務(wù)而不是修復不可用的服務(wù)。
監控所有服務(wù)的內部狀態(tài)
以上兩種監控都無(wú)法獲取到服務(wù)內部的運行狀態(tài),所以日志監控在這里顯得尤為重要,尤其是兩個(gè)系統之間集成的日志。通過(guò)監控系統日志,我們就有了監控系統內部邏輯的能力,有了這個(gè)能力,我們就可以跟蹤事故的發(fā)生,獲取關(guān)鍵信息來(lái)優(yōu)化服務(wù)。
總結
從傳統數據中心基礎設施遷移到云端是一個(gè)長(cháng)期的過(guò)程,可能還有很多未知的問(wèn)題在等著(zhù)我們,但我們發(fā)現同時(shí)也是一個(gè)重新認識現有系統的過(guò)程。在此期間,我們發(fā)現了一些規律。每個(gè)功能的遷移都有自己的特點(diǎn),同時(shí)又是相似的。這種相似性的提取是:識別、提取和整合。
采集系統上云(loki就是云原生下日志的采集方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-01-15 08:13
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還是有問(wèn)題的,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log 的日志,也可能只想要采集.json 的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,和grafana一樣
Prometheus已經(jīng)是云原生監控的事實(shí)標準,開(kāi)發(fā)、運維更加熟悉,降低學(xué)習成本
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷? 查看全部
采集系統上云(loki就是云原生下日志的采集方案)
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還是有問(wèn)題的,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log 的日志,也可能只想要采集.json 的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,和grafana一樣
Prometheus已經(jīng)是云原生監控的事實(shí)標準,開(kāi)發(fā)、運維更加熟悉,降低學(xué)習成本
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
采集系統上云(【github社區】數棧是云原生—站式數據中臺PaaS)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 202 次瀏覽 ? 2022-01-13 05:10
本文整理自:淺談云原生系統日志采集在數據棧中的實(shí)踐
DataStack 是云原生的一站式數據中心 PaaS。我們在github上有一個(gè)有趣的開(kāi)源項目:FlinkX,歡迎給我們一個(gè)star!星星!星星!
FlinkX 是一個(gè)基于 Flink 的批量流統一數據同步工具。不僅可以采集靜態(tài)數據,比如MySQL、HDFS等,還可以采集實(shí)時(shí)變化的數據,比如MySQL binlog、Kafka等,是一個(gè)數據同步引擎它集成了全局、異構和批處理流。有興趣的請來(lái)github社區和我們一起玩~
?
一、常規打ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把采集器改成Fluentd,組成EFK。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還是elasticsearch。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也非常昂貴。Elasticsearch使用全文索引,對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。您將熟悉 grafana,這是一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而洛基就是我們今天要講的主角。這也是grafana的產(chǎn)物,promtail是loki 采集器的官方log。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
?
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ?♂? 兒子 Promtail
promtail 是 loki 采集器 的官方日志,它自己的代碼在 loki 項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)是根據模式找到要為采集的文件,然后像tail一樣監聽(tīng)一個(gè)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail。上述情況也是如此。類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式是開(kāi)放且穩定的規范,promtail可以提前更深入的解析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式查找文件,首先要找出文件在哪里,然后進(jìn)行采集、標簽推送等功能。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與prometheus不同,prometheus向對象請求更多的資源,比如node、ingress、pod、deployment等。最后拼接的是metric的請求url,promtail請求的對象就是pod,過(guò)濾掉不在那個(gè)上面的pod主持人。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
loki官方推薦的最佳實(shí)踐是使用DamonSet部署promtail,將節點(diǎn)的/var/lib/pods目錄掛載到容器中,并借助prometheus的服務(wù)發(fā)現機制動(dòng)態(tài)給日志添加標簽,無(wú)論是是資源占用。部署和維護的程度和難度都非常低。這也是主流的云原生日志采集范式。
?
三、數據棧日志實(shí)踐
(一) 堆棧日志要求
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail會(huì )從頭開(kāi)始推送文件的內容,這樣會(huì )導致大量日志被推送到loki中短時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
?
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。只能使用一種命名空間權限。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
?
1、? promtail 如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓logContainer和Master Container共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還是不知道哪些日志到采集,它們的什么標簽是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
Promtail 在 v2.10 中增加了一個(gè)新特性,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后用服務(wù)的logpath作為環(huán)境變量的方式來(lái)設置,比如LOG_PATH=/var/log/commonlog/*。日志
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建的時(shí)候是通過(guò)環(huán)境變量注入的,而這些環(huán)境變量podid是使用k8s的向下api注入的。
注意:這里不能使用promtail的服務(wù)發(fā)現機制來(lái)配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。主機/var/log/pods目錄未掛載到promtail時(shí),即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、?如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)Log Container,手動(dòng)做起來(lái)太麻煩,也不利于維護。最好的方法是將原創(chuàng )服務(wù)抽象為注冊一個(gè)CRD,然后編寫(xiě)k8s算子來(lái)list & watch該類(lèi)型的對象。創(chuàng )建對象時(shí),動(dòng)態(tài)注入一個(gè)LogContainer,以及對應的環(huán)境變量并掛載。公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
?
四、總結
(一) 數據棧日志采集優(yōu)勢
(二)??未來(lái)規劃
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
? 查看全部
采集系統上云(【github社區】數棧是云原生—站式數據中臺PaaS)
本文整理自:淺談云原生系統日志采集在數據棧中的實(shí)踐
DataStack 是云原生的一站式數據中心 PaaS。我們在github上有一個(gè)有趣的開(kāi)源項目:FlinkX,歡迎給我們一個(gè)star!星星!星星!
FlinkX 是一個(gè)基于 Flink 的批量流統一數據同步工具。不僅可以采集靜態(tài)數據,比如MySQL、HDFS等,還可以采集實(shí)時(shí)變化的數據,比如MySQL binlog、Kafka等,是一個(gè)數據同步引擎它集成了全局、異構和批處理流。有興趣的請來(lái)github社區和我們一起玩~
?
一、常規打ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把采集器改成Fluentd,組成EFK。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還是elasticsearch。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也非常昂貴。Elasticsearch使用全文索引,對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。您將熟悉 grafana,這是一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而洛基就是我們今天要講的主角。這也是grafana的產(chǎn)物,promtail是loki 采集器的官方log。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
?
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ?♂? 兒子 Promtail
promtail 是 loki 采集器 的官方日志,它自己的代碼在 loki 項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)是根據模式找到要為采集的文件,然后像tail一樣監聽(tīng)一個(gè)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail。上述情況也是如此。類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式是開(kāi)放且穩定的規范,promtail可以提前更深入的解析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式查找文件,首先要找出文件在哪里,然后進(jìn)行采集、標簽推送等功能。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與prometheus不同,prometheus向對象請求更多的資源,比如node、ingress、pod、deployment等。最后拼接的是metric的請求url,promtail請求的對象就是pod,過(guò)濾掉不在那個(gè)上面的pod主持人。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
loki官方推薦的最佳實(shí)踐是使用DamonSet部署promtail,將節點(diǎn)的/var/lib/pods目錄掛載到容器中,并借助prometheus的服務(wù)發(fā)現機制動(dòng)態(tài)給日志添加標簽,無(wú)論是是資源占用。部署和維護的程度和難度都非常低。這也是主流的云原生日志采集范式。
?
三、數據棧日志實(shí)踐
(一) 堆棧日志要求
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail會(huì )從頭開(kāi)始推送文件的內容,這樣會(huì )導致大量日志被推送到loki中短時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
?
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。只能使用一種命名空間權限。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
?
1、? promtail 如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓logContainer和Master Container共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還是不知道哪些日志到采集,它們的什么標簽是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
Promtail 在 v2.10 中增加了一個(gè)新特性,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后用服務(wù)的logpath作為環(huán)境變量的方式來(lái)設置,比如LOG_PATH=/var/log/commonlog/*。日志
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建的時(shí)候是通過(guò)環(huán)境變量注入的,而這些環(huán)境變量podid是使用k8s的向下api注入的。
注意:這里不能使用promtail的服務(wù)發(fā)現機制來(lái)配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。主機/var/log/pods目錄未掛載到promtail時(shí),即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、?如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)Log Container,手動(dòng)做起來(lái)太麻煩,也不利于維護。最好的方法是將原創(chuàng )服務(wù)抽象為注冊一個(gè)CRD,然后編寫(xiě)k8s算子來(lái)list & watch該類(lèi)型的對象。創(chuàng )建對象時(shí),動(dòng)態(tài)注入一個(gè)LogContainer,以及對應的環(huán)境變量并掛載。公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
?
四、總結
(一) 數據棧日志采集優(yōu)勢
(二)??未來(lái)規劃
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
?
采集系統上云(新網(wǎng)站要想快速引流,理由如下更多IP不容易被封)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 161 次瀏覽 ? 2022-01-13 05:07
新網(wǎng)站為了快速吸引流量,需要時(shí)刻保持頁(yè)面和網(wǎng)站的整體內容更新。中小站長(cháng)經(jīng)常單獨工作,有的甚至只是在業(yè)余時(shí)間賺點(diǎn)外快,很難保證這一點(diǎn)。更新率高,雖然有巧妙的辦法手動(dòng)更新,或者運行采集工具,現在很多網(wǎng)站采集在云服務(wù)器上,而且大部分云服務(wù)器都是單IP的,所以采集 的進(jìn)程很可能被反采集 工具或防火墻阻止。因此,建議在中國大陸使用采集網(wǎng)站。>內容方面,可以考慮選擇香港多IP服務(wù)器,原因如下
多IP不容易被封
雖然市面上有很多采集工具集成了IP模擬系統,但是虛擬IP畢竟是虛擬的,所以特征比較明顯,很容易被防火墻或者反采集攻擊,在運行采集工具的時(shí)候一般沒(méi)有時(shí)間長(cháng)時(shí)間監聽(tīng)網(wǎng)站的內容,所以很多時(shí)候采集失敗我也不知道,而當我發(fā)現時(shí),網(wǎng)站可能會(huì )更新太多的空內容很難刪除,而如果是收錄的話(huà),整個(gè)站點(diǎn)基本就廢了,多IP服務(wù)器本身就是一個(gè)專(zhuān)屬固定IP,被封的可能性低
高性能采集更穩定
很多多IP服務(wù)器多用于站群服務(wù),所以硬件配置比較高?,F在,市場(chǎng)上有很多 采集 工具,如果它們針對的是單個(gè) 網(wǎng)站。臺中配置的VPS是可以的,但是一旦采集的目標站點(diǎn)太多,很可能采集在采集的過(guò)程中不成功或者內容分發(fā)失敗. 多IP服務(wù)器專(zhuān)為多線(xiàn)程任務(wù)打造,抗壓能力強。即便是多任務(wù)同時(shí)運行,釋放采集,也完全可以承受負載。
直達專(zhuān)線(xiàn)采集更高效
在設置采集服務(wù)器時(shí),目標網(wǎng)站的延遲打開(kāi)速度非常重要,這也是為什么作者一直強調采集@中網(wǎng)站的內容>大陸地區最好選擇香港服務(wù)器,因為香港離中國大陸比較近,所以線(xiàn)路延遲低,而且還支持CN2直連網(wǎng)絡(luò )。對于一些不僅需要采集文字還需要采集圖片甚至短視頻的用戶(hù)來(lái)說(shuō)非常適合
如果要全自動(dòng)采集,自然要選擇專(zhuān)業(yè)的服務(wù)商。例如USA-IDC香港機房可以提供24小時(shí)在線(xiàn)技術(shù)支持。聯(lián)系24小時(shí)客服了解更多詳情
原創(chuàng )內容,禁止轉載!侵權必究! 查看全部
采集系統上云(新網(wǎng)站要想快速引流,理由如下更多IP不容易被封)
新網(wǎng)站為了快速吸引流量,需要時(shí)刻保持頁(yè)面和網(wǎng)站的整體內容更新。中小站長(cháng)經(jīng)常單獨工作,有的甚至只是在業(yè)余時(shí)間賺點(diǎn)外快,很難保證這一點(diǎn)。更新率高,雖然有巧妙的辦法手動(dòng)更新,或者運行采集工具,現在很多網(wǎng)站采集在云服務(wù)器上,而且大部分云服務(wù)器都是單IP的,所以采集 的進(jìn)程很可能被反采集 工具或防火墻阻止。因此,建議在中國大陸使用采集網(wǎng)站。>內容方面,可以考慮選擇香港多IP服務(wù)器,原因如下
多IP不容易被封
雖然市面上有很多采集工具集成了IP模擬系統,但是虛擬IP畢竟是虛擬的,所以特征比較明顯,很容易被防火墻或者反采集攻擊,在運行采集工具的時(shí)候一般沒(méi)有時(shí)間長(cháng)時(shí)間監聽(tīng)網(wǎng)站的內容,所以很多時(shí)候采集失敗我也不知道,而當我發(fā)現時(shí),網(wǎng)站可能會(huì )更新太多的空內容很難刪除,而如果是收錄的話(huà),整個(gè)站點(diǎn)基本就廢了,多IP服務(wù)器本身就是一個(gè)專(zhuān)屬固定IP,被封的可能性低

高性能采集更穩定
很多多IP服務(wù)器多用于站群服務(wù),所以硬件配置比較高?,F在,市場(chǎng)上有很多 采集 工具,如果它們針對的是單個(gè) 網(wǎng)站。臺中配置的VPS是可以的,但是一旦采集的目標站點(diǎn)太多,很可能采集在采集的過(guò)程中不成功或者內容分發(fā)失敗. 多IP服務(wù)器專(zhuān)為多線(xiàn)程任務(wù)打造,抗壓能力強。即便是多任務(wù)同時(shí)運行,釋放采集,也完全可以承受負載。

直達專(zhuān)線(xiàn)采集更高效
在設置采集服務(wù)器時(shí),目標網(wǎng)站的延遲打開(kāi)速度非常重要,這也是為什么作者一直強調采集@中網(wǎng)站的內容>大陸地區最好選擇香港服務(wù)器,因為香港離中國大陸比較近,所以線(xiàn)路延遲低,而且還支持CN2直連網(wǎng)絡(luò )。對于一些不僅需要采集文字還需要采集圖片甚至短視頻的用戶(hù)來(lái)說(shuō)非常適合
如果要全自動(dòng)采集,自然要選擇專(zhuān)業(yè)的服務(wù)商。例如USA-IDC香港機房可以提供24小時(shí)在線(xiàn)技術(shù)支持。聯(lián)系24小時(shí)客服了解更多詳情


原創(chuàng )內容,禁止轉載!侵權必究!
采集系統上云(微服務(wù)架構下日志采集運維管理分析的解決方案(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-01-03 12:09
簡(jiǎn)介:阿里云日志服務(wù)(SLS)結合Kubernetes日志的特點(diǎn)和應用場(chǎng)景,提供了容器微服務(wù)應用環(huán)境中全方位的日志采集、處理和分析實(shí)踐。直接最佳實(shí)踐:[微服務(wù)架構日志采集運維管理最佳實(shí)踐]
最佳實(shí)踐頻道:[最佳實(shí)踐頻道]
企業(yè)云遷移有很多最佳實(shí)踐。我們從典型場(chǎng)景出發(fā),提供一系列項目實(shí)踐方案,在滿(mǎn)足您需求的同時(shí),降低企業(yè)上云的門(mén)檻! Kubernetes 日志系統的重要性
微服務(wù)的云原生可觀(guān)察性的一個(gè)重要標準是日志記錄。日志采集、存儲和分析是構建現代系統平臺的關(guān)鍵支柱之一,可以幫助團隊診斷問(wèn)題、追溯質(zhì)量、監控系統運行效率。在容器/Kubernetes技術(shù)熱潮的今天,日志系統對于Kubernetes也起到了非常關(guān)鍵的作用。對于 Devops、運維、安全等,都離不開(kāi)完整、多樣、有效的日志采集、存儲管理和分析。 , 由下圖可見(jiàn)。
微服務(wù)架構下的日志采集運維管理挑戰
眾所周知,借助容器/Kubernetes技術(shù)在微服務(wù)落地過(guò)程中,相比物理機、VM在應用部署、應用交付等環(huán)節,為用戶(hù)提供了更簡(jiǎn)單、更輕便、性?xún)r(jià)比更高的優(yōu)勢,而用戶(hù)在應用容器/Kubernetes技術(shù)向微服務(wù)轉化的過(guò)程中,也有容器化應用/非容器化應用的混合部署。對于基于VM或者物理機部署的應用,log采集相關(guān)技術(shù)比較完善,如Logstash、Fluentd、FileBeats等,但是當應用容器化時(shí),尤其是基于Kubenetes的微服務(wù)應用部署時(shí)cluster、Log 采集運維給用戶(hù)帶來(lái)了很多挑戰,主要原因有:
阿里云Kubernetes日志采集方案
基于以上分析,阿里云的日志服務(wù)產(chǎn)品解決了基于Kubernetes實(shí)現應用微服務(wù)改造過(guò)程中用戶(hù)日志采集運維管理的需求和痛點(diǎn),結合阿里巴巴的優(yōu)勢Cloud結合云產(chǎn)品,提出一站式日志采集運維管理分析解決方案,提供強大的日志處理分析能力,如PB級日志實(shí)時(shí)查詢(xún)、日志聚類(lèi)分析、Ingress日志分析報告、日志分析功能、上下游生態(tài)對接等能力,為用戶(hù)提供一站式的日志采集容器/Kubernetes技術(shù)落地應用微服務(wù)轉型過(guò)程中的運維管理能力。
采集 方法對比如下表所示。
從上表可以看出,native方法比較弱,一般不建議在生產(chǎn)系統中使用; DameonSet方法的資源占用要小得多,但其擴展性和租戶(hù)隔離性有限,更適合單一功能或集群不多的業(yè)務(wù); SideCar方式占用資源較多,但靈活,多租戶(hù)隔離性強。對于大型Kubernetes集群或者作為PAAS平臺服務(wù)多個(gè)業(yè)務(wù)方的集群,推薦使用這種方式。通常我們可以這樣進(jìn)行采集部署建議:
總結
本文介紹了基于Kubernetes的應用微服務(wù)改造過(guò)程中的日志采集以及運維管理方案。限于篇幅,本文無(wú)法一一介紹具體的實(shí)現建議和更多的特性。請詳細閱讀阿里云官網(wǎng)最佳實(shí)踐頻道微服務(wù)架構日志采集運維管理最佳實(shí)踐
原文鏈接: 查看全部
采集系統上云(微服務(wù)架構下日志采集運維管理分析的解決方案(組圖))
簡(jiǎn)介:阿里云日志服務(wù)(SLS)結合Kubernetes日志的特點(diǎn)和應用場(chǎng)景,提供了容器微服務(wù)應用環(huán)境中全方位的日志采集、處理和分析實(shí)踐。直接最佳實(shí)踐:[微服務(wù)架構日志采集運維管理最佳實(shí)踐]
最佳實(shí)踐頻道:[最佳實(shí)踐頻道]
企業(yè)云遷移有很多最佳實(shí)踐。我們從典型場(chǎng)景出發(fā),提供一系列項目實(shí)踐方案,在滿(mǎn)足您需求的同時(shí),降低企業(yè)上云的門(mén)檻! Kubernetes 日志系統的重要性
微服務(wù)的云原生可觀(guān)察性的一個(gè)重要標準是日志記錄。日志采集、存儲和分析是構建現代系統平臺的關(guān)鍵支柱之一,可以幫助團隊診斷問(wèn)題、追溯質(zhì)量、監控系統運行效率。在容器/Kubernetes技術(shù)熱潮的今天,日志系統對于Kubernetes也起到了非常關(guān)鍵的作用。對于 Devops、運維、安全等,都離不開(kāi)完整、多樣、有效的日志采集、存儲管理和分析。 , 由下圖可見(jiàn)。

微服務(wù)架構下的日志采集運維管理挑戰
眾所周知,借助容器/Kubernetes技術(shù)在微服務(wù)落地過(guò)程中,相比物理機、VM在應用部署、應用交付等環(huán)節,為用戶(hù)提供了更簡(jiǎn)單、更輕便、性?xún)r(jià)比更高的優(yōu)勢,而用戶(hù)在應用容器/Kubernetes技術(shù)向微服務(wù)轉化的過(guò)程中,也有容器化應用/非容器化應用的混合部署。對于基于VM或者物理機部署的應用,log采集相關(guān)技術(shù)比較完善,如Logstash、Fluentd、FileBeats等,但是當應用容器化時(shí),尤其是基于Kubenetes的微服務(wù)應用部署時(shí)cluster、Log 采集運維給用戶(hù)帶來(lái)了很多挑戰,主要原因有:

阿里云Kubernetes日志采集方案
基于以上分析,阿里云的日志服務(wù)產(chǎn)品解決了基于Kubernetes實(shí)現應用微服務(wù)改造過(guò)程中用戶(hù)日志采集運維管理的需求和痛點(diǎn),結合阿里巴巴的優(yōu)勢Cloud結合云產(chǎn)品,提出一站式日志采集運維管理分析解決方案,提供強大的日志處理分析能力,如PB級日志實(shí)時(shí)查詢(xún)、日志聚類(lèi)分析、Ingress日志分析報告、日志分析功能、上下游生態(tài)對接等能力,為用戶(hù)提供一站式的日志采集容器/Kubernetes技術(shù)落地應用微服務(wù)轉型過(guò)程中的運維管理能力。

采集 方法對比如下表所示。

從上表可以看出,native方法比較弱,一般不建議在生產(chǎn)系統中使用; DameonSet方法的資源占用要小得多,但其擴展性和租戶(hù)隔離性有限,更適合單一功能或集群不多的業(yè)務(wù); SideCar方式占用資源較多,但靈活,多租戶(hù)隔離性強。對于大型Kubernetes集群或者作為PAAS平臺服務(wù)多個(gè)業(yè)務(wù)方的集群,推薦使用這種方式。通常我們可以這樣進(jìn)行采集部署建議:
總結
本文介紹了基于Kubernetes的應用微服務(wù)改造過(guò)程中的日志采集以及運維管理方案。限于篇幅,本文無(wú)法一一介紹具體的實(shí)現建議和更多的特性。請詳細閱讀阿里云官網(wǎng)最佳實(shí)踐頻道微服務(wù)架構日志采集運維管理最佳實(shí)踐
原文鏈接:
采集系統上云(瀉藥、apigooglesearchteam估計不樂(lè )意答1、google的衛星信號)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-01-02 04:02
采集系統上云本身是個(gè)不錯的想法,能否采集準確和完整是由上述兩個(gè)基礎條件決定的。最有效的提高準確率的方法是搭建一個(gè)全球的gps接入平臺,利用接入平臺覆蓋的全球基站來(lái)提高服務(wù)的精度。
瀉藥、api
googlesearchteam估計不樂(lè )意答
1、google的衛星。不光有不同的,還有個(gè)非常復雜的位置信息服務(wù)器,數據一般是下發(fā)給各地google的地面節點(diǎn),地面節點(diǎn)進(jìn)行定位。2、云平臺,或者阿里云騰訊云等,
api
如果只是考慮用戶(hù)使用api,那么找個(gè)第三方提供的服務(wù)商就好了。如果是考慮在各地覆蓋衛星,想更精確一些,現在的做法通常有兩種,一種是準備多塊地面基站,前者的方案一般要犧牲一點(diǎn)gps的準確度來(lái)達到可靠的要求,而在國內可能成本偏高,在全球覆蓋上或許有難度,我知道的地面基站覆蓋大部分是以l1為芯片的芯片,成本上會(huì )低一些,但是受制于芯片集成度的要求,導致的gps環(huán)境下偶爾會(huì )有一點(diǎn)的誤差;另一種方案,就是gps芯片外掛一塊全球導航系統接入平臺的芯片,先用rs接入gps,再由各接入平臺接入衛星位置的導航信息,同樣的也有衛星覆蓋量的要求,成本會(huì )比衛星覆蓋導航系統接入平臺低很多。
說(shuō)的跟nokia下放多少gps衛星信號一樣,就算有,裝上各種moviebar拉低來(lái)電顯示色差也是很正常的。 查看全部
采集系統上云(瀉藥、apigooglesearchteam估計不樂(lè )意答1、google的衛星信號)
采集系統上云本身是個(gè)不錯的想法,能否采集準確和完整是由上述兩個(gè)基礎條件決定的。最有效的提高準確率的方法是搭建一個(gè)全球的gps接入平臺,利用接入平臺覆蓋的全球基站來(lái)提高服務(wù)的精度。
瀉藥、api
googlesearchteam估計不樂(lè )意答
1、google的衛星。不光有不同的,還有個(gè)非常復雜的位置信息服務(wù)器,數據一般是下發(fā)給各地google的地面節點(diǎn),地面節點(diǎn)進(jìn)行定位。2、云平臺,或者阿里云騰訊云等,
api
如果只是考慮用戶(hù)使用api,那么找個(gè)第三方提供的服務(wù)商就好了。如果是考慮在各地覆蓋衛星,想更精確一些,現在的做法通常有兩種,一種是準備多塊地面基站,前者的方案一般要犧牲一點(diǎn)gps的準確度來(lái)達到可靠的要求,而在國內可能成本偏高,在全球覆蓋上或許有難度,我知道的地面基站覆蓋大部分是以l1為芯片的芯片,成本上會(huì )低一些,但是受制于芯片集成度的要求,導致的gps環(huán)境下偶爾會(huì )有一點(diǎn)的誤差;另一種方案,就是gps芯片外掛一塊全球導航系統接入平臺的芯片,先用rs接入gps,再由各接入平臺接入衛星位置的導航信息,同樣的也有衛星覆蓋量的要求,成本會(huì )比衛星覆蓋導航系統接入平臺低很多。
說(shuō)的跟nokia下放多少gps衛星信號一樣,就算有,裝上各種moviebar拉低來(lái)電顯示色差也是很正常的。
采集系統上云(云采集平臺的安全加密技術(shù)應該做得很到位!)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 172 次瀏覽 ? 2021-12-23 08:02
采集系統上云之后,軟件已經(jīng)全部兼容,不再需要單獨搭建測試網(wǎng),平臺也已經(jīng)完全搭建好了,不用安裝。平臺也有了服務(wù)器和公網(wǎng)ip,私有部署也方便。
云采集會(huì )讓采集效率提高,數據的準確性可以保證,但是同時(shí)采集也會(huì )造成一些負面影響。如果需要打碼或者采集網(wǎng)站第三方ip可以考慮找一下達摩云采集,采集效率高、節省上傳時(shí)間,采集到的數據準確性都是100%,而且還帶代碼,可以直接用vba+word+excel采集。
沒(méi)錯,只要你的網(wǎng)站用的是穩定的公網(wǎng)ip,就不需要花錢(qián)去買(mǎi)云采集服務(wù)了?,F在大部分采集系統都會(huì )有云采集功能,以我了解到的型號,如果上傳網(wǎng)站二三十萬(wàn)數據量,用速度不如本地采集。一般正規的第三方服務(wù)都會(huì )對用戶(hù)進(jìn)行身份驗證和賬號登錄驗證,其實(shí)就是防止外人拿了你網(wǎng)站你就上傳數據,這個(gè)時(shí)候對接對口云采集提供的云采集,在速度和安全性都會(huì )有保障。
云采集平臺就是和你一樣用個(gè)人二級域名(baiduspider)上傳網(wǎng)站數據,并不是用阿里云之類(lèi)的大公司的云采集服務(wù),但是所有的后期的數據接入工作和驗證,云采集平臺都會(huì )做好,不需要二次采集和后期數據維護,因為服務(wù)是系統對接的,所以不存在多個(gè)域名上傳被殺,而且云采集在采集完一個(gè)網(wǎng)站數據后就會(huì )自動(dòng)合并到其他網(wǎng)站,跟傳統方式效率差不多。
至于云采集會(huì )不會(huì )造成用戶(hù)信息泄露的問(wèn)題,目前的安全加密技術(shù)應該做得很到位,因為云采集平臺本身就是收費的。我一個(gè)朋友曾經(jīng)被人通過(guò)云采集數據的方式盜用了微信位置,網(wǎng)站等,所以用這些不是最好的方式,關(guān)鍵是要謹慎,要理性消費。 查看全部
采集系統上云(云采集平臺的安全加密技術(shù)應該做得很到位!)
采集系統上云之后,軟件已經(jīng)全部兼容,不再需要單獨搭建測試網(wǎng),平臺也已經(jīng)完全搭建好了,不用安裝。平臺也有了服務(wù)器和公網(wǎng)ip,私有部署也方便。
云采集會(huì )讓采集效率提高,數據的準確性可以保證,但是同時(shí)采集也會(huì )造成一些負面影響。如果需要打碼或者采集網(wǎng)站第三方ip可以考慮找一下達摩云采集,采集效率高、節省上傳時(shí)間,采集到的數據準確性都是100%,而且還帶代碼,可以直接用vba+word+excel采集。
沒(méi)錯,只要你的網(wǎng)站用的是穩定的公網(wǎng)ip,就不需要花錢(qián)去買(mǎi)云采集服務(wù)了?,F在大部分采集系統都會(huì )有云采集功能,以我了解到的型號,如果上傳網(wǎng)站二三十萬(wàn)數據量,用速度不如本地采集。一般正規的第三方服務(wù)都會(huì )對用戶(hù)進(jìn)行身份驗證和賬號登錄驗證,其實(shí)就是防止外人拿了你網(wǎng)站你就上傳數據,這個(gè)時(shí)候對接對口云采集提供的云采集,在速度和安全性都會(huì )有保障。
云采集平臺就是和你一樣用個(gè)人二級域名(baiduspider)上傳網(wǎng)站數據,并不是用阿里云之類(lèi)的大公司的云采集服務(wù),但是所有的后期的數據接入工作和驗證,云采集平臺都會(huì )做好,不需要二次采集和后期數據維護,因為服務(wù)是系統對接的,所以不存在多個(gè)域名上傳被殺,而且云采集在采集完一個(gè)網(wǎng)站數據后就會(huì )自動(dòng)合并到其他網(wǎng)站,跟傳統方式效率差不多。
至于云采集會(huì )不會(huì )造成用戶(hù)信息泄露的問(wèn)題,目前的安全加密技術(shù)應該做得很到位,因為云采集平臺本身就是收費的。我一個(gè)朋友曾經(jīng)被人通過(guò)云采集數據的方式盜用了微信位置,網(wǎng)站等,所以用這些不是最好的方式,關(guān)鍵是要謹慎,要理性消費。
采集系統上云(黑科技的云蛛系統,您的數據中心展現工作了嗎? )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 189 次瀏覽 ? 2021-12-23 05:04
)
黑科技的云蜘蛛系統,一經(jīng)問(wèn)世,便博得了陣陣掌聲。雖然主打數據可視化,但是很多用戶(hù)都在問(wèn)你會(huì )不會(huì )做大數據處理產(chǎn)品,就像很多用戶(hù)眼中的黑科技——神測數據。如果你出來(lái),我們就可以解決我們整個(gè)數據流的問(wèn)題。
對于大數據的處理,云蜘蛛系統肯定是必不可少的,但具體的開(kāi)發(fā)日期還沒(méi)有最終確定。不過(guò),鑒于用戶(hù)的強烈需求,蛛網(wǎng)時(shí)代終于將大數據處理工具的開(kāi)發(fā)提上了日程,并將其命名為DataCenter。為什么叫數據中心?這意味著(zhù),對于您數據中心的所有處理,Yunspula 系統可以為您解決所有問(wèn)題。
有了DataCenter+AutoBI+DataView,你的整個(gè)數據分析系統就可以完全搭建起來(lái),而且極其簡(jiǎn)單。DataCenter會(huì )做數據采集、傳輸、處理的工作,而AutoBI會(huì )做你的數據報表的工作,DataView會(huì )做你的大屏展示的工作。一起使用效果好嗎?
DataCenter使用自己的agent采集相關(guān)數據,然后采集到Kafka集群中進(jìn)行數據清洗。Kafka集群作為高可靠傳輸,還需要進(jìn)行高性能算法去重計算,然后數據通過(guò)轉換層進(jìn)入數據倉庫或者hadoop集群,這就是整個(gè)ETL過(guò)程,也是作業(yè)天祿系統。之后就是調度-北斗系統的工作。它將根據依賴(lài)關(guān)系計算數據索引。日指數計算未完成,月指數計算無(wú)法完成。如果指標計算錯誤,手動(dòng)觸發(fā)任務(wù)計算,是否會(huì )觸發(fā)下游任務(wù)一起計算... 整個(gè)核心都會(huì )體現在調度-北斗系統完善中。HDFS數據通過(guò)調度計算吐到Hbase,數據倉庫通過(guò)ODS層計算進(jìn)入表示層,分布式查詢(xún)ES……這些都是市面上最好的技術(shù),或者你能想到的查詢(xún)方式。DataCenter 為您完成這一切。
之后,就是DataView和AutoBI大顯身手的時(shí)候了。這兩條產(chǎn)品線(xiàn)不僅可以支持傳統的關(guān)系型數據庫,沒(méi)有sql的數據庫,比如redis、mongodb等,都支持,包括ES、rest等服務(wù)接口。因為是定制模式,只要現有技術(shù)可以實(shí)現,這兩條產(chǎn)品線(xiàn)就會(huì )為你實(shí)現,你不需要為了適應這兩條產(chǎn)品線(xiàn)而傳輸數據。所有Yunspula 系統都適合您。好的。因為是公司的產(chǎn)品,兼容性還行!
這個(gè)怎么樣?DataCenter可以說(shuō)是大數據處理行業(yè)的黑科技。并且整套流程都是黑箱的,您只需要在網(wǎng)頁(yè)中配置您的業(yè)務(wù),其余系統會(huì )自動(dòng)為您處理。AutoBI和DataView作為其老大哥,將黑科技理念貫徹到了全面、無(wú)縫集成、完美展示、多維度分析……你能想到的所有需求,都來(lái)幫你呈現。這是海泰云蜘蛛系統提供的一套大數據解決方案!
查看全部
采集系統上云(黑科技的云蛛系統,您的數據中心展現工作了嗎?
)
黑科技的云蜘蛛系統,一經(jīng)問(wèn)世,便博得了陣陣掌聲。雖然主打數據可視化,但是很多用戶(hù)都在問(wèn)你會(huì )不會(huì )做大數據處理產(chǎn)品,就像很多用戶(hù)眼中的黑科技——神測數據。如果你出來(lái),我們就可以解決我們整個(gè)數據流的問(wèn)題。
對于大數據的處理,云蜘蛛系統肯定是必不可少的,但具體的開(kāi)發(fā)日期還沒(méi)有最終確定。不過(guò),鑒于用戶(hù)的強烈需求,蛛網(wǎng)時(shí)代終于將大數據處理工具的開(kāi)發(fā)提上了日程,并將其命名為DataCenter。為什么叫數據中心?這意味著(zhù),對于您數據中心的所有處理,Yunspula 系統可以為您解決所有問(wèn)題。
有了DataCenter+AutoBI+DataView,你的整個(gè)數據分析系統就可以完全搭建起來(lái),而且極其簡(jiǎn)單。DataCenter會(huì )做數據采集、傳輸、處理的工作,而AutoBI會(huì )做你的數據報表的工作,DataView會(huì )做你的大屏展示的工作。一起使用效果好嗎?
DataCenter使用自己的agent采集相關(guān)數據,然后采集到Kafka集群中進(jìn)行數據清洗。Kafka集群作為高可靠傳輸,還需要進(jìn)行高性能算法去重計算,然后數據通過(guò)轉換層進(jìn)入數據倉庫或者hadoop集群,這就是整個(gè)ETL過(guò)程,也是作業(yè)天祿系統。之后就是調度-北斗系統的工作。它將根據依賴(lài)關(guān)系計算數據索引。日指數計算未完成,月指數計算無(wú)法完成。如果指標計算錯誤,手動(dòng)觸發(fā)任務(wù)計算,是否會(huì )觸發(fā)下游任務(wù)一起計算... 整個(gè)核心都會(huì )體現在調度-北斗系統完善中。HDFS數據通過(guò)調度計算吐到Hbase,數據倉庫通過(guò)ODS層計算進(jìn)入表示層,分布式查詢(xún)ES……這些都是市面上最好的技術(shù),或者你能想到的查詢(xún)方式。DataCenter 為您完成這一切。
之后,就是DataView和AutoBI大顯身手的時(shí)候了。這兩條產(chǎn)品線(xiàn)不僅可以支持傳統的關(guān)系型數據庫,沒(méi)有sql的數據庫,比如redis、mongodb等,都支持,包括ES、rest等服務(wù)接口。因為是定制模式,只要現有技術(shù)可以實(shí)現,這兩條產(chǎn)品線(xiàn)就會(huì )為你實(shí)現,你不需要為了適應這兩條產(chǎn)品線(xiàn)而傳輸數據。所有Yunspula 系統都適合您。好的。因為是公司的產(chǎn)品,兼容性還行!
這個(gè)怎么樣?DataCenter可以說(shuō)是大數據處理行業(yè)的黑科技。并且整套流程都是黑箱的,您只需要在網(wǎng)頁(yè)中配置您的業(yè)務(wù),其余系統會(huì )自動(dòng)為您處理。AutoBI和DataView作為其老大哥,將黑科技理念貫徹到了全面、無(wú)縫集成、完美展示、多維度分析……你能想到的所有需求,都來(lái)幫你呈現。這是海泰云蜘蛛系統提供的一套大數據解決方案!
采集系統上云(從采集系統上云的區別來(lái)簡(jiǎn)單分析兩者之間的區別)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2021-12-20 05:06
采集系統上云已經(jīng)成為現在市場(chǎng)上最熱門(mén)的趨勢,很多公司都已經(jīng)會(huì )使用終端采集系統。大家在對采集系統進(jìn)行認識的過(guò)程中,會(huì )對一些具體的術(shù)語(yǔ)不知道如何去理解,下面我就從采集系統上云和傳統采集系統的區別來(lái)簡(jiǎn)單分析一下兩者之間的區別。采集系統上云有幾個(gè)方面的意義:首先是拓展產(chǎn)品線(xiàn),其次是傳統采集系統體驗上線(xiàn),增加系統維護服務(wù),更安全便捷。
所以第一個(gè)意義就是拓展產(chǎn)品線(xiàn),是提高整個(gè)公司產(chǎn)品線(xiàn)的豐富性,第二個(gè)就是提高我們整個(gè)公司的服務(wù)能力,第三個(gè)還提升我們公司的安全和便捷性。1、傳統采集系統采集系統上云的最終目的是提升效率,加快我們產(chǎn)品的速度,也就是說(shuō)我們再做內部業(yè)務(wù),首先要做的就是流程化的規范流程。這個(gè)我們采集系統要提供完整的服務(wù),使客戶(hù)在初始就能建立起一個(gè)安全、便捷的大數據的采集庫。
我們都清楚,企業(yè)在選擇大數據采集系統的時(shí)候,有幾個(gè)主要的考慮因素:一個(gè)是考慮成本,另外一個(gè)就是快速,第三個(gè)就是功能,那我們從這三個(gè)角度進(jìn)行比較,先考慮成本。采集系統要快速,讓客戶(hù)體驗快速,不僅僅是我們要做好內部業(yè)務(wù)和流程規范,而且我們還要更快的擴展產(chǎn)品,我們還要把系統做到全產(chǎn)品覆蓋,無(wú)論是做公司互聯(lián)網(wǎng)還是it安全相關(guān),都不能將我們公司的業(yè)務(wù)全部做到統一。
我們的生態(tài)是龐大的。采集系統是一個(gè)全產(chǎn)品覆蓋的一個(gè)系統,涵蓋了互聯(lián)網(wǎng),電信,物聯(lián)網(wǎng)和it安全等。2、采集系統上云的第二個(gè)意義,一旦建立起來(lái),我們后面只需要加大維護和售后服務(wù)力度,就能夠支撐以后的業(yè)務(wù)??蛻?hù)永遠需要有一個(gè)印象,上云之后的公司,我們解決了什么問(wèn)題,不上云我們會(huì )遇到什么問(wèn)題。做到第二個(gè)意義,我們要從客戶(hù)的角度出發(fā),我們才能夠把軟件有些原本解決不了的問(wèn)題講清楚,這樣客戶(hù)能更好的去選擇我們。
這就涉及到如何采集系統上云和一般產(chǎn)品上云,所表達的不同的不同意義了。我想大家也清楚,選擇做大數據采集系統是不同的,有人會(huì )選擇跟別人合作一起做,也有人會(huì )一個(gè)人自己做。傳統大數據采集系統可能在市場(chǎng)推廣的時(shí)候是有點(diǎn)困難,一般情況下我們沒(méi)有比較好的推廣方式,可能相關(guān)大數據廠(chǎng)商會(huì )持續在給你更新他們的產(chǎn)品,但是這些更新產(chǎn)品可能不一定適合客戶(hù)。
不一定符合客戶(hù)未來(lái)對的需求。而采集系統上云后,我們可以采用軟件開(kāi)放性推廣??梢园巡杉到y上云后的所有數據都可以共享,完全可以告訴用戶(hù),我們完全可以實(shí)現采集系統化,幫客戶(hù)節省成本,采集系統的下一步是大數據。關(guān)注微信公眾號:tzy_installer,獲取更多技術(shù)干貨。 查看全部
采集系統上云(從采集系統上云的區別來(lái)簡(jiǎn)單分析兩者之間的區別)
采集系統上云已經(jīng)成為現在市場(chǎng)上最熱門(mén)的趨勢,很多公司都已經(jīng)會(huì )使用終端采集系統。大家在對采集系統進(jìn)行認識的過(guò)程中,會(huì )對一些具體的術(shù)語(yǔ)不知道如何去理解,下面我就從采集系統上云和傳統采集系統的區別來(lái)簡(jiǎn)單分析一下兩者之間的區別。采集系統上云有幾個(gè)方面的意義:首先是拓展產(chǎn)品線(xiàn),其次是傳統采集系統體驗上線(xiàn),增加系統維護服務(wù),更安全便捷。
所以第一個(gè)意義就是拓展產(chǎn)品線(xiàn),是提高整個(gè)公司產(chǎn)品線(xiàn)的豐富性,第二個(gè)就是提高我們整個(gè)公司的服務(wù)能力,第三個(gè)還提升我們公司的安全和便捷性。1、傳統采集系統采集系統上云的最終目的是提升效率,加快我們產(chǎn)品的速度,也就是說(shuō)我們再做內部業(yè)務(wù),首先要做的就是流程化的規范流程。這個(gè)我們采集系統要提供完整的服務(wù),使客戶(hù)在初始就能建立起一個(gè)安全、便捷的大數據的采集庫。
我們都清楚,企業(yè)在選擇大數據采集系統的時(shí)候,有幾個(gè)主要的考慮因素:一個(gè)是考慮成本,另外一個(gè)就是快速,第三個(gè)就是功能,那我們從這三個(gè)角度進(jìn)行比較,先考慮成本。采集系統要快速,讓客戶(hù)體驗快速,不僅僅是我們要做好內部業(yè)務(wù)和流程規范,而且我們還要更快的擴展產(chǎn)品,我們還要把系統做到全產(chǎn)品覆蓋,無(wú)論是做公司互聯(lián)網(wǎng)還是it安全相關(guān),都不能將我們公司的業(yè)務(wù)全部做到統一。
我們的生態(tài)是龐大的。采集系統是一個(gè)全產(chǎn)品覆蓋的一個(gè)系統,涵蓋了互聯(lián)網(wǎng),電信,物聯(lián)網(wǎng)和it安全等。2、采集系統上云的第二個(gè)意義,一旦建立起來(lái),我們后面只需要加大維護和售后服務(wù)力度,就能夠支撐以后的業(yè)務(wù)??蛻?hù)永遠需要有一個(gè)印象,上云之后的公司,我們解決了什么問(wèn)題,不上云我們會(huì )遇到什么問(wèn)題。做到第二個(gè)意義,我們要從客戶(hù)的角度出發(fā),我們才能夠把軟件有些原本解決不了的問(wèn)題講清楚,這樣客戶(hù)能更好的去選擇我們。
這就涉及到如何采集系統上云和一般產(chǎn)品上云,所表達的不同的不同意義了。我想大家也清楚,選擇做大數據采集系統是不同的,有人會(huì )選擇跟別人合作一起做,也有人會(huì )一個(gè)人自己做。傳統大數據采集系統可能在市場(chǎng)推廣的時(shí)候是有點(diǎn)困難,一般情況下我們沒(méi)有比較好的推廣方式,可能相關(guān)大數據廠(chǎng)商會(huì )持續在給你更新他們的產(chǎn)品,但是這些更新產(chǎn)品可能不一定適合客戶(hù)。
不一定符合客戶(hù)未來(lái)對的需求。而采集系統上云后,我們可以采用軟件開(kāi)放性推廣??梢园?strong>采集系統上云后的所有數據都可以共享,完全可以告訴用戶(hù),我們完全可以實(shí)現采集系統化,幫客戶(hù)節省成本,采集系統的下一步是大數據。關(guān)注微信公眾號:tzy_installer,獲取更多技術(shù)干貨。
采集系統上云( 阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 188 次瀏覽 ? 2021-12-16 21:20
阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
11月23日,阿里正式開(kāi)源了可觀(guān)察數據采集器iLogtail。作為阿里巴巴內部可觀(guān)察數據采集的基礎設施,iLogtail承載了阿里巴巴集團的工作以及螞蟻的日志、監控、trace、事件等可觀(guān)察數據采集。iLogtail 運行在服務(wù)器、容器、K8s、嵌入式等多種環(huán)境中,支持采集數百個(gè)可觀(guān)察數據。已經(jīng)有數千萬(wàn)的安裝量,并且每天有 采集 數十 PB 的數據可用。觀(guān)察數據廣泛應用于在線(xiàn)監控、問(wèn)題分析/定位、運行分析、安全分析等各種場(chǎng)景。
一個(gè) iLogtail 和可觀(guān)察性
可觀(guān)察性并不是一個(gè)新概念,而是從IT系統中的監控、故障排除、穩定性構建、運行分析、BI、安全分析等逐步演化而來(lái)。與傳統監控相比,可觀(guān)察性是核心進(jìn)化是采集盡可能多的可觀(guān)察數據以達到白盒的目的。iLogtail的核心定位是可觀(guān)察數據的采集器,可以采集盡可能多的采集各類(lèi)可觀(guān)察數據,幫助可觀(guān)察平臺打造各種上層應用場(chǎng)景。
2. 阿里巴巴可觀(guān)察數據采集的挑戰
對于可觀(guān)察數據采集,有很多開(kāi)源代理,比如Logstash、Filebeats、Fluentd、Collectd、Telegraf等,這些代理的功能非常豐富,這些代理和一些擴展的組合基本可以滿(mǎn)足各種內部數據采集的要求。但由于性能、穩定性、控制等關(guān)鍵挑戰不盡人意,我們最終選擇進(jìn)行自研:
1、資源消耗:目前阿里有上百萬(wàn)臺主機(物理機/虛擬機/容器),每天產(chǎn)生幾十PB的可觀(guān)察數據,降低每1M的內存和每1M/s的性能。改善對于我們的資源節約來(lái)說(shuō)是巨大的,節約的成本可能是幾百萬(wàn)甚至幾千萬(wàn)。目前很多開(kāi)源代理的設計更注重功能而不是性能,改造現有的開(kāi)源代理基本不可行。例如:
開(kāi)源Agents單核處理性能一般在2-10M/s左右,我們希望有性能可以達到100M/s。采集目標增加,數據量增加,采集延遲,服務(wù)器異常。在這種情況下,開(kāi)源代理內存將呈現爆發(fā)式增長(cháng),我們希望即使在各種環(huán)境下,內存也能處于較低的水位。開(kāi)源代理的資源消耗無(wú)法控制。只能通過(guò)cgroups強制限制。效果就是一直OOM重啟,數據一直上不來(lái)采集。并且我們希望在指定了 CPU、內存、流量等資源限制后,Agent 可以一直在這個(gè)限制內正常工作。
2、穩定性:穩定性是一個(gè)永恒的話(huà)題,數據的穩定性采集,除了保證數據本身的準確性采集,還要保證采集的Agent @采集 不能影響業(yè)務(wù)應用,否則影響將是災難性的。至于穩定性建設,除了Agent本身的基本穩定性外,還有很多目前開(kāi)源Agents還沒(méi)有提供的特性:
Agent自恢復:Agent在遇到關(guān)鍵事件后可以自動(dòng)恢復,提供進(jìn)程自身、父子進(jìn)程、守護進(jìn)程等多個(gè)維度的自恢復能力。全球多維監控:可以從全球視角監控不同版本。不同采集配置、不同壓力、不同區域/網(wǎng)絡(luò )等屬性的Agent的穩定性問(wèn)題。問(wèn)題隔離:作為Agent,無(wú)論問(wèn)題如何出現,都需要盡可能地隔離問(wèn)題。比如有多個(gè)采集配置,一個(gè)配置有問(wèn)題,不能影響其他配置;代理本身有問(wèn)題,不能影響機器上應用進(jìn)程的穩定性?;貪L能力:
3、Controllable:可觀(guān)察數據的應用范圍很廣。幾乎所有的業(yè)務(wù)、運維、BI、安全等部門(mén)都會(huì )用到它,各種數據都會(huì )在一臺機器上生成。同一臺機器產(chǎn)生的數據也會(huì )被多個(gè)部門(mén)的人使用。例如,在 2018 年,我們計算出平均而言,一個(gè)虛擬機上有 100 多種不同類(lèi)型的數據。采集,設計了10多個(gè)不同部門(mén)的人想要使用這些數據。除了這些,還有很多其他的企業(yè)級功能需要支持,比如:
遠程管理配置:在大規模場(chǎng)景下,手動(dòng)登錄機器修改配置基本上是不可能的。因此,需要一套配置圖形化管理、遠程存儲、自動(dòng)投遞機制,并且必須能夠區分不同的應用和差異。地區、不同歸屬方等信息。同時(shí),由于涉及到遠程配置的動(dòng)態(tài)加載和卸載,Agent也需要能夠保證在配置Reload過(guò)程中數據不丟失或者不重現。采集配置優(yōu)先級:當一臺機器上運行多個(gè)采集配置時(shí),如果遇到資源不足的情況,需要區分每個(gè)不同的配置優(yōu)先級,并且資源優(yōu)先給高優(yōu)先級的配置,同時(shí)要保證低優(yōu)先級的配置不被“餓死”。降級和恢復能力:在阿里,大促和秒殺是家常便飯。在這個(gè)高峰期,很多不重要的應用可能會(huì )被降級,相應的應用數據也需要降級。降級后,早高峰過(guò)后,需要有足夠的Burst能力快速追趕。完整數據采集完整性:監控、數據分析等場(chǎng)景需要數據的準確性。數據準確的前提是可以采集及時(shí)到服務(wù)器,但是如何判斷每臺機器,每個(gè)文件采集的數據已經(jīng)到達了對應的時(shí)間點(diǎn),
基于以上背景和挑戰,我們從 2013 年開(kāi)始逐步優(yōu)化和改進(jìn) iLogtail 以解決性能、穩定性、可控性等問(wèn)題,并經(jīng)歷了多次 double十一、double十二、 的測試春晚紅包等物品。目前iLogtail支持Logs、Traces、Metrics等多種數據的統一采集。核心功能如下:
支持多種Logs, Traces, Metrics數據采集,特別是容器和Kubernetes環(huán)境,數據非常友好采集 資源消耗極低,單核采集容量100M/s,對比對類(lèi)似Observable數據采集的Agent性能提高5-20倍,穩定性高。它用于阿里巴巴和數以萬(wàn)計的阿里云客戶(hù)的生產(chǎn)。部署量接近1000萬(wàn)。每天采集幾十PB可用觀(guān)測數據支持插件擴展,數據可任意擴展采集,處理、聚合、發(fā)送模塊支持遠程配置管理,支持圖形化、SDK配置管理、K8s Operator等,可以輕松管理百萬(wàn)臺機器的數據采集 支持自我監控、流量控制、資源控制、主動(dòng)告警、采集統計等高級管控功能。iLogtail的三大發(fā)展歷程
秉承阿里人簡(jiǎn)約的特點(diǎn),iLogtail的命名也很簡(jiǎn)單。我們一開(kāi)始就期望有一個(gè)統一的工具來(lái)記錄Tail,所以叫Logtail。添加“i”的原因主要是當時(shí)使用了inotify技術(shù)。, 可以在毫秒級別控制日志采集的延遲,所以最后稱(chēng)為iLogtail。從2013年開(kāi)始,iLogtail的整個(gè)發(fā)展過(guò)程大致可以分為三個(gè)階段,分別是飛天5K階段、阿里集團階段和云原生階段。
1個(gè)飛天5K舞臺
作為中國云計算領(lǐng)域的里程碑,2013年8月15日,阿里巴巴集團正式運營(yíng)5000(5K)服務(wù)器規模的“飛天”集群,成為國內首家自主研發(fā)大型云計算的企業(yè)。 - 規模的通用計算平臺。全球首家對外提供5K云計算服務(wù)能力的公司。
飛天5K項目始于2009年,從最初的30臺逐步發(fā)展到5000臺,不斷解決系統的規模、穩定性、運維、容災等核心問(wèn)題。這個(gè)階段iLogtail誕生的時(shí)候,是從5000臺機器的監控、問(wèn)題分析、定位(現在稱(chēng)為“可觀(guān)察性”)開(kāi)始的。在從 30 到 5000 的飛躍中,可觀(guān)察到的問(wèn)題面臨諸多挑戰,包括單機瓶頸、問(wèn)題復雜性、故障排除的難易程度和管理復雜性。
在5K階段,iLogtail本質(zhì)上解決了單機、小規模集群到大規模運維監控的挑戰。iLogtail現階段的主要特點(diǎn)是:
<p>功能:實(shí)時(shí)日志,監控采集,日志捕獲延遲毫秒級性能:?jiǎn)魏颂幚砟芰?0M/s,5000集群平均資源占用0.5% CPU核心可靠性:自動(dòng)監控新文件,新建文件夾,支持文件輪換,處理網(wǎng)絡(luò )中斷管理:遠程Web管理,自動(dòng)配置文件分發(fā)運維:加入群yum源,運行狀態(tài)監控,異常自動(dòng)上報規模:3W+部署規模,千 查看全部
采集系統上云(
阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
11月23日,阿里正式開(kāi)源了可觀(guān)察數據采集器iLogtail。作為阿里巴巴內部可觀(guān)察數據采集的基礎設施,iLogtail承載了阿里巴巴集團的工作以及螞蟻的日志、監控、trace、事件等可觀(guān)察數據采集。iLogtail 運行在服務(wù)器、容器、K8s、嵌入式等多種環(huán)境中,支持采集數百個(gè)可觀(guān)察數據。已經(jīng)有數千萬(wàn)的安裝量,并且每天有 采集 數十 PB 的數據可用。觀(guān)察數據廣泛應用于在線(xiàn)監控、問(wèn)題分析/定位、運行分析、安全分析等各種場(chǎng)景。
一個(gè) iLogtail 和可觀(guān)察性
可觀(guān)察性并不是一個(gè)新概念,而是從IT系統中的監控、故障排除、穩定性構建、運行分析、BI、安全分析等逐步演化而來(lái)。與傳統監控相比,可觀(guān)察性是核心進(jìn)化是采集盡可能多的可觀(guān)察數據以達到白盒的目的。iLogtail的核心定位是可觀(guān)察數據的采集器,可以采集盡可能多的采集各類(lèi)可觀(guān)察數據,幫助可觀(guān)察平臺打造各種上層應用場(chǎng)景。
2. 阿里巴巴可觀(guān)察數據采集的挑戰
對于可觀(guān)察數據采集,有很多開(kāi)源代理,比如Logstash、Filebeats、Fluentd、Collectd、Telegraf等,這些代理的功能非常豐富,這些代理和一些擴展的組合基本可以滿(mǎn)足各種內部數據采集的要求。但由于性能、穩定性、控制等關(guān)鍵挑戰不盡人意,我們最終選擇進(jìn)行自研:
1、資源消耗:目前阿里有上百萬(wàn)臺主機(物理機/虛擬機/容器),每天產(chǎn)生幾十PB的可觀(guān)察數據,降低每1M的內存和每1M/s的性能。改善對于我們的資源節約來(lái)說(shuō)是巨大的,節約的成本可能是幾百萬(wàn)甚至幾千萬(wàn)。目前很多開(kāi)源代理的設計更注重功能而不是性能,改造現有的開(kāi)源代理基本不可行。例如:
開(kāi)源Agents單核處理性能一般在2-10M/s左右,我們希望有性能可以達到100M/s。采集目標增加,數據量增加,采集延遲,服務(wù)器異常。在這種情況下,開(kāi)源代理內存將呈現爆發(fā)式增長(cháng),我們希望即使在各種環(huán)境下,內存也能處于較低的水位。開(kāi)源代理的資源消耗無(wú)法控制。只能通過(guò)cgroups強制限制。效果就是一直OOM重啟,數據一直上不來(lái)采集。并且我們希望在指定了 CPU、內存、流量等資源限制后,Agent 可以一直在這個(gè)限制內正常工作。
2、穩定性:穩定性是一個(gè)永恒的話(huà)題,數據的穩定性采集,除了保證數據本身的準確性采集,還要保證采集的Agent @采集 不能影響業(yè)務(wù)應用,否則影響將是災難性的。至于穩定性建設,除了Agent本身的基本穩定性外,還有很多目前開(kāi)源Agents還沒(méi)有提供的特性:
Agent自恢復:Agent在遇到關(guān)鍵事件后可以自動(dòng)恢復,提供進(jìn)程自身、父子進(jìn)程、守護進(jìn)程等多個(gè)維度的自恢復能力。全球多維監控:可以從全球視角監控不同版本。不同采集配置、不同壓力、不同區域/網(wǎng)絡(luò )等屬性的Agent的穩定性問(wèn)題。問(wèn)題隔離:作為Agent,無(wú)論問(wèn)題如何出現,都需要盡可能地隔離問(wèn)題。比如有多個(gè)采集配置,一個(gè)配置有問(wèn)題,不能影響其他配置;代理本身有問(wèn)題,不能影響機器上應用進(jìn)程的穩定性?;貪L能力:
3、Controllable:可觀(guān)察數據的應用范圍很廣。幾乎所有的業(yè)務(wù)、運維、BI、安全等部門(mén)都會(huì )用到它,各種數據都會(huì )在一臺機器上生成。同一臺機器產(chǎn)生的數據也會(huì )被多個(gè)部門(mén)的人使用。例如,在 2018 年,我們計算出平均而言,一個(gè)虛擬機上有 100 多種不同類(lèi)型的數據。采集,設計了10多個(gè)不同部門(mén)的人想要使用這些數據。除了這些,還有很多其他的企業(yè)級功能需要支持,比如:
遠程管理配置:在大規模場(chǎng)景下,手動(dòng)登錄機器修改配置基本上是不可能的。因此,需要一套配置圖形化管理、遠程存儲、自動(dòng)投遞機制,并且必須能夠區分不同的應用和差異。地區、不同歸屬方等信息。同時(shí),由于涉及到遠程配置的動(dòng)態(tài)加載和卸載,Agent也需要能夠保證在配置Reload過(guò)程中數據不丟失或者不重現。采集配置優(yōu)先級:當一臺機器上運行多個(gè)采集配置時(shí),如果遇到資源不足的情況,需要區分每個(gè)不同的配置優(yōu)先級,并且資源優(yōu)先給高優(yōu)先級的配置,同時(shí)要保證低優(yōu)先級的配置不被“餓死”。降級和恢復能力:在阿里,大促和秒殺是家常便飯。在這個(gè)高峰期,很多不重要的應用可能會(huì )被降級,相應的應用數據也需要降級。降級后,早高峰過(guò)后,需要有足夠的Burst能力快速追趕。完整數據采集完整性:監控、數據分析等場(chǎng)景需要數據的準確性。數據準確的前提是可以采集及時(shí)到服務(wù)器,但是如何判斷每臺機器,每個(gè)文件采集的數據已經(jīng)到達了對應的時(shí)間點(diǎn),
基于以上背景和挑戰,我們從 2013 年開(kāi)始逐步優(yōu)化和改進(jìn) iLogtail 以解決性能、穩定性、可控性等問(wèn)題,并經(jīng)歷了多次 double十一、double十二、 的測試春晚紅包等物品。目前iLogtail支持Logs、Traces、Metrics等多種數據的統一采集。核心功能如下:
支持多種Logs, Traces, Metrics數據采集,特別是容器和Kubernetes環(huán)境,數據非常友好采集 資源消耗極低,單核采集容量100M/s,對比對類(lèi)似Observable數據采集的Agent性能提高5-20倍,穩定性高。它用于阿里巴巴和數以萬(wàn)計的阿里云客戶(hù)的生產(chǎn)。部署量接近1000萬(wàn)。每天采集幾十PB可用觀(guān)測數據支持插件擴展,數據可任意擴展采集,處理、聚合、發(fā)送模塊支持遠程配置管理,支持圖形化、SDK配置管理、K8s Operator等,可以輕松管理百萬(wàn)臺機器的數據采集 支持自我監控、流量控制、資源控制、主動(dòng)告警、采集統計等高級管控功能。iLogtail的三大發(fā)展歷程
秉承阿里人簡(jiǎn)約的特點(diǎn),iLogtail的命名也很簡(jiǎn)單。我們一開(kāi)始就期望有一個(gè)統一的工具來(lái)記錄Tail,所以叫Logtail。添加“i”的原因主要是當時(shí)使用了inotify技術(shù)。, 可以在毫秒級別控制日志采集的延遲,所以最后稱(chēng)為iLogtail。從2013年開(kāi)始,iLogtail的整個(gè)發(fā)展過(guò)程大致可以分為三個(gè)階段,分別是飛天5K階段、阿里集團階段和云原生階段。
1個(gè)飛天5K舞臺
作為中國云計算領(lǐng)域的里程碑,2013年8月15日,阿里巴巴集團正式運營(yíng)5000(5K)服務(wù)器規模的“飛天”集群,成為國內首家自主研發(fā)大型云計算的企業(yè)。 - 規模的通用計算平臺。全球首家對外提供5K云計算服務(wù)能力的公司。
飛天5K項目始于2009年,從最初的30臺逐步發(fā)展到5000臺,不斷解決系統的規模、穩定性、運維、容災等核心問(wèn)題。這個(gè)階段iLogtail誕生的時(shí)候,是從5000臺機器的監控、問(wèn)題分析、定位(現在稱(chēng)為“可觀(guān)察性”)開(kāi)始的。在從 30 到 5000 的飛躍中,可觀(guān)察到的問(wèn)題面臨諸多挑戰,包括單機瓶頸、問(wèn)題復雜性、故障排除的難易程度和管理復雜性。
在5K階段,iLogtail本質(zhì)上解決了單機、小規模集群到大規模運維監控的挑戰。iLogtail現階段的主要特點(diǎn)是:
<p>功能:實(shí)時(shí)日志,監控采集,日志捕獲延遲毫秒級性能:?jiǎn)魏颂幚砟芰?0M/s,5000集群平均資源占用0.5% CPU核心可靠性:自動(dòng)監控新文件,新建文件夾,支持文件輪換,處理網(wǎng)絡(luò )中斷管理:遠程Web管理,自動(dòng)配置文件分發(fā)運維:加入群yum源,運行狀態(tài)監控,異常自動(dòng)上報規模:3W+部署規模,千
采集系統上云(pbsp地址轉換器,8gram+msddhdd!注意是無(wú)線(xiàn)的sdd)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 143 次瀏覽 ? 2022-02-19 04:00
采集系統上云本質(zhì)上是數據與設備,為了更好的服務(wù)于車(chē)輛在公路管理,提升車(chē)輛整體性能與收費過(guò)程,此次采用思科minipci路由器加pwm控制電路,只要是思科usb接口采集系統就可以采集數據。通過(guò)搭建電腦采集臺stun后,做出相應路由器的端口映射即可接入相應端口實(shí)現云采集。成本方面采用百元的思科路由器足夠滿(mǎn)足各種采集需求,采用15元的kype型號,只需要一臺250g硬盤(pán)的設備即可隨時(shí)讀取硬盤(pán)內容,云采集與物聯(lián)網(wǎng)的結合也將更加的方便有效。
此次采用物聯(lián)網(wǎng)的方式進(jìn)行車(chē)輛的采集,一是本身物聯(lián)網(wǎng)的原理,二是通過(guò)云采集對pb級以下的車(chē)輛數據進(jìn)行篩選,特別是未來(lái)對車(chē)輛的邊界定位,考慮如何打造云采集平臺也是項目的一大亮點(diǎn)?。?!希望對各位有所啟發(fā)?。?!。
pbsp地址轉換器,8gram+512msddhdd!注意是無(wú)線(xiàn)的sdd,可以上網(wǎng),usb端口,終端,
物聯(lián)網(wǎng)行業(yè)目前應用最廣泛的應該是applewatch的wifi版本手表,連接手機,手表通過(guò)wifi功能實(shí)現無(wú)線(xiàn)傳遞數據。所以可以采用p2p網(wǎng)絡(luò )實(shí)現數據傳輸。以下app推薦請慎重采用。從現有版本來(lái)看applewatch內置airpod標準通訊模塊,所以采用這種方式傳輸數據是更加適宜的,通過(guò)一個(gè)無(wú)線(xiàn)信號將手表與手機連接,每次你通過(guò)自家的有線(xiàn)端口即可將數據傳送給自家的移動(dòng)網(wǎng)關(guān)。
我目前采用的思科路由器就是采用的這種實(shí)現方式。缺點(diǎn)是價(jià)格相對其他方式來(lái)說(shuō)有些高。應該說(shuō)便宜些思科路由器在物聯(lián)網(wǎng)/無(wú)線(xiàn)通訊領(lǐng)域的應用是比較豐富的,各種不同的硬件模塊也可以適用于物聯(lián)網(wǎng)網(wǎng)絡(luò )架構。但如果你是做從物聯(lián)網(wǎng)抓取數據的應用,等。建議還是選用bluetoothlineinterface或者思科路由器更適合。根據你的應用不同,所有解決方案成本都會(huì )不同。 查看全部
采集系統上云(pbsp地址轉換器,8gram+msddhdd!注意是無(wú)線(xiàn)的sdd)
采集系統上云本質(zhì)上是數據與設備,為了更好的服務(wù)于車(chē)輛在公路管理,提升車(chē)輛整體性能與收費過(guò)程,此次采用思科minipci路由器加pwm控制電路,只要是思科usb接口采集系統就可以采集數據。通過(guò)搭建電腦采集臺stun后,做出相應路由器的端口映射即可接入相應端口實(shí)現云采集。成本方面采用百元的思科路由器足夠滿(mǎn)足各種采集需求,采用15元的kype型號,只需要一臺250g硬盤(pán)的設備即可隨時(shí)讀取硬盤(pán)內容,云采集與物聯(lián)網(wǎng)的結合也將更加的方便有效。
此次采用物聯(lián)網(wǎng)的方式進(jìn)行車(chē)輛的采集,一是本身物聯(lián)網(wǎng)的原理,二是通過(guò)云采集對pb級以下的車(chē)輛數據進(jìn)行篩選,特別是未來(lái)對車(chē)輛的邊界定位,考慮如何打造云采集平臺也是項目的一大亮點(diǎn)?。?!希望對各位有所啟發(fā)?。?!。
pbsp地址轉換器,8gram+512msddhdd!注意是無(wú)線(xiàn)的sdd,可以上網(wǎng),usb端口,終端,
物聯(lián)網(wǎng)行業(yè)目前應用最廣泛的應該是applewatch的wifi版本手表,連接手機,手表通過(guò)wifi功能實(shí)現無(wú)線(xiàn)傳遞數據。所以可以采用p2p網(wǎng)絡(luò )實(shí)現數據傳輸。以下app推薦請慎重采用。從現有版本來(lái)看applewatch內置airpod標準通訊模塊,所以采用這種方式傳輸數據是更加適宜的,通過(guò)一個(gè)無(wú)線(xiàn)信號將手表與手機連接,每次你通過(guò)自家的有線(xiàn)端口即可將數據傳送給自家的移動(dòng)網(wǎng)關(guān)。
我目前采用的思科路由器就是采用的這種實(shí)現方式。缺點(diǎn)是價(jià)格相對其他方式來(lái)說(shuō)有些高。應該說(shuō)便宜些思科路由器在物聯(lián)網(wǎng)/無(wú)線(xiàn)通訊領(lǐng)域的應用是比較豐富的,各種不同的硬件模塊也可以適用于物聯(lián)網(wǎng)網(wǎng)絡(luò )架構。但如果你是做從物聯(lián)網(wǎng)抓取數據的應用,等。建議還是選用bluetoothlineinterface或者思科路由器更適合。根據你的應用不同,所有解決方案成本都會(huì )不同。
采集系統上云(DeepFlow部署在容器計算節點(diǎn)上的應用的訪(fǎng)問(wèn)路徑分析)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 166 次瀏覽 ? 2022-02-16 19:04
通過(guò)梳理業(yè)務(wù),添加相關(guān)資源組和鏈接,描述關(guān)鍵業(yè)務(wù)應用的訪(fǎng)問(wèn)路徑。資源池中的流量會(huì )根據該規則進(jìn)行過(guò)濾,實(shí)現業(yè)務(wù)應用的網(wǎng)絡(luò )監控,并根據需要設置告警。在服務(wù)路徑中,可以直觀(guān)查看不同網(wǎng)段的網(wǎng)絡(luò )狀態(tài),快速縮小問(wèn)題范圍,定位異常原因。
對于關(guān)鍵業(yè)務(wù)應用,獲取容器環(huán)境的整個(gè)網(wǎng)絡(luò )流量,通常包括完整的容器資源、應用、網(wǎng)絡(luò )幾個(gè)維度。物理網(wǎng)絡(luò )流量通常通過(guò)光學(xué)分裂圖像獲得。DeepFlow?通過(guò)連接容器平臺(如Kubernetes)來(lái)學(xué)習容器環(huán)境中的Cluster、Node、Pod、Service、Ingress等信息。采集器部署在容器計算節點(diǎn)上,以Pod為單元獲取網(wǎng)絡(luò )流量并進(jìn)行流量預處理,從而實(shí)現全鏈路監控。
DeepFlow可以連接物理網(wǎng)絡(luò )的sFlow、NetFlow等數據,支持拆分和鏡像流量采集。通過(guò)采集點(diǎn)的分布式部署和過(guò)濾策略,可以逐段準確檢查客戶(hù)系統中任意已知IP對的每一跳(網(wǎng)元配置和流量信息),從而實(shí)現端到端端端診斷。
對于重點(diǎn)業(yè)務(wù),建議進(jìn)行追溯分析和配置。遇到突發(fā)故障時(shí),可通過(guò)鉆取時(shí)序數據庫中存儲的網(wǎng)絡(luò )流量信息,回放故障的詳細過(guò)程(支持秒粒度查詢(xún));還可以配置按需 PCAP采集 策略,借助其他第三方工具對此類(lèi)故障進(jìn)行深入分析。 查看全部
采集系統上云(DeepFlow部署在容器計算節點(diǎn)上的應用的訪(fǎng)問(wèn)路徑分析)
通過(guò)梳理業(yè)務(wù),添加相關(guān)資源組和鏈接,描述關(guān)鍵業(yè)務(wù)應用的訪(fǎng)問(wèn)路徑。資源池中的流量會(huì )根據該規則進(jìn)行過(guò)濾,實(shí)現業(yè)務(wù)應用的網(wǎng)絡(luò )監控,并根據需要設置告警。在服務(wù)路徑中,可以直觀(guān)查看不同網(wǎng)段的網(wǎng)絡(luò )狀態(tài),快速縮小問(wèn)題范圍,定位異常原因。
對于關(guān)鍵業(yè)務(wù)應用,獲取容器環(huán)境的整個(gè)網(wǎng)絡(luò )流量,通常包括完整的容器資源、應用、網(wǎng)絡(luò )幾個(gè)維度。物理網(wǎng)絡(luò )流量通常通過(guò)光學(xué)分裂圖像獲得。DeepFlow?通過(guò)連接容器平臺(如Kubernetes)來(lái)學(xué)習容器環(huán)境中的Cluster、Node、Pod、Service、Ingress等信息。采集器部署在容器計算節點(diǎn)上,以Pod為單元獲取網(wǎng)絡(luò )流量并進(jìn)行流量預處理,從而實(shí)現全鏈路監控。
DeepFlow可以連接物理網(wǎng)絡(luò )的sFlow、NetFlow等數據,支持拆分和鏡像流量采集。通過(guò)采集點(diǎn)的分布式部署和過(guò)濾策略,可以逐段準確檢查客戶(hù)系統中任意已知IP對的每一跳(網(wǎng)元配置和流量信息),從而實(shí)現端到端端端診斷。
對于重點(diǎn)業(yè)務(wù),建議進(jìn)行追溯分析和配置。遇到突發(fā)故障時(shí),可通過(guò)鉆取時(shí)序數據庫中存儲的網(wǎng)絡(luò )流量信息,回放故障的詳細過(guò)程(支持秒粒度查詢(xún));還可以配置按需 PCAP采集 策略,借助其他第三方工具對此類(lèi)故障進(jìn)行深入分析。
采集系統上云( SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 116 次瀏覽 ? 2022-02-14 08:02
SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
GIS云存儲,云端數據安全
如果您需要在線(xiàn)使用空間數據,可以使用SuperMap GIS云存儲服務(wù),幾分鐘就可以安全地將數據上傳到云端。
具體來(lái)說(shuō),您只需在網(wǎng)頁(yè)或SuperMap iDesktop上登錄您的SuperMap Online賬號,即可在云平臺上傳存儲GIS數據—workspace/UDB/Shapefile/Excel/CSV/GEOJson等空間數據.
GIS數據在線(xiàn)存儲后,您可以通過(guò)Web/PC/移動(dòng)應用程序或地圖、數據、3D等REST API方便地在線(xiàn)使用數據。您可以直接在2D地圖或3D場(chǎng)景中瀏覽數據,也可以在線(xiàn)檢索或查詢(xún)數據。當需要更新數據時(shí),您可以直接在線(xiàn)編輯數據,實(shí)時(shí)快速更新,無(wú)需下載、編輯、重新上傳等繁瑣步驟。更重要的是,您可以使用專(zhuān)業(yè)的GIS分析算法,直接在線(xiàn)分析您的數據,挖掘空間價(jià)值。
GIS云存儲不僅可以滿(mǎn)足企業(yè)用戶(hù)高并發(fā)、高可用的在線(xiàn)數據調用需求,還可以為個(gè)人用戶(hù)提供服務(wù)。您只需注冊一個(gè)SuperMap Online賬號,即可享受500M的無(wú)限免費空間。
此外,在 SuperMap Online 中,您可以自定義和發(fā)布業(yè)務(wù)數據,為您運營(yíng)和維護各種企業(yè)級、穩定可靠的在線(xiàn) GIS 服務(wù)。您只需準備好業(yè)務(wù)數據,即可直接調用SuperMAap Online提供的REST API,無(wú)需關(guān)心軟硬件環(huán)境,無(wú)需部署和運維。從業(yè)務(wù)數據到您的Web應用,所有的中間環(huán)節都由SuperMap Online為您實(shí)現。 查看全部
采集系統上云(
SuperMapOnline為您提供的GIS云存儲服務(wù)(圖))
GIS云存儲,云端數據安全
如果您需要在線(xiàn)使用空間數據,可以使用SuperMap GIS云存儲服務(wù),幾分鐘就可以安全地將數據上傳到云端。
具體來(lái)說(shuō),您只需在網(wǎng)頁(yè)或SuperMap iDesktop上登錄您的SuperMap Online賬號,即可在云平臺上傳存儲GIS數據—workspace/UDB/Shapefile/Excel/CSV/GEOJson等空間數據.
GIS數據在線(xiàn)存儲后,您可以通過(guò)Web/PC/移動(dòng)應用程序或地圖、數據、3D等REST API方便地在線(xiàn)使用數據。您可以直接在2D地圖或3D場(chǎng)景中瀏覽數據,也可以在線(xiàn)檢索或查詢(xún)數據。當需要更新數據時(shí),您可以直接在線(xiàn)編輯數據,實(shí)時(shí)快速更新,無(wú)需下載、編輯、重新上傳等繁瑣步驟。更重要的是,您可以使用專(zhuān)業(yè)的GIS分析算法,直接在線(xiàn)分析您的數據,挖掘空間價(jià)值。

GIS云存儲不僅可以滿(mǎn)足企業(yè)用戶(hù)高并發(fā)、高可用的在線(xiàn)數據調用需求,還可以為個(gè)人用戶(hù)提供服務(wù)。您只需注冊一個(gè)SuperMap Online賬號,即可享受500M的無(wú)限免費空間。
此外,在 SuperMap Online 中,您可以自定義和發(fā)布業(yè)務(wù)數據,為您運營(yíng)和維護各種企業(yè)級、穩定可靠的在線(xiàn) GIS 服務(wù)。您只需準備好業(yè)務(wù)數據,即可直接調用SuperMAap Online提供的REST API,無(wú)需關(guān)心軟硬件環(huán)境,無(wú)需部署和運維。從業(yè)務(wù)數據到您的Web應用,所有的中間環(huán)節都由SuperMap Online為您實(shí)現。
采集系統上云(【開(kāi)源項目】數棧:云原生—站式數據中臺PaaS )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 318 次瀏覽 ? 2022-02-08 17:15
)
DataStack 是云原生的一站式數據中心 PaaS。我們在github和gitee上有一個(gè)有趣的開(kāi)源項目:FlinkX,記得給我們一個(gè)star!星星!星星!
gitee開(kāi)源項目:
github開(kāi)源項目:
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式找一個(gè)文件,首先要找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或pv中,在host和pv中也是可見(jiàn)的。這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們每天用 kubectl log 看到的日志。此類(lèi)日志在主機上的存儲路徑為/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,導致短時(shí)間內大量日志被推送到loki的時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模式采用PLG的主流模式。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志容器和master容器共享一個(gè)日志目錄,這樣可以在promtail容器中獲取日志文件,但是promtail不知道哪些日志到采集,它們的標簽是什么是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,而grafana和prometheus已經(jīng)是云原生監控的事實(shí)標準。熟悉開(kāi)發(fā)、運維,降低學(xué)習成本。
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
查看全部
采集系統上云(【開(kāi)源項目】數棧:云原生—站式數據中臺PaaS
)
DataStack 是云原生的一站式數據中心 PaaS。我們在github和gitee上有一個(gè)有趣的開(kāi)源項目:FlinkX,記得給我們一個(gè)star!星星!星星!
gitee開(kāi)源項目:
github開(kāi)源項目:
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式找一個(gè)文件,首先要找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或pv中,在host和pv中也是可見(jiàn)的。這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們每天用 kubectl log 看到的日志。此類(lèi)日志在主機上的存儲路徑為/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,導致短時(shí)間內大量日志被推送到loki的時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模式采用PLG的主流模式。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志容器和master容器共享一個(gè)日志目錄,這樣可以在promtail容器中獲取日志文件,但是promtail不知道哪些日志到采集,它們的標簽是什么是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,而grafana和prometheus已經(jīng)是云原生監控的事實(shí)標準。熟悉開(kāi)發(fā)、運維,降低學(xué)習成本。
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
采集系統上云(阿里云InfluxDB數據采集服務(wù)優(yōu)勢我們能做些什么?)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 196 次瀏覽 ? 2022-02-08 05:14
背景
隨著(zhù)時(shí)序數據的快速增長(cháng),時(shí)序數據庫不僅需要解決系統穩定性和性能問(wèn)題,還需要實(shí)現從采集到分析的鏈接,讓時(shí)序數據真正生成價(jià)值。在時(shí)間序列數據采集領(lǐng)域,一直缺乏自動(dòng)化的采集工具。雖然用戶(hù)可以使用一些開(kāi)源的采集工具來(lái)實(shí)現data采集,比如Telegraf、Logstash、TCollector等,但是這些采集工具都需要用戶(hù)自己構建和維護運行環(huán)境,增加了用戶(hù)的學(xué)習成本,大大提高了數據的門(mén)檻采集。另一方面,現有的采集工具缺乏對多個(gè)采集源的自動(dòng)化管理,使得用戶(hù)難以統一管理多個(gè)不同的采集源并監控每個(gè)采集 實(shí)時(shí) 工具是否正常運行,采集數據。
阿里云InfluxDB?不僅提供穩定可靠的時(shí)序數據庫服務(wù),還提供非常便捷的數據采集服務(wù)。用戶(hù)可以輕松查看每個(gè)采集源的運行狀態(tài)并進(jìn)行管理,采集的數據會(huì )自動(dòng)存儲在阿里云InfluxDB?中。用戶(hù)無(wú)需擔心運維問(wèn)題,實(shí)現從數據采集到分析的一站式服務(wù)。本文主要介紹如何使用InfluxDB?的數據采集服務(wù)實(shí)現數據從采集到存儲的自動(dòng)化管理。
阿里巴巴云InfluxDB?Data采集服務(wù)優(yōu)勢我們能做什么? 1.簡(jiǎn)單采集數據
目前,阿里云InfluxDB?支持采集四種不同類(lèi)型的數據,分別涉及MySQL、Redis、MongoDB和系統監控。針對每類(lèi)數據,采集多個(gè)監控指標,方便用戶(hù)對監控對象有更全面的了解。用戶(hù)可以通過(guò)InfluxDB?實(shí)例的管理控制臺添加新的采集源,無(wú)需編寫(xiě)代碼,一鍵安裝。
采集數據操作流程如下:
2.采集來(lái)源的實(shí)時(shí)監控
采集源運行過(guò)程中,可以實(shí)時(shí)監控數據采集的狀態(tài),查看數據采集最后到達InfluxDB?的時(shí)間;并且您可以隨時(shí)停止Data采集,并在您認為合適的時(shí)候重新打開(kāi)data采集服務(wù)。
3.一鍵切換采集數據類(lèi)型
如果要更改被監控機器上的采集數據類(lèi)型,不需要重新添加新的采集源,選擇你想要的采集配置即可,數據采集工具會(huì )自動(dòng)切換到采集你指定的監控數據。
4. 采集數據自動(dòng)存儲在 InfluxDB? 中
您可以在采集配置中選擇數據流的數據庫和保留策略,數據采集工具會(huì )自動(dòng)將采集數據存儲到指定的數據庫和保留策略中,并且您可以在 采集 源運行時(shí)修改要寫(xiě)入數據的數據庫和保留策略,只需修改 采集 配置即可。
最佳實(shí)踐
本節介紹如何采集系統監控數據并實(shí)時(shí)顯示采集結果。系統監控的數據包括處理器、磁盤(pán)、內存、網(wǎng)絡(luò )、進(jìn)程和系統等信息。采集到的數據存儲在 8 個(gè)不同的測量值中(測量值是 cpu、disk、diskio、mem、net、processes、swap 和 system)。在開(kāi)始之前,請確保您已成功創(chuàng )建數據庫以及對該數據庫具有讀寫(xiě)權限的用戶(hù)帳戶(hù)。
1. 創(chuàng )建采集系統監控數據配置
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集配置”,進(jìn)入采集配置添加界面,如下圖所示。填寫(xiě)“采集配置名稱(chēng)”,選擇“采集數據類(lèi)型”為“系統監控”,然后選擇“授權賬戶(hù)”、“數據寫(xiě)入數據庫”和“數據庫存儲策略”,并填寫(xiě)在“授權密碼”中。點(diǎn)擊“添加”成功創(chuàng )建采集配置。
2. 添加采集來(lái)源
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集Source”,進(jìn)入采集Source Add頁(yè)面。
(1)選擇網(wǎng)絡(luò )類(lèi)型,“Public Network”或“Private Network”,然后點(diǎn)擊“Next”,如下圖。
(2)在數據源所在的主機上安裝采集工具。將安裝命令復制到主機上運行采集工具。采集@之后> 工具運行,會(huì )與 InfluxDB ? 建立連接,可以在“New 采集 Source Scan Result List”中看到新添加的采集 source,如果沒(méi)有顯示在列表中,您可以點(diǎn)擊“刷新”或“自動(dòng)刷新”。如下圖。
(3)選擇采集系統監控的數據。在上圖中點(diǎn)擊“選擇采集配置”進(jìn)入如下界面,從下拉框。采集“采集系統”的配置。選擇后點(diǎn)擊“保存”。
(4)啟動(dòng)數據采集.勾選需要啟動(dòng)的采集源,然后點(diǎn)擊“Finish and start采集”,采集工具可以在采集源上啟動(dòng)采集數據,如下圖。
3.查看數據狀態(tài)采集
在“采集Source List”中,您可以看到所有連接到 InfluxDB? 實(shí)例的 采集 源,如下圖所示。每個(gè) 采集 源由一個(gè) uuid 唯一標識,“運行中”的“采集 狀態(tài)”表示 采集 工具是 采集 數據并報告給 InfluxDB?, “最新采集上報成功時(shí)間”表示采集數據最后一次成功發(fā)送到InfluxDB?的時(shí)間。
4. 可視化 采集數據
使用 Grafana
(1)安裝 Grafana。請參閱有關(guān)如何安裝 Grafana 的文檔。
(2)添加數據源。將“URL”設置為InfluxDB?實(shí)例的地址,并填寫(xiě)寫(xiě)入采集數據的數據庫和用戶(hù)賬號,如下圖。
(3)配置Dashboard并編寫(xiě)查詢(xún)規則。這里以查詢(xún)磁盤(pán)使用情況為例。查詢(xún)語(yǔ)句為:
SELECT MEAN("used_percent") FROM "disk" GROUP BY time(10s)
實(shí)時(shí)查詢(xún)結果如下圖所示。
您可以根據實(shí)際需要查看其他測量和字段的數據,并分別在FROM和SELECT語(yǔ)句中指定。
總結
阿里云InfluxDB?提供方便快捷的數據采集服務(wù),自動(dòng)管理數據源,幫你解決數據采集問(wèn)題,實(shí)現數據從采集到存儲的自動(dòng)化。未來(lái),我們將支持 采集 獲取更多數據類(lèi)型和指標,敬請期待。
原文鏈接 查看全部
采集系統上云(阿里云InfluxDB數據采集服務(wù)優(yōu)勢我們能做些什么?)
背景
隨著(zhù)時(shí)序數據的快速增長(cháng),時(shí)序數據庫不僅需要解決系統穩定性和性能問(wèn)題,還需要實(shí)現從采集到分析的鏈接,讓時(shí)序數據真正生成價(jià)值。在時(shí)間序列數據采集領(lǐng)域,一直缺乏自動(dòng)化的采集工具。雖然用戶(hù)可以使用一些開(kāi)源的采集工具來(lái)實(shí)現data采集,比如Telegraf、Logstash、TCollector等,但是這些采集工具都需要用戶(hù)自己構建和維護運行環(huán)境,增加了用戶(hù)的學(xué)習成本,大大提高了數據的門(mén)檻采集。另一方面,現有的采集工具缺乏對多個(gè)采集源的自動(dòng)化管理,使得用戶(hù)難以統一管理多個(gè)不同的采集源并監控每個(gè)采集 實(shí)時(shí) 工具是否正常運行,采集數據。
阿里云InfluxDB?不僅提供穩定可靠的時(shí)序數據庫服務(wù),還提供非常便捷的數據采集服務(wù)。用戶(hù)可以輕松查看每個(gè)采集源的運行狀態(tài)并進(jìn)行管理,采集的數據會(huì )自動(dòng)存儲在阿里云InfluxDB?中。用戶(hù)無(wú)需擔心運維問(wèn)題,實(shí)現從數據采集到分析的一站式服務(wù)。本文主要介紹如何使用InfluxDB?的數據采集服務(wù)實(shí)現數據從采集到存儲的自動(dòng)化管理。
阿里巴巴云InfluxDB?Data采集服務(wù)優(yōu)勢我們能做什么? 1.簡(jiǎn)單采集數據
目前,阿里云InfluxDB?支持采集四種不同類(lèi)型的數據,分別涉及MySQL、Redis、MongoDB和系統監控。針對每類(lèi)數據,采集多個(gè)監控指標,方便用戶(hù)對監控對象有更全面的了解。用戶(hù)可以通過(guò)InfluxDB?實(shí)例的管理控制臺添加新的采集源,無(wú)需編寫(xiě)代碼,一鍵安裝。
采集數據操作流程如下:

2.采集來(lái)源的實(shí)時(shí)監控
采集源運行過(guò)程中,可以實(shí)時(shí)監控數據采集的狀態(tài),查看數據采集最后到達InfluxDB?的時(shí)間;并且您可以隨時(shí)停止Data采集,并在您認為合適的時(shí)候重新打開(kāi)data采集服務(wù)。

3.一鍵切換采集數據類(lèi)型
如果要更改被監控機器上的采集數據類(lèi)型,不需要重新添加新的采集源,選擇你想要的采集配置即可,數據采集工具會(huì )自動(dòng)切換到采集你指定的監控數據。
4. 采集數據自動(dòng)存儲在 InfluxDB? 中
您可以在采集配置中選擇數據流的數據庫和保留策略,數據采集工具會(huì )自動(dòng)將采集數據存儲到指定的數據庫和保留策略中,并且您可以在 采集 源運行時(shí)修改要寫(xiě)入數據的數據庫和保留策略,只需修改 采集 配置即可。
最佳實(shí)踐
本節介紹如何采集系統監控數據并實(shí)時(shí)顯示采集結果。系統監控的數據包括處理器、磁盤(pán)、內存、網(wǎng)絡(luò )、進(jìn)程和系統等信息。采集到的數據存儲在 8 個(gè)不同的測量值中(測量值是 cpu、disk、diskio、mem、net、processes、swap 和 system)。在開(kāi)始之前,請確保您已成功創(chuàng )建數據庫以及對該數據庫具有讀寫(xiě)權限的用戶(hù)帳戶(hù)。
1. 創(chuàng )建采集系統監控數據配置
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集配置”,進(jìn)入采集配置添加界面,如下圖所示。填寫(xiě)“采集配置名稱(chēng)”,選擇“采集數據類(lèi)型”為“系統監控”,然后選擇“授權賬戶(hù)”、“數據寫(xiě)入數據庫”和“數據庫存儲策略”,并填寫(xiě)在“授權密碼”中。點(diǎn)擊“添加”成功創(chuàng )建采集配置。

2. 添加采集來(lái)源
點(diǎn)擊InfluxDB?管理控制臺左側導航欄中的“添加采集Source”,進(jìn)入采集Source Add頁(yè)面。
(1)選擇網(wǎng)絡(luò )類(lèi)型,“Public Network”或“Private Network”,然后點(diǎn)擊“Next”,如下圖。

(2)在數據源所在的主機上安裝采集工具。將安裝命令復制到主機上運行采集工具。采集@之后> 工具運行,會(huì )與 InfluxDB ? 建立連接,可以在“New 采集 Source Scan Result List”中看到新添加的采集 source,如果沒(méi)有顯示在列表中,您可以點(diǎn)擊“刷新”或“自動(dòng)刷新”。如下圖。

(3)選擇采集系統監控的數據。在上圖中點(diǎn)擊“選擇采集配置”進(jìn)入如下界面,從下拉框。采集“采集系統”的配置。選擇后點(diǎn)擊“保存”。

(4)啟動(dòng)數據采集.勾選需要啟動(dòng)的采集源,然后點(diǎn)擊“Finish and start采集”,采集工具可以在采集源上啟動(dòng)采集數據,如下圖。

3.查看數據狀態(tài)采集
在“采集Source List”中,您可以看到所有連接到 InfluxDB? 實(shí)例的 采集 源,如下圖所示。每個(gè) 采集 源由一個(gè) uuid 唯一標識,“運行中”的“采集 狀態(tài)”表示 采集 工具是 采集 數據并報告給 InfluxDB?, “最新采集上報成功時(shí)間”表示采集數據最后一次成功發(fā)送到InfluxDB?的時(shí)間。

4. 可視化 采集數據
使用 Grafana
(1)安裝 Grafana。請參閱有關(guān)如何安裝 Grafana 的文檔。
(2)添加數據源。將“URL”設置為InfluxDB?實(shí)例的地址,并填寫(xiě)寫(xiě)入采集數據的數據庫和用戶(hù)賬號,如下圖。

(3)配置Dashboard并編寫(xiě)查詢(xún)規則。這里以查詢(xún)磁盤(pán)使用情況為例。查詢(xún)語(yǔ)句為:
SELECT MEAN("used_percent") FROM "disk" GROUP BY time(10s)
實(shí)時(shí)查詢(xún)結果如下圖所示。

您可以根據實(shí)際需要查看其他測量和字段的數據,并分別在FROM和SELECT語(yǔ)句中指定。
總結
阿里云InfluxDB?提供方便快捷的數據采集服務(wù),自動(dòng)管理數據源,幫你解決數據采集問(wèn)題,實(shí)現數據從采集到存儲的自動(dòng)化。未來(lái),我們將支持 采集 獲取更多數據類(lèi)型和指標,敬請期待。
原文鏈接
采集系統上云(loki就是云原生下日志的采集方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 197 次瀏覽 ? 2022-02-01 21:02
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。 查看全部
采集系統上云(loki就是云原生下日志的采集方案)
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
采集系統上云(webstorm和websessionstorage中,一種是把原來(lái)的cookie直接推送到webweb端)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 144 次瀏覽 ? 2022-01-29 10:04
采集系統上云后,很多用戶(hù)開(kāi)始要求將自己的cookie推送到手機端,可以到除去網(wǎng)絡(luò )的依賴(lài)性。如果能有個(gè)bot直接把cookie推送到手機端,就省去了安裝第三方cookie管理工具,又省去了安裝cookieagent。如果推送到手機端,接收和推送都需要手機本地權限,對于wp安卓手機來(lái)說(shuō),需要先在手機上申請一個(gè)bot賬號才能進(jìn)行推送。
這個(gè)在手機上玩安卓游戲,過(guò)幾天就有可能需要清理手機緩存和重新安裝這個(gè)bot才能玩新游戲??傊枰?lián)網(wǎng)玩手機游戲的小伙伴,請在使用瀏覽器的前提下,有一個(gè)獨立的cookie推送agent。如果你有native安卓或者微信web開(kāi)發(fā)經(jīng)驗,那么就可以使用native推送,或者直接采用cp提供的api,直接接入。
你好,谷歌是有的,按照他的描述可以采用reactor框架實(shí)現,這個(gè)就不在這里做贅述了,百度就可以。
有,小牛web服務(wù)器,我也是最近在找找看這個(gè)方案,
簡(jiǎn)單的可以用js+gwx.cookie來(lái)接收。專(zhuān)業(yè)的也有socketcookie的庫,例如localstorageandwebsessionstoragedriverandpregistry。
有。目前已經(jīng)有localstorage和websessionstorage解決方案了。
推薦用webstorm開(kāi)發(fā)者工具開(kāi)發(fā)。然后用jenkins分發(fā)到生產(chǎn)環(huán)境。
在推送方案上最新出了兩種,一種是把原來(lái)的cookie直接推送到webweb端,一種是寫(xiě)到localstorage和websessionstorage中,webstorm是支持的。我只有webstorm2015。 查看全部
采集系統上云(webstorm和websessionstorage中,一種是把原來(lái)的cookie直接推送到webweb端)
采集系統上云后,很多用戶(hù)開(kāi)始要求將自己的cookie推送到手機端,可以到除去網(wǎng)絡(luò )的依賴(lài)性。如果能有個(gè)bot直接把cookie推送到手機端,就省去了安裝第三方cookie管理工具,又省去了安裝cookieagent。如果推送到手機端,接收和推送都需要手機本地權限,對于wp安卓手機來(lái)說(shuō),需要先在手機上申請一個(gè)bot賬號才能進(jìn)行推送。
這個(gè)在手機上玩安卓游戲,過(guò)幾天就有可能需要清理手機緩存和重新安裝這個(gè)bot才能玩新游戲??傊枰?lián)網(wǎng)玩手機游戲的小伙伴,請在使用瀏覽器的前提下,有一個(gè)獨立的cookie推送agent。如果你有native安卓或者微信web開(kāi)發(fā)經(jīng)驗,那么就可以使用native推送,或者直接采用cp提供的api,直接接入。
你好,谷歌是有的,按照他的描述可以采用reactor框架實(shí)現,這個(gè)就不在這里做贅述了,百度就可以。
有,小牛web服務(wù)器,我也是最近在找找看這個(gè)方案,
簡(jiǎn)單的可以用js+gwx.cookie來(lái)接收。專(zhuān)業(yè)的也有socketcookie的庫,例如localstorageandwebsessionstoragedriverandpregistry。
有。目前已經(jīng)有localstorage和websessionstorage解決方案了。
推薦用webstorm開(kāi)發(fā)者工具開(kāi)發(fā)。然后用jenkins分發(fā)到生產(chǎn)環(huán)境。
在推送方案上最新出了兩種,一種是把原來(lái)的cookie直接推送到webweb端,一種是寫(xiě)到localstorage和websessionstorage中,webstorm是支持的。我只有webstorm2015。
采集系統上云(采集系統上云之后,第一個(gè)難題就是采集數據)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-01-28 02:02
采集系統上云之后,第一個(gè)難題就是采集數據。常用的采集方式有以下幾種:1.用戶(hù)自己下載錄制好的視頻2.用戶(hù)購買(mǎi)硬件錄制設備3.錄制分析軟件輔助工具,在采集環(huán)節中進(jìn)行采集4.直接采集移動(dòng)端數據(簡(jiǎn)單快捷,不需要用戶(hù)專(zhuān)門(mén)下載錄制設備或者硬件)sdk上云,第一個(gè)難題就是要做什么準備。常見(jiàn)的做數據采集的廠(chǎng)商包括清華大學(xué)方案提供商思迅,中科大ai方案提供商北京小戴(使用人臉關(guān)鍵點(diǎn)定位+雙目測距+視頻分析+人臉識別),自動(dòng)駕駛方案提供商百度drive,最大的就是愛(ài)數了,但是愛(ài)數目前支持的數據類(lèi)型有限,需要升級支持。
愛(ài)數的優(yōu)勢在于可以推送市場(chǎng)對數據需求比較高的直播、視頻等類(lèi)型的內容。如果想把采集引擎做的更好更穩定,可以考慮先從流媒體服務(wù)商做起來(lái),比如ims,nox。這方面海外市場(chǎng)做的比較好的就是googleplay,因為它平臺相對比較穩定和相對來(lái)說(shuō)市場(chǎng)化度比較高。其實(shí)我們在北京望京的酒店里見(jiàn)到過(guò)幾個(gè)關(guān)于視頻錄制功能的產(chǎn)品,只是我們只是初步嘗試了一下,在之后,我們可能會(huì )做相關(guān)的分析報告。
如果不考慮價(jià)格,建議使用apigateway,因為它具有完整的鏈路匹配能力,去過(guò)itunesconnect和flickr的人肯定知道這個(gè)方法。一般這樣的產(chǎn)品都是由海外團隊(美國,歐洲)負責的,在中國沒(méi)有合適的客戶(hù)(主要是國內的直播平臺還是很難開(kāi)發(fā)出像樣的數據采集服務(wù)的)。至于采集系統上云,如果其實(shí)人工操作的話(huà),算是折騰,還不如直接定制化。如果說(shuō)好用一點(diǎn)的話(huà),還是可以參考一下360云,它支持中國各個(gè)時(shí)段全球視頻。 查看全部
采集系統上云(采集系統上云之后,第一個(gè)難題就是采集數據)
采集系統上云之后,第一個(gè)難題就是采集數據。常用的采集方式有以下幾種:1.用戶(hù)自己下載錄制好的視頻2.用戶(hù)購買(mǎi)硬件錄制設備3.錄制分析軟件輔助工具,在采集環(huán)節中進(jìn)行采集4.直接采集移動(dòng)端數據(簡(jiǎn)單快捷,不需要用戶(hù)專(zhuān)門(mén)下載錄制設備或者硬件)sdk上云,第一個(gè)難題就是要做什么準備。常見(jiàn)的做數據采集的廠(chǎng)商包括清華大學(xué)方案提供商思迅,中科大ai方案提供商北京小戴(使用人臉關(guān)鍵點(diǎn)定位+雙目測距+視頻分析+人臉識別),自動(dòng)駕駛方案提供商百度drive,最大的就是愛(ài)數了,但是愛(ài)數目前支持的數據類(lèi)型有限,需要升級支持。
愛(ài)數的優(yōu)勢在于可以推送市場(chǎng)對數據需求比較高的直播、視頻等類(lèi)型的內容。如果想把采集引擎做的更好更穩定,可以考慮先從流媒體服務(wù)商做起來(lái),比如ims,nox。這方面海外市場(chǎng)做的比較好的就是googleplay,因為它平臺相對比較穩定和相對來(lái)說(shuō)市場(chǎng)化度比較高。其實(shí)我們在北京望京的酒店里見(jiàn)到過(guò)幾個(gè)關(guān)于視頻錄制功能的產(chǎn)品,只是我們只是初步嘗試了一下,在之后,我們可能會(huì )做相關(guān)的分析報告。
如果不考慮價(jià)格,建議使用apigateway,因為它具有完整的鏈路匹配能力,去過(guò)itunesconnect和flickr的人肯定知道這個(gè)方法。一般這樣的產(chǎn)品都是由海外團隊(美國,歐洲)負責的,在中國沒(méi)有合適的客戶(hù)(主要是國內的直播平臺還是很難開(kāi)發(fā)出像樣的數據采集服務(wù)的)。至于采集系統上云,如果其實(shí)人工操作的話(huà),算是折騰,還不如直接定制化。如果說(shuō)好用一點(diǎn)的話(huà),還是可以參考一下360云,它支持中國各個(gè)時(shí)段全球視頻。
采集系統上云(Linux系統中有很多日志類(lèi)型分析系統產(chǎn)生的文件介紹(二))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 165 次瀏覽 ? 2022-01-27 16:17
提供服務(wù)的Linux服務(wù)器通常會(huì )一直產(chǎn)生大量的日志信息。如果生產(chǎn)環(huán)境有幾十臺甚至上百臺服務(wù)器,要一一查看系統日志是很麻煩的。的。
在技??術(shù)不斷更新的今天,可以集中管理日志的技術(shù)有很多。最常見(jiàn)的操作是ELK日志分析系統,但是這些日志是怎么產(chǎn)生的呢?使用哪個(gè)服務(wù)進(jìn)行統一管理?這個(gè) 文章 將圍繞系統日志服務(wù) - rsyslog。
Linux 系統中有多種日志類(lèi)型。以下是系統自身產(chǎn)生的一些日志文件:
/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/lastlog
/var/log/maillog或/var/log/mail/*
/var/log/messages
/var/log/secure
/var/log/wtmp,/var/log/faillog
/var/log/httpd/* , /var/log/samba/*
如果想詳細了解日志文件中記錄了哪些信息,可以參考這篇博文:Linux中常見(jiàn)日志文件介紹,其中還收錄了7個(gè)錯誤級別的介紹!這里不亂說(shuō)。
系統中的大部分日志都由 rsyslog 服務(wù)管理。該服務(wù)的主要配置文件如下:
[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #過(guò)濾配置文件中的空行和注釋行
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
上面行開(kāi)頭的星號表示所有服務(wù),點(diǎn)號后面的等級表示那些等級記錄下來(lái),/var/lo....表示記錄到哪里
authpriv.* /var/log/secure #表示authpriv所有等級的信息都記錄到secure文件中
mail.* /var/log/maillog #表示mail服務(wù)的所有級別信息都記錄到/var/log/maillog中
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點(diǎn)號前面表示某個(gè)服務(wù),點(diǎn)號后面表示哪些報錯等級要記錄。
#點(diǎn)號前后都可以使用通配符星號來(lái)表示,如第一列為“*.*”,則表示所有服務(wù)的所有等級
#若為“*.info”,則表示所有服務(wù)的info等級及比info更嚴重的等級都記錄起來(lái)。
在上面的配置文件中,可以更改日志的存放位置,以及應該記錄哪些日志級別,但一般不建議這樣做。
其實(shí)依靠配置文件/etc/rsyslog.conf,也可以將其日志發(fā)送到另一臺服務(wù)器,然后在另一臺服務(wù)器上進(jìn)行統一管理。如果生產(chǎn)環(huán)境小,服務(wù)器不多,這種情況可以使用,但是如果生產(chǎn)環(huán)境的服務(wù)器數量比較多,建議部署ELK日志分析系統。
配置 rsyslog 服務(wù)實(shí)例
我這里有兩臺服務(wù)器,主機名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現在要實(shí)現以下要求:
開(kāi)始配置:
1、將info級別以上aaa服務(wù)器的所有系統服務(wù)日志同步發(fā)送給bbb服務(wù)器統一管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件
#..............省略部分內容
$ModLoad imudp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp協(xié)議
$UDPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp的514端口
# Provides TCP syslog reception
$ModLoad imtcp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp協(xié)議
$InputTCPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp的514端口
#..............省略部分內容
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info @@192.168.1.2 #星號表示所有服務(wù)“*.info”表示info等級及以上的信息
#@@表示使用tcp協(xié)議傳輸,192.168.1.2是指定要發(fā)送到哪臺服務(wù)器
#若使用一個(gè)@符號,則表示使用udp協(xié)議傳輸
#..............省略部分內容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog #重啟rsyslog服務(wù),以便更改生效
(2)在 bbb 服務(wù)器上執行以下操作:
[root@bbb ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件,開(kāi)啟udp和tcp的514端口
#..............省略部分內容
$ModLoad imudp #去掉該行開(kāi)頭的“#”注釋符號
$UDPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
# Provides TCP syslog reception
$ModLoad imtcp #去掉該行開(kāi)頭的“#”注釋符號
$InputTCPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
#..............省略部分內容
[root@bbb ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
[root@bbb ~]# tailf /var/log/secure #動(dòng)態(tài)監控著(zhù)本機的日志文件
Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003
Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003....
#..............省略部分內容
?。?)在aaa服務(wù)器上進(jìn)行如下操作(主要是生成日志信息):
[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶(hù) admini 的密碼 。
passwd:所有的身份驗證令牌已經(jīng)成功更新。
(4)查看bbb生成的新日志如下:
2、將編譯安裝好的Nginx日志發(fā)送到bbb服務(wù)器進(jìn)行管理;
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #寫(xiě)入以下文件,指定阿里鏡像站
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統默認自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫(xiě)入后保存退出即可。
[root@aaa ~]# yum repolist #最好執行一下該命令
#..............省略部分內容
(7/7): base/7/x86_64/primary_db | 6.0 MB 00:01
源標識 源名稱(chēng) 狀態(tài)
base/7/x86_64 CentOS-7 - Base 10,097
epel epel 13,384
#上面一行就是我們剛寫(xiě)入的文件生效的,表示沒(méi)問(wèn)題
extras/7/x86_64 CentOS-7 - Extras 304
updates/7/x86_64 CentOS-7 - Updates 311
repolist: 24,096
#若命令yum repolist執行后沒(méi)有顯示出上述內容,排除配置文件的錯誤后,可以執行以下命令
[root@aaa ~]# yum makecache #用來(lái)建立元數據緩存的
#..............省略部分內容
元數據緩存已建立
[root@aaa ~]# yum -y install nginx #安裝nginx服務(wù)
[root@aaa ~]# systemctl start nginx #啟動(dòng)Nginx服務(wù)
[root@aaa ~]# netstat -anpt | grep nginx #確定Nginx服務(wù)已啟動(dòng)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6609/nginx: master
tcp6 0 0 :::80 :::* LISTEN 6609/nginx: master
[root@aaa ~]# ls /var/log/nginx/ #以下是yum安裝Nginx后,Nginx兩個(gè)日志文件的存放位置
access.log error.log
#記住Nginx日志的存放路徑,一會(huì )要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來(lái)
[root@aaa ~]# vim /etc/rsyslog.conf #編輯rsyslog服務(wù)的配置文件
#..............省略部分內容
#在配置文件末尾寫(xiě)入以下內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info-access;
$InputFilestateFile state-nginx-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù)以便生效
上面寫(xiě)的配置項解釋如下:
$ModLoad imfile #加載模塊
$InputFilePollInterval 1 #間隔多久采集次,默認單位是秒
$InputFileName /var/log/nginx/access.log #指定要采集的日志文件
$InputFileTag nginx-info-access; #給對應的日志打一個(gè)標簽
$InputFilestateFile state-nginx-info-accesslog #給這個(gè)日志命名
$InputRunFileMonitor #啟動(dòng)監控
#以下的配置和上面類(lèi)似,因為要采集兩個(gè)日志文件嘛!
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
#以下是指定將采集的日志發(fā)送到哪里,同理,一個(gè)@符號表示使用的udp協(xié)議,兩個(gè)表示tcp協(xié)議
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~ #這的~,表示本地的意思
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
(2)bbb服務(wù)器上的監控日志:
(3)客戶(hù)端為了生成日志,訪(fǎng)問(wèn)aaa的Nginx服務(wù)。
?。?)回到bbb服務(wù)器看看aaa服務(wù)器上是否有生成Nginx訪(fǎng)問(wèn)日志(如果沒(méi)有生成新的日志,客戶(hù)端可以在排除配置錯誤的前提下刷新幾次):
可見(jiàn)Nginx的日志信息應該不會(huì )太詳細了吧?日志信息中是否收錄日志的生成時(shí)間?哪個(gè)服務(wù)器生成的?標簽名稱(chēng)是什么?訪(fǎng)問(wèn)了哪個(gè) IP 地址?訪(fǎng)問(wèn)時(shí)間是什么時(shí)候?訪(fǎng)問(wèn)的狀態(tài)碼是什么?客戶(hù)端訪(fǎng)問(wèn)的是什么系統,系統的位數是多少?比如(Windows NT 10.0; Win64; x64,表示是64位win10系統),你用什么瀏覽器訪(fǎng)問(wèn)呢?我用谷歌在這里訪(fǎng)問(wèn)它,它甚至記錄了我客戶(hù)的谷歌瀏覽器的版本號。
至此,Nginx日志文件采集就完成了,接下來(lái)就是執行apache日志采集了。有了前面的鋪墊,這個(gè)就簡(jiǎn)單多了,只需要更改配置項即可。
3、將編譯安裝的apache日志發(fā)送到bbb服務(wù)器進(jìn)行管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# yum -y install httpd #安裝apache服務(wù)
[root@aaa ~]# systemctl stop nginx #為了避免端口沖突,停止Nginx服務(wù)
[root@aaa ~]# systemctl start httpd #啟動(dòng)apache服務(wù)
[root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路徑
#..............省略部分內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log #主要是改這個(gè)
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個(gè)
#其余配置項可不改,但是建議改一下,以免看起來(lái)日志不太直觀(guān)。
$InputFileTag httpd-info-error;
$InputFilestateFile state-httpd-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'httpd-info-access' then @192.168.1.2:514
if $programname == 'httpd-info-access' then ~
if $programname == 'httpd-info-error' then @192.168.1.2:514
if $programname == 'httpd-info-error' then ~
#主要就是將上面配置中的Nginx都換成了httpd。
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
(2)bbb服務(wù)器上的監控日志:
(3)客戶(hù)端訪(fǎng)問(wèn)aaa的Nginx服務(wù)是為了生成日志(刷新幾次)。
(4)回到bbb服務(wù)器看看有沒(méi)有關(guān)于aaa服務(wù)器的httpd訪(fǎng)問(wèn)日志。
行!沒(méi)問(wèn)題,采集 來(lái)了。. .
————————— 本文到此結束,感謝您的閱讀—————— 查看全部
采集系統上云(Linux系統中有很多日志類(lèi)型分析系統產(chǎn)生的文件介紹(二))
提供服務(wù)的Linux服務(wù)器通常會(huì )一直產(chǎn)生大量的日志信息。如果生產(chǎn)環(huán)境有幾十臺甚至上百臺服務(wù)器,要一一查看系統日志是很麻煩的。的。
在技??術(shù)不斷更新的今天,可以集中管理日志的技術(shù)有很多。最常見(jiàn)的操作是ELK日志分析系統,但是這些日志是怎么產(chǎn)生的呢?使用哪個(gè)服務(wù)進(jìn)行統一管理?這個(gè) 文章 將圍繞系統日志服務(wù) - rsyslog。
Linux 系統中有多種日志類(lèi)型。以下是系統自身產(chǎn)生的一些日志文件:
/var/log/boot.log
/var/log/cron
/var/log/dmesg
/var/log/lastlog
/var/log/maillog或/var/log/mail/*
/var/log/messages
/var/log/secure
/var/log/wtmp,/var/log/faillog
/var/log/httpd/* , /var/log/samba/*
如果想詳細了解日志文件中記錄了哪些信息,可以參考這篇博文:Linux中常見(jiàn)日志文件介紹,其中還收錄了7個(gè)錯誤級別的介紹!這里不亂說(shuō)。
系統中的大部分日志都由 rsyslog 服務(wù)管理。該服務(wù)的主要配置文件如下:
[root@aaa ~]# grep -v "^$" /etc/rsyslog.conf | grep -v "^#" #過(guò)濾配置文件中的空行和注釋行
$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
$ModLoad imjournal # provides access to the systemd journal
$WorkDirectory /var/lib/rsyslog
$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
$IncludeConfig /etc/rsyslog.d/*.conf
$OmitLocalLogging on
$IMJournalStateFile imjournal.state
*.info;mail.none;authpriv.none;cron.none /var/log/messages
上面行開(kāi)頭的星號表示所有服務(wù),點(diǎn)號后面的等級表示那些等級記錄下來(lái),/var/lo....表示記錄到哪里
authpriv.* /var/log/secure #表示authpriv所有等級的信息都記錄到secure文件中
mail.* /var/log/maillog #表示mail服務(wù)的所有級別信息都記錄到/var/log/maillog中
cron.* /var/log/cron
*.emerg :omusrmsg:*
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
#由上面幾行注釋可以看出,第一段中的點(diǎn)號前面表示某個(gè)服務(wù),點(diǎn)號后面表示哪些報錯等級要記錄。
#點(diǎn)號前后都可以使用通配符星號來(lái)表示,如第一列為“*.*”,則表示所有服務(wù)的所有等級
#若為“*.info”,則表示所有服務(wù)的info等級及比info更嚴重的等級都記錄起來(lái)。
在上面的配置文件中,可以更改日志的存放位置,以及應該記錄哪些日志級別,但一般不建議這樣做。
其實(shí)依靠配置文件/etc/rsyslog.conf,也可以將其日志發(fā)送到另一臺服務(wù)器,然后在另一臺服務(wù)器上進(jìn)行統一管理。如果生產(chǎn)環(huán)境小,服務(wù)器不多,這種情況可以使用,但是如果生產(chǎn)環(huán)境的服務(wù)器數量比較多,建議部署ELK日志分析系統。
配置 rsyslog 服務(wù)實(shí)例
我這里有兩臺服務(wù)器,主機名分別是aaa和bbb(IP地址分別是192.168.1.1和1.2),現在要實(shí)現以下要求:
開(kāi)始配置:
1、將info級別以上aaa服務(wù)器的所有系統服務(wù)日志同步發(fā)送給bbb服務(wù)器統一管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件
#..............省略部分內容
$ModLoad imudp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp協(xié)議
$UDPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟udp的514端口
# Provides TCP syslog reception
$ModLoad imtcp #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp協(xié)議
$InputTCPServerRun 514 #將該行開(kāi)頭的注釋符號“#”去掉,以便開(kāi)啟tcp的514端口
#..............省略部分內容
*.info;mail.none;authpriv.none;cron.none /var/log/messages
*.info @@192.168.1.2 #星號表示所有服務(wù)“*.info”表示info等級及以上的信息
#@@表示使用tcp協(xié)議傳輸,192.168.1.2是指定要發(fā)送到哪臺服務(wù)器
#若使用一個(gè)@符號,則表示使用udp協(xié)議傳輸
#..............省略部分內容
#編輯完成后,保存退出即可。
[root@aaa ~]# systemctl restart rsyslog #重啟rsyslog服務(wù),以便更改生效
(2)在 bbb 服務(wù)器上執行以下操作:
[root@bbb ~]# vim /etc/rsyslog.conf #編輯日志服務(wù)的配置文件,開(kāi)啟udp和tcp的514端口
#..............省略部分內容
$ModLoad imudp #去掉該行開(kāi)頭的“#”注釋符號
$UDPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
# Provides TCP syslog reception
$ModLoad imtcp #去掉該行開(kāi)頭的“#”注釋符號
$InputTCPServerRun 514 #去掉該行開(kāi)頭的“#”注釋符號
#..............省略部分內容
[root@bbb ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
[root@bbb ~]# tailf /var/log/secure #動(dòng)態(tài)監控著(zhù)本機的日志文件
Sep 19 15:00:32 aaa useradd[5998]: new group: name=lvjianzh, GID=1003
Sep 19 15:00:32 aaa useradd[5998]: new user: name=lvjianzh, UID=1003, GID=1003....
#..............省略部分內容
?。?)在aaa服務(wù)器上進(jìn)行如下操作(主要是生成日志信息):
[root@aaa ~]# useradd admini
[root@aaa ~]# echo '123.com' | passwd --stdin admini
更改用戶(hù) admini 的密碼 。
passwd:所有的身份驗證令牌已經(jīng)成功更新。
(4)查看bbb生成的新日志如下:

2、將編譯安裝好的Nginx日志發(fā)送到bbb服務(wù)器進(jìn)行管理;
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# vim /etc/yum.repos.d/epel.repo #寫(xiě)入以下文件,指定阿里鏡像站
[epel]
name=epel
baseurl=https://mirrors.aliyun.com/epel/7/x86_64/
gpgcheck=0
#必須保證系統默認自帶的yum文件也存在/etc/yum.repos.d/目錄下,寫(xiě)入后保存退出即可。
[root@aaa ~]# yum repolist #最好執行一下該命令
#..............省略部分內容
(7/7): base/7/x86_64/primary_db | 6.0 MB 00:01
源標識 源名稱(chēng) 狀態(tài)
base/7/x86_64 CentOS-7 - Base 10,097
epel epel 13,384
#上面一行就是我們剛寫(xiě)入的文件生效的,表示沒(méi)問(wèn)題
extras/7/x86_64 CentOS-7 - Extras 304
updates/7/x86_64 CentOS-7 - Updates 311
repolist: 24,096
#若命令yum repolist執行后沒(méi)有顯示出上述內容,排除配置文件的錯誤后,可以執行以下命令
[root@aaa ~]# yum makecache #用來(lái)建立元數據緩存的
#..............省略部分內容
元數據緩存已建立
[root@aaa ~]# yum -y install nginx #安裝nginx服務(wù)
[root@aaa ~]# systemctl start nginx #啟動(dòng)Nginx服務(wù)
[root@aaa ~]# netstat -anpt | grep nginx #確定Nginx服務(wù)已啟動(dòng)
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 6609/nginx: master
tcp6 0 0 :::80 :::* LISTEN 6609/nginx: master
[root@aaa ~]# ls /var/log/nginx/ #以下是yum安裝Nginx后,Nginx兩個(gè)日志文件的存放位置
access.log error.log
#記住Nginx日志的存放路徑,一會(huì )要用到,若采用的是編譯安裝,請自行找到Nginx日志存放路徑記下來(lái)
[root@aaa ~]# vim /etc/rsyslog.conf #編輯rsyslog服務(wù)的配置文件
#..............省略部分內容
#在配置文件末尾寫(xiě)入以下內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/nginx/access.log
$InputFileTag nginx-info-access;
$InputFilestateFile state-nginx-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù)以便生效
上面寫(xiě)的配置項解釋如下:
$ModLoad imfile #加載模塊
$InputFilePollInterval 1 #間隔多久采集次,默認單位是秒
$InputFileName /var/log/nginx/access.log #指定要采集的日志文件
$InputFileTag nginx-info-access; #給對應的日志打一個(gè)標簽
$InputFilestateFile state-nginx-info-accesslog #給這個(gè)日志命名
$InputRunFileMonitor #啟動(dòng)監控
#以下的配置和上面類(lèi)似,因為要采集兩個(gè)日志文件嘛!
$InputFileName /var/log/nginx/error.log
$InputFileTag nginx-info-error;
$InputFilestateFile state-nginx-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
#以下是指定將采集的日志發(fā)送到哪里,同理,一個(gè)@符號表示使用的udp協(xié)議,兩個(gè)表示tcp協(xié)議
if $programname == 'nginx-info-access' then @192.168.1.2:514
if $programname == 'nginx-info-access' then ~ #這的~,表示本地的意思
if $programname == 'nginx-info-error' then @192.168.1.2:514
if $programname == 'nginx-info-error' then ~
(2)bbb服務(wù)器上的監控日志:

(3)客戶(hù)端為了生成日志,訪(fǎng)問(wèn)aaa的Nginx服務(wù)。

?。?)回到bbb服務(wù)器看看aaa服務(wù)器上是否有生成Nginx訪(fǎng)問(wèn)日志(如果沒(méi)有生成新的日志,客戶(hù)端可以在排除配置錯誤的前提下刷新幾次):

可見(jiàn)Nginx的日志信息應該不會(huì )太詳細了吧?日志信息中是否收錄日志的生成時(shí)間?哪個(gè)服務(wù)器生成的?標簽名稱(chēng)是什么?訪(fǎng)問(wèn)了哪個(gè) IP 地址?訪(fǎng)問(wèn)時(shí)間是什么時(shí)候?訪(fǎng)問(wèn)的狀態(tài)碼是什么?客戶(hù)端訪(fǎng)問(wèn)的是什么系統,系統的位數是多少?比如(Windows NT 10.0; Win64; x64,表示是64位win10系統),你用什么瀏覽器訪(fǎng)問(wèn)呢?我用谷歌在這里訪(fǎng)問(wèn)它,它甚至記錄了我客戶(hù)的谷歌瀏覽器的版本號。
至此,Nginx日志文件采集就完成了,接下來(lái)就是執行apache日志采集了。有了前面的鋪墊,這個(gè)就簡(jiǎn)單多了,只需要更改配置項即可。
3、將編譯安裝的apache日志發(fā)送到bbb服務(wù)器進(jìn)行管理
(1)在 aaa 服務(wù)器上執行以下操作:
[root@aaa ~]# yum -y install httpd #安裝apache服務(wù)
[root@aaa ~]# systemctl stop nginx #為了避免端口沖突,停止Nginx服務(wù)
[root@aaa ~]# systemctl start httpd #啟動(dòng)apache服務(wù)
[root@aaa ~]# vim /etc/rsyslog.conf #更改rsyslog配置文件,主要是更改采集日志的路徑
#..............省略部分內容
$ModLoad imfile
$InputFilePollInterval 1
$InputFileName /var/log/httpd/access_log #主要是改這個(gè)
$InputFileTag httpd-info-access;
$InputFilestateFile state-httpd-info-accesslog
$InputRunFileMonitor
$InputFileName /var/log/httpd/error_log #還要改這個(gè)
#其余配置項可不改,但是建議改一下,以免看起來(lái)日志不太直觀(guān)。
$InputFileTag httpd-info-error;
$InputFilestateFile state-httpd-info-errorlog
$InputRunFileMonitor
$InputFilePollInterval 10
if $programname == 'httpd-info-access' then @192.168.1.2:514
if $programname == 'httpd-info-access' then ~
if $programname == 'httpd-info-error' then @192.168.1.2:514
if $programname == 'httpd-info-error' then ~
#主要就是將上面配置中的Nginx都換成了httpd。
[root@aaa ~]# systemctl restart rsyslog #重啟服務(wù),使更改生效
(2)bbb服務(wù)器上的監控日志:

(3)客戶(hù)端訪(fǎng)問(wèn)aaa的Nginx服務(wù)是為了生成日志(刷新幾次)。

(4)回到bbb服務(wù)器看看有沒(méi)有關(guān)于aaa服務(wù)器的httpd訪(fǎng)問(wèn)日志。

行!沒(méi)問(wèn)題,采集 來(lái)了。. .
————————— 本文到此結束,感謝您的閱讀——————
采集系統上云(阿里巴巴高級開(kāi)發(fā)工程師徐榜江版本的核心特性(詳解Flink-CDC))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 264 次瀏覽 ? 2022-01-24 15:22
簡(jiǎn)介:本文由社區志愿者陳正宇整理,內容來(lái)自阿里巴巴高級開(kāi)發(fā)工程師徐邦江(薛勁)7月10日在北京站Flink Meetup上分享的《Flink-CDC詳解》。深度解讀 Flink CDC 新版本 2.0.0 帶來(lái)的核心特性,包括:全量數據并發(fā)讀取、檢查點(diǎn)、無(wú)鎖讀取等重大改進(jìn)。
一、CDC 概述
CDC的全稱(chēng)是Change Data Capture。從廣義上講,只要是能夠捕捉到數據變化的技術(shù),我們就可以稱(chēng)之為CDC。目前常用的CDC技術(shù)主要面向數據庫變化,是一種用于捕捉數據庫中數據變化的技術(shù)。CDC技術(shù)的應用場(chǎng)景非常廣泛:
CDC有很多技術(shù)解決方案。目前業(yè)界主流的實(shí)現機制可以分為兩種:
比較常見(jiàn)的開(kāi)源CDC解決方案,我們可以發(fā)現:
二、Flink CDC 項目
說(shuō)了這么多,讓我們回顧一下開(kāi)發(fā) Flink CDC 項目的動(dòng)機。
1. 動(dòng)態(tài)表和變更日志流
大家都知道 Flink 有兩個(gè)基本概念:Dynamic Table 和 Changelog Stream。
如果你想想 MySQL 中的表和 binlog 日志,你會(huì )發(fā)現 MySQL 數據庫中一張表的所有更改都記錄在 binlog 日志中。如果不斷更新表,binlog日志流會(huì )一直追加,數據庫中的表就相當于binlog日志流在某個(gè)時(shí)間點(diǎn)的物化結果;日志流是不斷捕獲表的變化數據的結果。由此可見(jiàn),Flink SQL 的 Dynamic Table 可以非常自然地表示一個(gè)不斷變化的 MySQL 數據庫表。
在此基礎上,我們研究了一些 CDC 技術(shù),最終選擇了 Debezium 作為 Flink CDC 的底層 采集 工具。Debezium支持全同步、增量同步、全+增量同步,非常靈活。同時(shí),基于日志的CDC技術(shù)使得提供Exactly-Once成為可能。
對比 Flink SQL 的內部數據結構 RowData 和 Debezium 的數據結構,可以發(fā)現兩者非常相似。
通過(guò)分析這兩種數據結構,可以很容易地連接 Flink 和 Debezium 的底層數據。你可以發(fā)現 Flink 在技術(shù)上是適合 CDC 的。
2. 傳統 CDC ETL 分析
我們來(lái)看看傳統CDC的ETL分析環(huán)節,如下圖所示:
在傳統的基于 CDC 的 ETL 分析中,數據 采集 工具是必不可少的。國外用戶(hù)常用Debezium,國內用戶(hù)常用阿里巴巴開(kāi)源Canal。采集 工具負責采集 數據庫的增量數據。,部分采集工具還支持同步全量數據。采集 接收到的數據一般會(huì )輸出到 Kafka 等消息中間件,然后 Flink 計算引擎會(huì )消費這部分數據并寫(xiě)入目的地。目的地可以是各種數據庫、數據湖、實(shí)時(shí)數倉和離線(xiàn)數倉。倉庫。
注意Flink提供了changelog-json格式,可以將changelog數據寫(xiě)入Hive/HDFS等離線(xiàn)數據倉庫;對于實(shí)時(shí)數據倉庫,Flink 支持通過(guò) upsert-kafka 連接器將變更日志直接寫(xiě)入 Kafka。
我們一直在思考是否可以使用 Flink CDC 來(lái)代替上圖中虛線(xiàn)框內的 采集 組件和消息隊列,從而簡(jiǎn)化分析環(huán)節,降低維護成本。同時(shí),更少的組件也意味著(zhù)可以進(jìn)一步提高數據的時(shí)效性。答案是肯定的,所以我們有了基于 Flink CDC 的 ETL 分析流程。
3. 基于 Flink CDC 的 ETL 分析
使用 Flink CDC 之后,除了組件更少、維護更方便之外,另一個(gè)好處是 Flink SQL 大大降低了用戶(hù)門(mén)檻。您可以看到以下示例:
本示例使用 Flink CDC 同步數據庫數據并寫(xiě)入 TiDB。用戶(hù)直接使用 Flink SQL 創(chuàng )建產(chǎn)品和訂單的 MySQL-CDC 表,然后對數據流進(jìn)行 JOIN 處理,處理后直接寫(xiě)入下游數據庫。CDC 的數據分析、處理和同步是通過(guò)一個(gè) Flink SQL 作業(yè)完成的。
你會(huì )發(fā)現這是一個(gè)純SQL的工作,也就是說(shuō)只要你懂SQL BI,行業(yè)的同學(xué)就可以完成這樣的工作。同時(shí),用戶(hù)還可以使用 Flink SQL 提供的豐富語(yǔ)法進(jìn)行數據清洗、分析和聚合。
有了這些功能,現有的 CDC 解決方案很難清理、分析和匯總數據。
此外,使用 Flink SQL 雙流 JOIN、維表 JOIN、UDTF 語(yǔ)法,可以輕松完成數據拓寬和各種業(yè)務(wù)邏輯處理。
4. Flink CDC 項目開(kāi)發(fā)
三、Flink CDC 2.0 詳細信息
1. Flink CDC 痛點(diǎn)
MySQL CDC 是 Fl??ink CDC 中使用最多、最重要的 Connector。本文的以下部分將 Flink CDC Connector 描述為 MySQL CDC Connector。
隨著(zhù) Flink CDC 項目的發(fā)展,得到了社區眾多用戶(hù)的反饋,主要可以總結為三點(diǎn):
2. Debezium 鎖分析
Flink CDC 在底部封裝了 Debezium。Debezium 分兩個(gè)階段同步表:
用戶(hù)使用的場(chǎng)景大多是全量+增量同步。鎖定發(fā)生在全量階段。目的是確定滿(mǎn)卷階段的初始位置,保證增量+滿(mǎn)卷可以做到一多一少,從而保證數據的一致性。從下圖中,我們可以分析出全局鎖和表鎖的一些加鎖過(guò)程。左邊的紅線(xiàn)是鎖的生命周期,右邊是MySQL啟用可重復讀事務(wù)的生命周期。
以全局鎖為例,首先獲取一個(gè)鎖,然后啟動(dòng)一個(gè)可重復讀事務(wù)。這里的加鎖操作是讀取binlog的起始位置和當前表的schema。這樣做的目的是保證binlog的起始位置和當前讀取的schema可以對應,因為表的schema會(huì )發(fā)生變化,比如刪除或者增加列。讀取這兩條信息后,SnapshotReader 將讀取可重復讀取事務(wù)中的全量數據。數據量全讀完后,會(huì )啟動(dòng)BinlogReader從binlog讀取的起始位置開(kāi)始增量讀取,以保證數據量全。數據+增量數據無(wú)縫對接。
表鎖是全局鎖的退化版本,因為全局鎖的權限比較高,所以在某些場(chǎng)景下,用戶(hù)只有表鎖。表鎖鎖需要更長(cháng)的時(shí)間,因為表鎖有一個(gè)特點(diǎn):如果提前釋放鎖,默認會(huì )提交可重復讀事務(wù),所以需要在讀取全量數據后釋放鎖。
經(jīng)過(guò)上面的分析,我們來(lái)看看這些鎖的嚴重后果:
Flink CDC 1.x 可以解鎖,可以滿(mǎn)足大部分場(chǎng)景,但要犧牲一定的數據準確性。Flink CDC 1.x 默認添加全局鎖。雖然可以保證數據的一致性,但存在上述數據掛起的風(fēng)險。
3. Flink CDC 2.0 設計(以 MySQL 為例)
通過(guò)以上分析可知,2.0的設計方案,核心需要解決以上三個(gè)問(wèn)題,即支持無(wú)鎖、水平擴展、檢查點(diǎn)。
DBLog論文中描述的無(wú)鎖算法如下圖所示:
左邊是塊的分割算法的描述。chunk的切分算法其實(shí)和很多數據庫中分庫分表的原理類(lèi)似。表中的數據按表的主鍵分片。假設每個(gè)Chunk的步長(cháng)為10,按照這個(gè)規則進(jìn)行劃分,只需要將這些Chunk區間分為左開(kāi)右閉或左閉右開(kāi)區間,保證連通區間can等于表的主鍵區間,即Can。
右邊是每個(gè) Chunk 的無(wú)鎖讀取算法的描述。該算法的核心思想是在對Chunk進(jìn)行劃分后,對每個(gè)Chunk的全讀和增量讀,完成無(wú)鎖一致性合并。Chunk的分割如下圖所示:
因為每個(gè)chunk只負責自己主鍵范圍內的數據,所以不難推斷,只要能保證讀取每個(gè)chunk的一致性,就可以保證讀取整個(gè)表的一致性。這就是無(wú)鎖算法的基本原理。.
Netflix 的 DBLog 論文中的 Chunk 讀取算法是在 DB 中維護一個(gè)信號表,然后通過(guò)信號表檢查 binlog 文件,記錄每個(gè) chunk 讀取前的 Low Position(低位)和讀取結束后的 High Position . (高點(diǎn)),查詢(xún)低點(diǎn)和高點(diǎn)之間的Chunk全量數據。讀取這部分chunk數據后,將這兩個(gè)站點(diǎn)之間的binlog增量數據合并為該chunk所屬的全量數據,從而得到該chunk在高點(diǎn)時(shí)間對應的全量數據。
結合自身情況,Flink CDC 對塊讀取算法進(jìn)行了改進(jìn),去除了信號表。它不需要額外維護信號表。binlog 中的標記功能被直接讀取 binlog 站點(diǎn)所取代。整體分塊讀取算法說(shuō)明如下圖:
比如讀取Chunk-1時(shí),chunk范圍為[K1,K10],先直接選擇這個(gè)范圍內的數據,存入buffer,在select前記錄一個(gè)binlog的位置(低位),select完成后記錄binlog的一個(gè)軌跡(high locus)。然后啟動(dòng)增量部分,從低點(diǎn)到高點(diǎn)消費binlog。
觀(guān)察圖片右下角的最終輸出,你會(huì )發(fā)現在消費chunk的binlog時(shí),出現的key是k2、k3、k5,我們去buffer標記這些鍵。
這樣,chunk的最終輸出就是高點(diǎn)的chunk中最新的數據。
上圖描述了單個(gè)Chunk的一致性讀,但是如果有多個(gè)表劃分為很多不同的Chunk,這些Chunk分布到不同的任務(wù)中,那么如何分布Chunk,保證全局一致讀呢?
這是基于 FLIP-27 優(yōu)雅地實(shí)現的。您可以在下圖中看到帶有 SourceEnumerator 的組件。該組件主要用于Chunk劃分。分割后的 Chunk 會(huì )提供給下游的 SourceReader 讀取,并按 chunk 分發(fā) Snapshot Chunk 的過(guò)程是針對不同的 SourceReader 實(shí)現的,并且基于 FLIP-27,我們可以很容易地在 chunk 粒度上進(jìn)行 checkpoint。
在讀取Snapshot Chunk時(shí),需要有一個(gè)上報流程,如下圖橙色的上報信息,將Snapshot Chunk完成信息上報給SourceEnumerator。
上報的主要目的是為了后續分發(fā)binlog chunks(如下圖)。因為 Flink CDC 支持全量+增量同步,所以在所有 Snapshot Chunk 讀取完成后,需要消費增量 binlog。這是通過(guò)將 binlog 塊發(fā)送到任何 Source Reader 以進(jìn)行單個(gè)并發(fā)讀取來(lái)實(shí)現的。
對于大部分用戶(hù)來(lái)說(shuō),其實(shí)沒(méi)必要過(guò)多關(guān)注如何進(jìn)行無(wú)鎖算法和分片的細節,了解一下整體流程就好了。
整個(gè)過(guò)程可以概括為:首先通過(guò)主鍵將表劃分為Snapshot Chunk,然后將Snapshot Chunk分發(fā)給多個(gè)SourceReader。在讀取每個(gè) Snapshot Chunk 時(shí),它使用一種算法來(lái)實(shí)現無(wú)鎖條件下的一致性讀取。SourceReader 支持閱讀。Chunk粒度檢查點(diǎn),讀取完所有的Snapshot Chunk后,下發(fā)一個(gè)binlog chunk用于增量binlog讀取,即Flink CDC 2.0的整體流程,如下圖所示:
Flink CDC 是一個(gè)完全開(kāi)源的項目。該項目的所有設計和源代碼都已貢獻給開(kāi)源社區。Flink CDC 2.0 也已經(jīng)正式發(fā)布。核心改進(jìn)和增強包括:
作者用TPC-DS數據集中的customer表進(jìn)行了測試。Flink版本為1.13.1,客戶(hù)表數據量6500萬(wàn),源并發(fā)8,全讀階段:
為了提供更好的文檔支持,Flink CDC 社區構建了文檔網(wǎng)站、網(wǎng)站來(lái)支持文檔版本管理:
Document網(wǎng)站 支持關(guān)鍵字搜索功能,非常有用:
四、未來(lái)規劃
關(guān)于CDC項目的未來(lái)規劃,我們希望重點(diǎn)關(guān)注三個(gè)方面:穩定性、高級特性和生態(tài)融合。
“關(guān)聯(lián)” 查看全部
采集系統上云(阿里巴巴高級開(kāi)發(fā)工程師徐榜江版本的核心特性(詳解Flink-CDC))
簡(jiǎn)介:本文由社區志愿者陳正宇整理,內容來(lái)自阿里巴巴高級開(kāi)發(fā)工程師徐邦江(薛勁)7月10日在北京站Flink Meetup上分享的《Flink-CDC詳解》。深度解讀 Flink CDC 新版本 2.0.0 帶來(lái)的核心特性,包括:全量數據并發(fā)讀取、檢查點(diǎn)、無(wú)鎖讀取等重大改進(jìn)。
一、CDC 概述
CDC的全稱(chēng)是Change Data Capture。從廣義上講,只要是能夠捕捉到數據變化的技術(shù),我們就可以稱(chēng)之為CDC。目前常用的CDC技術(shù)主要面向數據庫變化,是一種用于捕捉數據庫中數據變化的技術(shù)。CDC技術(shù)的應用場(chǎng)景非常廣泛:
CDC有很多技術(shù)解決方案。目前業(yè)界主流的實(shí)現機制可以分為兩種:
比較常見(jiàn)的開(kāi)源CDC解決方案,我們可以發(fā)現:
二、Flink CDC 項目
說(shuō)了這么多,讓我們回顧一下開(kāi)發(fā) Flink CDC 項目的動(dòng)機。
1. 動(dòng)態(tài)表和變更日志流
大家都知道 Flink 有兩個(gè)基本概念:Dynamic Table 和 Changelog Stream。
如果你想想 MySQL 中的表和 binlog 日志,你會(huì )發(fā)現 MySQL 數據庫中一張表的所有更改都記錄在 binlog 日志中。如果不斷更新表,binlog日志流會(huì )一直追加,數據庫中的表就相當于binlog日志流在某個(gè)時(shí)間點(diǎn)的物化結果;日志流是不斷捕獲表的變化數據的結果。由此可見(jiàn),Flink SQL 的 Dynamic Table 可以非常自然地表示一個(gè)不斷變化的 MySQL 數據庫表。
在此基礎上,我們研究了一些 CDC 技術(shù),最終選擇了 Debezium 作為 Flink CDC 的底層 采集 工具。Debezium支持全同步、增量同步、全+增量同步,非常靈活。同時(shí),基于日志的CDC技術(shù)使得提供Exactly-Once成為可能。
對比 Flink SQL 的內部數據結構 RowData 和 Debezium 的數據結構,可以發(fā)現兩者非常相似。
通過(guò)分析這兩種數據結構,可以很容易地連接 Flink 和 Debezium 的底層數據。你可以發(fā)現 Flink 在技術(shù)上是適合 CDC 的。
2. 傳統 CDC ETL 分析
我們來(lái)看看傳統CDC的ETL分析環(huán)節,如下圖所示:
在傳統的基于 CDC 的 ETL 分析中,數據 采集 工具是必不可少的。國外用戶(hù)常用Debezium,國內用戶(hù)常用阿里巴巴開(kāi)源Canal。采集 工具負責采集 數據庫的增量數據。,部分采集工具還支持同步全量數據。采集 接收到的數據一般會(huì )輸出到 Kafka 等消息中間件,然后 Flink 計算引擎會(huì )消費這部分數據并寫(xiě)入目的地。目的地可以是各種數據庫、數據湖、實(shí)時(shí)數倉和離線(xiàn)數倉。倉庫。
注意Flink提供了changelog-json格式,可以將changelog數據寫(xiě)入Hive/HDFS等離線(xiàn)數據倉庫;對于實(shí)時(shí)數據倉庫,Flink 支持通過(guò) upsert-kafka 連接器將變更日志直接寫(xiě)入 Kafka。
我們一直在思考是否可以使用 Flink CDC 來(lái)代替上圖中虛線(xiàn)框內的 采集 組件和消息隊列,從而簡(jiǎn)化分析環(huán)節,降低維護成本。同時(shí),更少的組件也意味著(zhù)可以進(jìn)一步提高數據的時(shí)效性。答案是肯定的,所以我們有了基于 Flink CDC 的 ETL 分析流程。
3. 基于 Flink CDC 的 ETL 分析
使用 Flink CDC 之后,除了組件更少、維護更方便之外,另一個(gè)好處是 Flink SQL 大大降低了用戶(hù)門(mén)檻。您可以看到以下示例:
本示例使用 Flink CDC 同步數據庫數據并寫(xiě)入 TiDB。用戶(hù)直接使用 Flink SQL 創(chuàng )建產(chǎn)品和訂單的 MySQL-CDC 表,然后對數據流進(jìn)行 JOIN 處理,處理后直接寫(xiě)入下游數據庫。CDC 的數據分析、處理和同步是通過(guò)一個(gè) Flink SQL 作業(yè)完成的。
你會(huì )發(fā)現這是一個(gè)純SQL的工作,也就是說(shuō)只要你懂SQL BI,行業(yè)的同學(xué)就可以完成這樣的工作。同時(shí),用戶(hù)還可以使用 Flink SQL 提供的豐富語(yǔ)法進(jìn)行數據清洗、分析和聚合。
有了這些功能,現有的 CDC 解決方案很難清理、分析和匯總數據。
此外,使用 Flink SQL 雙流 JOIN、維表 JOIN、UDTF 語(yǔ)法,可以輕松完成數據拓寬和各種業(yè)務(wù)邏輯處理。
4. Flink CDC 項目開(kāi)發(fā)
三、Flink CDC 2.0 詳細信息
1. Flink CDC 痛點(diǎn)
MySQL CDC 是 Fl??ink CDC 中使用最多、最重要的 Connector。本文的以下部分將 Flink CDC Connector 描述為 MySQL CDC Connector。
隨著(zhù) Flink CDC 項目的發(fā)展,得到了社區眾多用戶(hù)的反饋,主要可以總結為三點(diǎn):
2. Debezium 鎖分析
Flink CDC 在底部封裝了 Debezium。Debezium 分兩個(gè)階段同步表:
用戶(hù)使用的場(chǎng)景大多是全量+增量同步。鎖定發(fā)生在全量階段。目的是確定滿(mǎn)卷階段的初始位置,保證增量+滿(mǎn)卷可以做到一多一少,從而保證數據的一致性。從下圖中,我們可以分析出全局鎖和表鎖的一些加鎖過(guò)程。左邊的紅線(xiàn)是鎖的生命周期,右邊是MySQL啟用可重復讀事務(wù)的生命周期。
以全局鎖為例,首先獲取一個(gè)鎖,然后啟動(dòng)一個(gè)可重復讀事務(wù)。這里的加鎖操作是讀取binlog的起始位置和當前表的schema。這樣做的目的是保證binlog的起始位置和當前讀取的schema可以對應,因為表的schema會(huì )發(fā)生變化,比如刪除或者增加列。讀取這兩條信息后,SnapshotReader 將讀取可重復讀取事務(wù)中的全量數據。數據量全讀完后,會(huì )啟動(dòng)BinlogReader從binlog讀取的起始位置開(kāi)始增量讀取,以保證數據量全。數據+增量數據無(wú)縫對接。
表鎖是全局鎖的退化版本,因為全局鎖的權限比較高,所以在某些場(chǎng)景下,用戶(hù)只有表鎖。表鎖鎖需要更長(cháng)的時(shí)間,因為表鎖有一個(gè)特點(diǎn):如果提前釋放鎖,默認會(huì )提交可重復讀事務(wù),所以需要在讀取全量數據后釋放鎖。
經(jīng)過(guò)上面的分析,我們來(lái)看看這些鎖的嚴重后果:
Flink CDC 1.x 可以解鎖,可以滿(mǎn)足大部分場(chǎng)景,但要犧牲一定的數據準確性。Flink CDC 1.x 默認添加全局鎖。雖然可以保證數據的一致性,但存在上述數據掛起的風(fēng)險。
3. Flink CDC 2.0 設計(以 MySQL 為例)
通過(guò)以上分析可知,2.0的設計方案,核心需要解決以上三個(gè)問(wèn)題,即支持無(wú)鎖、水平擴展、檢查點(diǎn)。
DBLog論文中描述的無(wú)鎖算法如下圖所示:
左邊是塊的分割算法的描述。chunk的切分算法其實(shí)和很多數據庫中分庫分表的原理類(lèi)似。表中的數據按表的主鍵分片。假設每個(gè)Chunk的步長(cháng)為10,按照這個(gè)規則進(jìn)行劃分,只需要將這些Chunk區間分為左開(kāi)右閉或左閉右開(kāi)區間,保證連通區間can等于表的主鍵區間,即Can。
右邊是每個(gè) Chunk 的無(wú)鎖讀取算法的描述。該算法的核心思想是在對Chunk進(jìn)行劃分后,對每個(gè)Chunk的全讀和增量讀,完成無(wú)鎖一致性合并。Chunk的分割如下圖所示:
因為每個(gè)chunk只負責自己主鍵范圍內的數據,所以不難推斷,只要能保證讀取每個(gè)chunk的一致性,就可以保證讀取整個(gè)表的一致性。這就是無(wú)鎖算法的基本原理。.
Netflix 的 DBLog 論文中的 Chunk 讀取算法是在 DB 中維護一個(gè)信號表,然后通過(guò)信號表檢查 binlog 文件,記錄每個(gè) chunk 讀取前的 Low Position(低位)和讀取結束后的 High Position . (高點(diǎn)),查詢(xún)低點(diǎn)和高點(diǎn)之間的Chunk全量數據。讀取這部分chunk數據后,將這兩個(gè)站點(diǎn)之間的binlog增量數據合并為該chunk所屬的全量數據,從而得到該chunk在高點(diǎn)時(shí)間對應的全量數據。
結合自身情況,Flink CDC 對塊讀取算法進(jìn)行了改進(jìn),去除了信號表。它不需要額外維護信號表。binlog 中的標記功能被直接讀取 binlog 站點(diǎn)所取代。整體分塊讀取算法說(shuō)明如下圖:
比如讀取Chunk-1時(shí),chunk范圍為[K1,K10],先直接選擇這個(gè)范圍內的數據,存入buffer,在select前記錄一個(gè)binlog的位置(低位),select完成后記錄binlog的一個(gè)軌跡(high locus)。然后啟動(dòng)增量部分,從低點(diǎn)到高點(diǎn)消費binlog。
觀(guān)察圖片右下角的最終輸出,你會(huì )發(fā)現在消費chunk的binlog時(shí),出現的key是k2、k3、k5,我們去buffer標記這些鍵。
這樣,chunk的最終輸出就是高點(diǎn)的chunk中最新的數據。
上圖描述了單個(gè)Chunk的一致性讀,但是如果有多個(gè)表劃分為很多不同的Chunk,這些Chunk分布到不同的任務(wù)中,那么如何分布Chunk,保證全局一致讀呢?
這是基于 FLIP-27 優(yōu)雅地實(shí)現的。您可以在下圖中看到帶有 SourceEnumerator 的組件。該組件主要用于Chunk劃分。分割后的 Chunk 會(huì )提供給下游的 SourceReader 讀取,并按 chunk 分發(fā) Snapshot Chunk 的過(guò)程是針對不同的 SourceReader 實(shí)現的,并且基于 FLIP-27,我們可以很容易地在 chunk 粒度上進(jìn)行 checkpoint。
在讀取Snapshot Chunk時(shí),需要有一個(gè)上報流程,如下圖橙色的上報信息,將Snapshot Chunk完成信息上報給SourceEnumerator。
上報的主要目的是為了后續分發(fā)binlog chunks(如下圖)。因為 Flink CDC 支持全量+增量同步,所以在所有 Snapshot Chunk 讀取完成后,需要消費增量 binlog。這是通過(guò)將 binlog 塊發(fā)送到任何 Source Reader 以進(jìn)行單個(gè)并發(fā)讀取來(lái)實(shí)現的。
對于大部分用戶(hù)來(lái)說(shuō),其實(shí)沒(méi)必要過(guò)多關(guān)注如何進(jìn)行無(wú)鎖算法和分片的細節,了解一下整體流程就好了。
整個(gè)過(guò)程可以概括為:首先通過(guò)主鍵將表劃分為Snapshot Chunk,然后將Snapshot Chunk分發(fā)給多個(gè)SourceReader。在讀取每個(gè) Snapshot Chunk 時(shí),它使用一種算法來(lái)實(shí)現無(wú)鎖條件下的一致性讀取。SourceReader 支持閱讀。Chunk粒度檢查點(diǎn),讀取完所有的Snapshot Chunk后,下發(fā)一個(gè)binlog chunk用于增量binlog讀取,即Flink CDC 2.0的整體流程,如下圖所示:
Flink CDC 是一個(gè)完全開(kāi)源的項目。該項目的所有設計和源代碼都已貢獻給開(kāi)源社區。Flink CDC 2.0 也已經(jīng)正式發(fā)布。核心改進(jìn)和增強包括:
作者用TPC-DS數據集中的customer表進(jìn)行了測試。Flink版本為1.13.1,客戶(hù)表數據量6500萬(wàn),源并發(fā)8,全讀階段:
為了提供更好的文檔支持,Flink CDC 社區構建了文檔網(wǎng)站、網(wǎng)站來(lái)支持文檔版本管理:
Document網(wǎng)站 支持關(guān)鍵字搜索功能,非常有用:
四、未來(lái)規劃
關(guān)于CDC項目的未來(lái)規劃,我們希望重點(diǎn)關(guān)注三個(gè)方面:穩定性、高級特性和生態(tài)融合。
“關(guān)聯(lián)”
采集系統上云(互聯(lián)網(wǎng)系統圖一圖一是的遷移到云端,以便獲取這種能力 )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 207 次瀏覽 ? 2022-01-16 00:15
)
在互聯(lián)網(wǎng)大行其道的今天,毫不夸張地說(shuō),對市場(chǎng)的反應速度甚至將決定一家公司的生死存亡。我們的客戶(hù)(房地產(chǎn)垂直搜索平臺)就是這樣一家互聯(lián)網(wǎng)公司。為了縮短開(kāi)發(fā)周期,減少系統上市時(shí)間,我們將現有的基于傳統數據中心的基礎設施遷移到云端,以獲得這種能力。
在此之前,我們先來(lái)看看他們現有的系統。
1、現有系統
圖1
圖 1 是現有核心系統的簡(jiǎn)單抽象。我們維護三個(gè)業(yè)務(wù)線(xiàn)(這里指的是業(yè)務(wù)為主,有獨立的產(chǎn)品經(jīng)理、銷(xiāo)售團隊、獨立的結算團隊,以下簡(jiǎn)稱(chēng)LoB),每個(gè)業(yè)務(wù)線(xiàn)對應不同類(lèi)別的房產(chǎn)搜索網(wǎng)站@ >,如商業(yè)和住宅。User是一個(gè)用戶(hù)管理模塊,可以提供用戶(hù)管理、書(shū)簽和搜索管理;Location是一個(gè)定位模塊,根據用戶(hù)的搜索條件給出實(shí)際地址和相鄰地址;搜索引擎用于存儲所有信息并提供搜索功能??梢钥闯?,三個(gè)LoB雖然不同網(wǎng)站@>,但提供的服務(wù)卻是相似的。不僅,
基于以上原因,它們應該集成在一個(gè)系統中,但它們不是。這些業(yè)務(wù)線(xiàn)雖然有如此高的相似度,但在以下幾個(gè)方面卻大相徑庭:
由于不同的屬性有不同的搜索條件,所以部署時(shí)需要對不同的網(wǎng)站@>進(jìn)行不同的配置。
不同的樓盤(pán)有不同的目標市場(chǎng),需求決定了要開(kāi)發(fā)哪些特色,開(kāi)展哪些營(yíng)銷(xiāo)活動(dòng)。因此,每個(gè)業(yè)務(wù)線(xiàn)都有自己的銷(xiāo)售和開(kāi)發(fā)團隊,并根據市場(chǎng)變化開(kāi)發(fā)和發(fā)布相應的功能。計劃。
在圖1中,不同的顏色表示不同的流量級別,紅色表示最大流量,黃色表示中等流量,綠色表示較低流量。對于不同類(lèi)型的物業(yè),市場(chǎng)需求是不同的。
商業(yè)地產(chǎn)的目標客戶(hù)是需要開(kāi)展商業(yè)活動(dòng)的人,而住宅地產(chǎn)的目標客戶(hù)是希望為子女生活或提供更好教育機會(huì )的普通人。
2、商業(yè)愿景
了解了現有系統之后,再來(lái)看看他們的業(yè)務(wù)愿景,因為沒(méi)有一家公司的 IT 轉型是獨立于業(yè)務(wù)驅動(dòng)的,了解業(yè)務(wù)愿景有助于更清楚地了解遷移上云背后的原因。同時(shí),對云策略的適用場(chǎng)景也有了更直觀(guān)的認識。
這意味著(zhù)每個(gè)團隊都將是一個(gè)完全獨立的全功能團隊,擁有獨立的系統和獨立開(kāi)發(fā)、部署、運維、營(yíng)銷(xiāo)和銷(xiāo)售的能力。這為每個(gè)團隊提供了非常大的自主權,以及對業(yè)務(wù)擴展和收縮的非常好的適應能力。
這里所說(shuō)的效率主要是指IT生產(chǎn)活動(dòng)的效率。本質(zhì)上,他們是一家互聯(lián)網(wǎng)公司。如何提高IT系統的效率來(lái)支持業(yè)務(wù)的發(fā)展是他們看重的。比如提高人的效率,開(kāi)發(fā)、上線(xiàn)、測試、運維、在線(xiàn)反饋等等,全方面的效率。
中國可能是世界上最活躍的房地產(chǎn)市場(chǎng)之一。與此同時(shí),海外房地產(chǎn)投資在中國持續升溫。他們沒(méi)有理由錯過(guò)這個(gè)機會(huì ),不僅在德國、意大利和中國香港。
基于以上差異,圖1所示的系統架構顯然不能滿(mǎn)足客戶(hù)對業(yè)務(wù)愿景的實(shí)現。主要問(wèn)題如下:
由于這是一個(gè)集成了所有 LoB 的系統,因此業(yè)務(wù)線(xiàn)之間存在耦合。試想這個(gè)場(chǎng)景,LoB1已經(jīng)根據市場(chǎng)反饋完成了房產(chǎn)中介品牌的提升,希望在漲價(jià)前上線(xiàn),因為這將是漲價(jià)的合理理由。同時(shí),LoB2正在開(kāi)發(fā)新的頁(yè)面以滿(mǎn)足業(yè)主品牌的需求,但這個(gè)功能只開(kāi)發(fā)了一半。按照目前的模式,我們要等LoB2完成功能開(kāi)發(fā)后才能一起上線(xiàn),這樣就錯過(guò)了LoB1漲價(jià)的機會(huì ),下一個(gè)漲價(jià)窗口將在幾個(gè)月后。
通過(guò)流量監控,我們發(fā)現網(wǎng)站@>的流量并不是一成不變的。按年計算,網(wǎng)站@> 的流量會(huì )在圣誕節前下降到平時(shí)水平的 50% 左右,圣誕節后可能會(huì )上升到 50%。平均水平在200%左右,這么大的流量會(huì )持續一周左右。其實(shí)這種情況也不難理解,因為圣誕節期間大家都在放假,放假后還會(huì )有一波工作。從圖1我們也可以清楚的看到不同組件的不同流量。為了保證整體的響應速度,系統總是以較高的流量部署。但是,由于每個(gè) LoB 都不能獨立部署,因此浪費了資源。情況非常明顯。
我們之前提到了全球擴張計劃。他們想進(jìn)入中國市場(chǎng),所以需要設計一個(gè)獨立的網(wǎng)站@>給中國用戶(hù)提供住房。為國家房地產(chǎn)市場(chǎng)的擴張做準備,為了實(shí)現這個(gè)目標,我們需要IT基礎設施的支持,可以快速靈活地橫向擴張。但基于現有的數據中心模式,這將是一個(gè)痛苦的過(guò)程。
3、架構愿景
通過(guò)對原有IT架構的分析,我們發(fā)現很難支撐業(yè)務(wù)愿景的實(shí)現。因此,對于這樣的業(yè)務(wù)愿景,我們已經(jīng)勾勒出了一個(gè)能夠很好地支持業(yè)務(wù)愿景的 IT 架構愿景。
必須能夠根據業(yè)務(wù)線(xiàn)獨立運作
易于擴展或可擴展
解決從開(kāi)發(fā)到部署的所有問(wèn)題,開(kāi)發(fā)者更關(guān)注如何更快地交付功能,而不是各種環(huán)境問(wèn)題、部署問(wèn)題、發(fā)布問(wèn)題
提高資源利用率,根據不同流量情況自適應分配資源。
基于這個(gè)愿景,我們發(fā)現云平臺可以幫助我們實(shí)現這樣的IT愿景。圖 2 描述了系統上云后的架構。
圖二
一是所有業(yè)務(wù)線(xiàn)獨立運營(yíng),可以自主選擇何時(shí)發(fā)布上線(xiàn),選擇合適的SLA和資源以適應流量變化;其次,所有業(yè)務(wù)線(xiàn)共享的組件獨立于業(yè)務(wù)線(xiàn)。此外,它們分別部署和運行,還可以調整不同的資源以適應流量的變化。
4、遷移三部曲
在我們知道了現有系統的目標狀態(tài)之后,下一步就是如何實(shí)現這個(gè)目標。
圖 3
如圖3所示,在遷移上云時(shí),從現有系統遷移到目標系統的過(guò)程不是一次性的過(guò)程,也不是一次性的遷移,而是一個(gè)周期性的、持續的過(guò)程。是相關(guān)系統整合的結果。如果我們關(guān)注其中一個(gè)遷移周期,則該過(guò)程大致可以分為三個(gè)階段:
階段 1:識別
識別就是弄清楚要遷移的內容。
對于原來(lái)的集成系統來(lái)說(shuō),這個(gè)過(guò)程與聚合相反,就是對聚合的所有功能特征進(jìn)行分析和分解。本次活動(dòng)的目的是深入了解當前系統的職責。明確職責后,我們可以更好地確定哪些職責可以剝離、拆分、獨立。比如這個(gè)房產(chǎn)搜索網(wǎng)站@>,經(jīng)過(guò)識別發(fā)現我們的主要職責是:前端展示(桌面、手機)、房產(chǎn)搜索、搜索管理、用戶(hù)管理、地理位置查詢(xún)、并且還提供了部分API。識別完成后,我們要選擇從哪個(gè)職責開(kāi)始遷移。這個(gè)過(guò)程不是隨機的,而是基于現有的團隊能力,
我的建議是從簡(jiǎn)單且相對獨立的職責開(kāi)始。如果能同時(shí)支持業(yè)務(wù)發(fā)展,那就更好了。因為難度低,可以在遷移初期給團隊帶來(lái)信心和經(jīng)驗。隨著(zhù)遷移經(jīng)驗和信心的積累,那些高耦合、多依賴(lài)的職責可以輕松遷移。以這個(gè)房產(chǎn)搜索平臺為例,在遷移初期,我們選擇用戶(hù)管理職責進(jìn)行遷移,一方面是因為它比較簡(jiǎn)單,相對獨立,另一方面是因為它為我們提供了API支持。 iOS開(kāi)發(fā)。
第 2 階段:提取
在確定了系統職責并確定了要遷移的職責之后,是時(shí)候將該職責提取為獨立的云服務(wù)了。
圖 4
如上圖所示,這個(gè)階段的核心是將識別出的職責從原有系統中分離出來(lái),成為獨立的云服務(wù)。這個(gè)過(guò)程有幾點(diǎn)需要注意:創(chuàng )建快,需要多快?理想狀態(tài)是創(chuàng )建成功(空服)后上線(xiàn)(灰度發(fā)布)?;蛟S這個(gè)目標在遷移之初并不容易實(shí)現,但隨著(zhù)遷移信心和經(jīng)驗的積累,是完全可行的,當然這也是我們從簡(jiǎn)單且相對獨立的職責入手的另一個(gè)原因;為了快速部署,我們從一個(gè)空服務(wù)創(chuàng )建一個(gè)新服務(wù),這意味著(zhù)它可以做任何事情,除了在生產(chǎn)環(huán)境中運行。不。在這個(gè)階段,我們的目標是抽象出服務(wù)的兩個(gè)痛苦階段:創(chuàng )建和部署,
第三階段:整合
集成是將新的云服務(wù)與原有系統連接起來(lái)。
如果說(shuō)前兩個(gè)階段都是準備,那么這個(gè)階段就是實(shí)施遷移的過(guò)程??梢哉f(shuō)這是最重要的階段,因為這是新舊系統交付的時(shí)期。這個(gè)階段會(huì )有一些活動(dòng)。首先,確定新服務(wù)需要哪些外部接口,這需要對現有系統有更深入的了解(當然,如果接口比較簡(jiǎn)單,這一步也可以在提取階段實(shí)現);其次,將現有系統中待遷移職責的依賴(lài)切換到新服務(wù)。這個(gè)過(guò)程可以一次完成,也可以連續完成,這取決于職責的獨立程度和現有系統依賴(lài)管理的復雜程度。最后,從原創(chuàng )系統中刪除責任。以用戶(hù)管理職責為例,這個(gè)階段是將現有系統與用戶(hù)服務(wù)進(jìn)行整合,并將該職責從系統中移除。
5、遷移提示
了解了這三個(gè)階段之后,不難看出兩個(gè)階段之間的過(guò)渡是否高效、順暢、無(wú)障礙,對整個(gè)系統上云的遷移起到至關(guān)重要的作用。隨著(zhù)長(cháng)期遷移經(jīng)驗的積累,我們發(fā)現以下技巧可以幫助我們在整個(gè)遷移階段順利過(guò)渡。如圖 5 所示,在明確遷移職責后,Stencil+DevOps 可以幫助我們快速創(chuàng )建和部署云服務(wù)。原系統對接云服務(wù)后,可通過(guò)測試驅動(dòng)。對接后,監控可以為我們提供這個(gè)遷移周期。偉大的反饋開(kāi)始下一個(gè)遷移周期。讓我們也拿這個(gè) 網(wǎng)站@>
圖 5
提示 1:快速啟動(dòng):Stencil + devOps
如上所述,這個(gè)過(guò)程必須高效,即快速創(chuàng )建和部署新服務(wù)。只有這樣,我們才能使這個(gè)過(guò)程正?;?。我們該怎么做?我們采用了 Stencil+devOps。
Stencil 是一個(gè)服務(wù)模板,它可以幫助我們快速生成一個(gè)空服務(wù),包括一個(gè)遵循組織規范的目錄結構、標準的監控配置和接口、初始化的構建腳本等。使用 Stencil 的好處是可以快速創(chuàng )建一個(gè)組織標準化服務(wù)。服務(wù); devOps 用于服務(wù)部署、維護、持續集成和發(fā)布環(huán)境的建立。當然,它也遵循組織的標準規范。如下圖,模板主要由3部分組成:應用程序本身、部署腳本(AWS Cloudformation)、docker配置(用于構建)。
提示 2:測試:消費者驅動(dòng)的測試
當我們快速啟動(dòng)一個(gè)空服務(wù)時(shí),下一步是如何在兩個(gè)系統之間快速集成。系統間集成時(shí),基本上可以分為兩個(gè)小步驟:??定義新服務(wù)的接口+與現有系統對接的接口。定義一個(gè)服務(wù)接口可以是一個(gè)簡(jiǎn)單的過(guò)程,也可以是一個(gè)復雜的過(guò)程,這取決于原創(chuàng )系統中職責的復雜性。不管復雜與否,定義服務(wù)接口的過(guò)程都是一樣的——消費驅動(dòng)。不同于預先定義新服務(wù)的所有接口,它驅動(dòng)新服務(wù)根據消費者的需求提供合適的接口。當然,這里的消費者指的是現有的系統。
圖 6
從圖6可以看出,現有系統(即消費者)與新服務(wù)(即服務(wù))的集成過(guò)程是由兩組失敗+成功的測試,或兩組BDD組成的。首先是消費者端的 BDD。中間人扮演著(zhù)服務(wù)的角色,我們假設新服務(wù)的接口已經(jīng)按照消費者的要求實(shí)現了。這時(shí)候,由于消費者還沒(méi)有寫(xiě)完相應的代碼,我們會(huì )得到一個(gè)失敗,然后才是真正的編碼。當我們得到一個(gè)成功的測試,就意味著(zhù)消費者端的集成工作已經(jīng)完成;然后是服務(wù)端的 BDD。這時(shí),中間人就扮演了消費者的角色。該服務(wù)沒(méi)有定義預期的接口,所以我們會(huì )得到一個(gè)失敗的測試。編碼后,
提示 3:監控
在我們拆分原系統之前,所有模塊都集成到同一個(gè)系統中,對系統的監控是統一的。但是當我們將現有系統拆分成多個(gè)獨立的系統時(shí),如何保證新服務(wù)的良好運行,或者如何實(shí)時(shí)監控新服務(wù)的運行狀態(tài),對整個(gè)系統的穩定性非常重要。在實(shí)施監控時(shí),我們應該考慮以下幾個(gè)方面:
基于虛擬機節點(diǎn)整體監控系統資源
比如CPU利用率、硬盤(pán)讀寫(xiě)、內存利用率等,主要目的是檢查當前節點(diǎn)是否過(guò)載或空閑。過(guò)載意味著(zhù)資源不能滿(mǎn)足當前的流量。應增加節點(diǎn)并部署更多服務(wù)以適應大流量情況??臻e意味著(zhù)資源過(guò)剩,應減少節點(diǎn)以降低成本。
對服務(wù)整體進(jìn)行粗粒度監控
主要目的是檢查當前服務(wù)是否正在運行。如果檢測到該服務(wù)不可用,云負載均衡會(huì )根據預先配置刪除該服務(wù),并添加一個(gè)新的服務(wù)來(lái)填補空缺。也就是說(shuō),基于當前的架構,我們更愿意重建服務(wù)而不是修復不可用的服務(wù)。
監控所有服務(wù)的內部狀態(tài)
以上兩種監控都無(wú)法獲取到服務(wù)內部的運行狀態(tài),所以日志監控在這里顯得尤為重要,尤其是兩個(gè)系統之間集成的日志。通過(guò)監控系統日志,我們就有了監控系統內部邏輯的能力,有了這個(gè)能力,我們就可以跟蹤事故的發(fā)生,獲取關(guān)鍵信息來(lái)優(yōu)化服務(wù)。
總結
從傳統數據中心基礎設施遷移到云端是一個(gè)長(cháng)期的過(guò)程,可能還有很多未知的問(wèn)題在等著(zhù)我們,但我們發(fā)現同時(shí)也是一個(gè)重新認識現有系統的過(guò)程。在此期間,我們發(fā)現了一些規律。每個(gè)功能的遷移都有自己的特點(diǎn),同時(shí)又是相似的。這種相似性的提取是:識別、提取和整合。
查看全部
采集系統上云(互聯(lián)網(wǎng)系統圖一圖一是的遷移到云端,以便獲取這種能力
)
在互聯(lián)網(wǎng)大行其道的今天,毫不夸張地說(shuō),對市場(chǎng)的反應速度甚至將決定一家公司的生死存亡。我們的客戶(hù)(房地產(chǎn)垂直搜索平臺)就是這樣一家互聯(lián)網(wǎng)公司。為了縮短開(kāi)發(fā)周期,減少系統上市時(shí)間,我們將現有的基于傳統數據中心的基礎設施遷移到云端,以獲得這種能力。
在此之前,我們先來(lái)看看他們現有的系統。
1、現有系統

圖1
圖 1 是現有核心系統的簡(jiǎn)單抽象。我們維護三個(gè)業(yè)務(wù)線(xiàn)(這里指的是業(yè)務(wù)為主,有獨立的產(chǎn)品經(jīng)理、銷(xiāo)售團隊、獨立的結算團隊,以下簡(jiǎn)稱(chēng)LoB),每個(gè)業(yè)務(wù)線(xiàn)對應不同類(lèi)別的房產(chǎn)搜索網(wǎng)站@ >,如商業(yè)和住宅。User是一個(gè)用戶(hù)管理模塊,可以提供用戶(hù)管理、書(shū)簽和搜索管理;Location是一個(gè)定位模塊,根據用戶(hù)的搜索條件給出實(shí)際地址和相鄰地址;搜索引擎用于存儲所有信息并提供搜索功能??梢钥闯?,三個(gè)LoB雖然不同網(wǎng)站@>,但提供的服務(wù)卻是相似的。不僅,
基于以上原因,它們應該集成在一個(gè)系統中,但它們不是。這些業(yè)務(wù)線(xiàn)雖然有如此高的相似度,但在以下幾個(gè)方面卻大相徑庭:
由于不同的屬性有不同的搜索條件,所以部署時(shí)需要對不同的網(wǎng)站@>進(jìn)行不同的配置。
不同的樓盤(pán)有不同的目標市場(chǎng),需求決定了要開(kāi)發(fā)哪些特色,開(kāi)展哪些營(yíng)銷(xiāo)活動(dòng)。因此,每個(gè)業(yè)務(wù)線(xiàn)都有自己的銷(xiāo)售和開(kāi)發(fā)團隊,并根據市場(chǎng)變化開(kāi)發(fā)和發(fā)布相應的功能。計劃。
在圖1中,不同的顏色表示不同的流量級別,紅色表示最大流量,黃色表示中等流量,綠色表示較低流量。對于不同類(lèi)型的物業(yè),市場(chǎng)需求是不同的。
商業(yè)地產(chǎn)的目標客戶(hù)是需要開(kāi)展商業(yè)活動(dòng)的人,而住宅地產(chǎn)的目標客戶(hù)是希望為子女生活或提供更好教育機會(huì )的普通人。
2、商業(yè)愿景
了解了現有系統之后,再來(lái)看看他們的業(yè)務(wù)愿景,因為沒(méi)有一家公司的 IT 轉型是獨立于業(yè)務(wù)驅動(dòng)的,了解業(yè)務(wù)愿景有助于更清楚地了解遷移上云背后的原因。同時(shí),對云策略的適用場(chǎng)景也有了更直觀(guān)的認識。
這意味著(zhù)每個(gè)團隊都將是一個(gè)完全獨立的全功能團隊,擁有獨立的系統和獨立開(kāi)發(fā)、部署、運維、營(yíng)銷(xiāo)和銷(xiāo)售的能力。這為每個(gè)團隊提供了非常大的自主權,以及對業(yè)務(wù)擴展和收縮的非常好的適應能力。
這里所說(shuō)的效率主要是指IT生產(chǎn)活動(dòng)的效率。本質(zhì)上,他們是一家互聯(lián)網(wǎng)公司。如何提高IT系統的效率來(lái)支持業(yè)務(wù)的發(fā)展是他們看重的。比如提高人的效率,開(kāi)發(fā)、上線(xiàn)、測試、運維、在線(xiàn)反饋等等,全方面的效率。
中國可能是世界上最活躍的房地產(chǎn)市場(chǎng)之一。與此同時(shí),海外房地產(chǎn)投資在中國持續升溫。他們沒(méi)有理由錯過(guò)這個(gè)機會(huì ),不僅在德國、意大利和中國香港。
基于以上差異,圖1所示的系統架構顯然不能滿(mǎn)足客戶(hù)對業(yè)務(wù)愿景的實(shí)現。主要問(wèn)題如下:
由于這是一個(gè)集成了所有 LoB 的系統,因此業(yè)務(wù)線(xiàn)之間存在耦合。試想這個(gè)場(chǎng)景,LoB1已經(jīng)根據市場(chǎng)反饋完成了房產(chǎn)中介品牌的提升,希望在漲價(jià)前上線(xiàn),因為這將是漲價(jià)的合理理由。同時(shí),LoB2正在開(kāi)發(fā)新的頁(yè)面以滿(mǎn)足業(yè)主品牌的需求,但這個(gè)功能只開(kāi)發(fā)了一半。按照目前的模式,我們要等LoB2完成功能開(kāi)發(fā)后才能一起上線(xiàn),這樣就錯過(guò)了LoB1漲價(jià)的機會(huì ),下一個(gè)漲價(jià)窗口將在幾個(gè)月后。
通過(guò)流量監控,我們發(fā)現網(wǎng)站@>的流量并不是一成不變的。按年計算,網(wǎng)站@> 的流量會(huì )在圣誕節前下降到平時(shí)水平的 50% 左右,圣誕節后可能會(huì )上升到 50%。平均水平在200%左右,這么大的流量會(huì )持續一周左右。其實(shí)這種情況也不難理解,因為圣誕節期間大家都在放假,放假后還會(huì )有一波工作。從圖1我們也可以清楚的看到不同組件的不同流量。為了保證整體的響應速度,系統總是以較高的流量部署。但是,由于每個(gè) LoB 都不能獨立部署,因此浪費了資源。情況非常明顯。
我們之前提到了全球擴張計劃。他們想進(jìn)入中國市場(chǎng),所以需要設計一個(gè)獨立的網(wǎng)站@>給中國用戶(hù)提供住房。為國家房地產(chǎn)市場(chǎng)的擴張做準備,為了實(shí)現這個(gè)目標,我們需要IT基礎設施的支持,可以快速靈活地橫向擴張。但基于現有的數據中心模式,這將是一個(gè)痛苦的過(guò)程。
3、架構愿景
通過(guò)對原有IT架構的分析,我們發(fā)現很難支撐業(yè)務(wù)愿景的實(shí)現。因此,對于這樣的業(yè)務(wù)愿景,我們已經(jīng)勾勒出了一個(gè)能夠很好地支持業(yè)務(wù)愿景的 IT 架構愿景。
必須能夠根據業(yè)務(wù)線(xiàn)獨立運作
易于擴展或可擴展
解決從開(kāi)發(fā)到部署的所有問(wèn)題,開(kāi)發(fā)者更關(guān)注如何更快地交付功能,而不是各種環(huán)境問(wèn)題、部署問(wèn)題、發(fā)布問(wèn)題
提高資源利用率,根據不同流量情況自適應分配資源。
基于這個(gè)愿景,我們發(fā)現云平臺可以幫助我們實(shí)現這樣的IT愿景。圖 2 描述了系統上云后的架構。

圖二
一是所有業(yè)務(wù)線(xiàn)獨立運營(yíng),可以自主選擇何時(shí)發(fā)布上線(xiàn),選擇合適的SLA和資源以適應流量變化;其次,所有業(yè)務(wù)線(xiàn)共享的組件獨立于業(yè)務(wù)線(xiàn)。此外,它們分別部署和運行,還可以調整不同的資源以適應流量的變化。
4、遷移三部曲
在我們知道了現有系統的目標狀態(tài)之后,下一步就是如何實(shí)現這個(gè)目標。

圖 3
如圖3所示,在遷移上云時(shí),從現有系統遷移到目標系統的過(guò)程不是一次性的過(guò)程,也不是一次性的遷移,而是一個(gè)周期性的、持續的過(guò)程。是相關(guān)系統整合的結果。如果我們關(guān)注其中一個(gè)遷移周期,則該過(guò)程大致可以分為三個(gè)階段:
階段 1:識別
識別就是弄清楚要遷移的內容。
對于原來(lái)的集成系統來(lái)說(shuō),這個(gè)過(guò)程與聚合相反,就是對聚合的所有功能特征進(jìn)行分析和分解。本次活動(dòng)的目的是深入了解當前系統的職責。明確職責后,我們可以更好地確定哪些職責可以剝離、拆分、獨立。比如這個(gè)房產(chǎn)搜索網(wǎng)站@>,經(jīng)過(guò)識別發(fā)現我們的主要職責是:前端展示(桌面、手機)、房產(chǎn)搜索、搜索管理、用戶(hù)管理、地理位置查詢(xún)、并且還提供了部分API。識別完成后,我們要選擇從哪個(gè)職責開(kāi)始遷移。這個(gè)過(guò)程不是隨機的,而是基于現有的團隊能力,
我的建議是從簡(jiǎn)單且相對獨立的職責開(kāi)始。如果能同時(shí)支持業(yè)務(wù)發(fā)展,那就更好了。因為難度低,可以在遷移初期給團隊帶來(lái)信心和經(jīng)驗。隨著(zhù)遷移經(jīng)驗和信心的積累,那些高耦合、多依賴(lài)的職責可以輕松遷移。以這個(gè)房產(chǎn)搜索平臺為例,在遷移初期,我們選擇用戶(hù)管理職責進(jìn)行遷移,一方面是因為它比較簡(jiǎn)單,相對獨立,另一方面是因為它為我們提供了API支持。 iOS開(kāi)發(fā)。
第 2 階段:提取
在確定了系統職責并確定了要遷移的職責之后,是時(shí)候將該職責提取為獨立的云服務(wù)了。

圖 4
如上圖所示,這個(gè)階段的核心是將識別出的職責從原有系統中分離出來(lái),成為獨立的云服務(wù)。這個(gè)過(guò)程有幾點(diǎn)需要注意:創(chuàng )建快,需要多快?理想狀態(tài)是創(chuàng )建成功(空服)后上線(xiàn)(灰度發(fā)布)?;蛟S這個(gè)目標在遷移之初并不容易實(shí)現,但隨著(zhù)遷移信心和經(jīng)驗的積累,是完全可行的,當然這也是我們從簡(jiǎn)單且相對獨立的職責入手的另一個(gè)原因;為了快速部署,我們從一個(gè)空服務(wù)創(chuàng )建一個(gè)新服務(wù),這意味著(zhù)它可以做任何事情,除了在生產(chǎn)環(huán)境中運行。不。在這個(gè)階段,我們的目標是抽象出服務(wù)的兩個(gè)痛苦階段:創(chuàng )建和部署,
第三階段:整合
集成是將新的云服務(wù)與原有系統連接起來(lái)。
如果說(shuō)前兩個(gè)階段都是準備,那么這個(gè)階段就是實(shí)施遷移的過(guò)程??梢哉f(shuō)這是最重要的階段,因為這是新舊系統交付的時(shí)期。這個(gè)階段會(huì )有一些活動(dòng)。首先,確定新服務(wù)需要哪些外部接口,這需要對現有系統有更深入的了解(當然,如果接口比較簡(jiǎn)單,這一步也可以在提取階段實(shí)現);其次,將現有系統中待遷移職責的依賴(lài)切換到新服務(wù)。這個(gè)過(guò)程可以一次完成,也可以連續完成,這取決于職責的獨立程度和現有系統依賴(lài)管理的復雜程度。最后,從原創(chuàng )系統中刪除責任。以用戶(hù)管理職責為例,這個(gè)階段是將現有系統與用戶(hù)服務(wù)進(jìn)行整合,并將該職責從系統中移除。
5、遷移提示
了解了這三個(gè)階段之后,不難看出兩個(gè)階段之間的過(guò)渡是否高效、順暢、無(wú)障礙,對整個(gè)系統上云的遷移起到至關(guān)重要的作用。隨著(zhù)長(cháng)期遷移經(jīng)驗的積累,我們發(fā)現以下技巧可以幫助我們在整個(gè)遷移階段順利過(guò)渡。如圖 5 所示,在明確遷移職責后,Stencil+DevOps 可以幫助我們快速創(chuàng )建和部署云服務(wù)。原系統對接云服務(wù)后,可通過(guò)測試驅動(dòng)。對接后,監控可以為我們提供這個(gè)遷移周期。偉大的反饋開(kāi)始下一個(gè)遷移周期。讓我們也拿這個(gè) 網(wǎng)站@>

圖 5
提示 1:快速啟動(dòng):Stencil + devOps
如上所述,這個(gè)過(guò)程必須高效,即快速創(chuàng )建和部署新服務(wù)。只有這樣,我們才能使這個(gè)過(guò)程正?;?。我們該怎么做?我們采用了 Stencil+devOps。
Stencil 是一個(gè)服務(wù)模板,它可以幫助我們快速生成一個(gè)空服務(wù),包括一個(gè)遵循組織規范的目錄結構、標準的監控配置和接口、初始化的構建腳本等。使用 Stencil 的好處是可以快速創(chuàng )建一個(gè)組織標準化服務(wù)。服務(wù); devOps 用于服務(wù)部署、維護、持續集成和發(fā)布環(huán)境的建立。當然,它也遵循組織的標準規范。如下圖,模板主要由3部分組成:應用程序本身、部署腳本(AWS Cloudformation)、docker配置(用于構建)。
提示 2:測試:消費者驅動(dòng)的測試
當我們快速啟動(dòng)一個(gè)空服務(wù)時(shí),下一步是如何在兩個(gè)系統之間快速集成。系統間集成時(shí),基本上可以分為兩個(gè)小步驟:??定義新服務(wù)的接口+與現有系統對接的接口。定義一個(gè)服務(wù)接口可以是一個(gè)簡(jiǎn)單的過(guò)程,也可以是一個(gè)復雜的過(guò)程,這取決于原創(chuàng )系統中職責的復雜性。不管復雜與否,定義服務(wù)接口的過(guò)程都是一樣的——消費驅動(dòng)。不同于預先定義新服務(wù)的所有接口,它驅動(dòng)新服務(wù)根據消費者的需求提供合適的接口。當然,這里的消費者指的是現有的系統。

圖 6
從圖6可以看出,現有系統(即消費者)與新服務(wù)(即服務(wù))的集成過(guò)程是由兩組失敗+成功的測試,或兩組BDD組成的。首先是消費者端的 BDD。中間人扮演著(zhù)服務(wù)的角色,我們假設新服務(wù)的接口已經(jīng)按照消費者的要求實(shí)現了。這時(shí)候,由于消費者還沒(méi)有寫(xiě)完相應的代碼,我們會(huì )得到一個(gè)失敗,然后才是真正的編碼。當我們得到一個(gè)成功的測試,就意味著(zhù)消費者端的集成工作已經(jīng)完成;然后是服務(wù)端的 BDD。這時(shí),中間人就扮演了消費者的角色。該服務(wù)沒(méi)有定義預期的接口,所以我們會(huì )得到一個(gè)失敗的測試。編碼后,
提示 3:監控
在我們拆分原系統之前,所有模塊都集成到同一個(gè)系統中,對系統的監控是統一的。但是當我們將現有系統拆分成多個(gè)獨立的系統時(shí),如何保證新服務(wù)的良好運行,或者如何實(shí)時(shí)監控新服務(wù)的運行狀態(tài),對整個(gè)系統的穩定性非常重要。在實(shí)施監控時(shí),我們應該考慮以下幾個(gè)方面:
基于虛擬機節點(diǎn)整體監控系統資源

比如CPU利用率、硬盤(pán)讀寫(xiě)、內存利用率等,主要目的是檢查當前節點(diǎn)是否過(guò)載或空閑。過(guò)載意味著(zhù)資源不能滿(mǎn)足當前的流量。應增加節點(diǎn)并部署更多服務(wù)以適應大流量情況??臻e意味著(zhù)資源過(guò)剩,應減少節點(diǎn)以降低成本。
對服務(wù)整體進(jìn)行粗粒度監控

主要目的是檢查當前服務(wù)是否正在運行。如果檢測到該服務(wù)不可用,云負載均衡會(huì )根據預先配置刪除該服務(wù),并添加一個(gè)新的服務(wù)來(lái)填補空缺。也就是說(shuō),基于當前的架構,我們更愿意重建服務(wù)而不是修復不可用的服務(wù)。
監控所有服務(wù)的內部狀態(tài)
以上兩種監控都無(wú)法獲取到服務(wù)內部的運行狀態(tài),所以日志監控在這里顯得尤為重要,尤其是兩個(gè)系統之間集成的日志。通過(guò)監控系統日志,我們就有了監控系統內部邏輯的能力,有了這個(gè)能力,我們就可以跟蹤事故的發(fā)生,獲取關(guān)鍵信息來(lái)優(yōu)化服務(wù)。
總結
從傳統數據中心基礎設施遷移到云端是一個(gè)長(cháng)期的過(guò)程,可能還有很多未知的問(wèn)題在等著(zhù)我們,但我們發(fā)現同時(shí)也是一個(gè)重新認識現有系統的過(guò)程。在此期間,我們發(fā)現了一些規律。每個(gè)功能的遷移都有自己的特點(diǎn),同時(shí)又是相似的。這種相似性的提取是:識別、提取和整合。
采集系統上云(loki就是云原生下日志的采集方案)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 140 次瀏覽 ? 2022-01-15 08:13
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還是有問(wèn)題的,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log 的日志,也可能只想要采集.json 的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,和grafana一樣
Prometheus已經(jīng)是云原生監控的事實(shí)標準,開(kāi)發(fā)、運維更加熟悉,降低學(xué)習成本
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷? 查看全部
采集系統上云(loki就是云原生下日志的采集方案)
一、常規玩ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把 采集器 稍微改一下
Fluentd 可以由 EFK 組成。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還在
elasticsearch這一套。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也極其昂貴,elasticsearch
全文索引方式對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG
是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。格拉法納
您將熟悉它,一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而loki就是我們今天要講的主角,這也是grafana
家品,promtail 是 loki 采集器 的官方日志。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。并使用普羅米修斯
類(lèi)似標簽的想法,可以用grafana進(jìn)行可視化,無(wú)論是思維還是使用都非?!霸圃?。
(二) ♂? 兒子 Promtail
促銷(xiāo)
是loki的官方日志采集器,自己的代碼在loki
在項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)無(wú)非就是根據模式找到文件為采集,然后像tail一樣監聽(tīng)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail
同理,上述類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式都是開(kāi)放穩定的規范,promtail可以提前對它們進(jìn)行更深層次的分析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 找到文件
作為一個(gè)采集器,第一步就是找出文件在哪里,然后就可以做如下采集、標簽推送等功能了。普通靜態(tài)類(lèi)型的日志很容易找到??梢灾苯悠ヅ淠阍谂渲梦募袑?xiě)的路徑信息,比如
promtail中的路徑為“/var/log/*.log”,即/var/log目錄下所有以.log結尾的后綴文件都可以作為采集的對象。取而代之的是 采集
k8s模式下的登錄就麻煩一些了。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
文件類(lèi)型日志
這自然仍然在您的自定義路徑上。如果路徑目錄未掛載,則它在容器內。如果掛載在host或者pv上,那么host和pv
這種類(lèi)型的日志promtail不能動(dòng)態(tài)發(fā)現,必須手動(dòng)設置。
標準輸出日志
這種日志其實(shí)是k8s推薦的日志輸出方式。這種日志其實(shí)就是我們日常使用的kubectl日志。
你看到的日志,這些日志在主機上的存儲路徑如下/var/log/pods/
{namespace}_/{pod_id}_UUID/{container_name}/*.log 格式
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還是有問(wèn)題的,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉普羅米修斯
同學(xué)們一定已經(jīng)配置好prometheus、kubernetes_sd_configs和relabel_configs的服務(wù)發(fā)現配置。
這里promtail直接介紹prometheus的代碼。與 prometheus 不同,prometheus 向對象請求更多資源,例如 node、ingress、pod 和 deployment。
以此類(lèi)推,最后拼接的就是metric的request url,promtail請求的對象就是pod,把不在host上的pod過(guò)濾掉。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。既然這個(gè)目錄已經(jīng)掛載到容器中了,那么promtail
您可以將容器的標簽與容器的日志相關(guān)聯(lián)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
洛基
官方推薦的最佳實(shí)踐是使用 DamonSet 部署 promtail,
/var/lib/pods 目錄在 prometheus 的幫助下掛載在容器內
服務(wù)發(fā)現機制對日志進(jìn)行動(dòng)態(tài)標記,資源占用和部署維護難度都非常低。這也是主流的云原生日志采集范式。
三、數據棧日志實(shí)踐
(一) 數據棧日志要求
全局 grep
根據關(guān)鍵字搜索系統中的所有出現
快速定位日志
根據機器名、ip、服務(wù)名等條件快速定位日志
主機和云原生統一技術(shù)棧
降低使用學(xué)習成本并降低系統復雜性
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后為整個(gè)集群部署一組服務(wù)器loki
帶有可視化側grafana。
promtail 使用 static_configs 來(lái)定義 采集 日志。但promtail
畢竟還是太年輕,定位偏向云原生,所以宿主機的功能還不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在,并且內容量很大,promtail
啟動(dòng)會(huì )從頭開(kāi)始推送文件的內容,這會(huì )導致短時(shí)間內大量的日志被推送到loki。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型,但是數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí)存在很多限制,導致demoset模型無(wú)法使用。最大的挑戰是權限。只有一個(gè)
命名空間權限,無(wú)法掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇damonset
模式部署或sidecar模式部署,demoset模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模型相比,為了適用更嚴格的交付條件,我們選擇采用
邊車(chē)的模式執行采集。
邊車(chē)
該模式是在部署時(shí)自動(dòng)為每個(gè)服務(wù)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。數據卷采集下的日志。
1、promtail如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓日志Container和Master
容器共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還不知道采集有哪些日志,以及它們的標簽是什么。
因為你可能只想要采集.log 的日志,也可能只想要采集.json 的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
促銷(xiāo)
在 v2.10 中添加了一個(gè)新功能
,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后把服務(wù)的logpath設置成環(huán)境變量,比如LOG_PATH=/var/log/commonlog/* .log
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建時(shí)通過(guò)環(huán)境變量注入,podid
這些環(huán)境變量是使用k8s的向下api注入的。
注意:此處不提供使用 promtail
服務(wù)發(fā)現機制配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod
的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。無(wú)需將主機 /var/log/pods 目錄掛載到 promtail
,即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)日志
集裝箱人工操作過(guò)于繁瑣,不利于維護。對原創(chuàng )服務(wù)進(jìn)行抽象最好的方法是注冊一個(gè)CRD,然后寫(xiě)k8s
操作員列出并監視此類(lèi)型的對象。在創(chuàng )建對象時(shí),它會(huì )動(dòng)態(tài)注入一個(gè) LogContainer,以及相應的環(huán)境變量,并為其掛載一個(gè)公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
四、總結
(一) 數據棧日志采集優(yōu)勢
一套日志聚合分析框架,解決主機和云原生場(chǎng)景,降低系統復雜度
日志可視化使用grafana,可視化效果更好,和grafana一樣
Prometheus已經(jīng)是云原生監控的事實(shí)標準,開(kāi)發(fā)、運維更加熟悉,降低學(xué)習成本
loki 查詢(xún)語(yǔ)法簡(jiǎn)單但功能強大
與ELK相比,更輕量級
(二)??未來(lái)規劃
目前使用的是sidecar模式,占用資源較多,后續會(huì )考慮進(jìn)一步優(yōu)化。
loki 分布式部署優(yōu)化
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
采集系統上云(【github社區】數棧是云原生—站式數據中臺PaaS)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 202 次瀏覽 ? 2022-01-13 05:10
本文整理自:淺談云原生系統日志采集在數據棧中的實(shí)踐
DataStack 是云原生的一站式數據中心 PaaS。我們在github上有一個(gè)有趣的開(kāi)源項目:FlinkX,歡迎給我們一個(gè)star!星星!星星!
FlinkX 是一個(gè)基于 Flink 的批量流統一數據同步工具。不僅可以采集靜態(tài)數據,比如MySQL、HDFS等,還可以采集實(shí)時(shí)變化的數據,比如MySQL binlog、Kafka等,是一個(gè)數據同步引擎它集成了全局、異構和批處理流。有興趣的請來(lái)github社區和我們一起玩~
?
一、常規打ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把采集器改成Fluentd,組成EFK。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還是elasticsearch。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也非常昂貴。Elasticsearch使用全文索引,對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。您將熟悉 grafana,這是一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而洛基就是我們今天要講的主角。這也是grafana的產(chǎn)物,promtail是loki 采集器的官方log。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
?
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ?♂? 兒子 Promtail
promtail 是 loki 采集器 的官方日志,它自己的代碼在 loki 項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)是根據模式找到要為采集的文件,然后像tail一樣監聽(tīng)一個(gè)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail。上述情況也是如此。類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式是開(kāi)放且穩定的規范,promtail可以提前更深入的解析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式查找文件,首先要找出文件在哪里,然后進(jìn)行采集、標簽推送等功能。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與prometheus不同,prometheus向對象請求更多的資源,比如node、ingress、pod、deployment等。最后拼接的是metric的請求url,promtail請求的對象就是pod,過(guò)濾掉不在那個(gè)上面的pod主持人。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
loki官方推薦的最佳實(shí)踐是使用DamonSet部署promtail,將節點(diǎn)的/var/lib/pods目錄掛載到容器中,并借助prometheus的服務(wù)發(fā)現機制動(dòng)態(tài)給日志添加標簽,無(wú)論是是資源占用。部署和維護的程度和難度都非常低。這也是主流的云原生日志采集范式。
?
三、數據棧日志實(shí)踐
(一) 堆棧日志要求
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail會(huì )從頭開(kāi)始推送文件的內容,這樣會(huì )導致大量日志被推送到loki中短時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
?
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。只能使用一種命名空間權限。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
?
1、? promtail 如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓logContainer和Master Container共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還是不知道哪些日志到采集,它們的什么標簽是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
Promtail 在 v2.10 中增加了一個(gè)新特性,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后用服務(wù)的logpath作為環(huán)境變量的方式來(lái)設置,比如LOG_PATH=/var/log/commonlog/*。日志
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建的時(shí)候是通過(guò)環(huán)境變量注入的,而這些環(huán)境變量podid是使用k8s的向下api注入的。
注意:這里不能使用promtail的服務(wù)發(fā)現機制來(lái)配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。主機/var/log/pods目錄未掛載到promtail時(shí),即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、?如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)Log Container,手動(dòng)做起來(lái)太麻煩,也不利于維護。最好的方法是將原創(chuàng )服務(wù)抽象為注冊一個(gè)CRD,然后編寫(xiě)k8s算子來(lái)list & watch該類(lèi)型的對象。創(chuàng )建對象時(shí),動(dòng)態(tài)注入一個(gè)LogContainer,以及對應的環(huán)境變量并掛載。公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
?
四、總結
(一) 數據棧日志采集優(yōu)勢
(二)??未來(lái)規劃
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
? 查看全部
采集系統上云(【github社區】數棧是云原生—站式數據中臺PaaS)
本文整理自:淺談云原生系統日志采集在數據棧中的實(shí)踐
DataStack 是云原生的一站式數據中心 PaaS。我們在github上有一個(gè)有趣的開(kāi)源項目:FlinkX,歡迎給我們一個(gè)star!星星!星星!
FlinkX 是一個(gè)基于 Flink 的批量流統一數據同步工具。不僅可以采集靜態(tài)數據,比如MySQL、HDFS等,還可以采集實(shí)時(shí)變化的數據,比如MySQL binlog、Kafka等,是一個(gè)數據同步引擎它集成了全局、異構和批處理流。有興趣的請來(lái)github社區和我們一起玩~
?
一、常規打ELK
說(shuō)到日志采集,估計大家首先想到的就是ELK,一個(gè)比較成熟的方案。如果是專(zhuān)門(mén)針對云原生的,那就把采集器改成Fluentd,組成EFK。其實(shí)以上兩種方案沒(méi)有本質(zhì)區別,采集器只是一個(gè)變化。最終的存儲、查詢(xún)等還是elasticsearch。
Elasticsearch 確實(shí)功能豐富,功能非常強大,但也非常昂貴。Elasticsearch使用全文索引,對存儲和內存的要求比較高,這些代價(jià)得到的功能在日常日志管理中并不常用。這些缺點(diǎn)在主機模式下其實(shí)是可以容忍的,但在云原生模式下就顯得臃腫了。
二、別說(shuō)武德PLG
PLG是promtail+loki+grafana的統稱(chēng),是一個(gè)非常適合云原生日志的采集方案。您將熟悉 grafana,這是一個(gè)支持多種數據源的出色可視化框架。最常見(jiàn)的是將prometheus的數據可視化。而洛基就是我們今天要講的主角。這也是grafana的產(chǎn)物,promtail是loki 采集器的官方log。
與elk相比,這套解決方案非常輕量級,功能強大且易于使用。另外,在顯示上使用grafana,減少視覺(jué)框架的引入,在顯示終端上的統一也有利于用戶(hù)。
(一) 記錄暴發(fā)戶(hù) loki
?
Loki 是一個(gè)受 Prometheus 啟發(fā)的水平可擴展、高可用的多租戶(hù)日志聚合系統。它被設計成具有成本效益且易于操作。它不索引日志的內容,而是為每個(gè)日志流設置一組標簽。
與其他日志聚合系統相比,Loki
沒(méi)有日志的全文索引。通過(guò)存儲壓縮的非結構化日志和僅索引元數據,Loki 更易于操作且運行成本更低。
使用與 Prometheus 相同的標簽對日志流進(jìn)行索引和分組,使您能夠使用與 Prometheus 相同的標簽在指標和日志之間無(wú)縫切換。
特別適合存儲 Kubernetes Pod 日志。Pod 標簽等元數據會(huì )被自動(dòng)爬取和索引。
Grafana 原生支持(需要 Grafana v6.0 或更高版本)。
這是GitHub上對loki的介紹??梢钥闯鲞@是一個(gè)為云原生構建的輕量級日志聚合系統。社區目前非?;钴S。而且它采用了類(lèi)prometheus標簽的思路,與grafana連接,進(jìn)行可視化展示。無(wú)論是想法還是使用都非?!霸圃?。
(二) ?♂? 兒子 Promtail
promtail 是 loki 采集器 的官方日志,它自己的代碼在 loki 項目中。本機支持日志、系統日志、文件和 docker 類(lèi)型日志。采集器的本質(zhì)是根據模式找到要為采集的文件,然后像tail一樣監聽(tīng)一個(gè)文件,然后將寫(xiě)入文件的內容發(fā)送到存儲端promtail。上述情況也是如此。類(lèi)型的本質(zhì)也是文件,但這些類(lèi)型文件的格式是開(kāi)放且穩定的規范,promtail可以提前更深入的解析和封裝。
(三) Promtail 服務(wù)發(fā)現
1、 以采集器的形式查找文件,首先要找出文件在哪里,然后進(jìn)行采集、標簽推送等功能。普通靜態(tài)類(lèi)型的日志很容易找到。你可以直接匹配你在配置文件中寫(xiě)的路徑信息。例如promtail中的路徑是“/var/log/*.log”,表示/var/log目錄下的所有文件,以.log結尾的后綴文件可以作為采集@的對象>。采集 k8s 模式登錄稍微麻煩一些。
首先我們想一想k8s上運行的服務(wù)的日志在哪里?
所以我們需要在 k8s 容器內掛載 /var/log/pods 作為主機路徑,以便 promtail 可以訪(fǎng)問(wèn)這些日志。
2、 標記
日志promtail可以訪(fǎng)問(wèn),但是如何區分這些日志還有一個(gè)問(wèn)題,loki使用了類(lèi)似prometheus的思路來(lái)標注數據。也就是說(shuō),如果日志是用 pod 打標簽的,那么僅僅依靠這條路徑自然是無(wú)法知道 pod 上的標簽信息是什么。這就是服務(wù)發(fā)現的用武之地。
promtail的服務(wù)發(fā)現直接由prometheus的服務(wù)發(fā)現來(lái)完成。熟悉prometheus的同學(xué)一定配置過(guò)prometheus的服務(wù)發(fā)現配置,kubernetes_sd_configs和relabel_configs。
這里promtail直接介紹prometheus的代碼。與prometheus不同,prometheus向對象請求更多的資源,比如node、ingress、pod、deployment等。最后拼接的是metric的請求url,promtail請求的對象就是pod,過(guò)濾掉不在那個(gè)上面的pod主持人。
獲取到宿主機的pod信息后,根據namespace和pod的id拼接路徑。由于這個(gè)目錄已經(jīng)掛載到容器中,promtail可以將容器的標簽和容器的日志關(guān)聯(lián)起來(lái)。剩下的就是監控和推送。
?。ㄋ模?PLG 最佳實(shí)踐
loki官方推薦的最佳實(shí)踐是使用DamonSet部署promtail,將節點(diǎn)的/var/lib/pods目錄掛載到容器中,并借助prometheus的服務(wù)發(fā)現機制動(dòng)態(tài)給日志添加標簽,無(wú)論是是資源占用。部署和維護的程度和難度都非常低。這也是主流的云原生日志采集范式。
?
三、數據棧日志實(shí)踐
(一) 堆棧日志要求
(二)?主機模式
數據棧主機模式日志聚合采用類(lèi)似于PLG DameonSet的模式。每個(gè)主機部署一個(gè)promtail,然后將一組服務(wù)器端loki和視覺(jué)端grafana部署到整個(gè)集群。
promtail 使用 static_configs 來(lái)定義 采集 日志。不過(guò)promtail畢竟還太年輕,而且定位偏向云原生,所以對于宿主機的功能并不完善,所以我們做了一些二次開(kāi)發(fā)來(lái)滿(mǎn)足我們的需求:
1、logtail 模式
本機 promtail 不支持從文件末尾采集。promtail啟動(dòng)時(shí)會(huì )推送所有被監控文件的內容,這在云原生中問(wèn)題不大。
在host模式下,如果要監控的日志已經(jīng)存在并且內容量很大,promtail會(huì )從頭開(kāi)始推送文件的內容,這樣會(huì )導致大量日志被推送到loki中短時(shí)間。失敗。
所以最好的辦法就是有一個(gè)類(lèi)似filebeat的logtail模式,只在服務(wù)啟動(dòng)后推送文件寫(xiě)入的日志。
在這個(gè)地方,我們進(jìn)行了二次開(kāi)發(fā),增加了logtail模式的開(kāi)關(guān)。如果開(kāi)關(guān)為true,則第一次啟動(dòng)promtail時(shí)不會(huì )從頭開(kāi)始推送日志。
2、path 支持多路徑
原生promtail不支持多路徑路徑參數,只能寫(xiě)一個(gè)表達式,但實(shí)際需求可能是同時(shí)看業(yè)務(wù)日志和gc日志。
但它們又是屬于同一類(lèi)別的標簽。單一路徑的匹配不能同時(shí)涵蓋兩者。不更改代碼的解決方案是為其編寫(xiě)另一個(gè)目標。
這既乏味又不利于維護。所以我們在這里也對其進(jìn)行了二次開(kāi)發(fā)。
?
(三) 云原生模式
傳統的云原生模型采用PLG的主流模型。但是,當數據棧作為一個(gè)完整的系統交付給企業(yè)時(shí),存在很多限制,這會(huì )導致demoset模型無(wú)法使用。最大的挑戰是許可。只能使用一種命名空間權限。掛載 /var/lib/pods
在這種情況下如何使用 PLG?
其實(shí)主要的變化就是promtail的使用。這里首先要聲明的是,數據棧服務(wù)的日志全部輸出到文件中。
首先是選擇是部署在damonset模式還是sidecar模式。演示模式的優(yōu)點(diǎn)是節省資源,缺點(diǎn)是需要權限。與sidecar模式相比,為了應用更嚴格的交付條件,我們?yōu)椴杉x擇使用sidecar模式。
sidecar 模式是在每個(gè)服務(wù)部署的時(shí)候自動(dòng)添加一個(gè)日志容器。容器和服務(wù)容器共同掛載一個(gè)共同的空數據卷。服務(wù)容器將日志寫(xiě)入數據卷,日志容器采集將數據卷下的日志寫(xiě)入。
?
1、? promtail 如何動(dòng)態(tài)配置數據棧中的標簽
通過(guò)sidecar模式,我們讓logContainer和Master Container共享一個(gè)日志目錄,這樣就可以在promtail容器中獲取日志文件,但是promtail還是不知道哪些日志到采集,它們的什么標簽是。
因為你可能只想要采集.log的日志,也可能只想要采集.json的日志,或者兩個(gè)服務(wù)的配置可能不一樣,所以不能寫(xiě)死,那么如何解決這個(gè)問(wèn)題呢?
Promtail 在 v2.10 中增加了一個(gè)新特性,即可以在配置文件中引用環(huán)境變量。通過(guò)這個(gè)特性,我們可以把promtail的path參數寫(xiě)成${LOG_PATH},然后用服務(wù)的logpath作為環(huán)境變量的方式來(lái)設置,比如LOG_PATH=/var/log/commonlog/*。日志
由于我們可以在服務(wù)創(chuàng )建時(shí)通過(guò)環(huán)境變量設置路徑,所以也可以動(dòng)態(tài)設置標簽。那么我們都需要什么維度標簽呢?這家不同的公司肯定有不同的維度,但必須遵循的一個(gè)原則是可以唯一標識吊艙。大體維度有deployment、podid、node等,這些標簽在創(chuàng )建的時(shí)候是通過(guò)環(huán)境變量注入的,而這些環(huán)境變量podid是使用k8s的向下api注入的。
注意:這里不能使用promtail的服務(wù)發(fā)現機制來(lái)配置標簽,因為promtail的服務(wù)發(fā)現原理是請求APIServer獲取所有pod的標簽。然后使用路徑匹配將標簽與日志相關(guān)聯(lián)。主機/var/log/pods目錄未掛載到promtail時(shí),即使獲取到標簽,也無(wú)法與日志關(guān)聯(lián)。
2、?如何在數據棧中部署promtail
為每個(gè)服務(wù)添加一個(gè)Log Container,手動(dòng)做起來(lái)太麻煩,也不利于維護。最好的方法是將原創(chuàng )服務(wù)抽象為注冊一個(gè)CRD,然后編寫(xiě)k8s算子來(lái)list & watch該類(lèi)型的對象。創(chuàng )建對象時(shí),動(dòng)態(tài)注入一個(gè)LogContainer,以及對應的環(huán)境變量并掛載。公共目錄。
因此,當創(chuàng )建 CR 時(shí),promtail 作為 sidecar 注入。并且讀取的環(huán)境變量是操作者動(dòng)態(tài)設置的環(huán)境變量,非常靈活。
?
四、總結
(一) 數據棧日志采集優(yōu)勢
(二)??未來(lái)規劃
最后跟大家分享一下數據棧當前日志模塊的可視化效果。是不是超級酷?
?
采集系統上云(新網(wǎng)站要想快速引流,理由如下更多IP不容易被封)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 161 次瀏覽 ? 2022-01-13 05:07
新網(wǎng)站為了快速吸引流量,需要時(shí)刻保持頁(yè)面和網(wǎng)站的整體內容更新。中小站長(cháng)經(jīng)常單獨工作,有的甚至只是在業(yè)余時(shí)間賺點(diǎn)外快,很難保證這一點(diǎn)。更新率高,雖然有巧妙的辦法手動(dòng)更新,或者運行采集工具,現在很多網(wǎng)站采集在云服務(wù)器上,而且大部分云服務(wù)器都是單IP的,所以采集 的進(jìn)程很可能被反采集 工具或防火墻阻止。因此,建議在中國大陸使用采集網(wǎng)站。>內容方面,可以考慮選擇香港多IP服務(wù)器,原因如下
多IP不容易被封
雖然市面上有很多采集工具集成了IP模擬系統,但是虛擬IP畢竟是虛擬的,所以特征比較明顯,很容易被防火墻或者反采集攻擊,在運行采集工具的時(shí)候一般沒(méi)有時(shí)間長(cháng)時(shí)間監聽(tīng)網(wǎng)站的內容,所以很多時(shí)候采集失敗我也不知道,而當我發(fā)現時(shí),網(wǎng)站可能會(huì )更新太多的空內容很難刪除,而如果是收錄的話(huà),整個(gè)站點(diǎn)基本就廢了,多IP服務(wù)器本身就是一個(gè)專(zhuān)屬固定IP,被封的可能性低
高性能采集更穩定
很多多IP服務(wù)器多用于站群服務(wù),所以硬件配置比較高?,F在,市場(chǎng)上有很多 采集 工具,如果它們針對的是單個(gè) 網(wǎng)站。臺中配置的VPS是可以的,但是一旦采集的目標站點(diǎn)太多,很可能采集在采集的過(guò)程中不成功或者內容分發(fā)失敗. 多IP服務(wù)器專(zhuān)為多線(xiàn)程任務(wù)打造,抗壓能力強。即便是多任務(wù)同時(shí)運行,釋放采集,也完全可以承受負載。
直達專(zhuān)線(xiàn)采集更高效
在設置采集服務(wù)器時(shí),目標網(wǎng)站的延遲打開(kāi)速度非常重要,這也是為什么作者一直強調采集@中網(wǎng)站的內容>大陸地區最好選擇香港服務(wù)器,因為香港離中國大陸比較近,所以線(xiàn)路延遲低,而且還支持CN2直連網(wǎng)絡(luò )。對于一些不僅需要采集文字還需要采集圖片甚至短視頻的用戶(hù)來(lái)說(shuō)非常適合
如果要全自動(dòng)采集,自然要選擇專(zhuān)業(yè)的服務(wù)商。例如USA-IDC香港機房可以提供24小時(shí)在線(xiàn)技術(shù)支持。聯(lián)系24小時(shí)客服了解更多詳情
原創(chuàng )內容,禁止轉載!侵權必究! 查看全部
采集系統上云(新網(wǎng)站要想快速引流,理由如下更多IP不容易被封)
新網(wǎng)站為了快速吸引流量,需要時(shí)刻保持頁(yè)面和網(wǎng)站的整體內容更新。中小站長(cháng)經(jīng)常單獨工作,有的甚至只是在業(yè)余時(shí)間賺點(diǎn)外快,很難保證這一點(diǎn)。更新率高,雖然有巧妙的辦法手動(dòng)更新,或者運行采集工具,現在很多網(wǎng)站采集在云服務(wù)器上,而且大部分云服務(wù)器都是單IP的,所以采集 的進(jìn)程很可能被反采集 工具或防火墻阻止。因此,建議在中國大陸使用采集網(wǎng)站。>內容方面,可以考慮選擇香港多IP服務(wù)器,原因如下
多IP不容易被封
雖然市面上有很多采集工具集成了IP模擬系統,但是虛擬IP畢竟是虛擬的,所以特征比較明顯,很容易被防火墻或者反采集攻擊,在運行采集工具的時(shí)候一般沒(méi)有時(shí)間長(cháng)時(shí)間監聽(tīng)網(wǎng)站的內容,所以很多時(shí)候采集失敗我也不知道,而當我發(fā)現時(shí),網(wǎng)站可能會(huì )更新太多的空內容很難刪除,而如果是收錄的話(huà),整個(gè)站點(diǎn)基本就廢了,多IP服務(wù)器本身就是一個(gè)專(zhuān)屬固定IP,被封的可能性低

高性能采集更穩定
很多多IP服務(wù)器多用于站群服務(wù),所以硬件配置比較高?,F在,市場(chǎng)上有很多 采集 工具,如果它們針對的是單個(gè) 網(wǎng)站。臺中配置的VPS是可以的,但是一旦采集的目標站點(diǎn)太多,很可能采集在采集的過(guò)程中不成功或者內容分發(fā)失敗. 多IP服務(wù)器專(zhuān)為多線(xiàn)程任務(wù)打造,抗壓能力強。即便是多任務(wù)同時(shí)運行,釋放采集,也完全可以承受負載。

直達專(zhuān)線(xiàn)采集更高效
在設置采集服務(wù)器時(shí),目標網(wǎng)站的延遲打開(kāi)速度非常重要,這也是為什么作者一直強調采集@中網(wǎng)站的內容>大陸地區最好選擇香港服務(wù)器,因為香港離中國大陸比較近,所以線(xiàn)路延遲低,而且還支持CN2直連網(wǎng)絡(luò )。對于一些不僅需要采集文字還需要采集圖片甚至短視頻的用戶(hù)來(lái)說(shuō)非常適合
如果要全自動(dòng)采集,自然要選擇專(zhuān)業(yè)的服務(wù)商。例如USA-IDC香港機房可以提供24小時(shí)在線(xiàn)技術(shù)支持。聯(lián)系24小時(shí)客服了解更多詳情


原創(chuàng )內容,禁止轉載!侵權必究!
采集系統上云(微服務(wù)架構下日志采集運維管理分析的解決方案(組圖))
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 158 次瀏覽 ? 2022-01-03 12:09
簡(jiǎn)介:阿里云日志服務(wù)(SLS)結合Kubernetes日志的特點(diǎn)和應用場(chǎng)景,提供了容器微服務(wù)應用環(huán)境中全方位的日志采集、處理和分析實(shí)踐。直接最佳實(shí)踐:[微服務(wù)架構日志采集運維管理最佳實(shí)踐]
最佳實(shí)踐頻道:[最佳實(shí)踐頻道]
企業(yè)云遷移有很多最佳實(shí)踐。我們從典型場(chǎng)景出發(fā),提供一系列項目實(shí)踐方案,在滿(mǎn)足您需求的同時(shí),降低企業(yè)上云的門(mén)檻! Kubernetes 日志系統的重要性
微服務(wù)的云原生可觀(guān)察性的一個(gè)重要標準是日志記錄。日志采集、存儲和分析是構建現代系統平臺的關(guān)鍵支柱之一,可以幫助團隊診斷問(wèn)題、追溯質(zhì)量、監控系統運行效率。在容器/Kubernetes技術(shù)熱潮的今天,日志系統對于Kubernetes也起到了非常關(guān)鍵的作用。對于 Devops、運維、安全等,都離不開(kāi)完整、多樣、有效的日志采集、存儲管理和分析。 , 由下圖可見(jiàn)。
微服務(wù)架構下的日志采集運維管理挑戰
眾所周知,借助容器/Kubernetes技術(shù)在微服務(wù)落地過(guò)程中,相比物理機、VM在應用部署、應用交付等環(huán)節,為用戶(hù)提供了更簡(jiǎn)單、更輕便、性?xún)r(jià)比更高的優(yōu)勢,而用戶(hù)在應用容器/Kubernetes技術(shù)向微服務(wù)轉化的過(guò)程中,也有容器化應用/非容器化應用的混合部署。對于基于VM或者物理機部署的應用,log采集相關(guān)技術(shù)比較完善,如Logstash、Fluentd、FileBeats等,但是當應用容器化時(shí),尤其是基于Kubenetes的微服務(wù)應用部署時(shí)cluster、Log 采集運維給用戶(hù)帶來(lái)了很多挑戰,主要原因有:
阿里云Kubernetes日志采集方案
基于以上分析,阿里云的日志服務(wù)產(chǎn)品解決了基于Kubernetes實(shí)現應用微服務(wù)改造過(guò)程中用戶(hù)日志采集運維管理的需求和痛點(diǎn),結合阿里巴巴的優(yōu)勢Cloud結合云產(chǎn)品,提出一站式日志采集運維管理分析解決方案,提供強大的日志處理分析能力,如PB級日志實(shí)時(shí)查詢(xún)、日志聚類(lèi)分析、Ingress日志分析報告、日志分析功能、上下游生態(tài)對接等能力,為用戶(hù)提供一站式的日志采集容器/Kubernetes技術(shù)落地應用微服務(wù)轉型過(guò)程中的運維管理能力。
采集 方法對比如下表所示。
從上表可以看出,native方法比較弱,一般不建議在生產(chǎn)系統中使用; DameonSet方法的資源占用要小得多,但其擴展性和租戶(hù)隔離性有限,更適合單一功能或集群不多的業(yè)務(wù); SideCar方式占用資源較多,但靈活,多租戶(hù)隔離性強。對于大型Kubernetes集群或者作為PAAS平臺服務(wù)多個(gè)業(yè)務(wù)方的集群,推薦使用這種方式。通常我們可以這樣進(jìn)行采集部署建議:
總結
本文介紹了基于Kubernetes的應用微服務(wù)改造過(guò)程中的日志采集以及運維管理方案。限于篇幅,本文無(wú)法一一介紹具體的實(shí)現建議和更多的特性。請詳細閱讀阿里云官網(wǎng)最佳實(shí)踐頻道微服務(wù)架構日志采集運維管理最佳實(shí)踐
原文鏈接: 查看全部
采集系統上云(微服務(wù)架構下日志采集運維管理分析的解決方案(組圖))
簡(jiǎn)介:阿里云日志服務(wù)(SLS)結合Kubernetes日志的特點(diǎn)和應用場(chǎng)景,提供了容器微服務(wù)應用環(huán)境中全方位的日志采集、處理和分析實(shí)踐。直接最佳實(shí)踐:[微服務(wù)架構日志采集運維管理最佳實(shí)踐]
最佳實(shí)踐頻道:[最佳實(shí)踐頻道]
企業(yè)云遷移有很多最佳實(shí)踐。我們從典型場(chǎng)景出發(fā),提供一系列項目實(shí)踐方案,在滿(mǎn)足您需求的同時(shí),降低企業(yè)上云的門(mén)檻! Kubernetes 日志系統的重要性
微服務(wù)的云原生可觀(guān)察性的一個(gè)重要標準是日志記錄。日志采集、存儲和分析是構建現代系統平臺的關(guān)鍵支柱之一,可以幫助團隊診斷問(wèn)題、追溯質(zhì)量、監控系統運行效率。在容器/Kubernetes技術(shù)熱潮的今天,日志系統對于Kubernetes也起到了非常關(guān)鍵的作用。對于 Devops、運維、安全等,都離不開(kāi)完整、多樣、有效的日志采集、存儲管理和分析。 , 由下圖可見(jiàn)。

微服務(wù)架構下的日志采集運維管理挑戰
眾所周知,借助容器/Kubernetes技術(shù)在微服務(wù)落地過(guò)程中,相比物理機、VM在應用部署、應用交付等環(huán)節,為用戶(hù)提供了更簡(jiǎn)單、更輕便、性?xún)r(jià)比更高的優(yōu)勢,而用戶(hù)在應用容器/Kubernetes技術(shù)向微服務(wù)轉化的過(guò)程中,也有容器化應用/非容器化應用的混合部署。對于基于VM或者物理機部署的應用,log采集相關(guān)技術(shù)比較完善,如Logstash、Fluentd、FileBeats等,但是當應用容器化時(shí),尤其是基于Kubenetes的微服務(wù)應用部署時(shí)cluster、Log 采集運維給用戶(hù)帶來(lái)了很多挑戰,主要原因有:

阿里云Kubernetes日志采集方案
基于以上分析,阿里云的日志服務(wù)產(chǎn)品解決了基于Kubernetes實(shí)現應用微服務(wù)改造過(guò)程中用戶(hù)日志采集運維管理的需求和痛點(diǎn),結合阿里巴巴的優(yōu)勢Cloud結合云產(chǎn)品,提出一站式日志采集運維管理分析解決方案,提供強大的日志處理分析能力,如PB級日志實(shí)時(shí)查詢(xún)、日志聚類(lèi)分析、Ingress日志分析報告、日志分析功能、上下游生態(tài)對接等能力,為用戶(hù)提供一站式的日志采集容器/Kubernetes技術(shù)落地應用微服務(wù)轉型過(guò)程中的運維管理能力。

采集 方法對比如下表所示。

從上表可以看出,native方法比較弱,一般不建議在生產(chǎn)系統中使用; DameonSet方法的資源占用要小得多,但其擴展性和租戶(hù)隔離性有限,更適合單一功能或集群不多的業(yè)務(wù); SideCar方式占用資源較多,但靈活,多租戶(hù)隔離性強。對于大型Kubernetes集群或者作為PAAS平臺服務(wù)多個(gè)業(yè)務(wù)方的集群,推薦使用這種方式。通常我們可以這樣進(jìn)行采集部署建議:
總結
本文介紹了基于Kubernetes的應用微服務(wù)改造過(guò)程中的日志采集以及運維管理方案。限于篇幅,本文無(wú)法一一介紹具體的實(shí)現建議和更多的特性。請詳細閱讀阿里云官網(wǎng)最佳實(shí)踐頻道微服務(wù)架構日志采集運維管理最佳實(shí)踐
原文鏈接:
采集系統上云(瀉藥、apigooglesearchteam估計不樂(lè )意答1、google的衛星信號)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 154 次瀏覽 ? 2022-01-02 04:02
采集系統上云本身是個(gè)不錯的想法,能否采集準確和完整是由上述兩個(gè)基礎條件決定的。最有效的提高準確率的方法是搭建一個(gè)全球的gps接入平臺,利用接入平臺覆蓋的全球基站來(lái)提高服務(wù)的精度。
瀉藥、api
googlesearchteam估計不樂(lè )意答
1、google的衛星。不光有不同的,還有個(gè)非常復雜的位置信息服務(wù)器,數據一般是下發(fā)給各地google的地面節點(diǎn),地面節點(diǎn)進(jìn)行定位。2、云平臺,或者阿里云騰訊云等,
api
如果只是考慮用戶(hù)使用api,那么找個(gè)第三方提供的服務(wù)商就好了。如果是考慮在各地覆蓋衛星,想更精確一些,現在的做法通常有兩種,一種是準備多塊地面基站,前者的方案一般要犧牲一點(diǎn)gps的準確度來(lái)達到可靠的要求,而在國內可能成本偏高,在全球覆蓋上或許有難度,我知道的地面基站覆蓋大部分是以l1為芯片的芯片,成本上會(huì )低一些,但是受制于芯片集成度的要求,導致的gps環(huán)境下偶爾會(huì )有一點(diǎn)的誤差;另一種方案,就是gps芯片外掛一塊全球導航系統接入平臺的芯片,先用rs接入gps,再由各接入平臺接入衛星位置的導航信息,同樣的也有衛星覆蓋量的要求,成本會(huì )比衛星覆蓋導航系統接入平臺低很多。
說(shuō)的跟nokia下放多少gps衛星信號一樣,就算有,裝上各種moviebar拉低來(lái)電顯示色差也是很正常的。 查看全部
采集系統上云(瀉藥、apigooglesearchteam估計不樂(lè )意答1、google的衛星信號)
采集系統上云本身是個(gè)不錯的想法,能否采集準確和完整是由上述兩個(gè)基礎條件決定的。最有效的提高準確率的方法是搭建一個(gè)全球的gps接入平臺,利用接入平臺覆蓋的全球基站來(lái)提高服務(wù)的精度。
瀉藥、api
googlesearchteam估計不樂(lè )意答
1、google的衛星。不光有不同的,還有個(gè)非常復雜的位置信息服務(wù)器,數據一般是下發(fā)給各地google的地面節點(diǎn),地面節點(diǎn)進(jìn)行定位。2、云平臺,或者阿里云騰訊云等,
api
如果只是考慮用戶(hù)使用api,那么找個(gè)第三方提供的服務(wù)商就好了。如果是考慮在各地覆蓋衛星,想更精確一些,現在的做法通常有兩種,一種是準備多塊地面基站,前者的方案一般要犧牲一點(diǎn)gps的準確度來(lái)達到可靠的要求,而在國內可能成本偏高,在全球覆蓋上或許有難度,我知道的地面基站覆蓋大部分是以l1為芯片的芯片,成本上會(huì )低一些,但是受制于芯片集成度的要求,導致的gps環(huán)境下偶爾會(huì )有一點(diǎn)的誤差;另一種方案,就是gps芯片外掛一塊全球導航系統接入平臺的芯片,先用rs接入gps,再由各接入平臺接入衛星位置的導航信息,同樣的也有衛星覆蓋量的要求,成本會(huì )比衛星覆蓋導航系統接入平臺低很多。
說(shuō)的跟nokia下放多少gps衛星信號一樣,就算有,裝上各種moviebar拉低來(lái)電顯示色差也是很正常的。
采集系統上云(云采集平臺的安全加密技術(shù)應該做得很到位!)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 172 次瀏覽 ? 2021-12-23 08:02
采集系統上云之后,軟件已經(jīng)全部兼容,不再需要單獨搭建測試網(wǎng),平臺也已經(jīng)完全搭建好了,不用安裝。平臺也有了服務(wù)器和公網(wǎng)ip,私有部署也方便。
云采集會(huì )讓采集效率提高,數據的準確性可以保證,但是同時(shí)采集也會(huì )造成一些負面影響。如果需要打碼或者采集網(wǎng)站第三方ip可以考慮找一下達摩云采集,采集效率高、節省上傳時(shí)間,采集到的數據準確性都是100%,而且還帶代碼,可以直接用vba+word+excel采集。
沒(méi)錯,只要你的網(wǎng)站用的是穩定的公網(wǎng)ip,就不需要花錢(qián)去買(mǎi)云采集服務(wù)了?,F在大部分采集系統都會(huì )有云采集功能,以我了解到的型號,如果上傳網(wǎng)站二三十萬(wàn)數據量,用速度不如本地采集。一般正規的第三方服務(wù)都會(huì )對用戶(hù)進(jìn)行身份驗證和賬號登錄驗證,其實(shí)就是防止外人拿了你網(wǎng)站你就上傳數據,這個(gè)時(shí)候對接對口云采集提供的云采集,在速度和安全性都會(huì )有保障。
云采集平臺就是和你一樣用個(gè)人二級域名(baiduspider)上傳網(wǎng)站數據,并不是用阿里云之類(lèi)的大公司的云采集服務(wù),但是所有的后期的數據接入工作和驗證,云采集平臺都會(huì )做好,不需要二次采集和后期數據維護,因為服務(wù)是系統對接的,所以不存在多個(gè)域名上傳被殺,而且云采集在采集完一個(gè)網(wǎng)站數據后就會(huì )自動(dòng)合并到其他網(wǎng)站,跟傳統方式效率差不多。
至于云采集會(huì )不會(huì )造成用戶(hù)信息泄露的問(wèn)題,目前的安全加密技術(shù)應該做得很到位,因為云采集平臺本身就是收費的。我一個(gè)朋友曾經(jīng)被人通過(guò)云采集數據的方式盜用了微信位置,網(wǎng)站等,所以用這些不是最好的方式,關(guān)鍵是要謹慎,要理性消費。 查看全部
采集系統上云(云采集平臺的安全加密技術(shù)應該做得很到位!)
采集系統上云之后,軟件已經(jīng)全部兼容,不再需要單獨搭建測試網(wǎng),平臺也已經(jīng)完全搭建好了,不用安裝。平臺也有了服務(wù)器和公網(wǎng)ip,私有部署也方便。
云采集會(huì )讓采集效率提高,數據的準確性可以保證,但是同時(shí)采集也會(huì )造成一些負面影響。如果需要打碼或者采集網(wǎng)站第三方ip可以考慮找一下達摩云采集,采集效率高、節省上傳時(shí)間,采集到的數據準確性都是100%,而且還帶代碼,可以直接用vba+word+excel采集。
沒(méi)錯,只要你的網(wǎng)站用的是穩定的公網(wǎng)ip,就不需要花錢(qián)去買(mǎi)云采集服務(wù)了?,F在大部分采集系統都會(huì )有云采集功能,以我了解到的型號,如果上傳網(wǎng)站二三十萬(wàn)數據量,用速度不如本地采集。一般正規的第三方服務(wù)都會(huì )對用戶(hù)進(jìn)行身份驗證和賬號登錄驗證,其實(shí)就是防止外人拿了你網(wǎng)站你就上傳數據,這個(gè)時(shí)候對接對口云采集提供的云采集,在速度和安全性都會(huì )有保障。
云采集平臺就是和你一樣用個(gè)人二級域名(baiduspider)上傳網(wǎng)站數據,并不是用阿里云之類(lèi)的大公司的云采集服務(wù),但是所有的后期的數據接入工作和驗證,云采集平臺都會(huì )做好,不需要二次采集和后期數據維護,因為服務(wù)是系統對接的,所以不存在多個(gè)域名上傳被殺,而且云采集在采集完一個(gè)網(wǎng)站數據后就會(huì )自動(dòng)合并到其他網(wǎng)站,跟傳統方式效率差不多。
至于云采集會(huì )不會(huì )造成用戶(hù)信息泄露的問(wèn)題,目前的安全加密技術(shù)應該做得很到位,因為云采集平臺本身就是收費的。我一個(gè)朋友曾經(jīng)被人通過(guò)云采集數據的方式盜用了微信位置,網(wǎng)站等,所以用這些不是最好的方式,關(guān)鍵是要謹慎,要理性消費。
采集系統上云(黑科技的云蛛系統,您的數據中心展現工作了嗎? )
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 189 次瀏覽 ? 2021-12-23 05:04
)
黑科技的云蜘蛛系統,一經(jīng)問(wèn)世,便博得了陣陣掌聲。雖然主打數據可視化,但是很多用戶(hù)都在問(wèn)你會(huì )不會(huì )做大數據處理產(chǎn)品,就像很多用戶(hù)眼中的黑科技——神測數據。如果你出來(lái),我們就可以解決我們整個(gè)數據流的問(wèn)題。
對于大數據的處理,云蜘蛛系統肯定是必不可少的,但具體的開(kāi)發(fā)日期還沒(méi)有最終確定。不過(guò),鑒于用戶(hù)的強烈需求,蛛網(wǎng)時(shí)代終于將大數據處理工具的開(kāi)發(fā)提上了日程,并將其命名為DataCenter。為什么叫數據中心?這意味著(zhù),對于您數據中心的所有處理,Yunspula 系統可以為您解決所有問(wèn)題。
有了DataCenter+AutoBI+DataView,你的整個(gè)數據分析系統就可以完全搭建起來(lái),而且極其簡(jiǎn)單。DataCenter會(huì )做數據采集、傳輸、處理的工作,而AutoBI會(huì )做你的數據報表的工作,DataView會(huì )做你的大屏展示的工作。一起使用效果好嗎?
DataCenter使用自己的agent采集相關(guān)數據,然后采集到Kafka集群中進(jìn)行數據清洗。Kafka集群作為高可靠傳輸,還需要進(jìn)行高性能算法去重計算,然后數據通過(guò)轉換層進(jìn)入數據倉庫或者hadoop集群,這就是整個(gè)ETL過(guò)程,也是作業(yè)天祿系統。之后就是調度-北斗系統的工作。它將根據依賴(lài)關(guān)系計算數據索引。日指數計算未完成,月指數計算無(wú)法完成。如果指標計算錯誤,手動(dòng)觸發(fā)任務(wù)計算,是否會(huì )觸發(fā)下游任務(wù)一起計算... 整個(gè)核心都會(huì )體現在調度-北斗系統完善中。HDFS數據通過(guò)調度計算吐到Hbase,數據倉庫通過(guò)ODS層計算進(jìn)入表示層,分布式查詢(xún)ES……這些都是市面上最好的技術(shù),或者你能想到的查詢(xún)方式。DataCenter 為您完成這一切。
之后,就是DataView和AutoBI大顯身手的時(shí)候了。這兩條產(chǎn)品線(xiàn)不僅可以支持傳統的關(guān)系型數據庫,沒(méi)有sql的數據庫,比如redis、mongodb等,都支持,包括ES、rest等服務(wù)接口。因為是定制模式,只要現有技術(shù)可以實(shí)現,這兩條產(chǎn)品線(xiàn)就會(huì )為你實(shí)現,你不需要為了適應這兩條產(chǎn)品線(xiàn)而傳輸數據。所有Yunspula 系統都適合您。好的。因為是公司的產(chǎn)品,兼容性還行!
這個(gè)怎么樣?DataCenter可以說(shuō)是大數據處理行業(yè)的黑科技。并且整套流程都是黑箱的,您只需要在網(wǎng)頁(yè)中配置您的業(yè)務(wù),其余系統會(huì )自動(dòng)為您處理。AutoBI和DataView作為其老大哥,將黑科技理念貫徹到了全面、無(wú)縫集成、完美展示、多維度分析……你能想到的所有需求,都來(lái)幫你呈現。這是海泰云蜘蛛系統提供的一套大數據解決方案!
查看全部
采集系統上云(黑科技的云蛛系統,您的數據中心展現工作了嗎?
)
黑科技的云蜘蛛系統,一經(jīng)問(wèn)世,便博得了陣陣掌聲。雖然主打數據可視化,但是很多用戶(hù)都在問(wèn)你會(huì )不會(huì )做大數據處理產(chǎn)品,就像很多用戶(hù)眼中的黑科技——神測數據。如果你出來(lái),我們就可以解決我們整個(gè)數據流的問(wèn)題。
對于大數據的處理,云蜘蛛系統肯定是必不可少的,但具體的開(kāi)發(fā)日期還沒(méi)有最終確定。不過(guò),鑒于用戶(hù)的強烈需求,蛛網(wǎng)時(shí)代終于將大數據處理工具的開(kāi)發(fā)提上了日程,并將其命名為DataCenter。為什么叫數據中心?這意味著(zhù),對于您數據中心的所有處理,Yunspula 系統可以為您解決所有問(wèn)題。
有了DataCenter+AutoBI+DataView,你的整個(gè)數據分析系統就可以完全搭建起來(lái),而且極其簡(jiǎn)單。DataCenter會(huì )做數據采集、傳輸、處理的工作,而AutoBI會(huì )做你的數據報表的工作,DataView會(huì )做你的大屏展示的工作。一起使用效果好嗎?
DataCenter使用自己的agent采集相關(guān)數據,然后采集到Kafka集群中進(jìn)行數據清洗。Kafka集群作為高可靠傳輸,還需要進(jìn)行高性能算法去重計算,然后數據通過(guò)轉換層進(jìn)入數據倉庫或者hadoop集群,這就是整個(gè)ETL過(guò)程,也是作業(yè)天祿系統。之后就是調度-北斗系統的工作。它將根據依賴(lài)關(guān)系計算數據索引。日指數計算未完成,月指數計算無(wú)法完成。如果指標計算錯誤,手動(dòng)觸發(fā)任務(wù)計算,是否會(huì )觸發(fā)下游任務(wù)一起計算... 整個(gè)核心都會(huì )體現在調度-北斗系統完善中。HDFS數據通過(guò)調度計算吐到Hbase,數據倉庫通過(guò)ODS層計算進(jìn)入表示層,分布式查詢(xún)ES……這些都是市面上最好的技術(shù),或者你能想到的查詢(xún)方式。DataCenter 為您完成這一切。
之后,就是DataView和AutoBI大顯身手的時(shí)候了。這兩條產(chǎn)品線(xiàn)不僅可以支持傳統的關(guān)系型數據庫,沒(méi)有sql的數據庫,比如redis、mongodb等,都支持,包括ES、rest等服務(wù)接口。因為是定制模式,只要現有技術(shù)可以實(shí)現,這兩條產(chǎn)品線(xiàn)就會(huì )為你實(shí)現,你不需要為了適應這兩條產(chǎn)品線(xiàn)而傳輸數據。所有Yunspula 系統都適合您。好的。因為是公司的產(chǎn)品,兼容性還行!
這個(gè)怎么樣?DataCenter可以說(shuō)是大數據處理行業(yè)的黑科技。并且整套流程都是黑箱的,您只需要在網(wǎng)頁(yè)中配置您的業(yè)務(wù),其余系統會(huì )自動(dòng)為您處理。AutoBI和DataView作為其老大哥,將黑科技理念貫徹到了全面、無(wú)縫集成、完美展示、多維度分析……你能想到的所有需求,都來(lái)幫你呈現。這是海泰云蜘蛛系統提供的一套大數據解決方案!
采集系統上云(從采集系統上云的區別來(lái)簡(jiǎn)單分析兩者之間的區別)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 142 次瀏覽 ? 2021-12-20 05:06
采集系統上云已經(jīng)成為現在市場(chǎng)上最熱門(mén)的趨勢,很多公司都已經(jīng)會(huì )使用終端采集系統。大家在對采集系統進(jìn)行認識的過(guò)程中,會(huì )對一些具體的術(shù)語(yǔ)不知道如何去理解,下面我就從采集系統上云和傳統采集系統的區別來(lái)簡(jiǎn)單分析一下兩者之間的區別。采集系統上云有幾個(gè)方面的意義:首先是拓展產(chǎn)品線(xiàn),其次是傳統采集系統體驗上線(xiàn),增加系統維護服務(wù),更安全便捷。
所以第一個(gè)意義就是拓展產(chǎn)品線(xiàn),是提高整個(gè)公司產(chǎn)品線(xiàn)的豐富性,第二個(gè)就是提高我們整個(gè)公司的服務(wù)能力,第三個(gè)還提升我們公司的安全和便捷性。1、傳統采集系統采集系統上云的最終目的是提升效率,加快我們產(chǎn)品的速度,也就是說(shuō)我們再做內部業(yè)務(wù),首先要做的就是流程化的規范流程。這個(gè)我們采集系統要提供完整的服務(wù),使客戶(hù)在初始就能建立起一個(gè)安全、便捷的大數據的采集庫。
我們都清楚,企業(yè)在選擇大數據采集系統的時(shí)候,有幾個(gè)主要的考慮因素:一個(gè)是考慮成本,另外一個(gè)就是快速,第三個(gè)就是功能,那我們從這三個(gè)角度進(jìn)行比較,先考慮成本。采集系統要快速,讓客戶(hù)體驗快速,不僅僅是我們要做好內部業(yè)務(wù)和流程規范,而且我們還要更快的擴展產(chǎn)品,我們還要把系統做到全產(chǎn)品覆蓋,無(wú)論是做公司互聯(lián)網(wǎng)還是it安全相關(guān),都不能將我們公司的業(yè)務(wù)全部做到統一。
我們的生態(tài)是龐大的。采集系統是一個(gè)全產(chǎn)品覆蓋的一個(gè)系統,涵蓋了互聯(lián)網(wǎng),電信,物聯(lián)網(wǎng)和it安全等。2、采集系統上云的第二個(gè)意義,一旦建立起來(lái),我們后面只需要加大維護和售后服務(wù)力度,就能夠支撐以后的業(yè)務(wù)??蛻?hù)永遠需要有一個(gè)印象,上云之后的公司,我們解決了什么問(wèn)題,不上云我們會(huì )遇到什么問(wèn)題。做到第二個(gè)意義,我們要從客戶(hù)的角度出發(fā),我們才能夠把軟件有些原本解決不了的問(wèn)題講清楚,這樣客戶(hù)能更好的去選擇我們。
這就涉及到如何采集系統上云和一般產(chǎn)品上云,所表達的不同的不同意義了。我想大家也清楚,選擇做大數據采集系統是不同的,有人會(huì )選擇跟別人合作一起做,也有人會(huì )一個(gè)人自己做。傳統大數據采集系統可能在市場(chǎng)推廣的時(shí)候是有點(diǎn)困難,一般情況下我們沒(méi)有比較好的推廣方式,可能相關(guān)大數據廠(chǎng)商會(huì )持續在給你更新他們的產(chǎn)品,但是這些更新產(chǎn)品可能不一定適合客戶(hù)。
不一定符合客戶(hù)未來(lái)對的需求。而采集系統上云后,我們可以采用軟件開(kāi)放性推廣??梢园巡杉到y上云后的所有數據都可以共享,完全可以告訴用戶(hù),我們完全可以實(shí)現采集系統化,幫客戶(hù)節省成本,采集系統的下一步是大數據。關(guān)注微信公眾號:tzy_installer,獲取更多技術(shù)干貨。 查看全部
采集系統上云(從采集系統上云的區別來(lái)簡(jiǎn)單分析兩者之間的區別)
采集系統上云已經(jīng)成為現在市場(chǎng)上最熱門(mén)的趨勢,很多公司都已經(jīng)會(huì )使用終端采集系統。大家在對采集系統進(jìn)行認識的過(guò)程中,會(huì )對一些具體的術(shù)語(yǔ)不知道如何去理解,下面我就從采集系統上云和傳統采集系統的區別來(lái)簡(jiǎn)單分析一下兩者之間的區別。采集系統上云有幾個(gè)方面的意義:首先是拓展產(chǎn)品線(xiàn),其次是傳統采集系統體驗上線(xiàn),增加系統維護服務(wù),更安全便捷。
所以第一個(gè)意義就是拓展產(chǎn)品線(xiàn),是提高整個(gè)公司產(chǎn)品線(xiàn)的豐富性,第二個(gè)就是提高我們整個(gè)公司的服務(wù)能力,第三個(gè)還提升我們公司的安全和便捷性。1、傳統采集系統采集系統上云的最終目的是提升效率,加快我們產(chǎn)品的速度,也就是說(shuō)我們再做內部業(yè)務(wù),首先要做的就是流程化的規范流程。這個(gè)我們采集系統要提供完整的服務(wù),使客戶(hù)在初始就能建立起一個(gè)安全、便捷的大數據的采集庫。
我們都清楚,企業(yè)在選擇大數據采集系統的時(shí)候,有幾個(gè)主要的考慮因素:一個(gè)是考慮成本,另外一個(gè)就是快速,第三個(gè)就是功能,那我們從這三個(gè)角度進(jìn)行比較,先考慮成本。采集系統要快速,讓客戶(hù)體驗快速,不僅僅是我們要做好內部業(yè)務(wù)和流程規范,而且我們還要更快的擴展產(chǎn)品,我們還要把系統做到全產(chǎn)品覆蓋,無(wú)論是做公司互聯(lián)網(wǎng)還是it安全相關(guān),都不能將我們公司的業(yè)務(wù)全部做到統一。
我們的生態(tài)是龐大的。采集系統是一個(gè)全產(chǎn)品覆蓋的一個(gè)系統,涵蓋了互聯(lián)網(wǎng),電信,物聯(lián)網(wǎng)和it安全等。2、采集系統上云的第二個(gè)意義,一旦建立起來(lái),我們后面只需要加大維護和售后服務(wù)力度,就能夠支撐以后的業(yè)務(wù)??蛻?hù)永遠需要有一個(gè)印象,上云之后的公司,我們解決了什么問(wèn)題,不上云我們會(huì )遇到什么問(wèn)題。做到第二個(gè)意義,我們要從客戶(hù)的角度出發(fā),我們才能夠把軟件有些原本解決不了的問(wèn)題講清楚,這樣客戶(hù)能更好的去選擇我們。
這就涉及到如何采集系統上云和一般產(chǎn)品上云,所表達的不同的不同意義了。我想大家也清楚,選擇做大數據采集系統是不同的,有人會(huì )選擇跟別人合作一起做,也有人會(huì )一個(gè)人自己做。傳統大數據采集系統可能在市場(chǎng)推廣的時(shí)候是有點(diǎn)困難,一般情況下我們沒(méi)有比較好的推廣方式,可能相關(guān)大數據廠(chǎng)商會(huì )持續在給你更新他們的產(chǎn)品,但是這些更新產(chǎn)品可能不一定適合客戶(hù)。
不一定符合客戶(hù)未來(lái)對的需求。而采集系統上云后,我們可以采用軟件開(kāi)放性推廣??梢园?strong>采集系統上云后的所有數據都可以共享,完全可以告訴用戶(hù),我們完全可以實(shí)現采集系統化,幫客戶(hù)節省成本,采集系統的下一步是大數據。關(guān)注微信公眾號:tzy_installer,獲取更多技術(shù)干貨。
采集系統上云( 阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
采集交流 ? 優(yōu)采云 發(fā)表了文章 ? 0 個(gè)評論 ? 188 次瀏覽 ? 2021-12-16 21:20
阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
11月23日,阿里正式開(kāi)源了可觀(guān)察數據采集器iLogtail。作為阿里巴巴內部可觀(guān)察數據采集的基礎設施,iLogtail承載了阿里巴巴集團的工作以及螞蟻的日志、監控、trace、事件等可觀(guān)察數據采集。iLogtail 運行在服務(wù)器、容器、K8s、嵌入式等多種環(huán)境中,支持采集數百個(gè)可觀(guān)察數據。已經(jīng)有數千萬(wàn)的安裝量,并且每天有 采集 數十 PB 的數據可用。觀(guān)察數據廣泛應用于在線(xiàn)監控、問(wèn)題分析/定位、運行分析、安全分析等各種場(chǎng)景。
一個(gè) iLogtail 和可觀(guān)察性
可觀(guān)察性并不是一個(gè)新概念,而是從IT系統中的監控、故障排除、穩定性構建、運行分析、BI、安全分析等逐步演化而來(lái)。與傳統監控相比,可觀(guān)察性是核心進(jìn)化是采集盡可能多的可觀(guān)察數據以達到白盒的目的。iLogtail的核心定位是可觀(guān)察數據的采集器,可以采集盡可能多的采集各類(lèi)可觀(guān)察數據,幫助可觀(guān)察平臺打造各種上層應用場(chǎng)景。
2. 阿里巴巴可觀(guān)察數據采集的挑戰
對于可觀(guān)察數據采集,有很多開(kāi)源代理,比如Logstash、Filebeats、Fluentd、Collectd、Telegraf等,這些代理的功能非常豐富,這些代理和一些擴展的組合基本可以滿(mǎn)足各種內部數據采集的要求。但由于性能、穩定性、控制等關(guān)鍵挑戰不盡人意,我們最終選擇進(jìn)行自研:
1、資源消耗:目前阿里有上百萬(wàn)臺主機(物理機/虛擬機/容器),每天產(chǎn)生幾十PB的可觀(guān)察數據,降低每1M的內存和每1M/s的性能。改善對于我們的資源節約來(lái)說(shuō)是巨大的,節約的成本可能是幾百萬(wàn)甚至幾千萬(wàn)。目前很多開(kāi)源代理的設計更注重功能而不是性能,改造現有的開(kāi)源代理基本不可行。例如:
開(kāi)源Agents單核處理性能一般在2-10M/s左右,我們希望有性能可以達到100M/s。采集目標增加,數據量增加,采集延遲,服務(wù)器異常。在這種情況下,開(kāi)源代理內存將呈現爆發(fā)式增長(cháng),我們希望即使在各種環(huán)境下,內存也能處于較低的水位。開(kāi)源代理的資源消耗無(wú)法控制。只能通過(guò)cgroups強制限制。效果就是一直OOM重啟,數據一直上不來(lái)采集。并且我們希望在指定了 CPU、內存、流量等資源限制后,Agent 可以一直在這個(gè)限制內正常工作。
2、穩定性:穩定性是一個(gè)永恒的話(huà)題,數據的穩定性采集,除了保證數據本身的準確性采集,還要保證采集的Agent @采集 不能影響業(yè)務(wù)應用,否則影響將是災難性的。至于穩定性建設,除了Agent本身的基本穩定性外,還有很多目前開(kāi)源Agents還沒(méi)有提供的特性:
Agent自恢復:Agent在遇到關(guān)鍵事件后可以自動(dòng)恢復,提供進(jìn)程自身、父子進(jìn)程、守護進(jìn)程等多個(gè)維度的自恢復能力。全球多維監控:可以從全球視角監控不同版本。不同采集配置、不同壓力、不同區域/網(wǎng)絡(luò )等屬性的Agent的穩定性問(wèn)題。問(wèn)題隔離:作為Agent,無(wú)論問(wèn)題如何出現,都需要盡可能地隔離問(wèn)題。比如有多個(gè)采集配置,一個(gè)配置有問(wèn)題,不能影響其他配置;代理本身有問(wèn)題,不能影響機器上應用進(jìn)程的穩定性?;貪L能力:
3、Controllable:可觀(guān)察數據的應用范圍很廣。幾乎所有的業(yè)務(wù)、運維、BI、安全等部門(mén)都會(huì )用到它,各種數據都會(huì )在一臺機器上生成。同一臺機器產(chǎn)生的數據也會(huì )被多個(gè)部門(mén)的人使用。例如,在 2018 年,我們計算出平均而言,一個(gè)虛擬機上有 100 多種不同類(lèi)型的數據。采集,設計了10多個(gè)不同部門(mén)的人想要使用這些數據。除了這些,還有很多其他的企業(yè)級功能需要支持,比如:
遠程管理配置:在大規模場(chǎng)景下,手動(dòng)登錄機器修改配置基本上是不可能的。因此,需要一套配置圖形化管理、遠程存儲、自動(dòng)投遞機制,并且必須能夠區分不同的應用和差異。地區、不同歸屬方等信息。同時(shí),由于涉及到遠程配置的動(dòng)態(tài)加載和卸載,Agent也需要能夠保證在配置Reload過(guò)程中數據不丟失或者不重現。采集配置優(yōu)先級:當一臺機器上運行多個(gè)采集配置時(shí),如果遇到資源不足的情況,需要區分每個(gè)不同的配置優(yōu)先級,并且資源優(yōu)先給高優(yōu)先級的配置,同時(shí)要保證低優(yōu)先級的配置不被“餓死”。降級和恢復能力:在阿里,大促和秒殺是家常便飯。在這個(gè)高峰期,很多不重要的應用可能會(huì )被降級,相應的應用數據也需要降級。降級后,早高峰過(guò)后,需要有足夠的Burst能力快速追趕。完整數據采集完整性:監控、數據分析等場(chǎng)景需要數據的準確性。數據準確的前提是可以采集及時(shí)到服務(wù)器,但是如何判斷每臺機器,每個(gè)文件采集的數據已經(jīng)到達了對應的時(shí)間點(diǎn),
基于以上背景和挑戰,我們從 2013 年開(kāi)始逐步優(yōu)化和改進(jìn) iLogtail 以解決性能、穩定性、可控性等問(wèn)題,并經(jīng)歷了多次 double十一、double十二、 的測試春晚紅包等物品。目前iLogtail支持Logs、Traces、Metrics等多種數據的統一采集。核心功能如下:
支持多種Logs, Traces, Metrics數據采集,特別是容器和Kubernetes環(huán)境,數據非常友好采集 資源消耗極低,單核采集容量100M/s,對比對類(lèi)似Observable數據采集的Agent性能提高5-20倍,穩定性高。它用于阿里巴巴和數以萬(wàn)計的阿里云客戶(hù)的生產(chǎn)。部署量接近1000萬(wàn)。每天采集幾十PB可用觀(guān)測數據支持插件擴展,數據可任意擴展采集,處理、聚合、發(fā)送模塊支持遠程配置管理,支持圖形化、SDK配置管理、K8s Operator等,可以輕松管理百萬(wàn)臺機器的數據采集 支持自我監控、流量控制、資源控制、主動(dòng)告警、采集統計等高級管控功能。iLogtail的三大發(fā)展歷程
秉承阿里人簡(jiǎn)約的特點(diǎn),iLogtail的命名也很簡(jiǎn)單。我們一開(kāi)始就期望有一個(gè)統一的工具來(lái)記錄Tail,所以叫Logtail。添加“i”的原因主要是當時(shí)使用了inotify技術(shù)。, 可以在毫秒級別控制日志采集的延遲,所以最后稱(chēng)為iLogtail。從2013年開(kāi)始,iLogtail的整個(gè)發(fā)展過(guò)程大致可以分為三個(gè)階段,分別是飛天5K階段、阿里集團階段和云原生階段。
1個(gè)飛天5K舞臺
作為中國云計算領(lǐng)域的里程碑,2013年8月15日,阿里巴巴集團正式運營(yíng)5000(5K)服務(wù)器規模的“飛天”集群,成為國內首家自主研發(fā)大型云計算的企業(yè)。 - 規模的通用計算平臺。全球首家對外提供5K云計算服務(wù)能力的公司。
飛天5K項目始于2009年,從最初的30臺逐步發(fā)展到5000臺,不斷解決系統的規模、穩定性、運維、容災等核心問(wèn)題。這個(gè)階段iLogtail誕生的時(shí)候,是從5000臺機器的監控、問(wèn)題分析、定位(現在稱(chēng)為“可觀(guān)察性”)開(kāi)始的。在從 30 到 5000 的飛躍中,可觀(guān)察到的問(wèn)題面臨諸多挑戰,包括單機瓶頸、問(wèn)題復雜性、故障排除的難易程度和管理復雜性。
在5K階段,iLogtail本質(zhì)上解決了單機、小規模集群到大規模運維監控的挑戰。iLogtail現階段的主要特點(diǎn)是:
<p>功能:實(shí)時(shí)日志,監控采集,日志捕獲延遲毫秒級性能:?jiǎn)魏颂幚砟芰?0M/s,5000集群平均資源占用0.5% CPU核心可靠性:自動(dòng)監控新文件,新建文件夾,支持文件輪換,處理網(wǎng)絡(luò )中斷管理:遠程Web管理,自動(dòng)配置文件分發(fā)運維:加入群yum源,運行狀態(tài)監控,異常自動(dòng)上報規模:3W+部署規模,千 查看全部
采集系統上云(
阿里正式開(kāi)源可觀(guān)測數據采集器iLogtail改造基本不可行)
11月23日,阿里正式開(kāi)源了可觀(guān)察數據采集器iLogtail。作為阿里巴巴內部可觀(guān)察數據采集的基礎設施,iLogtail承載了阿里巴巴集團的工作以及螞蟻的日志、監控、trace、事件等可觀(guān)察數據采集。iLogtail 運行在服務(wù)器、容器、K8s、嵌入式等多種環(huán)境中,支持采集數百個(gè)可觀(guān)察數據。已經(jīng)有數千萬(wàn)的安裝量,并且每天有 采集 數十 PB 的數據可用。觀(guān)察數據廣泛應用于在線(xiàn)監控、問(wèn)題分析/定位、運行分析、安全分析等各種場(chǎng)景。
一個(gè) iLogtail 和可觀(guān)察性
可觀(guān)察性并不是一個(gè)新概念,而是從IT系統中的監控、故障排除、穩定性構建、運行分析、BI、安全分析等逐步演化而來(lái)。與傳統監控相比,可觀(guān)察性是核心進(jìn)化是采集盡可能多的可觀(guān)察數據以達到白盒的目的。iLogtail的核心定位是可觀(guān)察數據的采集器,可以采集盡可能多的采集各類(lèi)可觀(guān)察數據,幫助可觀(guān)察平臺打造各種上層應用場(chǎng)景。
2. 阿里巴巴可觀(guān)察數據采集的挑戰
對于可觀(guān)察數據采集,有很多開(kāi)源代理,比如Logstash、Filebeats、Fluentd、Collectd、Telegraf等,這些代理的功能非常豐富,這些代理和一些擴展的組合基本可以滿(mǎn)足各種內部數據采集的要求。但由于性能、穩定性、控制等關(guān)鍵挑戰不盡人意,我們最終選擇進(jìn)行自研:
1、資源消耗:目前阿里有上百萬(wàn)臺主機(物理機/虛擬機/容器),每天產(chǎn)生幾十PB的可觀(guān)察數據,降低每1M的內存和每1M/s的性能。改善對于我們的資源節約來(lái)說(shuō)是巨大的,節約的成本可能是幾百萬(wàn)甚至幾千萬(wàn)。目前很多開(kāi)源代理的設計更注重功能而不是性能,改造現有的開(kāi)源代理基本不可行。例如:
開(kāi)源Agents單核處理性能一般在2-10M/s左右,我們希望有性能可以達到100M/s。采集目標增加,數據量增加,采集延遲,服務(wù)器異常。在這種情況下,開(kāi)源代理內存將呈現爆發(fā)式增長(cháng),我們希望即使在各種環(huán)境下,內存也能處于較低的水位。開(kāi)源代理的資源消耗無(wú)法控制。只能通過(guò)cgroups強制限制。效果就是一直OOM重啟,數據一直上不來(lái)采集。并且我們希望在指定了 CPU、內存、流量等資源限制后,Agent 可以一直在這個(gè)限制內正常工作。
2、穩定性:穩定性是一個(gè)永恒的話(huà)題,數據的穩定性采集,除了保證數據本身的準確性采集,還要保證采集的Agent @采集 不能影響業(yè)務(wù)應用,否則影響將是災難性的。至于穩定性建設,除了Agent本身的基本穩定性外,還有很多目前開(kāi)源Agents還沒(méi)有提供的特性:
Agent自恢復:Agent在遇到關(guān)鍵事件后可以自動(dòng)恢復,提供進(jìn)程自身、父子進(jìn)程、守護進(jìn)程等多個(gè)維度的自恢復能力。全球多維監控:可以從全球視角監控不同版本。不同采集配置、不同壓力、不同區域/網(wǎng)絡(luò )等屬性的Agent的穩定性問(wèn)題。問(wèn)題隔離:作為Agent,無(wú)論問(wèn)題如何出現,都需要盡可能地隔離問(wèn)題。比如有多個(gè)采集配置,一個(gè)配置有問(wèn)題,不能影響其他配置;代理本身有問(wèn)題,不能影響機器上應用進(jìn)程的穩定性?;貪L能力:
3、Controllable:可觀(guān)察數據的應用范圍很廣。幾乎所有的業(yè)務(wù)、運維、BI、安全等部門(mén)都會(huì )用到它,各種數據都會(huì )在一臺機器上生成。同一臺機器產(chǎn)生的數據也會(huì )被多個(gè)部門(mén)的人使用。例如,在 2018 年,我們計算出平均而言,一個(gè)虛擬機上有 100 多種不同類(lèi)型的數據。采集,設計了10多個(gè)不同部門(mén)的人想要使用這些數據。除了這些,還有很多其他的企業(yè)級功能需要支持,比如:
遠程管理配置:在大規模場(chǎng)景下,手動(dòng)登錄機器修改配置基本上是不可能的。因此,需要一套配置圖形化管理、遠程存儲、自動(dòng)投遞機制,并且必須能夠區分不同的應用和差異。地區、不同歸屬方等信息。同時(shí),由于涉及到遠程配置的動(dòng)態(tài)加載和卸載,Agent也需要能夠保證在配置Reload過(guò)程中數據不丟失或者不重現。采集配置優(yōu)先級:當一臺機器上運行多個(gè)采集配置時(shí),如果遇到資源不足的情況,需要區分每個(gè)不同的配置優(yōu)先級,并且資源優(yōu)先給高優(yōu)先級的配置,同時(shí)要保證低優(yōu)先級的配置不被“餓死”。降級和恢復能力:在阿里,大促和秒殺是家常便飯。在這個(gè)高峰期,很多不重要的應用可能會(huì )被降級,相應的應用數據也需要降級。降級后,早高峰過(guò)后,需要有足夠的Burst能力快速追趕。完整數據采集完整性:監控、數據分析等場(chǎng)景需要數據的準確性。數據準確的前提是可以采集及時(shí)到服務(wù)器,但是如何判斷每臺機器,每個(gè)文件采集的數據已經(jīng)到達了對應的時(shí)間點(diǎn),
基于以上背景和挑戰,我們從 2013 年開(kāi)始逐步優(yōu)化和改進(jìn) iLogtail 以解決性能、穩定性、可控性等問(wèn)題,并經(jīng)歷了多次 double十一、double十二、 的測試春晚紅包等物品。目前iLogtail支持Logs、Traces、Metrics等多種數據的統一采集。核心功能如下:
支持多種Logs, Traces, Metrics數據采集,特別是容器和Kubernetes環(huán)境,數據非常友好采集 資源消耗極低,單核采集容量100M/s,對比對類(lèi)似Observable數據采集的Agent性能提高5-20倍,穩定性高。它用于阿里巴巴和數以萬(wàn)計的阿里云客戶(hù)的生產(chǎn)。部署量接近1000萬(wàn)。每天采集幾十PB可用觀(guān)測數據支持插件擴展,數據可任意擴展采集,處理、聚合、發(fā)送模塊支持遠程配置管理,支持圖形化、SDK配置管理、K8s Operator等,可以輕松管理百萬(wàn)臺機器的數據采集 支持自我監控、流量控制、資源控制、主動(dòng)告警、采集統計等高級管控功能。iLogtail的三大發(fā)展歷程
秉承阿里人簡(jiǎn)約的特點(diǎn),iLogtail的命名也很簡(jiǎn)單。我們一開(kāi)始就期望有一個(gè)統一的工具來(lái)記錄Tail,所以叫Logtail。添加“i”的原因主要是當時(shí)使用了inotify技術(shù)。, 可以在毫秒級別控制日志采集的延遲,所以最后稱(chēng)為iLogtail。從2013年開(kāi)始,iLogtail的整個(gè)發(fā)展過(guò)程大致可以分為三個(gè)階段,分別是飛天5K階段、阿里集團階段和云原生階段。
1個(gè)飛天5K舞臺
作為中國云計算領(lǐng)域的里程碑,2013年8月15日,阿里巴巴集團正式運營(yíng)5000(5K)服務(wù)器規模的“飛天”集群,成為國內首家自主研發(fā)大型云計算的企業(yè)。 - 規模的通用計算平臺。全球首家對外提供5K云計算服務(wù)能力的公司。
飛天5K項目始于2009年,從最初的30臺逐步發(fā)展到5000臺,不斷解決系統的規模、穩定性、運維、容災等核心問(wèn)題。這個(gè)階段iLogtail誕生的時(shí)候,是從5000臺機器的監控、問(wèn)題分析、定位(現在稱(chēng)為“可觀(guān)察性”)開(kāi)始的。在從 30 到 5000 的飛躍中,可觀(guān)察到的問(wèn)題面臨諸多挑戰,包括單機瓶頸、問(wèn)題復雜性、故障排除的難易程度和管理復雜性。
在5K階段,iLogtail本質(zhì)上解決了單機、小規模集群到大規模運維監控的挑戰。iLogtail現階段的主要特點(diǎn)是:
<p>功能:實(shí)時(shí)日志,監控采集,日志捕獲延遲毫秒級性能:?jiǎn)魏颂幚砟芰?0M/s,5000集群平均資源占用0.5% CPU核心可靠性:自動(dòng)監控新文件,新建文件夾,支持文件輪換,處理網(wǎng)絡(luò )中斷管理:遠程Web管理,自動(dòng)配置文件分發(fā)運維:加入群yum源,運行狀態(tài)監控,異常自動(dòng)上報規模:3W+部署規模,千


