GNU/Linux >> Linux の 問題 >  >> Panels >> Docker

Dockpromを使用したGrafanaでのDockerコンテナの監視

モニタリングは、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のJipi ドッカーホストとコンテナの監視を設定する

Dockprom 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

コメントや提案があれば、下のセクションで遠慮なく意見を共有してください。


Docker
  1. Dockerとは何ですか?コンテナの使用方法を学ぶ–例を挙げて説明

  2. Dockerを使用してRedisでNextcloudをセットアップする

  3. Dockerコンテナの監視:利点、ベストプラクティス、必須ツール

  1. DockerとKubernetes

  2. Dockerを使用した自動本番デプロイメントの3つの戦略

  3. なぜ誰もがDockerを使用しているのですか?

  1. Portainer.io(GUIツール)を使用したDockerコンテナの監視と管理–パート2

  2. Portainer.io(GUIツール)を使用したDockerコンテナの監視と管理–パート1

  3. UbuntuでPortainerを使用してDockerコンテナを管理する方法