1. 準備1. コンテナログについてDocker ログは、Docker エンジン ログとコンテナ ログの 2 つのカテゴリに分かれています。エンジン ログは通常、システム ログに配置されますが、オペレーティング システムによって配置場所が異なります。この記事では主にコンテナログについて紹介します。コンテナ ログは、コンテナ内で実行されているアプリケーションによって出力されるログとして理解できます。デフォルトでは、docker logs は、STOUT (標準出力) と STDERR (標準エラー出力) を含む、現在実行中のコンテナのログ情報を表示します。ログは json ファイル形式で /var/lib/docker/containers/<container id>/<container id>-json.log に保存されますが、この方法は実稼働環境には適していません。 デフォルトでは、コンテナ ログはログ ファイルのサイズを制限しません。コンテナはログの書き込みを継続するため、ディスクがいっぱいになり、システム アプリケーションに影響を及ぼします。 (docker log-driver はログファイルのローテーションをサポートします)
Docker はログ ドライバーの構成を提供します。ユーザーはニーズに応じてさまざまなログ ドライバーを構成できます。公式サイト(https://docs.docker.com/config/containers/logging/configure/)を参照してください。しかし、上記で設定したログ収集も Docker Daemon 経由で収集されるため、ログ収集の速度が依然としてボトルネックとなっています。 ログドライバーのログ収集速度。 syslog 14.9 MB/秒; json ファイル 37.9 MB/秒 Docker Daemon を介してログを収集せずに、ログの内容をファイルにリダイレクトし、自動的にローテーションできるツールはありますか?答えは「はい」です。S6 ベースイメージを使用してください。 S6-log は、CMD の標準出力を Docker Daemon に送信する代わりに /.../default/current にリダイレクトし、Docker Daemon がログを収集する際のパフォーマンスのボトルネックを回避します。この記事では、S6 ベース イメージを使用してアプリケーション イメージを構築し、統合ログ収集ソリューションを形成します。 2. k8sログについてk8s ログ収集ソリューションは、次の 3 つのレベルに分かれています。 1) アプリケーション(ポッド)レベル ポッドレベルのログは、デフォルトでは標準出力とフラグ入力に出力されますが、これは実際には Docker コンテナのものと同じです。表示するには、kubectl logs pod-name -n namespace を使用します。詳細については、 2) ノードレベル ノードレベルのログは、コンテナのログ ドライバーを構成することによって管理されます。これには logrotare の使用が必要です。ログが上限を超えた場合、自動的にローテーション操作が実行されます。 3) クラスターレベル クラスター レベルのログ収集には 3 つの種類があります。
ノード レベルでログを収集します。 DaemonSet は通常、各ノードにデプロイするために使用されます。この方法の利点は、ノードにデプロイするだけでアプリケーションに侵入することがないため、消費するリソースが少なくなることです。欠点は、コンテナ内のアプリケーション ログにのみ適しており、すべてのログが標準出力である必要があることです。
つまり、アプリケーション コンテナに続くポッドでログ処理コンテナが起動されます。 2つの形式があります。 1つは、アプリケーションコンテナのログを直接収集し、標準出力に出力する方法です(ストリーミングサイドカーコンテナと呼ばれます)。ただし、この時点では、ホスト上には実際には 2 つの同一のログ ファイルが存在することに注意してください。1 つはアプリケーション自体によって書き込まれたものです。もう 1 つは、サイドカーの stdout と stderr に対応する JSON ファイルです。これはディスク領域の大きな無駄なので、絶対に必要な場合、またはアプリケーション コンテナーをまったく変更できない場合にのみ使用する必要があります。 もう 1 つは、各ポッドでログ収集エージェント (logstash や fluebtd など) を起動することです。これは、ポッドのソリューション 1 にログ エージェントを配置することと同じです。ただし、このソリューションは多くのリソース (CPU、メモリ) を消費し、ログは標準出力に出力されないため、kubectl logs ではログの内容を確認できません。
この方法は比較的単純で、ログの内容はアプリケーション内のログ収集サービス バックエンドに直接送信されます。 2. ログアーキテクチャ上記の k8s ログ収集ソリューションの紹介を通じて、統合ログ収集システムを設計したい場合は、ノード エージェント方式を使用して各ノード上のコンテナーのログを収集できます。全体的なログ アーキテクチャを図に示します。 説明は次のとおりです。
プロセス全体は簡単に理解できますが、解決する必要があるのは次の点です。
3. 実践する上記の問題を解決するには、デーモンセットの形式で k8s クラスターの各ノードで実行されるログエージェント アプリケーションを開発する必要があります。アプリケーションには、開発が必要な filebeat、logrotate、および機能コンポーネントが含まれています。 最初の質問は、Filebeat 構成を動的に更新する方法です。 (https://github.com/fsnotify/fsnotify) ツールキットを使用して、ログ ディレクトリの変更の作成および削除イベントを監視し、テンプレート レンダリング メソッドを使用して Filebeat 構成ファイルを更新できます。 2 番目の質問については、(https://github.com/robfig/cron) ツールキットを使用して、ログ ファイルを定期的にローテーションする cronJob を作成します。アプリケーション ログ ファイルが属するユーザーに注意してください。ルートユーザーが所有していない場合は、設定でスイッチユーザーを設定できます。 /var/ ログ/ xxxx / xxxxx 。 ログ{ 3つ目に、Filebeatの二次開発については、ブログ投稿を参照してください: https://www.jianshu.com/p/fe3ac68f4a7a IV.結論この記事では、k8s ログ収集の簡単なアイデアのみを紹介します。ログ収集は企業のニーズに合わせてカスタマイズできます。 |
<<: Kubernetes クラスターを保護するための 3 つの重要な要素
>>: SAP:「デュアルカーボン」目標の下、クラウド時代の「新中国企業」の実現者となる
私は多くの最適化ウェブサイトで多くの記事を読みましたが、それらはすべて一般的な理論的な知識であり、誰...
はじめに:「SEOはますます複雑になっています。10年前、SEOはページにキーワードを積み重ねること...
最適化を行っている友人は、Baidu プロモーションを行う際に外部リンクを投稿することで、ウェブサイ...
いわゆる検索エンジン不正行為とは、Baidu の「検索エンジン最適化ガイド 2.0」の言葉を借りれば...
トラフィックの守護者になるか、それともコンバージョン率の改革者になるか? トラフィックは、Web サ...
estnocはアフリカのケニアに独自のデータセンターを持ち、ケニアVPS、ケニアクラウドサーバー、ケ...
ワーナークラウドの毎年恒例の618プロモーションが始まったばかりで、香港データセンターのクラウドサー...
ショートビデオ、セルフメディア、インフルエンサーのためのワンストップサービスウェブ セキュリティ保護...
.edu ドメインと .org ドメインが信頼できるドメインとしてリストされていることに加えて、ドメ...
今年のクリスマスの間、chicagovps は何の努力もしていませんでした。非常に残念です。少なくと...
5月16日、テンセントクラウドは同社の主要クラウド製品の数種類の値下げを発表し、一部の製品ラインでは...
Helmの使用は比較的簡単ですが、主にgoテンプレートのせいで、Chartパッケージを自分で開発する...
今日は、ハイエンドの openvz ベースの仮想 VPS である stablehost を紹介します...
以前は、meanservers についてあまり知りませんでしたが、今年設立された VPS ベンダーで...
スイスの VPS のご紹介: ロシアのベンダー ruvds (公式 Web サイトにはさまざまな完全...