コンテナログのロゴ

DockerとPortainer 新着

接続する コンテナログ Excel、Sheets、AIへ

Docker はコンテナごとにログを書き込むので、それらをすべて一度にクエリします。 json ファイルにはデーモンが書き込むログが記録され、 docker ログ 手動で保存したエクスポートファイルと、Portainer 独自のサーバーログ。クエリ ストリームをフォルダーに指定すると、各行が行になり、64 文字の ID でいっぱいのディレクトリではなく、コンテナの実際の名前、イメージ、および Compose サービスが記録されます。

1繋がり
0受信ポート
読み取り専用強制された
コンテナログのフォーマットは3種類あります。 Docker · Portainer コンテナ、イメージ、サービスによって命名される 読み取り専用 · コンテナ内には何もインストールされていません
大きなアイデア

コンテナログのフォルダ1つが、1つのテーブルに変換されます。

Query Streams は、デーモンが既に書き込んだファイルを読み込み、フォーマットを固定し、各行の横にコンテナ名が表示された型付き列を提供します。サイドカーも、配信パイプラインも、管理すべきインデックスもありません。また、パーサーが読み取れない行は、黙って削除されるのではなく、理由とともに行として保持されます。

ログフォルダホスト上で
a3f9c1…-json.logドッカー
ドッカーshopfront-stack_api.log輸出
portainer.logポーター

ローテーション、圧縮アーカイブ、再読み込みファイル - 処理済み

noisy-containers.sqlSQL
セレクト アプリ、compose_service、
       カウント(*) ASフロム   ファイルセット.イベント
どこ  ストリーム = 'stderr'
GROUP BY アプリ、compose_service
ORDER BYDESC
結果コンテナによる標準エラー出力
アプリサービス
ショップフロントAPIAPI1,284
店頭スタッフワーカー417
ショップフロントウェブウェブ62
店舗のキャッシュキャッシュ3

同じクエリでアプリケーションデータベースに結合します

デーモンが既に書き込んでいるファイルを、レポート可能なテーブルとして表示します。

情報源

2つのツール、3つのフォーマット、サイドカーなし

各カードには、Query Streams が読み込む正確なファイル名と、それらのファイルの保存場所が示されます。この機能を実現するためにログドライバを変更する必要はありません。 jsonファイル は Docker のデフォルトであり、デフォルトはサポートされているものです。

サポートされているコンテナログ

3つのフォーマット・2つのツール
ドッカーjsonファイルログドライバー
  • 1つ {"log","stream","time"} デーモンによって書かれた、1行あたりの封筒
  • コンテナ名はDocker独自のものです config.v2.json 丸太の横
  • Image and Composeプロジェクト/サービスはコラムとして掲載されます
  • いつもの /var/lib/docker/containers
  • 追加; 番号付き回転と .gz フォロー
ドッカーdocker logs export
  • 保存したファイル docker logs --timestamps
  • RFC 3339ナノ秒のタイムスタンプ、続いてコンテナ自身の行
  • コンテナバナーの行は、偶然ではなく、宣言によってスキップされます。
  • エクスポートしたファイルを保存するフォルダ
  • サービスごとに1つのファイル。ファイル名はファイルステムから取得されます。
ポーターサーバーログ、ゼロログコンソール
  • portainer.log またはコンテナ自身の出力
  • 解析前にANSIカラーコードが削除されるため、レベルはレベルとして扱われます。
  • キー=値 末尾は列になり、残りは データ
  • 組み込みトンネルサーバーの異なる形状のラインも読み取られます
  • 分単位のタイムスタンプ(UTCと読み替える)
もっと来るこれらは始まりであって、限界ではない

エージェントのリリースごとに、新しいコンテナログ形式が追加されます。エージェントは常に最新の状態に保たれるため、後から追加された形式は、サーバーにアクセスすることなくコネクタに表示されます。

