Datakit,真正的統一可觀測性 Agent #JIHULAB101

最新行業資訊界 發佈 2022-08-18T22:19:19.078640+00:00

前言隨著雲、雲原生的發展,越來越多的客戶意識到了「數據」的重要性,紛紛掀起了一波數據累積浪潮。

前言

隨著雲、雲原生的發展,越來越多的客戶意識到了「數據」的重要性,紛紛掀起了一波數據累積浪潮。

現今,國內外都有大量的數據採集器,但大多數採集能力單一,比如 Telegraf 僅支持指標,Filebeat只服務日誌,OpenTelemetry 的 Collector對非雲原生的組件並不友好,需要大量安裝 Exporter插件。為了實現系統的可觀測性,需要使用多個採集器,造成資源浪費。

Datakit 是目前唯一的真正一體化實現各種環境(傳統環境,雲/雲原生)統一數據採集平台,一個進程或 Daemonset Pod就可以實現全方位的數據採集,配置體驗良好,開源且可擴展性強。本文將全面介紹 Datakit 相關功能。


多維度可觀測性數據採集

Datakit 支持從各種基礎設施、技術棧中採集 Metrics、Logs、Traces 等數據,並對這些數據進行結構化處理。

1、實時基礎設施對象

DataKit 支持從主機,容器,k8s,進程,雲產品,所有基礎設施對象實時狀態一網打盡。例如:

(1)Datakit hostobject 用於收集主機基本信息,如硬體型號、基礎資源消耗等。

(2)進程採集器可以對系統中各種運行的進程進行實施監控, 獲取、分析進程運行時各項指標,包括內存使用率、占用CPU時間、進程當前狀態、進程監聽的埠等,並根據進程運行時的各項指標信息,用戶可以在觀測雲中配置相關告警,使用戶了解進程的狀態,在進程發生故障時,可以及時對發生故障的進程進行維護。

2、指標

相比 Telegraf 只能採集時序數據,DataKit 涵蓋更為全面的數據採集類型,有海量的技術棧的指標收集能力,採集器的配置更簡單,數據質量更好。

3、日誌

日誌數據對於整體的可觀測性,其提供了足夠靈活、多變的的信息組合方式,正因如此,相比指標和 Tracing,日誌的採集、處理方式方案更多,以適應不同環境、架構以及技術棧的採集場景。

從磁碟文件獲取日誌

這是最原始的日誌處理方式,不管是對開發者而言,還是傳統的日誌收集方案而言,日誌最開始一般都是直接寫到磁碟文件的,寫到磁碟文件的日誌有如下幾個特點:

(1)序列式寫入:一般的日誌框架,都能保證磁碟文件中的日誌,保持時間的序列性

(2)自動切片:由於磁碟日誌文件都是物理遞增的,為避免日誌將磁碟打爆,一般日誌框架都會自動做切割,或者通過一些外部常駐腳本來實現日誌切割

基於以上特徵,DataKit 只需要要持續盯住這些文件的變更即可(即採集最新的更新),一旦有日誌寫入,則 DataKit 就能採集到,而且其部署也很簡單,只需要在日誌採集器的 conf 中填寫要採集的文件路徑(或通配路徑)即可。

通過調用環境 API 獲取日誌

這種採集方式目前主要針對容器環境中的 stdout 日誌,這種日誌要求運行在容器(或 Kubernetes Pod)中的應用將日誌輸出到 stdout,然後通過 Docker 的日誌接口,將對應 stdout 上的日誌同步到 DataKit。

遠程推送日誌給 DataKit

對遠程日誌推送而言,其主要是

(1)開發者直接將應用日誌推送到 DataKit 指定的服務上,比如 Java 的 log4j 以及 Python 原生的 SocketHandler 均支持將日誌發送給遠端服務。

(2)第三方平台日誌接入

這種形式的特點是日誌直接發送給 DataKit,中間無需落盤。

Sidecar 形式的日誌採集

這種方式的採集實際上是綜合了磁碟日誌採集和日誌遠程推送倆種方式,具體而言,就是在用戶的 Pod 中添加一個跟 DataKit 配套(即 logfwd)的 Sidecar 應用,其採集方式如下:

4、鏈路追蹤

DataKit 當前支持多種廣泛應用的 Trace 數據,如 zipkin/jaeger/otel/skywalking/ddtrace 等,只需要將對應的數據地址指向 Datakit 即可。

5、端行為

DataKit 支持全面收集前端的行為數據,包括 H5/Android/IOS/Fultter/React-native 等。

