Dockerコンテナのログ処理の詳細な説明

Dockerコンテナのログ処理の詳細な説明

Docker には多くのログ プラグインがあります。デフォルトでは json-file を使用します。json-file が使用されている場合にのみ、sudo docker logs -f を表示できます。docker log プラグインを表示するには、次のコマンドを入力します。

$ sudo docker info | grep ログ

ここで説明すると、コンテナが実行中の場合、Docker はホスト マシン上にコンテナに関連するファイルを作成し、コンテナによって生成されたログをこのファイルに転送します。 docker logs -f コマンドはファイルの内容を検索し、ターミナルに表示します。

docker logs -f は、サービスがどのノードにデプロイされているかに関係なく、対応するすべてのサービス ログをターミナルに出力することは周知の事実です。そこで質問ですが、各ノードに対応するコンテナー ファイルには、サービスの完全なログ バックアップが保存されるのでしょうか、それともノード サービスに対応するコンテナーによって生成されたログのみが保存されるのでしょうか。

この問題は、各ノードが Filebeat を使用してホスト マシンのコンテナ ログ ファイルをリッスンする場合に、各ノードのコンテナ ログが完全なバックアップである場合、ログが重複してしまうことに関係しています。ノード上のコンテナのログのみが保存されている場合、重複は発生しません。

答えは、ノード上のコンテナのログのみを保持することです。docker logs -f コマンドは、オーバーレイ ネットワーク モデル上でプロトコルのレイヤーを実行し、他のノード上の同じコンテナ ログを集約します。

デフォルトでは、docker の json ファイルが使用されます。まず、デーモンを設定します。

$ sudo dockerd \
--log-driver=jsonファイル \
--log-opt ラベル=サービス名

コンテナを起動するには、次のパラメータを追加する必要があります。

$ sudo docker サービス更新 --label サービス名=test

または、docker-compose.yml で直接マークします。

バージョン: "3"

サービス:
 ゴージンデモ:
  画像: chenghuizhang/go-gin-demo:v3
  ポート:
   -8081:8081
  ネットワーク:
   - かぶせる
  展開する:
   モード: 複製
   レプリカ: 3
  ラベル:
   サービス名: go-gin-demoxxxxxxx
  ログ記録:
   オプション:
    ラベル: "サービス名"

ネットワーク:
 かぶせる:

各ノードに filebeat をインストールし、filebeat.yml を次のように構成します。

ファイルビートプロスペクター:
- タイプ: ログ
  パス:
  		# コンテナログディレクトリ - /var/lib/docker/containers/*/*.log
   # docker が使用するログドライバーは json-file なので、収集されるログの形式は json 形式です。これを true に設定すると、filebeat はログに対して json_decode 処理を実行します json.keys_under_root: true
  tail_files: 真
出力.logstash:
 ホスト: ["172.17.10.114:5044"]

logstash.conf でインデックスを設定します。

出力{
 エラスティックサーチ
  アクション => "インデックス"
  ホスト => ["172.17.10.114:9200"]
  # ログラベルを取得する
  インデックス => "%{attrs.servicename}-%{+YYYY.MM.dd}"
 }
}

Dockerfile ファイルは、プロジェクトによって出力されたログを stdout と stderr に出力する必要があります。そうしないと、json-file ログ ドライバーはコンテナー内のログ出力を収集しません。sudo docker logs -f は、ターミナルにコンテナー ログを表示しません。次のコマンドを Dockerfile に追加する必要があります。

実行 ln -sf /dev/stdout /xx/xx.log \ # 情報
	&& ln -sf /dev/stderr /xx/xx.log # エラー

または、プロジェクトの log4j 構成出力コンソールで:

<アペンダー>
  <コンソール名="コンソール" ターゲット="SYSTEM_OUT">
    <PatternLayout パターン="[%d{DEFAULT}]%m"/>
  </コンソール>
</アペンダー>

ログにコンテナ ID 名とイメージ名を記録する必要がある場合は、コンテナの実行時に次のパラメータを追加できます。

--log-opt タグ="//" 

