docker ログが取得できない問題の解決方法

docker ログが取得できない問題の解決方法

毎日サービスをチェックしているときに、portainer からコンテナ ログを確認しようとしたところ、右上隅に「コンテナ ログを取得できません」という赤い感嘆符が表示されました。

この問題はこれまで発生したことがなかったので、まずはサーバーにアクセスし、コマンド docker logs -f containerID を使用してログを確認しました。ログは移動できず、特定の時間で停止したままになっていることがわかりました。

しばらく考えた後、サービスログの印刷の問題ではないはずだと考えました。まずは Google で検索してみましたが、私の問題に一致する結果は見つかりませんでした。ログは収集して表示できる場合もありますが、一部のログは収集して表示できないため、Docker によって設定されたログ エンジンに問題があると考えられます。

当初はEFK一式をインストールしたかったのですが、ログの量が足りないと感じたので、dockerログエンジンは変更せず、デフォルトのjournaldを使い続けました。

[root@ad-official xiaoxiao]# docker info|grep ログ
 警告: デフォルトの seccomp プロファイルを使用していません
ログドライバー: journald

journald の公式ドキュメントには次のような説明があります。

man journald.conf ... RateLimitInterval=、RateLimitBurst= システムで生成されるすべてのメッセージに適用されるレート制限を設定します。 RateLimitInterval= で定義された時間間隔で、サービスによって RateLimitBurst= で指定された数よりも多くのメッセージがログに記録された場合、その間隔が終了するまで、その間隔内のそれ以降のすべてのメッセージはドロップされます。ドロップされたメッセージの数に関するメッセージが生成されます。 このレート制限はサービスごとに適用されるため、ログに記録する 2 つのサービスが互いの制限に干渉することはありません。 デフォルトは 30 秒で 1000 件のメッセージです。 RateLimitInterval= の時間指定は、次の単位で指定できます: "s"、"min"、"h"、"ms"、"us"。 あらゆる種類のレート制限をオフにするには、いずれかの値を 0 に設定します。...

ここには、デフォルトでは30秒間に1,000件のログしか受信できないと書いてあります。ここからも分かるように、少し前にDockerで1日のログファイルサイズが3G近くになるサービスをリリースしたところ、他のサービスのログに影響が出てしまいました。journaldによって大量のログが破棄されたので、設定を変えれば問題はなくなるでしょう。

/etc/systemd/journald.conf ファイルを開き、現在のログ出力に応じて RateLimitBurst をデフォルトの 1000 から 5000 に変更します。

[root@ad-official ログ]# cat /etc/systemd/journald.conf
# このファイルは systemd の一部です。
#
# systemdはフリーソフトウェアです。再配布や改変が可能です。
# GNU Lesser General Public Licenseの条件に基づき、
# フリーソフトウェア財団; ライセンスのバージョン2.1、または
# (オプション) それ以降のバージョン。
#
# このファイル内のエントリはコンパイル時のデフォルトを示します。
# このファイルを編集することで設定を変更できます。
# このファイルを削除するだけでデフォルトを復元できます。
#
# 詳細についてはjournald.conf(5)を参照してください。

[ジャーナル]
#ストレージ=自動
#圧縮=はい
#シール=はい
#分割モード=uid
#同期間隔秒=5分
#レート制限間隔=30秒
レート制限バースト=5000
#システム最大使用=
#システムキープフリー=
#システム最大ファイルサイズ=
#ランタイム最大使用=
#ランタイムキープフリー=
#ランタイム最大ファイルサイズ=
#最大保持秒数=
#MaxFileSec=1か月
Syslogに転送=いいえ
#KMsg に転送 = いいえ
#コンソールに転送=いいえ
壁へ前進=いいえ
#TTYPath=/dev/コンソール
#MaxLevelStore=デバッグ
#MaxLevelSyslog=デバッグ
#MaxLevelKMsg=通知
#MaxLevelConsole=情報
#MaxLevelWall=緊急
#ライン最大=48K