3 つのパーサーはすべて、実際のコンテナログ (json ファイルログ、大規模ログ) に対して構築およびテストされました。 docker ログ Swarm ホストと Portainer CE 2.39.1 のサーバーログをエクスポートします。 事前に知っておくべきこと: Windows および Mac 用の Docker Desktop では、json ファイルログは仮想マシン内に存在し、サービスとして実行されているエージェントからはアクセスできません。 エクスポートするには、 docker logs --timestamps そして、2番目のプロファイルを使用します。
どこを走っても

各リージョンのコンテナ、ログ読み取り 彼らが座る場所

コンテナは、通常、すべて同じ場所で実行されることはありません。オフィス内のホスト、あるクラウドリージョン内のSwarmクラスタ、別の国にある単一のサーバーなど、様々な場所に分散しています。各場所では、既存のログファイルを読み取り、クエリストリームにダイヤルアウトするネットワークエージェントが実行されます。ファイアウォールから見ると、これは通常の送信接続であり、開くべきものもVPNを構築する必要もありません。

本社 ローカルディスク上のDockerホスト、デーモンのフォルダ内のjsonファイルログ 発信
EU西側 スウォームクラスター、1つ docker ログ サービスごとのエクスポート 発信
アメリカ東部 Portainerは少数のホストを管理し、独自のサーバーログも備えています。 発信

3つのアウトバウンド接続、それらを照会する場所は1つだけ。インバウンドポートもVPNもファイアウォールの変更も不要。

各拠点につきエージェント1名

エージェントは単一のフォルダではなく、サイト全体をカバーします。必要なログフォーマットごとに、同じエージェント上に個別のファイルセットコネクタが作成されます。通常は、場所ごとに1つのエージェントを使用します。無料プランでは1つのエージェントが動作し、上位プランでは複数のエージェントが動作します。

1サイト=1エージェント=多数のコネクタ

開けるものはありません

エージェントは暗号化された送信接続を1つ確立し、送信リクエストと受信データ行の両方がその接続を介して送信されます。受信ポートもVPNもファイアウォールの変更も不要で、認証情報はネットワーク内に保持されます。

接続は1つ、双方向

サイトをまたがる単一のクエリ

すべての情報源 フェデレーションクエリ 独自のエージェントを指定することで、単一のステートメントで一方の国のログと他方の国のログを読み取り、単一の結果を返すことができます。また、どちらか一方をデータベースに結合することも可能です。BusinessおよびEnterpriseプランに含まれています。

2カ国 → 1件の結果セット

彼らは常に最新の情報を把握している。

エージェントは自動的にアップデートされるため、後のリリースで追加されたコンテナログ形式は、サーバーにログインしてインストールする必要なく、すべてのサイトに配信されます。そのため、上記のリストは固定リストではなく、あくまで出発点となるのです。

エージェントと共に新しいフォーマットが登場

難しいところ

名前、時計、カラーコード

コンテナログは、日付が書かれたテキストファイルではありません。コンテナログをデータとして扱おうとすると、通常3つの問題が発生しますが、ここでは推測ではなく宣言によってそれぞれに対処します。

名前であって、16進数IDではない

Dockerは各ログフォルダにコンテナIDを名前として付けるため、グループ化されたクエリでは読み取りが困難になります。Query Streamsは、Dockerがログの横に書き込むレコードを読み取り、実際の名前を取得し、IDを独自の列として保持します。

a3f9c1…-json.log → アプリ = shopfront-api

デーモンの時計

エポック秒単位でタイムスタンプを出力するコンテナは、それを信じるなら1970年に到着します。イベント時刻はデーモンのキャプチャ時刻であり、コンテナ自身のタイムスタンプは信頼されるのではなく、列として保持されます。

エンベロープ時間 → イベント時間

ファイル内のカラーコード

コンソールロガーは、端末のエスケープシーケンスをログに直接書き込みます。解析前にエスケープシーケンスは削除されるため、レベルはエスケープ文字で囲まれたレベルとしてではなく、レベルとして読み取られます。また、元のバイト列は変更されません。

エスケープコードが削除されました → レベル = INF

