【Railway】ログの表示

Railwayでビルド、デプロイ、環境、HTTPのログを表示およびフィルタリングする方法を学びます。

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

ログの表示

標準出力または標準エラー(例: console.log(...))に出力されたビルドまたはデプロイのログは、後で表示または検索するためにRailwayによってキャプチャされます。

Railwayでログを表示するには3つの方法があります。

  • ビルド/デプロイパネル → ダッシュボードでデプロイメントをクリック
  • ログエクスプローラ → 上部ナビゲーションのObservabilityタブをクリック
  • CLIrailway logs コマンドを実行

ビルド/デプロイパネル

特定のデプロイメントのログは、サービスウィンドウでデプロイメントをクリックすることで表示でき、アプリケーションの障害をデバッグするのに役立ちます。

同様に、特定のビルドのログは、デプロイメントを開いた後、Build Logsタブをクリックすることで表示できます。

ログエクスプローラ

環境全体のログは、上部ナビゲーションの「Observability」ボタンをクリックすることでまとめて表示できます。ログエクスプローラは、複数のサービスにまたがる可能性のあるより一般的な問題をデバッグするのに役立ちます。

ログエクスプローラには、日付範囲の選択や特定の列の表示/非表示の切り替えなどの追加機能もあります。

コマンドライン

デプロイメントログは、コマンドラインから表示して、最新のデプロイメントの現在のステータスをすばやく確認することもできます。railway logs を使用して表示します。

ログのフィルタリング

Railwayは、ログのクエリに使用できるカスタムフィルタ構文をサポートしています。

フィルタ構文はすべてのログタイプで利用可能ですが、一部のログタイプには特定の属性があります。

デプロイメントログ

  • <search term> → 部分的な部分文字列の一致でフィルタリング
  • "<search term>" → 完全なログメッセージでフィルタリング
  • replica:<replica_id> → 特定のレプリカのUUIDでフィルタリング
  • @attribute:value → カスタム属性でフィルタリング(以下の構造化ログを参照)

例:

「request」という単語を含むログを検索します。

request

「request handled」というメッセージに完全に一致するログを検索します。

"request handled"

エラーレベルのログを検索します。

@level:error

警告レベルのログを検索します。

@level:warn

エラーレベルと特定のテキストを含むログを検索します。

@level:error AND "failed to send batch"

特定のカスタム属性を持つログを検索します。

@customAttribute:value

特定の配列属性を持つログを検索します。

@arrayAttribute[i]:value

環境ログ

環境ログを使用すると、ログが出力された環境からログをクエリできます。

これは、環境内のすべてのサービスから出力されたログを、すべて1つの中央の場所で同時に検索できることを意味します。

デプロイメントログで利用可能なフィルタに加えて、環境ログでは追加のフィルタが利用できます。

  • @service:<service_id> → 特定のサービスのUUIDでフィルタリング

例:

Postgresデータベースサービスからのログを除外します。

-@service:<postgres_service_id>

PostgresデータベースサービスとRedisキャッシュサービスからのログを除外します。

-@service:<postgres_service_id> AND -@service:<redis_service_id>

PostgresデータベースサービスとRedisキャッシュサービスからのログのみを表示します。

@service:<postgres_service_id> OR @service:<redis_service_id>

HTTPログ

HTTPログは同じフィルタ構文を使用しますが、HTTP固有のデータには特定の属性セットがあります。

HTTPログで一般的に使用されるフィルタの一部は次のとおりです。

  • @requestId:<request_id> → リクエストIDでフィルタリング
  • @timestamp:<timestamp> → タイムスタンプでフィルタリング(RFC3339形式)
  • @method:<method> → メソッドでフィルタリング
  • @path:<path> → パスでフィルタリング
  • @host:<host> → ホストでフィルタリング
  • @httpStatus:<status_code> → HTTPステータスコードでフィルタリング
  • @responseDetails:<details> → 応答の詳細でフィルタリング(アプリケーションが応答に失敗した場合にのみ入力されます)
  • @clientUa:<user_agent> → 特定のクライアントのユーザーエージェントでフィルタリング
  • @srcIp:<ip> → 送信元IPでフィルタリング(リクエストを行ったクライアントのIPアドレス)
  • @edgeRegion:<region> → エッジリージョンでフィルタリング(リクエストを処理したエッジノードのリージョン)

