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を使って実装する

推薦する

ミニプログラムはリストのカウントダウン機能を実装します

この記事の例では、ミニプログラムでリストカウントダウンを実装するための具体的なコードを参考までに共有...

小さなページングデザイン

ユーザーが目的のものを探すために前進するか後退するかを選択できるようにします。たとえば、Taobao...

CSS が複数のクラスに一致する方法のサンプルコード

CSSは複数のクラスにマッチする次の HTML タグ li、クラスはオープン スタイルです。私の要件...

...

MySQLの3つの用途と違いは同等ではない

MySQLでは判定記号がよく使われますが、等しくない記号はもっと一般的に使われます。次の3つの等しく...

システムメンテナンスページにリダイレクトするように nginx を設定する

先週末、兄弟プロジェクトはより良いサービスを提供するためにサーバーを拡張する準備をしていました。兄弟...

垂直グリッドと漸進的な行間隔の例

新しい質問急いで来て、急いで行ってください。 「垂直グリッドとプログレッシブ行間隔 (パート 1)」...

Vue は検証コードのカウントダウンボタンを実装します

この記事では、検証コードカウントダウンボタンを実装するためのVueの具体的なコードを例として紹介しま...

Vueトップタグ閲覧履歴の実装

目次ナンセンス実装された機能文章要点ナンセンスデモプレビュー実装された機能デフォルトでホームページが...

gbk utf8 GBK と UTF-8 ウェブページエンコーディングを正しく理解して使用する方法

Web ページ エンコーディングは英語では web page encoding と翻訳され、Web ...

Docker を使ってゼロから SOLO 個人ブログを構築する方法

目次1. 環境整備2. Dockerをインストールする3. MySQLマスタースレーブデータベースを...

HTML で入力ボックスに純粋な数字のみを入力するように制限する方法

inputボックスを純粋な数字のみに制限する1、onkeyup = "value=valu...

CSS3 を使用してピカチュウのアニメーション壁紙を作成する例

文章さて、次はレンダリングを見せましょう。画像を見て初めて理解することに興味が湧くでしょう。そうでな...

MySQL フルテキスト インデックス、ジョイント インデックス、Like クエリ、JSON クエリのうち、どれが高速ですか?

目次クエリの背景1. クエリをいいね2. JSON関数クエリ3. 共同インデックスクエリ4. 全文イ...

nginx をプロキシ キャッシュとして使用する方法

キャッシュを使用する目的は、バックエンドの負荷を軽減し、Web サイトの同時実行性を向上させることで...