OpenTelemetry対応でさまざまなアプリからデータを取得&追跡できるオープンソースなシステム監視・分析ツール「SigNoz」を使ってみた
![](https://i.gzn.jp/img/2023/07/23/signoz/00_m.png)
システムの状態を監視するためのツールは多数存在していますが、その中でもSigNozはメトリクス・トレース・ログというシステム観測の3本柱に対応しており、さらに「OpenTelemetry」を利用してさまざまなアプリのデータを取得できるツールとのことなので、実際に使って試してみました。
Open source APM | SigNoz
https://signoz.io/
SigNozはmacOSのほか、Linuxの下記のディストリビューションで動作するとのこと。
・Ubuntu
・Debian
・OpenSuse
・CentOS
・SUSE Linux Enterprise Server (SLES)
その他のディストリビューションにおいてもDocker経由で起動することが可能とされていますが、今回はDebianを利用して進めていきます。まずは下記のコードで各パッケージを更新しておきます。
sudo apt update && sudo apt upgrade -y
下記のコマンドでgitをインストール。
sudo apt install git -y
下記のコマンドでSigNozのリポジトリをクローンします。
git clone -b main https://github.com/SigNoz/signoz.git && cd signoz/deploy/
そして下記のコマンドでインストールスクリプトを実行。
./install.sh
SigNozの動作のイメージ画像は下図の通り。インストールスクリプトではドットの枠線内のコンポーネントがインストールされるとのことです。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3129_m.png)
インストールの途中で確認が入るので、エンターキーを押して続行します。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3130_m.png)
インストールが完了すると、下図のような表示が出るのでブラウザを起動して「localhost:3301」にアクセスします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3131_m.png)
「メールアドレス」「氏名」「組織名」「パスワード」を入力して「Get Started」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3132_m.png)
SigNozには最初からサンプルとしてダミーデータが用意されており、ログインすると下図のようにサービス一覧にさまざまなアプリが表示されます。今回はこのダミーデータを利用してSigNozがどのようにデータを表示するのかを確認していきます。「customer」アプリケーションをクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3133_m.png)
アプリケーション画面ではレイテンシーや毎秒のオペレーション数、エラー割合を確認可能。具体的に発生したオペレーションの名前も一覧形式で表示されます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3134_m.png)
システムの監視・追跡において、システムの作業は「スパン」という単位で管理されます。「Traces」タブではそのスパンごとに詳細な内容を確認できるようになっています。スパンの一覧から、「HTTP GET /dispatch」というオペレーションのスパンをクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3171_m.png)
そのスパン内でどの作業にどれくらいの時間がかかったのかについての詳細な情報が確認可能です。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3172_m.png)
スパンの一覧を絞り込むことも可能です。Tracesタブの一番上にある「Click to filter by tags」をクリックし、「Add Tags Filter」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3136_m.png)
Tags欄をクリックするとフィルターする要素の候補が出現するので、絞り込みたい内容を選択します。この部分の書式はオープンテレメトリの仕様に従っているとのこと。今回は「sql.query.(string)」をクリックしました。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3138_m.png)
続いて比較演算子を選択します。「EQUALS」「NOT EQUALS」「IN」「NOT IN」「EXISTS」「NOT EXISTS」「STARTS WITH」「NOT STARTS WITH」「CONTAINS」「NOT CONTAINS」が選択可能。今回は「EQUALS」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3142_m.png)
右端の空欄をクリックするとSigNozが候補を出してくれるので目的のものをクリックします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3139_m.png)
これで「Run Query」をクリックすればOK。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3140_m.png)
クエリの内容にそったものだけが表示されるようになりました。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3141_m.png)
「Logs」タブではログの件数と具体的な内容を確認することができます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3143_m.png)
ログをフィルターすることも可能です。左下にフィールドの一覧が表示されているので、絞り込みたいフィールドをクリックして「SELECTED FIELDS」に表示された状態にしてから「Search Filter」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3144_m.png)
SUGGESTIONSにフィールドが表示されるのでクリックし、オペレーターを選択して値をペーストします。オペレーターは「IN」「NIN(Not IN)」のほかに「GTE(≥)」「GT(>)」「LTE(≤)」「LT(<)」「CONTAINS」「NCONTAINS」が選択可能。設定できたら「Apply」をクリックします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3145_m.png)
選択した内容に合致するログだけが表示されるようになりました。ログデータをダウンロードしたり、最新のログデータを表示するボタンのほか、「Go Live」をクリックすることで画面をリアルタイムで更新することも可能です。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3146_m.png)
リアルタイム更新中はログが流れ続けることになるので、詳細を確認したいときは「Pause」で止める必要がありそうです。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3147_m.png)
「Dashboard」タブではダッシュボードを管理できます。「New Dashboard」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3148_m.png)
JSONデータやGrafanaのJSONデータを使ってダッシュボードをインポートすることも可能ですが、今回は「Create Dashboard」をクリックして新規に作成していきます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3149_m.png)
「Add Panel」をクリックするとグラフと値のどちらを追加するかを聞かれます。今回はグラフをクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3150_m.png)
画面の下部でクエリを設定し、「Stage & Run Query」をクリックしてプレビューを表示します。問題無ければ「Save」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3152_m.png)
確認が出るので「OK」をクリックします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3153_m.png)
同様の手順を続けることで自分に必要なデータだけを集めたダッシュボードを作成することができます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3154_m.png)
「Alerts」タブではアラートの設定が可能です。「New Alert」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3155_m.png)
「Metric」「Log」「Trace」「Exceptions」という4つの要素を元にアラートを設定できます。今回は「Metric based Alert」をクリックします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3156_m.png)
アラートの対象にする指標をクエリで指定し、「Run Query」をクリックしてグラフをプレビューします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3157_m.png)
下にスクロールし、アラートを発生させるしきい値を設定します。今回は「過去5分間で0.2を超えている瞬間がある場合にアラート発生」としました。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3158_m.png)
深刻度と名前、説明を記入して「Create Rule」をクリックします。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3159_m.png)
確認が出るので「OK」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3160_m.png)
「Triggerd Alerts」をクリックするとアラートが発生しているのが分かります。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3161_m.png)
「Exceptions」タブではアプリで発生した例外の情報が表示されます。ここでスタックトレースの情報なども閲覧可能とのことですが、デモデータでは例外が発生しない模様。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3162_m.png)
「Service Map」タブではサービスを構成するコンポーネント間の依存関係がグラフで表示されます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3163_m.png)
「Usage Explorer」タブでは時間ごと・日ごとの使用量を確認可能。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3164_m.png)
「Settings」タブでMetrics・Traces・Logsそれぞれの保存期間を設定できます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3165_m.png)
また、「Alert Channels」ページでアラートが発生した際の連絡経路を設定可能です。「New Alert Channel」をクリック。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3166_m.png)
「Slack」「Webhook」「Pagerduty」の3つの方法で通知することが可能です。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3167_m.png)
「Organization Settings」ではチームメンバーの管理を行えます。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3168_m.png)
最下部にある「Get Started」では、それぞれの言語で書かれたアプリケーションへOpenTelemetryを導入するためのガイドが用意されています。SigNozインストールガイドの手順に従ってデモデータを削除後、実際に監視したい対象へOpenTelemetryを導入すればOK。
![](https://i.gzn.jp/img/2023/07/23/signoz/snap3169_m.png)
なお、OpenTelemetryのドキュメントではそれぞれの言語への対応状況は下記の通りとなっています。
Language | Traces | Metrics | Logs |
---|---|---|---|
C++ | Stable | Stable | Experimental |
C#/.NET | Stable | Stable | Mixed* |
Erlang/Elixir | Stable | Experimental | Experimental |
Go | Stable | Beta | Not yet implemented |
Java | Stable | Stable | Stable |
JavaScript | Stable | Stable | Development |
PHP | Beta | Beta | Alpha |
Python | Stable | Stable | Experimental |
Ruby | Stable | Not yet implemented | Not yet implemented |
Rust | Beta | Alpha | Not yet implemented |
Swift | Stable | Experimental | In development |
・関連記事
URLの誤入力で年5000万アクセスを稼ぐタイポスクワッティングサイトの実態とは? - GIGAZINE
ChatGPT上でコードを実行してデータ分析やグラフ化が可能な「コードインタプリタ」機能が追加、「誰でもデータアナリストになれる」時代の到来か - GIGAZINE
コマンド一発でウェブサイトのアクセスログをターミナルやウェブブラウザで可視化できる「GoAccess」レビュー - GIGAZINE
他人にデータを渡さずに無料でアクセス解析できるオープンソースツール「umami」 - GIGAZINE
世界中で猛威を振るうスマホ向けスパイウェア「Pegasus」の兆候も検出可能なセキュリティ侵害検出ツール「MVT」 - GIGAZINE
・関連コンテンツ