例:

特定のパスのログを検索します。

@path:/api/v1/users

500エラーを返した特定のパスのログを検索します。

@path:/api/v1/users AND @httpStatus:500

500または501エラーを返した特定のパスのログを検索します。

@path:/api/v1/users AND (@httpStatus:500 OR @httpStatus:501)

200以外のすべての応答を検索します。

-@httpStatus:200

ヨーロッパ周辺から発信されたすべてのリクエストを検索します。

@edgeRegion:europe-west4-drams3a

特定のIPアドレスから発信されたすべてのリクエストを検索します。

@srcIp:66.33.22.11

コンテキストで表示

ログを検索するとき、周囲のログを表示すると便利なことがよくあります。これを行うには、「タイムスタンプ」列をクリックするか、ログを展開して「コンテキストで表示」ボタンをクリックします。

構造化ログ

構造化ログは、構造化されたJSON形式で出力されるログであり、カスタムメタデータをログに添付したり、スタックトレースなどの複数行のログを保持したりする場合に役立ちます。

console.log(JSON.stringify({
  message: "A minimal structured log", // (必須) ログの内容
  level: "info", // ログの重大度 (debug, info, warn, error)
  customAttribute: "value", // カスタム属性 (@name:valueでクエリ)
}));

構造化ログは、言語のライブラリで生成するのが最適です。たとえば、デフォルトのWinston JSON形式は、デフォルトで正しい構造でログを出力します。

level フィールドを持つログは、ログエクスプローラでそれに応じて色付けされます。

stderr に出力されたログは level.error に変換され、赤色で表示されます。

構造化ログの例をいくつか示します。

注: JSONログ全体が正しく解析されるためには、1行で出力する必要があります。

{"level":"info","message":"A minimal structured log"}
{"level":"error","message":"Something bad happened"}
{"level":"info","message":"New purchase!","productId":123,"userId":456}
{"level":"info","message":"User roles updated","roles":["editor","viewer"],"userId":123}

正規化戦略

Railwayサービス間で一貫したクエリ形式を確保するために、受信ログは上記の形式に自動的に正規化されます。

  • 非構造化ログは {"message":"...","level":"..."} に変換されます
  • log.msglog.message に変換されます
  • log.levellog.severity に変換されます
  • stderr からのログは level.error に変換されます
  • stdout からのログは level.info に変換されます
  • レベルは小文字に変換され、debuginfowarnerror のいずれかに最も近いものに一致します

Railwayはこちら (←このリンクから登録すると20ドル分のクレジットがもらえます)

Read more

リアルタイム投票アプリ5選【ライブ配信やイベントで】

リアルタイム投票アプリ5選【ライブ配信やイベントで】

ウェビナーやセミナー、社内研修を実施する際、「参加者が受け身になってしまう」「質問がなかなか出てこない」といった課題を感じたことはないでしょうか。 オンラインでの情報発信が当たり前になった今、一方的な配信だけでは参加者の満足度を高めることが難しくなっています。そこで注目されているのが、リアルタイムで参加者の意見を集約し、その場で結果を共有できる投票・質問ツールです。 本記事では、ライブ配信やイベント、研修などで活用できるリアルタイム投票アプリを5つ厳選してご紹介します。 リアルタイム投票でつながる参加者とイベント リアルタイム投票やQ&A機能を使うと、視聴者や参加者の意見を即座に集計・表示できます。講義や会議の進行を妨げず、参加者全員が自分の意見を簡単に表明できる仕組みです。 従来の挙手による質疑応答では、発言しづらいと感じる参加者も少なくありません。特にオンラインイベントでは、カメラがオンになっていることへの抵抗感や、大人数の前で質問することへのハードルが存在します。 しかし、スマートフォンから匿名で投票やコメントができる仕組みがあれば、参加者は気軽に自分の意見を伝えら