何も二度カウントされない

各ファイルは最初の4KBで識別されるため、回転されたファイルは先頭から再度読み込まれるのではなく、同じファイルとして認識されます。ローリング複製ウィンドウは、書き込み処理が末尾を再生する際に重複部分を捕捉します。

4KBのプレフィックスハッシュ・20,000レコードのウィンドウ

スキーマ

実際に取得できる列

タイムスタンプが付いた単なるテキストの塊ではありません。各フォーマットは型付きの列に解析され、直接フィルタリング、グループ化、集計を行うことができます。また、コンテナが構造化されたJSONをログに記録する場合、そのコンテナ自身のフィールドも列に展開されます。

Dockerのロゴ
jsonファイルコンテナログDockerデーモン
ストリームレベルロガーメッセージホストサービスデータ
Dockerのロゴ
docker logs exportDocker CLI
メッセージ
ポーターのロゴ
zerologコンソールログポーター
レベル発信者メッセージエラーデータ

各行には イベント時間読み取られた元の生のスタンプと、そのファイル。各フォーマットは、その識別列を追加します。 アプリ jsonファイルとPortainerの場合、 容器 エクスポートの場合、jsonファイルの行にはさらに次の情報が含まれます。 画像, compose_project, compose_service そして コンテナIDシングル メッセージ エクスポート時の列表示は意図的なものです。コンテナ自身の行は推測されるのではなく、そのまま表示されます。

一つの接続、あらゆる表面

コンテナのログデータが保存される場所

ログファイルは行き止まりではありません。フォルダを一度接続すれば、同じ読み取り専用接続でQuery Streamsがサポートするすべてのサーフェスにデータが供給されます。2回目の設定も、データの2回目のコピーも不要で、データベースコネクタとの処理の違いもありません。

対応済み

コンテナログをExcelに出力

Microsoft Excel · Excelアドイン

コンテナのログ結果をリアルタイムでワークシートに直接取り込み、必要に応じて更新できます。対応環境は、デスクトップ版Excel、Excel Online、Microsoft 365です。

Excelの仕組み
対応済み

コンテナのログをGoogleスプレッドシートに記録する

Sheetsアドオン

サイドバーから保存済みのコンテナログクエリを実行し、結果をシートにドラッグ&ドロップします。共有されている共同作業者は、各自でシートを更新できます。

Googleスプレッドシートの仕組み
対応済み

コンテナログ MCPサーバー

Claude、Cursor、MCPクライアント・MCPサーバー

AIアシスタントに、正しいSQLを作成するために必要なスキーマを含むコンテナログへの読み取り専用アクセス権を与えます。チャットには認証情報は含めません。

MCPの仕組み
対応済み

コンテナログREST API

HTTPエンドポイント

コンテナログクエリを、認証済みのJSONエンドポイントとして公開します。このエンドポイントは、OpenAPI 3.1仕様に準拠しており、Postman、Insomnia、Hoppscotch用の既製コレクションも用意されているため、どのアプリケーションでも呼び出すことができます。データベースポートは開放されません。

REST APIの仕組み
対応済み

コンテナのログをAirtableに記録する

自動化プラットフォーム

コンテナログの行をスケジュールに基づいてAirtableに同期したり、Airtable自動化スクリプト内で取得したりできます。

Airtableの仕組み
対応済み

コンテナログをBaserowに記録する

自動化プラットフォーム

RESTエンドポイント経由でコンテナログからBaserowテーブルにデータを供給します(セルフホスト環境またはBaserowクラウド環境)。

Baserowの仕組み
対応済み

コンテナログをSeaTableへ

自動化プラットフォーム

ファイルをエクスポートしたりデータベースを公開したりすることなく、コンテナログデータを使用してSeaTableベースを常に最新の状態に保ちます。

SeaTableの仕組み
対応済み

コンテナのログをSmartsheetに記録する

自動化プラットフォーム

コンテナログの結果をSmartsheetグリッドにプッシュすることで、計画やレポートが先週のエクスポートデータではなく、ソースシステムから読み込まれるようにします。

