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 ログ プラグインは、コンテナーがローカルの { "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 を応援していただければ幸いです。 以下もご興味があるかもしれません:
|
<<: Expressを使用してプロジェクトを自動的にビルドするNode.jsのプロセス全体
>>: ホストがアクセスできるようにMySQLの権限を変更する方法
序文名前付きスロットは、スロット内の「name」属性を使用して要素にバインドされます。知らせ: 1....
はじめに: 最近 Hadoop プラットフォームの構築を勉強し始めたので、ローカルマシンに VMwa...
バックグラウンド コントローラー @RequestMapping("/getPDFStre...
背景まず、背景を説明します。ある制約により、当社の現在のバックアップ戦略では、1 日おきにフル バッ...
目次Vue 再帰コンポーネントドラッグイベント最近、Vue を使用して、ドラッグ可能なツリー構造図と...
目次背景MySQLが完全に起動したかどうかを確認する方法事故最初の変更2回目の改訂要約するMySQL...
このチュートリアルでは、インストールに最新の MySQL コミュニティ グリーン バージョンである ...
Rancher のデプロイメントには、次の 3 つのアーキテクチャがあります。高可用性 Kubern...
リソースファイルのプロトコルを省略する画像、メディアファイル、スタイル、スクリプトの URL では、...
序文ページを共有するときに、ブラウザの戻るボタンをクリックしてプロジェクトのホームページに戻り、訪問...
前回の記事では、MySQL 最適化の概要 - クエリの合計数を紹介しました。この記事では、クエリ ス...
私は通常、Tomcatや他のアプリケーションのリバースプロキシとしてnginxを使用しています。実際...
1. はじめにMYSQL の MDL ロックは常に頭痛の種でした。ロックについて話すとき、通常は I...
目次1. 親コンポーネントが子コンポーネントにデータを渡す1.1. 親コンポーネントコード1.2. ...
Linux がすべてのコマンドをサポートしていない場合はどうすればいいですか?すべてのLinuxコマ...