docker ベースで Prometheus+Grafana を構築する手順の詳細説明

docker ベースで Prometheus+Grafana を構築する手順の詳細説明

1. プロメテウスの紹介

Prometheus は、もともと SoundCloud によって開発された、オープンソースの監視、アラーム、および時系列データベースの組み合わせです。発展するにつれて、Prometheus を受け入れて採用する企業や組織が増え、コミュニティも活発になったため、独立したオープンソース プロジェクトとして企業に運用してもらうようになりました。 Google SRE の本には、BorgMon 監視システムに似た実装が Prometheus であることも記載されています。最も一般的な Kubernetes コンテナ管理システムは通常、Prometheus で監視されます。

Prometheus の基本原理は、監視対象コンポーネントのステータスを HTTP プロトコルを通じて定期的にキャプチャすることです。この利点は、SDK やその他の統合プロセスを必要とせずに、HTTP インターフェイスを提供する限り、どのコンポーネントでも監視システムに接続できることです。これは、VM や Docker などの仮想化環境に非常に適しています。

Prometheus は、Docker、Mesos、Kubernetes 環境に適した数少ない監視システムの 1 つです。

監視対象コンポーネントに関する情報をエクスポートする HTTP インターフェースはエクスポータと呼ばれます。現在、インターネット企業で一般的に使用されているコンポーネントのほとんどには、Varnish、Haproxy、Nginx、MySQL、Linux システム情報 (ディスク、メモリ、CPU、ネットワークなどを含む) など、直接使用できるエクスポーターがあります。サポートされている特定のソースについては、https://github.com/prometheus を参照してください。

他の監視システムと比較した Prometheus の主な機能は次のとおりです。

  • 多次元データ モデル (時系列はメトリック名とキー/値のディメンションによって定義されます)。
  • 非常に効率的なストレージ。平均して、1 つのサンプリングされたデータはおよそ 3.5 バイトを占めます。320 万の時系列が 30 秒ごとにサンプリングされ、60 日間保存され、およそ 228G のディスク領域を消費します。
  • 柔軟なクエリ言語。
  • 分散ストレージ、単一のサーバー ノードに依存しません。
  • イベント収集は、HTTP 経由の PULL モデルを介して行われます。
  • 中間ゲートウェイを介したプッシュ時間をサポートします。
  • サービス検出または静的構成を介してターゲットを検出します。
  • 複数のグラフィック モードとダッシュボードをサポートします。

2. Prometheusアーキテクチャの概要

この図は、Prometheus の全体的なアーキテクチャとそのエコシステム コンポーネントの一部を示しています。

そのサービス プロセスは次のとおりです。Prometheus デーモンは、ターゲットからメトリック データを定期的に取得する役割を担います。各取得ターゲットは、定期的な取得のために http サービス インターフェイスを公開する必要があります。

Prometheus: 構成ファイル、テキスト ファイル、Zookeeper、Consul、DNS SRV ルックアップなどを通じてクロール ターゲットを指定することをサポートします。非常に優れた Grafana、組み込みの Promdash、独自のテンプレート エンジンなど、さまざまな種類のチャート視覚化をサポートしています。また、必要な出力をカスタマイズするための HTTP API クエリ メソッドも提供します。

Alertmanager: Prometheus から独立したコンポーネントであり、Prometheus クエリ ステートメントをサポートし、非常に柔軟なアラーム メソッドを提供できます。

PushGateway: このコンポーネントは、クライアントがメトリックを PushGateway にアクティブにプッシュすることをサポートしますが、Prometheus はゲートウェイからデータを定期的に取得するだけです。

statsd を使用したことがある場合は、statsd がデータを直接サーバーに送信するのに対し、Prometheus は主にプロセスに依存してアクティブにキャプチャするという点を除けば、非常に似ていることがわかります。

Prometheus コンポーネントのほとんどは Go で記述されており、静的バイナリとして簡単にビルドおよびデプロイできます。完全なドキュメント、例、ガイドについては、prometheus.io をご覧ください。

3. Prometheusデータモデル

基本的に、Prometheus のすべてのストレージは時系列で実装されます。同じメトリック (メトリック名) とラベル (1 つ以上のラベル) が時系列を形成し、異なるラベルは異なる時系列を表します。一部のクエリをサポートするために、時系列ストレージが一時的に生成されることがあります。