By 阿部 隼也
質問受付ツールの選び方とおすすめ5選を紹介

質問受付ツールの選び方とおすすめ5選を紹介

セミナーや講演会、社内研修などで「質問はありませんか?」と投げかけても、なかなか手が挙がらない経験はないでしょうか。参加者に有益な情報を提供しても、疑問や意見が共有されないまま終わってしまうのは、主催者にとっても参加者にとっても大きな機会損失です。 こうした課題を解決するために注目されているのが「質問受付ツール」です。参加者がスマートフォンから匿名で質問を投稿できるため、発言への抵抗感が下がり、活発なコミュニケーションが生まれます。 本記事では、質問受付ツールの基本機能から、実際に役立つおすすめツール5選、そして選定時に押さえておきたいポイントまで、実務に活かせる情報をまとめて解説します。 質問受付の現場課題 イベントやセミナーの運営で最も頭を悩ませる問題の一つが、参加者からの質問をいかに引き出すかという点です。質問タイムを設けても、会場がシーンと静まり返ってしまい、仕方なく「それでは時間になりましたので」と締めくくる光景は珍しくありません。 この背景には、日本特有の文化的要因も関係しています。大勢の前で発言することへの恥ずかしさ、自分の質問が的外れではないかという不安、他

By 阿部 隼也
オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

オンラインセミナーアプリの選び方。参加者エンゲージメントを高めるポイント

近年、オンラインセミナーの活用が急速に広がっています。会場のコストや移動時間を気にすることなく、全国・世界中から参加者を集められる点は大きな魅力です。 しかし、せっかく開催しても 「参加者が途中で離脱してしまう」 「ただ見ているだけで反応が薄い」 といった課題を抱えている企業も少なくありません。 本記事では、参加者のエンゲージメントを高め、成果につながるオンラインセミナーアプリの選び方と、実務に役立つ具体的なポイントを解説します。 参加者とのつながりを生むオンライン環境の設計 オンラインセミナーにおける最大の課題は、画面越しの距離感です。会場で直接顔を合わせる機会がないからこそ、参加者が「ただ見ているだけ」にならないような仕組みが求められます。適切なツールと機能選びが、参加者のエンゲージメントを左右します。 従来のオフラインセミナーでは、会場の雰囲気や参加者同士の反応が自然と生まれましたが、オンラインではそうした「空気感」が伝わりにくくなります。だからこそ、双方向のコミュニケーション機能や、参加者の行動データを活用した設計が重要になるのです。 エンゲージメントを高

By 阿部 隼也
参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

参加者の質問を効率的に管理!ZoomウェビナーQ&A機能の使い方を徹底解説

オンラインでのセミナーやイベントが日常化する中で、Zoomウェビナーを活用している企業が増えています。しかし、ウェビナーの開催で意外と頭を悩ませるのが「参加者からの質問をどう管理するか」という点ではないでしょうか。 セミナーが盛り上がり、次々と質問が寄せられるのは嬉しいことです。一方で、質問が多すぎて整理しきれない、どの質問に優先的に答えるべきか判断に迷う、といった課題も生じます。こうした問題を解決するために役立つのが、ZoomウェビナーのQ&A機能です。 本記事では、ZoomウェビナーのQ&A機能の基本的な使い方から、参加者の質問を効率的に管理する実践的なテクニックまで、詳しく解説していきます。 ZoomウェビナーのQ&A機能とは ZoomウェビナーのQ&A機能は、ウェビナー開催中に参加者が質問を投稿し、主催者側が回答を行うための専用機能です。この機能を使うことで、質問と回答がスレッド形式で整理され、効率的なコミュニケーションが可能になります。 チャット機能との違い Zoomには「チャット機能」もあるため、「Q&A機能とチャット機能の違いは何か」と疑問に思う方も多いで

By 阿部 隼也