昨天介紹了Jaeger,我們如果到Jaeger官網就可以看到,本來Jaeger也有自己的SDK但後來在2022年轉為和opentelemetry合作。
如果有在觀察opentelemetry,也可以看到另一個跟Jaeger類似的專案Zipkin。
另外還有一個專案Signoz。
本質上三個專案大致上都類似,但是後面的implement有些不一樣。這邊我們來做些比較。
語言 | Support DB | |
---|---|---|
Jaeger | Golang | cassandra/elasticsearch/opensearch |
Zipkin | Java | cassandra/elasticsearch |
SigNoz | Golang | clickhouse |
以上這三個UI都還有一些些微上的不同,Signoz特別支持了Clickhouse這是比較特殊的部分。另外SigNoz也有雲端的SaaS服務。
另外有一個比較特殊的地方是Jaeger目前Uber有在Contribute,而且是CNCF的畢業專案。
我們公司因為ES和Clickhouse都有使用,因此我們就先使用Jaeger來串接。
那我們可以看一下Jaeger的架構圖
一個是Collector直接接到DB storage
另一個是透過Kafka streaming進去DB
這個就很看我們將來要搜集trace的量,畢竟服務如果一多,trace的span可是很可怕的。
另外就是其實opentelemetry也可以用sampling的方式搜集。雖然沒辦法全收,但至少可以拿到一些有問題的地方做分析。