メトリック名とラベル インジケーター名とラベル

各時系列は、一意の「メトリック名」と「ラベル (キー = 値)」のセットで構成されます。

インジケータ名: 通常、監視オブジェクトには http_requests_total などの名前を付けます。いくつかの命名規則があり、文字、数字などを含めることができます。通常は、アプリケーション名_監視オブジェクト_値タイプ_単位で始まります。例: push_total、userlogin_mysql_duration_seconds、app_memory_usage_bytes。

タグ: 時系列のさまざまな次元を識別するために使用されます。たとえば、http リクエストが POST または GET を使用するかどうか、およびそのエンドポイントが何であるかをマークするには、タグが必要です。最終的な識別子は、http_requests_total{method="POST",endpoint="/api/tracks"} です。

メトリック名 http_requests_total のタグを追加または削除すると、新しい時系列が作成されることに注意してください。

クエリ ステートメントは、上記のタグの組み合わせに基づいて集計結果をクエリできます。

このステートメントを従来のデータベースの観点から見ると、http_requests_total をテーブル名、タグをフィールド、タイムスタンプを主キー、float64 フィールドを値と見なすことができます。 (Prometheus 内のすべての値は float64 として保存されます)。

4. Prometheusの4つのデータ型

カウンタ

カウンターは、リクエスト数、完了したタスク数、エラー数などの値を蓄積するために使用されます。増え続け、決して減ることはありません。プロセスを再起動するとリセットされます。

たとえば、http_response_total{method=”GET”,endpoint=”/api/tracks”} 100 の場合、10 秒後に http_response_total{method=”GET”,endpoint=”/api/tracks”} 100 をクロールします。

ゲージ

温度の変化やメモリ使用量の変化などの一般的な値を測定します。大きくしたり小さくしたりできます。プロセスを再起動するとリセットされます。

たとえば、memory_usage_bytes{host="master-01"} 100 < キャプチャされた値、memory_usage_bytes{host="master-01"} 30、memory_usage_bytes{host="master-01"} 50、memory_usage_bytes{host="master-01"} 80 < キャプチャされた値。

ヒストグラム

ヒストグラムは棒グラフとして理解でき、リクエストの期間や応答のサイズなどのイベントの規模を追跡するためによく使用されます。特別なのは、レコードの内容をグループ化し、すべての値のカウントと合計の機能を提供できることです。

たとえば、{10 未満 = 5 回、20 未満 = 1 回、30 未満 = 2 回}、count = 7 回、sum = 7 回の合計。

まとめ

サマリーはヒストグラムと非常によく似ており、リクエストの期間や応答のサイズなどのイベントの規模を追跡するためによく使用されます。また、すべての値をカウントして合計する関数も提供します。

たとえば、count = 7 回、sum = 7 回の値評価。

追跡結果を%比率で割ることができる分位関数を提供します。たとえば、分位値が 0.95 の場合、サンプル値のデータの 95% が取得されることを意味します。

5. Prometheus(dockerバージョン)をインストールして実行する

以下では、Prometheus と Grafana を使用してローカル サーバーのパフォーマンスを監視する方法について説明します。

ローカルマシンを監視するには、エクスポーターが1つだけ必要です

node_exporter – マシンシステムデータ収集用

Grafana は、時系列データの視覚化によく使用される、オープンソースで機能豊富なデータ視覚化プラットフォームです。次のデータ ソースのサポートが組み込まれています。

以下はインストール時に使用したアーキテクチャ図です。

注: この記事では ubuntu-16.04.5-server-amd64 を使用しますが、必要なサーバーは 1 台だけです。

Dockerをインストールする

apt-get install -y docker.io

注: オンラインの記事では、docker-engine と docker-ce をインストールする必要があると書かれていますが、これはナンセンスです。バッグが全然見つからない!

docker.io をインストールするだけで完了です。

CentOSシステムの場合は、yum install -y docker-ioを使用してインストールします。

イメージパッケージをダウンロードする

docker pull prom/node-exporter
docker pull prom/prometheus
docker pull grafana/grafana

ノードエクスポーターを起動する

docker run -d -p 9100:9100 \
 -v "/proc:/host/proc:ro" \
 -v "/sys:/host/sys:ro" \
 -v "/:/rootfs:ro" \
 --net="ホスト" \
 prom/ノードエクスポーター

