Render のログを Logtail に流すことで、お手軽にログの収集ができアラート設定も可能なのでそれについて紹介する。
Render について
Heroku の後釜として使っている PaaS の Render だが、Web サービスのスモールスタートに必要なコンポーネントを無料で利用できるのでとても良い。具体的には、次のようなコンポーネントだ。
- Web Service
- Static Sites
- Postgres
- Redis
詳細は Pricing まで。
これまでの自身の個人開発では、サーバーレスを採用することで低コストを実現してきたが、スケールする必要のないサービスを従量課金制で運用するのには不安があった。また、サーバーレス向けにパッケージ構成を変えたり、別途ローカル開発環境の構築をしたりとやや面倒な印象もあったので、PaaS に戻ってみてみると改めて使いやすいなと思う。
Logtail にログを流す
Render では、各コンポーネントのログを外部の SaaS に転送できる Log Streams の機能がある。RFC5424 で規定されるログフォーマットに対応していればどこにでも送れるようだが、Logtail なら月 1GB まで無料で使えるということで試してみた。
連携自体は簡単で、公式ドキュメントで紹介されているので割愛する。作業が完了すると自動的にログが送られ始め、Live Tail から確認できるようになる。
これはとある API サーバーのアクセスログの例だ。アプリケーションから出力したログはmessage
の中に入っている。ログは json で出力しておくことで画像内で展開しているように自動的に階層化して表示される。事前にログフォーマットの定義する必要なく、構造化されたそれぞれのキーでフィルタが可能になる。ログのメタ情報として dt
、level
、さらにホスト名や IP などが syslog
の下に入っている。
View を作ってアラートを設定する
上部にある検索窓から Live Tail Query Language でクエリを書くとログをフィルタできる。先のアクセスログから、レスポンスコードが 400 以上のログのみを抽出してみる。
ここで上部の目のアイコンのボタンを押すと、現在の検索クエリを View として保存できる。
View として保存することで、サイドバーから素早くログにアクセスできることに加え、アラートの設定が可能になる。下記のように View に該当するログの時間あたりの件数をしきい値として、アラートを受け取ることができる。Slack やメールの他、Webhook も設定できる。例えば、レスポンスコードが 400 以上のログが 1 分間に 5 回以上発生した場合に Slack に通知が行くように設定するとこのような通知が来る。
便利。アクセスログだけでなくアプリケーションログも出力するようにすれば、エラーログの数でアラートを設定することもできるし、シンプルで使い勝手が良さそうだ。
他にも、今回は試していないが Grafana も使うことができて、自由にダッシュボードを作成できるようなので、リクエスト数などの指標の監視にも使えそうだ。ちなみに無料枠では、3-day retention
の制約があるため、Live Tail で取得できるログは 3 日前までとなる。本格的に使うには、課金するか別の手段の検討が必要かと思うが、個人開発でとりあえず入れるには十分だろう。
まとめ
Render の Log Streams を使って Logtail にログを流し、アラートを設定するまでの簡単な流れを紹介した。Render にもログビュアーはあるが、非常にシンプルなものなので Logtail と連携することでかなり使いやすくなる。 特に、個人開発のような小さいサービスにとっては、お金をかけずにログのストア、検索、アラート設定までできるのがありがたい。アクセスログを出力してアラートを設定することで、4XX や 5XX 系のリクエスト量のモニタリングも可能になるので、バグを入れたときも簡単に気付けるようになるだろう。