DockerとPortainer 新着
接続する コンテナログ Excel、Sheets、AIへ
Docker はコンテナごとにログを書き込むので、それらをすべて一度にクエリします。 json ファイルにはデーモンが書き込むログが記録され、 docker ログ 手動で保存したエクスポートファイルと、Portainer 独自のサーバーログ。クエリ ストリームをフォルダーに指定すると、各行が行になり、64 文字の ID でいっぱいのディレクトリではなく、コンテナの実際の名前、イメージ、および Compose サービスが記録されます。
コンテナログのフォルダ1つが、1つのテーブルに変換されます。
Query Streams は、デーモンが既に書き込んだファイルを読み込み、フォーマットを固定し、各行の横にコンテナ名が表示された型付き列を提供します。サイドカーも、配信パイプラインも、管理すべきインデックスもありません。また、パーサーが読み取れない行は、黙って削除されるのではなく、理由とともに行として保持されます。
a3f9c1…-json.logドッカー
shopfront-stack_api.log輸出
portainer.logポーターローテーション、圧縮アーカイブ、再読み込みファイル - 処理済み
セレクト アプリ、compose_service、
カウント(*) AS 線
フロム ファイルセット.イベント
どこ ストリーム = 'stderr'
GROUP BY アプリ、compose_service
ORDER BY 線 DESC同じクエリでアプリケーションデータベースに結合します
デーモンが既に書き込んでいるファイルを、レポート可能なテーブルとして表示します。
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と読み替える)
エージェントのリリースごとに、新しいコンテナログ形式が追加されます。エージェントは常に最新の状態に保たれるため、後から追加された形式は、サーバーにアクセスすることなくコネクタに表示されます。
docker ログ Swarm ホストと Portainer CE 2.39.1 のサーバーログをエクスポートします。 事前に知っておくべきこと: Windows および Mac 用の Docker Desktop では、json ファイルログは仮想マシン内に存在し、サービスとして実行されているエージェントからはアクセスできません。 エクスポートするには、 docker logs --timestamps そして、2番目のプロファイルを使用します。
各リージョンのコンテナ、ログ読み取り 彼らが座る場所
コンテナは、通常、すべて同じ場所で実行されることはありません。オフィス内のホスト、あるクラウドリージョン内のSwarmクラスタ、別の国にある単一のサーバーなど、様々な場所に分散しています。各場所では、既存のログファイルを読み取り、クエリストリームにダイヤルアウトするネットワークエージェントが実行されます。ファイアウォールから見ると、これは通常の送信接続であり、開くべきものもVPNを構築する必要もありません。
docker ログ サービスごとのエクスポート
発信
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をログに記録する場合、そのコンテナ自身のフィールドも列に展開されます。
各行には イベント時間読み取られた元の生のスタンプと、そのファイル。各フォーマットは、その識別列を追加します。 アプリ 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に送信するか、行数、しきい値、または変化率が設定した値を超えるまでメッセージを保留することができます。
アラートとレポートの仕組みこれは意図的に行わないことです
これはリアルタイムのログではありません。クエリ ストリームは、クエリ実行時にディスク上のファイルをそのまま読み込むため、再起動ループは監視対象のストリームではなく、行として表示されます。行が出力される瞬間に1秒未満のアラートが必要な場合は、ログ パイプラインが適切なツールです。
コンテナの出力は自由形式であり、その点を明確に述べておくべき重要な意味があります。アプリケーションが出力する内容がそのままテーブルに格納されるということです。トークンや顧客のメールアドレスをログに記録した場合、その文字列は既にログファイルに存在するため、テーブルにも格納されます。Webサーバーのログのようにヘッダーマップで除外する機能はありません。そのため、結果として得られるテーブルは、ファイルと同様に慎重に取り扱う必要があります。
2つの小さな制限は、隠されているのではなく、名前が付けられています。 docker ログ コンテナ自身のラインをエクスポートすると、全体が1つに保持されます メッセージ 列。その内部行を独自のフォーマットで再解析する機能はまだ実装されていません。また、Dockerがログタグに付加できるオプション属性は形状のみで認識されます。キャプチャされたコーパス内のコンテナはいずれもそれらを使用しておらず、したがってそのパスは宣言されているだけで、証明されていません。
残りの部分は通常の設計に従います。エージェントはアウトバウンド接続を行い、ファイルを読み取ります。コンテナ内には何もインストールされず、何も書き戻されず、DockerソケットとAPIは一切変更されず、アクセスは読み取り専用です。保持フィールドは、このプリセットでは30日から始まりますが、変更可能です。
仕組み
3つのステップを踏むだけで、コンテナには何もインストールされません。
ログフォルダを指し示す
クエリ ストリーム エージェントに、ログが既に保存されている場所への読み取りアクセス権を付与する — /var/lib/docker/containers Dockerホスト上、保存されたエクスポートのフォルダ、またはそれらを収集する共有フォルダ。
フォーマットを認識します
クエリ ストリームは、ファイル名ではなく行の内容からフォーマットを識別するため、名前が変更されたコピーでも読み取りが可能であり、固定されたフォーマットと一致しないファイルは、テーブルを破損させるのではなく、理由とともに保留されます。
クエリを実行するか、結合する
ポータルから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から取得されない唯一の要素はタイムスタンプです。これはデーモンから取得されます。なぜなら、アプリケーション独自のタイムスタンプはどのような形式でも構わないため、間違った形式だと行の位置が時間的にずれてしまうからです。
パーサーが読み取れない行の場合はどうでしょうか?
削除されるのではなく、保持されます。固定されたフォーマットと一致しない行は、理由が付加された生の行として保持されるため、不正な入力や予期しないフォーマット変更は、数値の空白としてではなく、確認および照会可能な形で表示されます。
コンテナは既に通信を開始しています
ログフォルダを接続して、数分で最初のクエリを実行できます。無料プラン、クレジットカード不要、コンテナへのインストールも不要です。
読み取り専用 · 送信接続のみ · ログはホスト上に保持されます