Smartsheetの仕組み
対応済み

Anvilへのコンテナログ

Anvil Works · アプリプラットフォーム

Anvil Pythonアプリをコンテナログ付きでバックアップするには、アプリ内にデータベース認証情報を埋め込むのではなく、RESTエンドポイントを経由します。

Anvilの仕組み
対応済み

Power BI へのコンテナログ

Power Query M

生成された Power Query M を Power BI アドバンスト エディターに貼り付けると、レポートは HTTPS 経由でコンテナのライブログ結果を読み取ります。ODBC ドライバーもデータベース ポートも開かれません。

Power BI の仕組み
対応済み

コンテナログのアラートとレポート

Slack · Discord · メール · Webhook

コンテナログクエリをスケジュール設定し、行をSlack、Discord、メール、または署名付きWebhookに送信するか、行数、しきい値、または変化率が設定した値を超えるまでメッセージを保留することができます。

アラートとレポートの仕組み
コンテナにとって特に注目すべきはアラートカードです。エラー数に対するスケジュールされたクエリは、ターミナルを監視する必要がないため、再起動ループが発生すると自動的にSlackに通知されます。ログ固有の手順ガイドはまだ作成されていませんが、リンク先のページで各インターフェースの動作について説明しています。

これは意図的に行わないことです

これはリアルタイムのログではありません。クエリ ストリームは、クエリ実行時にディスク上のファイルをそのまま読み込むため、再起動ループは監視対象のストリームではなく、行として表示されます。行が出力される瞬間に1秒未満のアラートが必要な場合は、ログ パイプラインが適切なツールです。

コンテナの出力は自由形式であり、その点を明確に述べておくべき重要な意味があります。アプリケーションが出力する内容がそのままテーブルに格納されるということです。トークンや顧客のメールアドレスをログに記録した場合、その文字列は既にログファイルに存在するため、テーブルにも格納されます。Webサーバーのログのようにヘッダーマップで除外する機能はありません。そのため、結果として得られるテーブルは、ファイルと同様に慎重に取り扱う必要があります。

2つの小さな制限は、隠されているのではなく、名前が付けられています。 docker ログ コンテナ自身のラインをエクスポートすると、全体が1つに保持されます メッセージ 列。その内部行を独自のフォーマットで再解析する機能はまだ実装されていません。また、Dockerがログタグに付加できるオプション属性は形状のみで認識されます。キャプチャされたコーパス内のコンテナはいずれもそれらを使用しておらず、したがってそのパスは宣言されているだけで、証明されていません。

残りの部分は通常の設計に従います。エージェントはアウトバウンド接続を行い、ファイルを読み取ります。コンテナ内には何もインストールされず、何も書き戻されず、DockerソケットとAPIは一切変更されず、アクセスは読み取り専用です。保持フィールドは、このプリセットでは30日から始まりますが、変更可能です。

仕組み

3つのステップを踏むだけで、コンテナには何もインストールされません。

01

ログフォルダを指し示す

クエリ ストリーム エージェントに、ログが既に保存されている場所への読み取りアクセス権を付与する — /var/lib/docker/containers Dockerホスト上、保存されたエクスポートのフォルダ、またはそれらを収集する共有フォルダ。

02

フォーマットを認識します

クエリ ストリームは、ファイル名ではなく行の内容からフォーマットを識別するため、名前が変更されたコピーでも読み取りが可能であり、固定されたフォーマットと一致しないファイルは、テーブルを破損させるのではなく、理由とともに保留されます。

03

クエリを実行するか、結合する

ポータルからSQLを実行し、Microsoft ExcelやGoogle Sheetsにリアルタイムで取り込むか、フェデレーションクエリを使用してコンテナログをアプリケーションデータベース内のユーザーと注文に結合します。これらすべてを1つのステートメントで実行できます。

コンテナログに関するよくある質問

Dockerのログドライバを変更する必要はありますか?

