DUICUO

Sentry のオープンソース版と商用 SaaS 版の違いをご存知ですか?

この記事は、Shao氏が執筆したWeChat公式アカウント「Hacker Afternoon Tea」からの転載です。転載の許可については、「Hacker Afternoon Tea」公式アカウントまでお問い合わせください。

公式ドキュメントには「sentry」と「getsentry」への言及が数多く見られます。どちらもDjangoアプリケーションですが、「sentry」はオープンソースで、「getsentry」はクローズドソースです。これらのアプリケーションにはどのような機能があるのでしょうか?

  • https://github.com/getsentry/sentry

問題、パフォーマンス、ダッシュボードなど、すべての公式製品機能はSentry(オープンソースコンポーネント)に実装され、利用可能であることを強調しておきます。Sentryは、主要機能を有料で提供する「オープンコア」企業ではありません。Sentryは可能な限りオープンソースです。

  • https://docs.sentry.io/product/issues/
  • https://docs.sentry.io/product/パフォーマンス/
  • https://docs.sentry.io/product/dashboards/
  • https://docs.sentry.io/product/
  • https://open.sentry.io/licensing/

では、getsentry には何が含まれているのでしょうか?これは、公式 SaaS である sentry.io の課金およびアカウント管理機能を実装したものです。getsentry は、本番環境にデプロイされた公式 Django アプリケーションです。getsentry は Sentry Django アプリケーションをインポートし、ルートとモデルを追加して、再エクスポートします。

さらに、sentryにはDjangoシグナルを使って実装された多くのフックがあり、getsentryはこれらのフックをサブスクライブします。例えば、sentryにはevent_receivedというDjangoシグナルがあり、これはイベントが保存されたときにトリガーされます。セルフホスト型アプリケーションを実行している場合、このフックをサブスクライブする必要はありません。しかし、getsentryには、このシグナルがトリガーされたときに実行される課金カウンターがあります。

getentryは、Sentry内で、sentry.nodestore、sentry.quotas、カスタム機能フラグシステムなど、交換可能かつプラグイン可能なバックエンドを複数使用します。フックと同様に、これらのモジュール式バックエンドは技術的にはセルフホストインスタンスでも利用可能ですが、ほとんどドキュメント化されていません。例えば、機能フラグシステムには、セルフホストインスタンスで機能の可用性を制御するために使用できる、ハードコードされた機能テーブル(SENTRY_FEATURES)があります。getentryは、公式の課金スキームと早期アクセスプログラムに基づいてフラグを切り替える、異なる機能フラグハンドラーを登録します。

  • https://develop.sentry.dev/セルフホスト/
  • https://github.com/getsentry/sentry/blob/master/src/sentry/features/__init__.py
  • https://develop.sentry.dev/feature-flags/
  • https://sentry.io/pricing/

セントリーエンジニアのメモ

Sentry の従業員でない場合は、getentry コードベースで開発することはできません。また、このドキュメント内の以下のコメントやその他の記述は無視できます。

  • 通常は、sentry CLI を getsentry CLI に置き換えても動作は同じです。ただし、そうでない場合は、公式ドキュメントで動作の違いが指摘されています。
  • GetsEntryの設定は`getsentry/conf/settings/defaults.py`で設定されています。その他の環境固有のオーバーライドは、環境名に一致するファイルに記載されています。例えば、ローカル開発用のデフォルト設定は`getsentry/conf/settings/dev.py`にあります。また、`getsentry/conf/settings/devlocal.py`を使用して、個別の設定をオーバーライドすることもできます。`devlocal.py`ファイルはGitによって無視されるため、コミットに予期せず追加されることはありません。