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は完全な選択機能を実装しています

推薦する

役に立つメタ設定方法(必読)

<meta name="viewport" content="...

Nexus を使用して Docker リポジトリを作成する方法

公式の Docker レジストリを使用して作成されたウェアハウスでは、イメージを削除してもデフォルト...

Sparkの紹介とHadoopとの比較

目次1. SparkとHadoopの比較1.1 Haoopの欠点1.2 Hadoop MR に対する...

JavaScript オブジェクトの 3 つのプロパティ

目次1. 書き込み可能: 書き込み可能2. 列挙可能: 列挙可能3. 設定可能: 設定可能オブジェク...

MySQL で複数のフィールドを連結する詳細な例

MySQL クエリ結果の行フィールドの結合は、次の 2 つの関数を使用して実装できます。 1. co...

データベースインデックスの知識ポイントの概要

目次ファーストルックインデックスインデックスの概念インデックスファイルの構成インデックスの役割SQL...

Ubuntu で FTP サーバーを構築する方法の詳細な説明 (成功保証)

1. 今日の午後、コースの要件により、Ubuntu で FTP サーバーを設定する実験を行う必要が...

CSSでnグリッドレイアウトを実装する方法

一般的なアプリケーションシナリオ現在のアプリのインターフェースは基本的に同じであり、グリッドレイアウ...

Dockerコンテナが外部ネットワークにpingできない問題を解決する

今日、docker で redis 環境を構築していたところ、yum がリソースを取得できず、インタ...

Linuxでユーザーが所属するグループを変更する方法

Linuxでユーザーが所属するグループを変更する1. ユーザーのグループを設定する usermod ...

Mysql binlog ログファイルが大きすぎる場合の解決策

目次1. 関連するbinlog設定2. binlogに関する詳細設定2.1 バイナリログモードの変更...

Nginx プロキシ転送構成を通じてクロスドメイン API プロキシ転送を実装する方法

序文WEB 開発では、クロスドメイン リクエストが頻繁に発生します。クロスドメインの問題を解決する方...

Nginx の break と last の違いの詳細な分析

まずは違いについて話しましょう最後に、書き換えられたルールは、次の場所と一致させるために書き換えられ...

CSS のフィルター属性とバックドロップフィルターの適用と違いの詳細な説明

フィルターとバックドロップフィルターにはいくつかの違いがあります。フィルターは現在の要素だけでなく、...

Ubuntu で .sh ファイルを実行するいくつかの方法の違いについて簡単に説明します。

序文特に bash 環境では、スクリプトの実行方法によって結果が異なります。スクリプトを実行する方法...