最後に、json-file ログ プラグインは、コンテナーがローカルの/var/lib/docker/containers/*/ディレクトリのコンソールに出力するログを次の形式で生成します。

{
  "log":"[GIN-debug] [警告] 現在、Gin には Go 1.6 以降が必要であり、まもなく Go 1.7 が必要になります。",
  "ストリーム":"標準エラー出力",
  「属性」:{
    "タグ":"chenghuizhang/go-gin-demo:v3@sha256:e6c0419d64e5eda510056a38cfb803750e4ac2f0f4862d153f7c4501f576798b/mygo.2.jhqptjugfti2t4emf55sehamo/647eaa4b3913",
    "サービス名":"テスト"
  },
  「時間」:「2019-01-29T10:08:59.780161908Z」
}

logstash でログをフォーマットします。

フィルター {
 理解する {
  patterns_dir => "/etc/logstash/conf.d/patterns"
  一致 => {"メッセージ" => "%{TIMESTAMP_ISO8601:time}%{SERVICENAME:attr.servicename}%{DOCKER_TAG:attr.tag}"}
}

以上がこの記事の全内容です。皆様の勉強のお役に立てれば幸いです。また、123WORDPRESS.COM を応援していただければ幸いです。

以下もご興味があるかもしれません:
  • Dockerコンテナ内の設定ファイルの変更の実装
  • spring-boot と docker-java に基づいて Docker コンテナの動的な管理と監視を実装します [完全なソース コードのダウンロード付き]
  • Linux 上で Docker コンテナを作成、一覧表示、削除する方法の概要
  • Dockerコンテナアプリケーションログの表示方法
  • Dockerコンテナの自動終了を停止する方法の詳細な説明
  • dockerコンテナがIP経由でホストマシンにアクセスできない問題を解決する方法の詳細な説明
  • Dockerコンテナを使用してホストネットワークにアクセスする方法
  • Dockerコンテナの操作手順の概要と詳細説明

<<:  Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体

>>:  ホストがアクセスできるようにMySQLの権限を変更する方法

推薦する

HTML に基づいてページを更新せずにフォーム送信を実装する

ページを更新せずにフォーム送信を実装するために Ajax を使用することは、プロジェクトでよく使用さ...

Baidu デッドリンクファイルを作成する方法

Baidu によって定義されているデッドリンク形式には 2 種類あります。 1: XML形式のデッド...

6つの珍しいHTMLタグ

まず: <abbr> または <acronym>これら 2 つの記号は同じ意...

Dockerはコンテナにポートを動的に公開します

コンテナのIPアドレスを表示するdocker examine <コンテナ名またはID> ...

impress.js プレゼンテーション層フレームワーク (デモツール) - 初めての体験

半年もブログを書いていなかったので、少し恥ずかしいです... 正月休みは、Dota をプレイしたり ...

MySQL 5.7.21 のインストールとパスワード設定のチュートリアル

MySQL5.7.21のインストールとパスワード設定のチュートリアルは次のとおりです。公式リファレン...

Linux ディスク パーティションの実装の原理と方法の分析

覚えて: IDE ディスク: 最初のディスクは hda、2 番目のディスクは hdb...最初のディ...

CentOS 8.0.1905 は ZABBIX 4.4 バージョンをインストールします (検証済み)

Zabbix サーバー環境プラットフォームバージョン: ZABBIX バージョン 4.4システム:...

MySQL マスタースレーブの原理と構成の詳細

MySQLのマスタースレーブ構成と原理、参考までに具体的な内容は以下のとおりです。 1. 環境の選択...

HTMLとXHTML、HTML4とHTML5のタグの違いについて簡単に紹介します。

HTML と XHTML の違い1. XHTML要素は正しくネストされている必要がある2. XHT...

Win10 に Tomcat サーバーをインストールし、環境変数を構成する詳細なチュートリアル (画像とテキスト)

目次JDKをダウンロードしてインストールするTomcat 圧縮パッケージをダウンロードTomcatの...

MySQL8.0.18 複数マスターと 1 スレーブの構成

目次1. 現実的な背景2. 合意3. マスターを構成する3.1. 起動パラメータの設定3.2. パラ...

nginx.pid を開く際の失敗と無効の解決策

目次1. 問題の説明2. 問題分析3. 解決策解決策1: ディレクトリを作成する解決策2: 構成ファ...

Vue で PC アドレスをモバイル アドレスにリダイレクトする方法

要件:PC側とモバイル側は2つの独立したプロジェクトです。2つのプロジェクトの内容は基本的に同じで、...