Docker は現代のアプリケーションにおいて不可欠なテクノロジーとなっていますが、アプリケーションの監視とログ管理に Docker を使用することは課題です。 Service Discovery や Load Balancing などの Docker ネットワーク機能が継続的に強化されているため、完全で安定した効率的なアプリケーション監視システムの必要性がますます高まっています。
この記事では、アプリケーションの監視とログ管理のための Docker の使用方法を簡単に紹介し、具体的なコード例を示します。
Prometheus は、SoundCloud によって開発されたオープンソースのプル モデルベースのサービス監視および警告ツールです。 Go 言語で書かれており、マイクロサービス ソリューションやクラウド環境で広く使用されています。監視ツールとして、DockerのCPU、メモリ、ネットワーク、ディスクなどを監視できるほか、多次元のデータスイッチング、柔軟なクエリ、アラーム、可視化機能もサポートしているため、迅速な対応と迅速な意思決定を可能にします。
もう 1 つ注意すべき点は、Prometheus はプル モードでサンプリングする必要があることです。つまり、監視対象のアプリケーションの /metrics インターフェイスにアクセスして監視データを取得する必要があります。したがって、監視対象アプリケーション イメージを開始するときは、最初に Prometheus にアクセスできる IP とポートを /metrics インターフェイスに設定する必要があります。以下は単純な Node.js アプリケーションです。
const express = require('express') const app = express() app.get('/', (req, res) => { res.send('Hello World!') }) app.get('/metrics', (req, res) => { res.send(` # HELP api_calls_total Total API calls # TYPE api_calls_total counter api_calls_total 100 `) }) app.listen(3000, () => { console.log('Example app listening on port 3000!') })
このコードでは、/metrics インターフェイスを通じて api_calls_total 監視インジケーターを返します。
次に、公式 Web サイトから Prometheus の Docker イメージをダウンロードし、docker-compose.yml ファイルを作成します。このファイル内に Node.js アプリケーションのデータを取得します。
version: '3' services: node: image: node:lts command: node index.js ports: - 3000:3000 prometheus: image: prom/prometheus:v2.25.2 volumes: - ./prometheus:/etc/prometheus command: - '--config.file=/etc/prometheus/prometheus.yml' - '--storage.tsdb.retention.time=15d' ports: - 9090:9090
docker-compose.yml ファイルでは、2 つのサービスを定義します。1 つは Node.js アプリケーションを実行する Node サービス、もう 1 つは監視用の Prometheus サービスです。このうち、Node サービスによって公開されるポートはポート 3000 です。ポート マッピングを通じて、docker-compose.yml の IP およびポート 3000 を介して Node アプリケーションの /metrics インターフェイスにアクセスできます。 Prometheus は、ポート 9090 を介して、対応する監視インジケーター データにアクセスできます。
最後に、prometheus.yml ファイルで、取得するデータ ソースを定義する必要があります。
global: scrape_interval: 15s evaluation_interval: 15s scrape_configs: - job_name: 'node-exporter' static_configs: - targets: ['node:9100'] - job_name: 'node-js-app' static_configs: - targets: ['node:3000']
このファイルでは、収集されるすべての Node.js アプリケーションのインジケーターを定義します。ここで、targets パラメーターは、Node.js アプリケーションの IP アドレスとそれに対応するポート番号です。ここでは、ノードとポート 3000 を使用しています。
最後に、 docker-compose up コマンドを実行してアプリケーション全体とその監視サービスを開始し、Prometheus のメンバー インジケーターを表示します。
Docker では、アプリケーション ログ データはさまざまな Docker コンテナーに分散されます。これらのログを一元管理したい場合は、ELK の ElasticSearch と Logstash を使用してログを一元管理し、コンピューター リソースの監視と分析を容易にすることができます。
始める前に、Logstash と ElasticSearch の Docker イメージをダウンロードし、docker-compose.yml ファイルを作成する必要があります。
このファイルでは 3 つのサービスを定義しており、そのうちの bls はビジネス ログをシミュレートするために使用される API サービスであり、各応答後にログが stdout とログ ファイルに記録されます。 logstash サービスは、Logstash によって公式に提供されている Docker イメージから構築されており、ログの収集、フィルタリング、送信に使用されます。 ElasticSearch サービスは、ログの保存と取得に使用されます。
version: '3' services: bls: image: nginx:alpine volumes: - ./log:/var/log/nginx - ./public:/usr/share/nginx/html:ro ports: - "8000:80" logging: driver: "json-file" options: max-size: "10m" max-file: "10" logstash: image: logstash:7.10.1 volumes: - ./logstash/pipeline:/usr/share/logstash/pipeline environment: - "ES_HOST=elasticsearch" depends_on: - elasticsearch elasticsearch: image: elasticsearch:7.10.1 environment: - "http.host=0.0.0.0" - "discovery.type=single-node" volumes: - ./elasticsearch:/usr/share/elasticsearch/data
構成ファイルでは、コンテナ内のパスをホストのログ ファイル システムにマップします。同時に、ログ オプションを通じて、ログのボリューム サイズと量が定義され、ログが占有するストレージが制限されます。
設定ファイルの logstash で、nginx_pipeline.conf
という名前の新しいパイプラインを定義します。このファイルは、nginx ログの収集、フィルタリング、送信を処理するために使用されます。 ELK の仕組みと同様に、logstash は受信したログをさまざまな条件に基づいて処理し、作成済みの Elasticsearch クラスターに送信します。この構成ファイルでは、次の処理ロジックを定義します。
input { file { path => "/var/log/nginx/access.log" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => [ "${ES_HOST}:9200" ] index => "nginx_log_index" } }
この構成ファイルでは、file という名前の入力を定義します。これは、ローカル ログ ファイルからデータを読み取ることを意味します。次に、grok ライブラリを使用して特定のテンプレートに一致するログを解析するフィルターを導入しました。最後に、環境変数 ES_HOST
を介してコンテナに取得とレポートを渡しながら、Elasticsearch クラスターのアドレスにデータを転送する出力を定義します。
最終的に、上記のように ELK 全体の構成が完了すると、効率的なログ管理システムが完成します。各ログは一元管理された場所に送信され、統合され、簡単に検索できるようになります。フィルタリングと可視化の操作。
以上がアプリケーションの監視とログ管理に Docker を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。