いいえ。 jsonファイル はDockerのデフォルトドライバであり、サポートされているドライバです。ログ記録を一度も設定したことがない場合は、ファイルは既に存在し、適切な形式になっています。

別のドライバーに移行した場合は、 docker logs --timestamps export は入力経路です。CLI はデーモンを介して読み込むため、どのドライバでも機能します。

コンテナのIDだけでなく、名前もどうやって知っているのですか?

Docker は、ログと同じフォルダにコンテナの記録を書き込みます。Query Streams はそのファイルから名前を読み取り、それを ID 列として使用します。イメージ、Compose プロジェクト、サービスは、その横の列として保持されます。64 文字のフォルダ ID は、 コンテナIDだから、何も失われることはない。

そのレコードが見つからない、読み取れない、または名前が付いていない場合は、代わりにフォルダ名が使用され、スイープはその発生回数をカウントします。そのため、フォールバックはサイレント置換ではなく、確認できる数値として表示されます。

私はWindows版またはMac版のDocker Desktopを使用しています。これは動作しますか?

jsonファイルログを直接攻撃することはできません。Docker Desktopはそれらを独自の仮想マシン内に保持するため、ホスト上でサービスとして実行されているエージェントはそれを閲覧できません。

その解決策はエクスポートプロファイルを使用することです。 docker logs --timestamps <コンテナ> エージェントが読み取り可能な任意のフォルダ内のファイルにリダイレクトされます。これは、回避策ではなく、それ自体がサポートされている形式です。コンテナが削除された後にログのコピーを保持するために、人々が既に使用しているのと同じ方法です。

これはリアルタイムですか?

これはストリーミングではなくオンデマンド方式です。クエリ実行時にファイルが読み込まれるため、コンテナが書き込みを行い、ファイルが取得されると、新しい行が表示されます。決まった夜間スケジュールで実行されるわけでも、リアルタイムで処理されるわけでもありません。

過去数週間のあらゆるコンテナについて質問し、その回答をスプレッドシートにまとめるには、この形状が便利で、丸太を積み重ねるよりもはるかに少ない機械で済む。

KubernetesやPodmanはどうでしょうか?

どちらも現時点では独自のプロファイルを持っておらず、カバー範囲を暗示するよりも、その旨を明記する方が良いでしょう。適用されるのはエクスポート形式です。プロファイルは正確な形状にキー付けされています。 docker logs --timestamps 書き込みは、RFC 3339 ナノ秒タイムスタンプ、スペース、コンテナ独自の行、サービスごとに 1 つのファイルで構成されます。同じ形式で書き込むツールは、それに合わせて読み取りも行います。

自分のファイルについて確実に確認する方法は、接続テストを実行することです。これは、何かを確定する前に認識された内容を報告します。

私のコンテナはJSON形式でログを出力します。そのフィールドを列として取得できますか?

はい、jsonファイルログの場合です。デーモンのエンベロープが展開され、コンテナ内部のJSONがレベル、ロガー、メッセージ、ホスト、サービス(存在する場合)の列にフラット化されます。名前付き列にマッピングされないものはすべて、 データ 破棄されるのではなく列として保持されるため、通常とは異なるフィールドもクエリ可能です。

コンテナのJSONから取得されない唯一の要素はタイムスタンプです。これはデーモンから取得されます。なぜなら、アプリケーション独自のタイムスタンプはどのような形式でも構わないため、間違った形式だと行の位置が時間的にずれてしまうからです。

パーサーが読み取れない行の場合はどうでしょうか?

削除されるのではなく、保持されます。固定されたフォーマットと一致しない行は、理由が付加された生の行として保持されるため、不正な入力や予期しないフォーマット変更は、数値の空白としてではなく、確認および照会可能な形で表示されます。

コンテナは既に通信を開始しています

ログフォルダを接続して、数分で最初のクエリを実行できます。無料プラン、クレジットカード不要、コンテナへのインストールも不要です。

読み取り専用 · 送信接続のみ · ログはホスト上に保持されます