メトリクス・分散トラッキングに対応したモニタリングツール SigNoz を試してみた。

こんにちは k-jun です。今日は Jaeger と Prometheus 合いの子のようなモニタリングツール SigNoz を試してみます。

https://github.com/SigNoz/signoz

Prometheus はモニタリングに対応しているが分散システムのトラッキングには弱く、Jaeger は分散トラッキングのみである と主張しておりこれらを併せ持った存在が SigNoz としています。 類似のプロダクトとして DataDog、NewRelic を挙げています。

ひとまず実際に使えることが検証出来ればよいので、適当な API サーバーと Proxy サーバーを構築、その後分散トラッキングとメトリクスを取得してみます。 以下がざっくりとしたアーキテクチャです。

f:id:K-jun1221:20210904044430p:plain

OpenTelemetry Collector がログを収集し、Clickhouse に投入します。その後、後ろのツールで分析などが可能になるようです。別パターンとして Apache Kafra, Apache Rruid を使用したものも存在するようです。

https://signoz.io/docs/deployment/requirement/

セットアップに入りますが、どうやらテスト環境であっても最低限 Clickhouse の Docker に 1.5 GB は必要なようです。なんということ...。

https://signoz.io/docs/deployment/docker/

aws に c5.4xlarge の少しだけ大きめのインスタンスを使っていきます。

ubuntu@ip-10-1-101-174:~$ git clone https://github.com/SigNoz/signoz.git && cd signoz/deploy/
Cloning into 'signoz'...
remote: Enumerating objects: 4764, done.
remote: Counting objects: 100% (1411/1411), done.
remote: Compressing objects: 100% (523/523), done.
remote: Total 4764 (delta 1007), reused 994 (delta 871), pack-reused 3353
Receiving objects: 100% (4764/4764), 31.36 MiB | 16.20 MiB/s, done.
Resolving deltas: 100% (2988/2988), done.
ubuntu@ip-10-1-101-174:~/signoz/deploy$ ./install.sh
👋 Thank you for trying out SigNoz!

Detecting your OS ...

👉 Two ways to go forward

1) ClickHouse as database (default)

2) Kafka + Druid setup to handle scale (recommended for production use)

⚙️  Enter your preference (1/2):1
....
++++++++++++++++++ SUCCESS ++++++++++++++++++++++

🟢 Your installation is complete!

🟢 Your frontend is running on http://localhost:3000

ℹ️  To bring down SigNoz and clean volumes : sudo docker-compose -f docker/clickhouse-setup/docker-compose.yaml down -v

+++++++++++++++++++++++++++++++++++++++++++++++++

port 3000 からアクセスしてみます。

f:id:K-jun1221:20210904054259p:plain

何やら画面が出てきました。色々とポチポチしてみます。

f:id:K-jun1221:20210904054434p:plain

UI はそれなりに使いやすそうです。どことなく安っぽい気はしますが。後はこいつに対してどうやって分散トラッキングログとメトリクスログを送信するかですね。 ドキュメントを漁った感じ、あとは OpenTelemetry というものを使用すれば良さそうなのでやってみます。

https://signoz.io/docs/instrumentation/golang/

サンプルアプリケーションが公開されているのでこれを使ってみますか。

https://github.com/SigNoz/sample-golang-app

ubuntu@ip-10-1-101-158:~/sample-golang-app$ SERVICE_NAME=goApp INSECURE_MODE=true OTEL_EXPORTER_OTLP_ENDPOINT=10.1.101.174:4317 go run main.go

別サーバーから適当に負荷をかけてみます。ざっと 1000sec ほど。

ubuntu@ip-10-1-101-174:~/signoz/deploy$ wrk -t 8 -d 1000 http://10.1.101.158:8090/books

おお、たしかにグラフにはでてきた。

f:id:K-jun1221:20210904070641p:plain

なーんか微妙ですね。情報それだけなのって感じです。Traces の方の画面も見てみましたが最初の印象通り安っぽいグラフが出てくるだけですね...。

f:id:K-jun1221:20210904070841p:plain

ダッシュボードとかの機能とか、諸々を搭載している Prometheus にはとても勝てないのではなかろうか...。これならお金をはらってでも DataDog を使いますね。 簡単に見ただけですが、setup が簡単なのは高評価でした。それでは今回はこのへんで。