ポートがアップしているかどうかを確認するには、数秒待ちます。

ルート@ubuntu:~# netstat -anpt
アクティブなインターネット接続(サーバーと確立済み)
プロトコル 受信Q 送信Q ローカルアドレス 外部アドレス 状態 PID/プログラム名
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1147/sshd    
tcp 0 36 192.168.91.132:22 192.168.91.1:63648 確立 2969/0     
tcp 0 0 192.168.91.132:22 192.168.91.1:63340 確立 1321/1     
tcp6 0 0 :::9100 :::* LISTEN 3070/node_exporter

URLにアクセス:

http://192.168.91.132:9100/メトリック

効果は以下のとおりです。

これらはすべて収集されたデータであり、これを使用してデータ表示を行うことができます

プロメテウスを起動

新しいディレクトリprometheusを作成し、設定ファイルprometheus.ymlを編集します。

mkdir /opt/prometheus
cd /opt/prometheus/
vim プロメテウス.yml

内容は以下のとおりです。

グローバル:
 スクレイプ間隔: 60秒
 評価間隔: 60秒
 
scrape_configs:
 - ジョブ名: プロメテウス
  静的設定:
   - ターゲット: ['localhost:9090']
    ラベル:
     インスタンス: プロメテウス
 
 - ジョブ名: Linux
  静的設定:
   - ターゲット: ['192.168.91.132:9100']
    ラベル:
     インスタンス: ローカルホスト

注: IP アドレスを変更します。ここでは 192.168.91.132 がローカル アドレスです。

プロメテウスを起動

docker run -d \
 -p 9090:9090 \
 ディレクトリ名:prometheus.yml
 プロム/プロメテウス

数秒待ってポートの状態を確認してください

root@ubuntu:/opt/prometheus# netstat -anpt
アクティブなインターネット接続(サーバーと確立済み)
プロトコル 受信Q 送信Q ローカルアドレス 外部アドレス 状態 PID/プログラム名
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1147/sshd    
tcp 0 36 192.168.91.132:22 192.168.91.1:63648 確立 2969/0     
tcp 0 0 192.168.91.132:22 192.168.91.1:63340 確立 1321/1     
tcp6 0 0 :::9100 :::* LISTEN 3070/node_exporter
tcp6 0 0 :::22 :::* 1147/sshdを聴く    
tcp6 0 0 :::9090 :::* 3336/docker-proxyをリッスンする

URLにアクセス:

http://192.168.91.132:9090/グラフ

効果は以下のとおりです。

アクセスターゲット、URL は次のとおりです。

http://192.168.91.132:9090/ターゲット

効果は以下のとおりです。

ステータスがUPでない場合は、しばらく待つとUPになります

Grafanaを起動する

データを保存する新しい空のフォルダgrafana-storageを作成します。

mkdir /opt/grafana-storage

権限を設定する

chmod 777 -R /opt/grafana-storage

grafana ユーザーはこのディレクトリにファイルを書き込むため、777 を直接設定するのは比較的単純で大まかです。

Grafanaを起動する

docker run -d \
 -p 3000:3000 \
 --name=グラファナ \
 -v /opt/grafana-storage:/var/lib/grafana \
 グラファナ/グラファナ

数秒待ってポートの状態を確認してください

root@ubuntu:/opt/prometheus# netstat -anpt
アクティブなインターネット接続(サーバーと確立済み)
プロトコル 受信Q 送信Q ローカルアドレス 外部アドレス 状態 PID/プログラム名
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1147/sshd    
tcp 0 36 192.168.91.132:22 192.168.91.1:63648 確立 2969/0     
tcp 0 0 192.168.91.132:22 192.168.91.1:63340 確立 1321/1     
tcp6 0 0 :::9100 :::* LISTEN 3070/node_exporter
tcp6 0 0 :::22 :::* 1147/sshdを聴く    
tcp6 0 0 :::3000 :::* 3494/docker-proxyをリッスンする
tcp6 0 0 :::9090 :::* 3336/docker-proxyをリッスンする
tcp6 0 0 192.168.91.132:9100 172.17.0.2:55108 確立 3070/node_exporter

URLにアクセス:

