參考圖
從下圖可以看出signoz 主要包含的組件
collector 使用了社區的,數據存儲基於clickhouse ,對於prometheus 的writer 使用了
query service 處理部分
- prometheus 集成
參考圖
直接嵌入了prometheus,使用了prometheus 的remote read 同時基於prometheus 的alert rule 解決報警的問題(需要集成一個alertmanager)
- trace 部分
核心是利用了opentelemetry-collector,基於自己開發的clickhouse metrics writer 解決鏈路信息記錄到clickhouse
一些問題
通過簡單的分析signoz 的源碼就可以發現,當前開源版本的signoz 包含一些問題
- 集群問題(目前dashboar 使用了本地數據庫,sqlite,當然可以調整)
- 直接嵌入prometheus 做為一個嵌入的引擎可能會有查詢問題(具體需要通過性能測試下)
- 缺少多租戶的支持(當然這部分對於metrics 的處理實際上我們可以調整擴展支持grafan 的minir 以及VictoriaMetrics,trace部分目前還真的不太好處理,可以自己調整)
- 安全上不是很好(缺少完整的安全控制,當然需要自己擴展)
- 目前clickhouse 的write 部分暫時沒有開源(當然我們基於協議可以開發自己的)
- 缺少日志處理(當然opentelemetry-collector 依然還在開發中,后續應該會有支持的)
說明
以上是通過閱讀源碼分析到的,整體signoz並不難,屬於一個all-in-one 的架構設計,使用比較簡單,但是目前測試以及源碼分析上來看大規模使用可能會有點問題,如果后期grafan minir 支持了opentelemetry,我們基於此在結合signoz進行系統改造會是一個不錯的模式
參考資料
https://github.com/open-telemetry/opentelemetry-collector
https://github.com/SigNoz/signoz