RUM(Real User Monitor)採集器用於收集網頁端或移動端上報的用戶訪問監測數據。建議將 RUM 以單獨的方式部署在公網上,不要跟已有的服務部署在一起(如 Kubernetes 集群)。因為 RUM 這個接口上的流量可能很大,集群內部的流量會被它干擾到,而且一些可能的集群內部資源調度機制,可能影響 RUM 服務的運行。

通常生產環境的 js 文件會經過各種轉換和壓縮,與開發時的原始碼差異較大,不便於排錯(debug)。如果需要定位錯誤至源碼中,就得藉助於sourcemap文件。

DataKit 支持這種原始碼文件信息的映射,方法是將對應 js 的sourcemap文件進行 zip 壓縮打包,命名格式為 <app_id>-<env>-<version>.zip,上傳至<DataKit安裝目錄>/data/rum/,這樣就可以對上報的error指標集數據自動進行轉換,並追加 error_stack_source 欄位至該指標集中。

6、雲原生安全

SChecker 插件,絕對安全的安全巡檢器,lua 沙箱只讀分析,支持 300+ 的安全事件發現,用戶可自定義屬於自己的規則文件及lib庫。

一般在運維過程中有非常重要的工作就是對系統,軟體,包括日誌等一系列的狀態進行巡檢,傳統方案往往是通過工程師編寫shell(Bash)腳本進行類似的工作,通過一些遠程的腳本管理工具實現集群的管理。但這種方法實際上非常危險,由於系統巡檢操作存在權限過高的問題,往往使用root方式運行,一旦惡意腳本執行,後果不堪設想。實際情況中存在兩種惡意腳本,一種是惡意命令,如rm -rf,另外一種是進行數據偷竊,如將數據通過網絡 IO 泄露給外部。

因此 Security Checker 希望提供一種新型的安全的腳本方式(限制命令執行,限制本地IO,限制網絡IO)來保證所有的行為安全可控,並且 Security Checker 將以日誌方式通過統一的網絡模型進行巡檢事件的收集。同時 Security Checker 將提供海量的可更新的規則庫腳本,包括系統,容器,網絡,安全等一系列的巡檢。scheck 為Security Checker 的簡寫。

7、基於 eBPF的網絡監控

DataKit eBPF 採集器支持收集面向主機/進程/容器的網絡 4 層/7層的性能與異常數據。

eBPF 採集器,採集主機網絡 TCP、UDP 連接信息,Bash 執行日誌等。本採集器主要包含 ebpf-net 及 ebpf-bash 倆類:

(1)ebpf-net:

數據類別: Network

由 netflow、httpflow 和 dnsflow 構成,分別用於採集主機 TCP/UDP 連接統計信息和主機 DNS 解析信息;

(2)ebpf-bash:

數據類別: Logging

採集 Bash 的執行日誌,包含 Bash 進程號、用戶名、執行的命令和時間等;

8、CICD 追蹤

DataKit 支持追蹤極狐 gitLab pipeline/Jenkins的構建過程和相關指標日誌。

通過配置極狐 GitLab Webhook,可以實現 極狐GitLab CI 可視化。Datakit 接收到 Webhook Event 後,是將數據作為 logging 打到數據中心的。

Jenkins 採集器可以通過接收 Jenkins datadog plugin 發出的 CI Event 實現 CI 可視化。

9、支持通過選舉來進行差異化採集

在集群模式下,Datakit 能通過選舉的方式來區分公共資源和專屬資源的不同採集。對公共資源而言,多個 Datakit 會競選其數據採集,但最終只有一個會獲取到採集權,進而可避免對公共資源(比如 MySQL 指標)的重複採集以及可能的單點故障。

而對於專屬資源,主要指主機相關的指標,如內存、磁碟等,它們都是由各個不同 Datakit 分別採集,不需要參與選舉。

完整的數據處理語言 Pipeline

DataKit 內置簡便的數據提取、處理引擎 Pipeline,用於提取非結構化數據,方便查詢與統計。有以下特點:

(1)簡單,每一行就是數據處理,支持邏輯判斷

(2)全領域的數據處理,所有的收集數據均可以通過編寫 Pipeline實現動態的數據預處理

(3)豐富的函數支持

可通過內置的 Pipeline 功能直接操作 DataKit 採集的各種不同類型的數據,包括時序、日誌、Tracing 等。同時還支持通過遠程的方式編輯、調試 Pipeline,一鍵同步到所有 Datakit 上。

支持通過 Git 來進行配置管理

由於大部分配置都是純文本,Datakit 支持通過 Git 方式來管理這些配置,便於集群模式下的配置統一變更和同步。

強大的擴展性&開源兼容

自定義採集器

DataKit 包含定時觸發用戶自定義 python 採集腳本的一整套方案,支持自定義的 Python數據收集能力。

