repl.info

ClickHouseと自作UIでローカルオブザーバビリティ環境を作った

Staging環境やProduction環境にはDatadogをいれていてリッチな画面でトレースなどを確認できるようにいろいろ整備していた。その一方、ローカル開発では素朴にログを見るしかアプリケーションの動きを見る方法がなく、結構不便であった。特に最近は開発で起動するアプリケーションプロセスが増え、ログの量もそれに比例して増えたこともあり、目grepも大変になってきていた。そこで、ローカル開発用のオブザーバビリティ環境を整備したので紹介する。

これが画面。現時点ではログのTailと簡易的な絞り込み、トレースの一覧とスパンのウォーターフォール参照のみ備えている。

仕組みとしては単純で、ログとトレースをデータベースに蓄積してブラウザから参照可能にする、というだけである。データベースにはClickHouseを採用した。ログやトレースのようなデータを保存するのに向いているし、集計系の機能でデータベースとして使っているため開発環境に何か追加する必要がないことからちょうどよかった。ClickHouseへの蓄積と参照用にアプリケーションを1つ追加しており、トレースの受信とClickHouseへの保存、ログのポーリングとClickHouseへの保存、参照用の簡易アプリケーションを含んでいる。このアプリケーションはdd-trace用のトレース受信エンドポイントを実装しており、他アプリケーションでdd-traceを有効にして起動することでトレースを受信する作りとしている。ClickHouseは小さいINSERTを大量に受けるのが得意ではないため、バッファを設けてある程度のかたまりでINSERTするようにした。ログも同様で、ログファイルをポーリングしてログレコードをバッファリングし、まとめてClickHouseへINSERTしている。ClickHouseにトレースとログが溜まりすぎるとストレージを圧迫するので、TTLを設定して自動的に消えるようにしてある。

トレースとログの参照は簡易的なアプリケーションを自前で用意した。GrafanaやSigNozのようなOSSを使ってもよいのだが、これらはかなり豊富な機能を持つ。試してみたがやりたいことに対して重厚だと判断し、今回は利用を見送った。この先ローカルオブザーバビリティ環境に機能追加を続けていくと乗り換える可能性はあるだろう。

必要に応じて機能追加すればいいし、ローカル開発専用という割り切りで軽快な仕組みを作ることができた。ClickHouseを使っていない人はDuckDBを使うなどしてみてもいいかもしれない。お試しあれ。


筆者が所属する株式会社フライルではソフトウェアエンジニアを募集しています。