http://192.168.91.132:3000/

デフォルトでは、ログイン ページにリダイレクトされます。デフォルトのユーザー名とパスワードはどちらも admin です。

ログイン後、パスワードのリセットを求められます。管理者パスワードを再度入力してください。

パスワードを設定すると、ホームページにリダイレクトされます。

データソースの追加をクリックします。ミラーリング方式を使用しているため、バージョンは比較的新しいです。ネットの記事に載っている写真と違いますね!

名前: プロメテウス

タイプはPrometheusを選択します。データはそこから取得されるためです。

URL PrometheusのIP+ポートを入力してください

下の「保存してテスト」をクリックします。緑色のアイコンが表示されれば、問題ないことを意味します。

ホームページに戻り、「新しいダッシュボード」をクリックします。

グラフをクリック

効果は以下のとおりです。

タイトルの下の「編集」をクリックします。

効果は以下のとおりです。

cpuを入力すると、下部にプロンプ​​トが表示されます

ここでは、15 分間のシステム負荷を示す node_load15 を監視します。下のクエリを追加をクリックしてください

効果は以下のとおりです。

合計メモリを追加

ここにもう1行あります

右をクリックするとメモリ全体が削除されます

一般をクリックし、タイトルを中国語に変更します

チャート効果は次のとおりです。

上の保存ボタンをクリックしてください

名前を入力してください

効果は以下のとおりです。

ホームページをクリックすると、

この記事の参考リンク:

http://www.ywnds.com/?p=9656

これで、docker ベースの Prometheus+Grafana の構築手順の詳細についての記事は終了です。docker を使用した Prometheus+Grafana の構築に関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • DockerはPrometheusをベースに監視システムを構築します

<<:  純粋な CSS3 マインドマップ スタイルの例

>>:  Vueは完全な選択機能を実装しています

推薦する

MySQL トランザクション分離はどのように実現されますか?

目次同時シナリオ書き込む読む読む読み取り-書き込みと書き込み-読み取りMySQL のロック行レベルロ...

要素動的ルーティングブレッドクラムの実装例

マスターするには: localStorage、コンポーネントのカプセル化えーと、GIF に変換したビ...

Vue3.0はチェックボックスコンポーネントのカプセル化を実装します

この記事では、チェックボックスコンポーネントのカプセル化を実装するためのvue3.0の具体的なコード...

Node.js でのブレークポイント再開の実装

序文通常のビジネスニーズ: 写真、Excel などをアップロードします。結局のところ、数 MB のサ...

vue + Electron でデスクトップ アプリケーションを作成するためのサンプル コード

1.vueパッケージングここでは、vueネイティブパッケージングコマンドを使用してvueプロジェクト...

Vue コードの読みやすさに関するいくつかの提案

目次1. コンポーネントをうまく活用してコードを整理する1. UIコンポーネントを抽出する2. モジ...

MySQLの日付と時刻の間隔計算の分析例

この記事では、例を使用して、MySQL の日付と時刻の間隔計算について説明します。ご参考までに、詳細...

CSSで特殊なグラフィックを描く方法

1. 三角形境界線の設定 コード: 幅: 300ピクセル; 高さ: 300px; 背景: 赤; 境界...

MySQL テーブルを削除する際の I/O エラーの原因分析と解決方法

問題現象最近、sysbench を使用して MySQL をテストしました。テストに長い時間がかかった...

ログインインターセプションを実装するためのVueルーティング

目次1. 概要2. ログインインターセプションを実装するためのルーティングナビゲーションガード1. ...

HTML における相対と絶対の使用法と違いの詳細な説明

HTML における相対と絶対の違い: 正直に言うと、HTML は世界で最もシンプルな言語です。タグ言...

VMWare ネットワーク アダプタの 3 つのモードの実装プロセスの分析

3つのモードブリッジ(ブリッジ モード)、NAT(ネットワーク アドレス変換モード)、ホストオンリー...

Ubuntu 18.04 が VMware 仮想マシンでネットワークに接続できない問題の解決策

仮想マシン内のUbuntu 18.04がネットワークに接続できない問題の解決策は次のとおりですVMw...

Win7 インストール MySQL 5.6 チュートリアル図

目次1. ダウンロード2. インストール3. my.ini ファイルを設定する(デフォルトのエンコー...