モニタリングは、DevOpsの世界で不可欠な活動の1つです。そして、なぜ監視が良い考えであるかについてあなたを納得させる必要さえありません。あなたはすでにそれを知っていますよね?
もちろん、コマンドラインツールを使用してサーバーとサーバー上で実行されているDockerコンテナーを監視することもできます。GUIベースのアプローチにより、パフォーマンスメトリックを分析する便利さが追加され、画面上で複数のパラメーターを一度に監視できる直感的なエクスペリエンスが提供されます。監視ダッシュボードを技術者の少ない人と共有する方が簡単です。
このチュートリアルでは、dockpromを使用してDockerコンテナーの監視を設定し、Grafanaのおかげで視覚的に魅力的な形式で表示する方法を紹介します。
Dockpromを使用したDockerホストとコンテナーの監視
Dockpromは、サーバー監視のニーズに対応する集合的なツールセットとしてさまざまな監視ツールを実行するスタックの1つです。
stefanprodan / dockpromDockerホストとコンテナーをPrometheus、Grafana、cAdvisor、NodeExporter、AlertManagerで監視-stefanprodan / dockprom GitHubstefanprodanここでの例は、Nginxリバースプロキシ構成に基づいていることに注意してください。公式のDockprom構成は、Caddyに基づいています。
LinuxハンドブックとHighOnCloudでは、標準的な方法でNginxを使用しています。そこで、CaddyではなくNginxに基づくようにDockprom構成を再設計しました。結果は、以前のNginxデプロイメントのように非常に単純に見えます。
Dockpromセットアップの要点
Dockpromは、Dockerホストとコンテナーの監視ソリューションを提供するために次のツールを利用します。
Grafanaを使用すると、メトリックとログがどこに保存されているかに関係なく、クエリ、視覚化、アラートを行うことができます。これは、残りのツールのセクションで共有される残りのすべてのバックエンドアプリケーションを利用するための主要で唯一のWebフロントエンドになります。
したがって、これは、Web上のどこからでもアプリケーションにアクセスするためにずっと使用してきた人気のあるNginxベースの環境変数を追加する必要がある場所です:
environment:
- VIRTUAL_HOST=dockprom.domain.com
- LETSENCRYPT_HOST=dockprom.domain.com
ドメインまたはサブドメインに応じてこれを変更してください。
Prometheusは、世界中の何千人もの人々が使用しているオープンソースのシステム監視およびアラートツールキットです。
Pushgatewayは、スクレイプできないジョブからメトリックをプッシュできる仲介サービスです。これを読んで、実際に必要かどうかを確認することをお勧めします。これは、必要になる場合が限られているためです。
Alertmanagerは、Prometheusサーバーなどのクライアントアプリケーションから送信されたアラートを処理します。重複排除、グループ化、および電子メール、PagerDuty、OpsGenieなどの正しいレシーバー統合へのルーティングを処理します。また、アラートのサイレンシングと抑制も処理します。
cAdvisor
cAdvisorは、実行中のコンテナのリソース使用量とパフォーマンス特性をコンテナユーザーに理解させるGoogleのオープンソースツールです。
この特定の構成では、Dockpromスタックに記載されている公式のcAdvisor構成を展開した後、2つのそれぞれのエラーに基づいて2つのメトリックをフェッチするという問題に直面していました。
Failed to get system UUID: open /etc/machine-id: no such file or directory
Could not configure a source for OOM detection, disabling OOM events: open /dev/kmsg: no such file or directory
ソリューションが提供されていた公式のcAdvisorリポジトリを調べました。最初のソリューションは機能しましたが、このソリューションはdocker run
に基づいていたため、2番目のソリューションは私が探していたものではありませんでした。 ベースの起動コマンド。
DockerComposeの修正が必要でした。最初に/dev/kmsg
をマウントしようとしました しかし、それはその仕事をするつもりはありませんでした。最後に、docker run
に基づいています ベースのソリューションでは、同様の行で、DockerComposeがdevices
と呼ばれる別のフラグを提供していることがわかりました。 /dev/kmsg
をマウントするために使用できます デバイスとして。ここでそれについて読むことができます。
したがって、最初の問題の修正は、ボリュームセクションの行に次を追加することでした。
volumes:
---
---
- /etc/machine-id:/etc/machine-id:ro
- /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
2つ目は、今説明したとおりです。
devices:
- /dev/kmsg:/dev/kmsg
Dockerを介して監視するホストであるため、このようなメトリックがホストからのマウントにどのように重要であるかに注意してください。
Prometheus Node Exporterは、ハードウェアおよびカーネルに関連するさまざまなメトリックを公開します。これは、cAdvisorでメトリックが公開される方法と似ています。
上記のすべてをまとめると、完全なDockerComposeファイルは次のようになります。
version: '3.7'
networks:
net:
external: true
volumes:
prometheus_data: {}
grafana_data: {}
services:
prometheus:
image: prom/prometheus:v2.24.0
container_name: prometheus
volumes:
- ./prometheus:/etc/prometheus
- prometheus_data:/prometheus
command:
- '--config.file=/etc/prometheus/prometheus.yml'
- '--storage.tsdb.path=/prometheus'
- '--web.console.libraries=/etc/prometheus/console_libraries'
- '--web.console.templates=/etc/prometheus/consoles'
- '--storage.tsdb.retention.time=200h'
- '--web.enable-lifecycle'
restart: on-failure
networks:
- net
labels:
org.label-schema.group: "monitoring"
alertmanager:
image: prom/alertmanager:v0.21.0
container_name: alertmanager
volumes:
- ./alertmanager:/etc/alertmanager
command:
- '--config.file=/etc/alertmanager/config.yml'
- '--storage.path=/alertmanager'
restart: on-failure
networks:
- net
labels:
org.label-schema.group: "monitoring"
nodeexporter:
image: prom/node-exporter:v1.0.1
container_name: nodeexporter
volumes:
- /proc:/host/proc:ro
- /sys:/host/sys:ro
- /:/rootfs:ro
command:
- '--path.procfs=/host/proc'
- '--path.rootfs=/rootfs'
- '--path.sysfs=/host/sys'
- '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc)($$|/)'
restart: on-failure
networks:
- net
labels:
org.label-schema.group: "monitoring"
cadvisor:
image: gcr.io/cadvisor/cadvisor:v0.38.7
container_name: cadvisor
volumes:
- /:/rootfs:ro
- /var/run:/var/run:rw
- /sys:/sys:ro
- /var/lib/docker:/var/lib/docker:ro
- /etc/machine-id:/etc/machine-id:ro
- /var/lib/dbus/machine-id:/var/lib/dbus/machine-id:ro
#- /dev/kmsg:/dev/kmsg:rw
#command: ["start", "--privileged"]
restart: on-failure
devices:
- /dev/kmsg:/dev/kmsg
networks:
- net
labels:
org.label-schema.group: "monitoring"
grafana:
image: grafana/grafana:7.3.7
container_name: grafana
volumes:
- grafana_data:/var/lib/grafana
- ./grafana/provisioning:/etc/grafana/provisioning
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
- GF_USERS_ALLOW_SIGN_UP=false
restart: on-failure
networks:
- net
environment:
- VIRTUAL_HOST=dockprom.domain.com
- LETSENCRYPT_HOST=dockprom.domain.com
labels:
org.label-schema.group: "monitoring"
pushgateway:
image: prom/pushgateway:v1.3.1
container_name: pushgateway
restart: on-failure
networks:
- net
labels:
org.label-schema.group: "monitoring"
興味がある場合は、上記のファイルを確認して、公式のDockpromデザインと比較できます。
より良い稼働時間-無料のWeb監視とステータスページ電話アラート、ステータスページ、およびインシデント管理が組み込まれた、大幅に優れた稼働時間監視プラットフォーム。無料プラン付き! MetricsWatchのJipiDockprom Stackが実装するものをサーバー監視ツールの公式定義と共有したので、このNginxベースのDockpromの設計を展開するステップバイステップのプロセスと、重要なcAdvisorの修正をリストします。
テスト目的では、Linodeで1 GB nanodeを使用して構成を試すことができますが、本番目的では、サーバーに少なくとも4GBが必要です。これは主にプロメテウスによるものです。
Linode |開発者向けの独立したオープンクラウド私たちの使命は、クラウドコンピューティングをシンプルで手頃な価格で、すべての人が利用できるようにすることでイノベーションを加速することです。 Linode DockerとDockerComposeの概念に精通していると思います。また、同じサーバーで実行されているDockerコンテナのみを監視できることにも注意してください。ステップ1:公式のDockprom構成を取得します
サーバーでターミナルを開き、次のコマンドを入力します。
git clone https://github.com/stefanprodan/dockprom
cd dockprom
ステップ2:docker-compose.ymlファイルを修正します
少し前に、NodeExporterセクションでNginxベースのdocker-compose.ymlファイルについて説明して共有しました。ファイルを編集して修正してください。
ステップ3:構成を起動します!
同じdockpromディレクトリにいると仮定して、DockerComposeコマンドを実行してDockpromスタックを起動します。
docker-compose up -d
ステップ4:Grafanaを介してDockpromスタックにアクセスする
Webアクセス用のGrafana構成内にアクセスURLを追加で設定したことを覚えていますか?これで、これを使用してスタックに完全にアクセスできます。
ユーザー名とパスワードの両方がadminに設定されていました 。強力なパスワードに変更することを強くお勧めします。一般的なWebログインパネルは次のようになります:
インターフェイスが読み込まれるまでしばらく待ちます:
Grafanaにログインした後、メトリック統計にすばやく移動すると、最初は圧倒される可能性があります。そのため、ダッシュボードパネルへの直接リンクを共有して、すぐにアクセスできるようにします:https://dockprom.domain.com/dashboards
ご覧のとおり、追加する必要があるのは/dashboards
だけです。 自分のドメインまたはサブドメインに。このページから、次の指標を監視できます:
- Dockerコンテナ
- ホストシステム
- プロメテウス
- Nginx
Nginx(上記のリストの4番目で最後の1つ)は、ホストに直接インストールされていない場合、空の統計を表示することに注意してください。これは、Dockerで実行されているため、JwilderNginxと混同しないでください。このような場合は、特にNginxコンテナを監視する必要があります。
DockerホストモニタリングのGrafana画面は次のとおりです。
この記事の冒頭で、コンテナ監視のスクリーンショットをすでに共有していました:
この簡単なチュートリアルが、サーバー上でこのリソースの豊富なスタックを設定するのに役立つことを願っています。繰り返しますが、これは単一のサーバーに役立ちます。複数のサーバーにコンテナがある場合は、同じ開発者のSwarmpromを使用できます。
stefanprodan / swarmpromDocker Prometheus、Grafana、cAdvisor、Node Exporter、AlertManagerを使用したSwarmインストルメンテーション-stefanprodan/ swarmprom GitHubstefanprodanコメントや提案があれば、下のセクションで遠慮なく意見を共有してください。