編寫用戶自定義腳本需要用戶繼承 DataKitFramework 類,然後對 run 方法進行改寫。並且支持使用 git repo,一旦開啟 git repo 功能,則 conf 裡面的 args 裡面填寫的路徑是相對於 gitrepos 的路徑。

第三方接入

DataKit 支持第三方數據接入,例如:

(1)Prometheus Exporter與Remote_Endpoint

Prom 採集器可以獲取各種 Prometheus Exporters 暴露出來的指標數據,只要配置相應的 Exporter 地址,就可以將指標數據接入。並且支持監聽 Prometheus Remote Write 數據。

(2)Filebeat/Flenutd

Elastic Beats 接收器目前支持接收 Filebeat 採集的數據。

(3)OpenTelemetry,Skywalking

靈活的部署模型,簡單易用

DataKit 一鍵部署安裝,全雲平台支持,全作業系統支持,內置上百種數據集成,支持在安裝階段就自動開啟基礎數據採集,開箱即用。

基於主機

(1)若目標機器沒有公網訪問出口,DataKit 支持離線部署

(2)支持通過 Ansible 等方式來批量安裝 DataKit

基於 Kubernetes

(1)支持在 K8s 中通過 DaemonSet 方式安裝 DataKit

DataSinker-將數據寫入到其他開源協議下的產品中

Sinker 是 DataKit 中數據存儲定義模塊。默認情況下,DataKit 採集到的數據是上報給觀測雲,但通過配置不同的 Sinker 配置,我們可以將數據發送給不同的自定義存儲。

(1)InfluxDB:目前支持將 DataKit 採集的時序數據(M)發送到本地的 InfluxDB 存儲

(2)M3DB:目前支持將 DataKit 採集的時序數據(M)發送到本地的 InfluxDB 存儲(同 InfluxDB)

(3)Logstash:目前支持將 DataKit 採集的日誌數據(L)發送到本地 Logstash 服務

更多功能

自監控調試能力

(1)DataKit 支持以交互式方式執行 DQL 查詢,在交互模式下,DataKit 自帶語句補全功能。

(2)DataKit 提供了相對完善的基本可觀測信息輸出,通過查看 DataKit 的 monitor 輸出,我們能清晰的知道當前 DataKit 的運行情況。

(3)DataKit self 採集器用於 DataKit 自身基本信息的採集,包括運行環境信息、CPU、內存占用情況等。

聯邦模式與代理模式

當 Datakit 無法訪問外網時,可在內網部署一個代理將流量發送出來。

(1)通過 DataKit 內置的正向代理服務

(2)通過 Nginx 反向代理服務

當集群中只有一個被採集對象(如 Kubernetes),但是在批量部署情況下,多個 DataKit 的配置完全相同,都開啟了對該中心對象的採集,為了避免重複採集,可以開啟 DataKit 的選舉功能。

全方位開源,安全保障

Datakit 已全方位開源,並且官方維護團隊超過 10 人,可放心使用,安全有保障。

DataKit 入駐 JiHuLab.com

作為開源生態的重要參與者之一,觀測雲旗下DataKit實時數據採集引擎的開源項目也已入駐在極狐GitLab SaaS(JiHuLab.com),實現系統全鏈路可觀測。觀測雲加入後,將繼續關注開源生態的發展,並專注GitOps、IaC、DevOps、CI/CD、SRE、雲原生等前沿開源技術、方法論和理念,用實際行動為開源生態的拓展提供助力,進一步加速雲原生在各行業的迅速落地,為國內的基礎軟體發展注入自己的力量。

DataKit代碼託管地址:https://jihulab.com/guance-cloud/datakit

Datakit 官方網站:https://www.datakit.tools/

關於觀測雲

觀測雲(www.guance.com),新一代雲原生全鏈路數據可觀測平台,實現統一採集、統一標籤、統一存儲和統一界面,帶來全功能的一體化可觀測體驗。觀測雲能全環境高基數採集數據,支持多維度信息智能檢索分析,及提供的強大的自定義可編程能力,使系統運行狀態盡在掌控,故障根因無所遁形。聰明的團隊會觀測,可觀測性用觀測雲。

關於極狐GitLab SaaS

極狐GitLab SaaS的願景,是要在中國創建最優秀的開源平台,不僅僅是代碼託管服務,而是最全面、最先進的DevSecOps一體化服務。當前,極狐GitLab 為了中國開源貢獻者提供最大力度的優惠,所有公開的開源項目在極狐GitLab上都能免費享受到全部功能。我們希望極狐GitLab的用戶以更加便捷的方式使用到先進的DevOps SaaS服務,為中國的開源社區做出自己最好的貢獻!#JIHULAB101

關鍵字: