オープンソースAPMのSigNoz + さくらのクラウド オブジェクトストレージ

はじめに

最近お仕事でSigNozを使ってみました。
その中でSigNoz(が使っているClickHouse)のCold Storageとしてさくらのクラウド オブジェクトストレージを使ってみましたので利用手順などのメモを残しておきます。

SigNozとは

オープンソースAPM & オブザーバビリティツールとのことです。

signoz.io

GitHubリポジトリのdescriptionには以下のように書かれています。

SigNoz is an open-source APM.
It helps developers monitor their applications & troubleshoot problems,
an open-source alternative to DataDog, NewRelic, etc. 🔥 🖥.
👉 Open source Application Performance Monitoring (APM) & Observability tool

DataDogやNewRelicの代替という位置付けを狙っているようですね。
OpenTelemetryに対応しており、メトリクス・トレース・ログをまとめて見ることが出来ます。

GIGAZINEでも紹介されていました。

gigazine.net

類似のプロダクトとしてはhyperdxやuptraceなどがあります。
(uptraceはgo言語向けのORMであるBunを開発しているところです)

なおSigNoz CloudというSaaS形態での利用も可能ですが、今回は手元にインストールして利用するOSS版を利用しました。

SigNozのシステム構成

SigNozのドキュメントによると以下のような構成とのことです。

SigNoz Otel Collectorに送信されたデータをClickHouseに書き込むという構成です。
ClickHouseのディスクとしてS3(互換含む)を用いることも可能です。

参考: SigNoz docs: Retension Period

今回はS3の代わりにさくらのクラウド オブジェクトストレージを使ってみました。

SigNoz + さくらのクラウド オブジェクトストレージ

利用までの手順

SigNoz + ClickHouseのディスクとしてさくらのクラウド オブジェクトストレージを使うための手順は以下の通りです。

さくらのクラウド オブジェクトストレージ側の準備

バケット & 各種操作をするためのパーミッションを作成します

詳細はさくらのクラウド オブジェクトストレージのドキュメントを参照してください。

参考: https://manual.sakura.ad.jp/cloud/objectstorage/about.html#id8

パーミッション作成時に表示される「アクセスキーID」と「シークレットアクセスキー」を控えておいてください。
後ほどClickHouseの設定時に利用します。

SigNozのインストール/セットアップ(docker compose)

SigNozのセットアップを行います。今回はdocker composeを使います。
以下のドキュメントに従いSigNozのリポジトリをクローン、設定ファイルを編集した上でdocker compose upを実行という流れです。

参考: https://signoz.io/docs/install/docker/

クローン

# クローン
git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/docker/clickhouse-setup

ClickHouseの設定(設定ファイルの編集)

ClickHouseの設定ファイルを編集しさくらのクラウド オブジェクトストレージを使えるようにします。
カレントディレクトリであるclickhouse-setup配下にclickhouse-storage.xmlというファイルがありますので以下のように編集します。

{バケット名}{アクセスキーID}{シークレットアクセスキー}は置き換えてください。

<?xml version="1.0"?>
<clickhouse>
<storage_configuration>
    <disks>
        <default>
            <keep_free_space_bytes>10485760</keep_free_space_bytes>
        </default>
        <s3>
            <type>s3</type>
            <endpoint>https://s3.isk01.sakurastorage.jp/{バケット名}//</endpoint>
            <access_key_id>{アクセスキーID}</access_key_id>
            <secret_access_key>{シークレットアクセスキー}</secret_access_key>
            <region>jp-north-1</region>
            <no_sign_request>false</no_sign_request>
        </s3>
   </disks>
   <policies>
       <tiered>
           <volumes>
                <default>
                    <disk>default</disk>
                </default>
                <s3>
                    <disk>s3</disk>
                    <perform_ttl_move_on_insert>0</perform_ttl_move_on_insert>
                </s3>
            </volumes>
        </tiered>
    </policies>
</storage_configuration>
</clickhouse>

次にdocker-compose.yamlを編集し、volume指定部分でのclickhouse-storage.xmlのところのコメントアウトを解除します。

@@ -107,7 +107,7 @@ services:
       - ./clickhouse-users.xml:/etc/clickhouse-server/users.xml
       - ./custom-function.xml:/etc/clickhouse-server/custom-function.xml
       - ./clickhouse-cluster.xml:/etc/clickhouse-server/config.d/cluster.xml
-      # - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
+      - ./clickhouse-storage.xml:/etc/clickhouse-server/config.d/storage.xml
       - ./data/clickhouse/:/var/lib/clickhouse/
       - ./user_scripts:/var/lib/clickhouse/user_scripts/

SigNozの起動

あとはDocker Composeで起動します。

docker compose up -d

起動したらhttp://localhost:3301ダッシュボードにアクセスできるはずです。

SigNozダッシュボード上から保存期間(Retention Period)を設定

あとはどれくらいの期間がすぎたらS3に移動させるかを設定します。 ダッシュボードからSettings(localhost:3301であれば http://localhost:3301/settings )を開いて設定します。

この例ではトータルの保存期間を21日、14日をすぎたらS3に移動させるという設定になっています。

これでSigNoz + さくらのクラウド オブジェクトストレージが使えるようになりました。

終わりに

SigNozはメトリクス・トレース・ログを一箇所で見える環境を手軽に作れるというあたりが魅力的だと思います。
気になるのはデータ量についてですが、オブジェクトストレージをCold Storageとして活用することでコストを押さえつつデータの増加にも耐えられそうです。

これからもう少し使い込んでみようと思います。

以上です。