ちなみに、ForwardToSyslog と ForwardToWall を no に設定してください。デフォルトは yes ですが、そうするとジャーナル ログ ファイルはクリーンアップされますが、Syslog ログ ファイルはクリアされず、ディスクが徐々にいっぱいになります。

その後、journaldを再起動して通常の使用を再開します: systemctl restart systemd-journald.service

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

以下もご興味があるかもしれません:
  • Docker での環境変数の使用とよくある問題の解決策
  • Dockerはターミナルで中国語を入力できない問題を解決します
  • Docker がポート 2375 を公開し、サーバー攻撃を引き起こす問題と解決策
  • DockerでJenkinsをインストールし、初期プラグインのインストール失敗の問題を解決する
  • Dockerコンテナが外部ネットワークにpingできない問題を解決する
  • Docker環境でJenkinsを設定すると、タスクをビルドするときにコンソールログに文字化けした中国語の文字が表示されます
  • Ubuntu 19でdockerソースをインストールできない問題を共有する
  • Dockerに関するよくある質問

<<:  mysql 8.0.16 winx64 および Linux でルート ユーザーのパスワードを変更する方法

>>:  Vue2.0でデータの双方向バインディング機能をjsを使って実装する

推薦する

シンプルなカルーセルの最も完全なコード分析を実装するJavaScript(ES6オブジェクト指向)

この記事では、シンプルなカルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹...

Linux での MySQL 5.6 バイナリのインストール プロセス

1.1 バイナリインストールパッケージをダウンロードするhttps://dev.mysql.com/...

ネイティブ JS オブジェクト指向タイピング ゲーム

この記事では、JSオブジェクト指向タイピングゲームの具体的なコードを参考までに紹介します。具体的な内...

Apache Bench で Web ストレス テストを実装する方法

1. Apache Benchの紹介ApacheBench は、Apache サーバーに付属する W...

MySQL はどのようにしてマルチバージョンの同時実行性を実現するのでしょうか?

目次MySQL マルチバージョン同時実行1. マルチバージョン同時実行制御1. 一貫した読み取り2....

MySQL データベースの詳細な説明 - 複数テーブル クエリ - 内部結合、外部結合、サブクエリ、相関サブクエリ

複数テーブルクエリ複数のテーブルから関連するクエリ結果を取得するには、単一の SELECT ステート...

JS 非同期スタック トレース: await が Promise よりも優れている理由

概要async/await と Promise の基本的な違いは、await fn() は現在の関数...

写真とテキストによる MySQL と sqlyog のインストール チュートリアル

1. MySQL 1.1 MySQLのインストールmysql-5.5.27-winx64 ダウンロー...

CSS3 でテキストマーキーを実装するためのサンプルコード

背景何が起こったかというと、Luzhu は偶然、宇宙で最高の外部スピーカーを備えた携帯電話について知...

sqlalchemy に基づいて MySQL で追加、削除、変更、クエリ操作を実装する

需要シナリオ:上司は、クロ​​ーラーを使用してMySQLデータベースにデータを書き込んだり更新したり...

ウェブデザインでテキストのサイズを合わせる方法: 小さなテキスト、大きな体験

iPadなどのモバイル端末の普及により、人々がモバイル端末で読書に費やす時間はますます長くなり、読...

mysql 10進データ型変換の実装

最近、次のデータ型のデータベースに遭遇しました:decimal(14,4)発生した問題は次のとおりで...

Python Django アプリケーションを Docker 化する方法

Docker は、開発者やシステム管理者がアプリケーションを軽量コンテナとして構築およびパッケージ化...

Web面接でよくある質問:リフローとリペイントの原理と違い

目次ブラウザのレンダリングメカニズムリフローと再塗装リフロー逆流を引き起こす行為:再描画再描画を引き...

Linux サービスでファイアウォールを有効にする 2 つの方法

方法は2つあります: 1. サービス方法ファイアウォールのステータスを確認します。 [root@ce...