プロメテウスとグラファナのモニタリング

目次

1. プロメテウスの紹介

        1.プロメテウスとは何ですか?

2. プロメテウスの特徴 

管理が簡単:

サービスの内部実行ステータスを監視します。

強力なデータモデル:

強力なクエリ言語 PromQL

効率的

スケーラブル

統合が簡単

視覚化

開放性

2.1 プロメテウスのアーキテクチャ

1.2.1 Prometheus エコシステムのコンポーネント

1.2.2 アーキテクチャの理解

1. ストレージコンピューティング層

2. コレクション層

3. アプリケーション層

2. Prometheusのインストール

2.1 Prometheusサーバーのインストール

1. インストールパッケージをアップロードします

2. インストールパッケージを解凍します。

3. ディレクトリ名を変更する

4. 構成ファイル prometheus.yml を変更します。

2.2 プッシュゲートウェイのインストール

1. Pushgateway インストール パッケージをアップロードします

2. インストールパッケージを解凍します。

2.3 Node Exporterのインストール(選択インストール)

1. インストールパッケージをアップロードします

2. インストールパッケージを解凍します。

 2.4 Prometheusサーバー、Pushgateway、およびAlertmanagerの起動

1. Prometheus Server ディレクトリで起動コマンドを実行します。

2. Pushgateway ディレクトリで起動コマンドを実行します。

3. Alertmanager ディレクトリから開始します。

2.5 Web ページを開いて表示する

3. PromQL の概要

3.1 クエリ時系列

4. Prometheus と Grafana の統合

4.1 Grafana のアップロードと解凍 (方法 1)

4.2 Docker を使用して Grafana をインストールする (方法 2)

  1.画像をプルします

2. コンテナを起動します

3. 実行中のコンテナを表示する

4.3 grafana (ポート 3000) にアクセスするためのデフォルトのアカウントとパスワードは admin です。

4.4 データソース Prometheus の追加

4.5 ダッシュボードを手動で追加する


1. プロメテウスの紹介

1.プロメテウスとは何ですか?

        Prometheus は Google の Brogmon 監視システムからインスピレーションを受けており (同様に、Kubernetes も Google の Blog システムから進化しました)、2012 年に元 Google エンジニアによって Soundcloud でオープン ソース ソフトウェアとして開発され、2015 年初頭に一般公開されました。2016 年 5 月に、Kubernetes に次いで CNCF Foundation に正式に参加した 2 番目のプロジェクトとなり、同年 6 月にバージョン 1.0 が正式にリリースされました。2017 年末には、コンテナ プラットフォームやクラウド プラットフォームとの連携を強化できる、新しいストレージ層をベースとしたバージョン 2.0 がリリースされました。Prometheus は、新世代のクラウドネイティブ監視システムです。現在、650 名以上の貢献者が Prometheus の研究開発に参加しており、120 以上のサードパーティ統合が行われています。

2. プロメテウスの特徴 

        Prometheus は、従来の監視システムのテストおよび警報モデルを完全に覆し、一元的なルール計算、統合された分析および警報に基づいた新しいモデルを形成する、オープンソースの完全な監視ソリューションです。従来の監視システムと比較して、Prometheus には次の利点があります。

  • 管理が簡単:

  1. Prometheus のコア部分には 1 つのバイナリ ファイルのみがあり、サードパーティの依存関係 (データベース、キャッシュなど) はありません。必要なのはローカル ディスクだけであるため、連鎖的な障害が発生するリスクはありません。
  2. Prometheus はプルモデル アーキテクチャに基づいており、どこでも (ローカル コンピューター、開発環境、テスト環境) 監視システムを構築できます。
  3. 一部の複雑な状況では、Prometheus Service Discovery機能を使用して監視ターゲットを動的に管理することもできます。
  • サービスの内部実行ステータスを監視します。

  1. Pometheus は、ユーザーがサービスの内部ステータスを監視することを推奨しており、Prometheus の豊富なクライアント ライブラリに基づいて、ユーザーは自分のアプリケーションに Prometheus のサポートを簡単に追加できるため、サービスやアプリケーションの実際の実行ステータスを取得できます。
  • 強力なデータモデル:

  1. 収集されたすべての監視データは、インジケーターの形式で組み込みの時系列データベース (TSDB)に保存されます。基本的なインジケーター名に加えて、すべてのサンプルには、サンプルの特性を説明するために使用される一連のラベルも含まれています。次のように:
http_request_status{code='200',content_path='/api/path',environment='produment'} => 
[value1@timestamp1,value2@timestamp2...] 

http_request_status{code='200',content_path='/api/path2',environment='produment'} => 
[value1@timestamp1,value2@timestamp2...]

 各時系列は、メトリック名 (Metrics Name) とラ​​ベルのセット (Labels) によって一意に識別されます。各時系列には、一連のサンプル値が時系列で保存されます。

  1. http_request_status: メトリクス名
  2. {code='200',content_path='/api/path',environment='produment'}: ディメンションを表すラベル これらのラベルに基づいて、モニタリング データを簡単に集約、フィルタリング、クリップすることができます。
  3. [value1@timestamp1,value2@timestamp2...]: 時間順に保存されたサンプル値。
  • 強力なクエリ言語 PromQL

        Prometheus には、強力なデータ クエリ言語 PromQL が組み込まれています。監視データのクエリと集計は PromQL を通じて実現できます。同時に、PromQL はデータの視覚化 (Grafana など) やアラートにも使用されます。次のような質問には、PromQL を使用して簡単に答えることができます。

  1. 過去の期間における 95% のアプリケーション レイテンシの分布範囲はどれくらいですか?
  2. 4 時間後のディスク容量の使用量を予測しますか?
  3. CPU 使用率が最も高い上位 5 つのサービスは何ですか? (フィルター)
  • 効率的

        監視システムの場合、多数の監視タスクが発生すると必然的に大量のデータが生成されます。Prometheus はこのデータを効率的に処理でき、単一の Prometheus Server インスタンスの場合、以下を処理できます。

  1. 何百万もの監視指標
  2. 1 秒あたり数十万のデータ ポイントを処理します
  • スケーラブル

        独立した Prometheus Sevler を各データセンターおよび各チームで実行できます。Prometheus のフェデレーション クラスターのサポートにより、複数の Prometheus インスタンスで論理クラスターを生成できます。Prometheus Server の単一インスタンスのワークロードが大きすぎる場合は、機能分割 (シャーディング) + フェデレーション クラスタリング (フェデレーション) を使用して拡張できます。

  • 統合が簡単

        監視サービスは Prometheus を使用して迅速に構築でき、アプリケーションに簡単に統合できます。現在サポートされている: Java、JMX、Python、Go、Ruby、.Net、Node.js およびその他の言語のクライアント SDK これらの SDK に基づいて、アプリケーションを Prometheus 監視にすぐに組み込んだり、独自の監視データ収集プログラムを開発したりできます. . 同時に、これらのクライアントによって収集された監視データは Prometheus をサポートするだけでなく、Graphite などの他の監視ツールもサポートします。同時に、Prometheus は他の監視システム (Graphite、Statsd、Collected、Scollector、muini、Nagios など) との統合もサポートしています。Prometheus コミュニティは、JMX、CloudWatch、EC2、MySQL、PostgresSQL、Haskell、Bash、SNMP、Consul、Haproxy、Mesos、Bind、CouchDB、Django、Memcached、RabbitMQ などの多数のサードパーティ実装に対する監視データ収集のサポートも提供しています。 、Redis、RethinkDB、Rsyslog など。

  • 視覚化

  1. Prometheus Server に付属する Prometheus UI は、データを直接簡単にクエリでき、グラフィカル形式でのデータの直接表示をサポートします。同時に、Prometheus は独立した Ruby On Rails ベースのダッシュボード ソリューション Promdash も提供します。
  2. 最新の Grafana 視覚化ツールも Prometheus を完全にサポートしており、Grafana に基づいてより美しい監視アイコンを作成できます。
  3. Prometheus が提供する API に基づいて、独自の監視可視化 UI を実装することもできます。
  • 開放性

        一般的に、アプリケーションを監視する必要がある場合、アプリケーションが対応する監視システム プロトコルのサポートを提供する必要があるため、アプリケーションは選択された監視システムにバインドされます。このバインディングによって生じる制限を軽減するために、意思決定者は、監視システムのサポートをアプリケーションに直接統合するか、別のサービスを外部に作成してさまざまな監視システムに適応させることができます。Prometheus の場合、Prometheus を使用するクライアント ライブラリの出力形式は、Prometheus の形式化されたデータをサポートするだけでなく、Graphite などの他の監視システムをサポートする形式化されたデータも出力できます。したがって、Prometheus のクライアント ライブラリを使用して、アプリケーションが Prometheus を使用せずに監視データ収集をサポートできるようにすることもできます。

2.1 プロメテウスのアーキテクチャ

1.2.1 Prometheus エコシステムのコンポーネント

  • Prometheus Server: 時系列データの収集と保存を担当するメイン サーバー
  • クライアント ライブラリ: アプリケーション コード インストルメンテーション、監視対象アプリケーションへの監視インジケーターの埋め込み
  • Pushgateway: プッシュ ゲートウェイ。有効期間の短いジョブをサポートするプッシュ ゲートウェイを提供します。
  • エクスポーター: データ取り込みコンポーネント - HAProxy、StatsD、Graphite などの一部のアプリケーション用に特別に開発されたエクスポーター。
  •  Alertmanager: アラートを処理するために特別に設計されたコンポーネント

1.2.2 アーキテクチャの理解

Prometheus は次元ストレージ モデルとして設計されているため、OLAP システムとして理解できます。

1. ストレージコンピューティング層

  • Prometheus Server には、ストレージ エンジンとコンピューティング エンジンが含まれます。
  • Retrieval コンポーネントは、Pushgateway または Exporter からインジケーター データをアクティブに取得するフェッチ コンポーネントです。
  • サービスディスカバリでは、監視対象を動的に発見できます。
  • TSDB、データ コア ストレージおよびクエリ。
  • HTTP サーバーは、外部に HTTP サービスを提供します。

2. コレクション層

コレクション層は 2 つのカテゴリに分類され、1 つはライフ サイクルが短いジョブ、もう 1 つはライフ サイクルが長いジョブです。

  • 短いジョブ: API を介して直接、インジケーターは終了時に Pushgateway にプッシュされます。
  • 長いジョブ: 取得コンポーネントは、ジョブまたはエクスポーターからデータを直接取得します。

3. アプリケーション層

アプリケーション層は主に 2 種類に分かれており、1 つは AlertManager で、もう 1 つはデータ可視化です。

  • AlertManager は Pagerduty に接続されており、有料の監視および警報システムです。SMSアラーム、5分以内にACKがない場合は電話通知、それでもACKがない場合は勤務中のマネージャーに通知...エミール、電子メールを送信...を実現できます。
  • データの視覚化

        プロメテウス

        組み込み WebUI

        グラファナ

                APIに基づいて開発されたその他のクライアント

2. Prometheusのインストール

公式サイト:https://prometheus.io/

ダウンロードアドレス: https://prometheus.io/download

2.1 Prometheusサーバーのインストール

        Prometheus は Golang に基づいて書かれており、コンパイルされたソフトウェア パッケージはサードパーティの依存関係に依存しません。対応するプラットフォームのバイナリ パッケージをダウンロードして解凍し、基本設定を追加するだけで、Prometheus Server を正常に起動できます。

1. インストールパッケージをアップロードします

        prometheus-2.29.1.linux-amd64.tar.gz を仮想マシンの /opt/software ディレクトリにアップロードします

2. インストールパッケージを解凍します。

        /opt/module ディレクトリに解凍します。

tar -zxvf prometheus-2.29.1.linux-amd64.tar.gz -C /opt/module

3. ディレクトリ名を変更する

cd /opt/module

mv prometheus-2.29.1.linux-amd64 prometheus-2.29.1

4. 構成ファイル prometheus.yml を変更します。

[root@VM-12-8-centos prometheus-2.29.1]#  vim prometheus.yml

scrape_configs 構成項目の下に構成を追加します。

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090"]
     # 添加 PushGateway 监控配置
 # 添加 PushGateway 监控配置
  - job_name: 'pushgateway'
    static_configs:
    - targets: ['要监控的服务ip:端口']
      labels:
        instance: pushgateway
    # 添加 Node Exporter 监控配置
  - job_name: 'node exporter'
    static_configs:
    - targets: ['要监控的服务ip:端口']

yml形式には必ず注意してください。単一のマシンでテストしているため、ターゲットにはローカル IP: 9090 が入力されます (9090 は prometheus のデフォルトのポートです)

設定手順:

1. グローバル設定ブロック: Prometheus サーバーのグローバル設定を制御します

  • scrape_interval: データを取得する時間間隔を構成します。デフォルトは 1 分です。
  • 評価間隔: ルール検証 (アラートの生成) の時間間隔。デフォルトは 1 分です。

2.rule_files 設定ブロック:ルール設定ファイル

3.scrape_configs:設定ブロック: 関連する収集ターゲットと、prometheus によって監視されるターゲットを設定します。Prometheus 自身の走行情報には HTTP 経由でアクセスできるため、Prometheus は自身の走行データを監視できます。

  • job_name: 監視ジョブの名前
  • static_configs: 特定のターゲットからデータをプルする静的なターゲット構成を示します。
  • ターゲット: 監視ターゲット (実際にデータを取得する場所) を指定します。Prometheus は http://hadoop202:9090/metrics からデータを取得します。Prometheus は実行時に構成を自動的にロードできます。開始時に追加する必要があります: --web.enable-lifecycle

2.2 プッシュゲートウェイのインストール

        通常の状況では、Prometheus はプル モードを使用して、メトリクスを生成するジョブまたはエクスポーター (ホストの監視に特化した NodeExporter など) から監視データをプルします。ただし、監視したいのは Flink on YARN ジョブであり、Prometheus がジョブの送信と完了を自動的に検出し、自動的にデータを取得することは明らかに困難です。PushGateway はトランジット コンポーネントであり、Flink on YARN ジョブを構成することで、メトリクスを PushGateway にプッシュし、Prometheus が PushGateway からメトリクスをプルします。

1. Pushgateway インストール パッケージをアップロードします

        Pushgateway-1.4.1.linux-amd64.tar.gz を仮想マシンの /opt/software ディレクトリにアップロードします

2. インストールパッケージを解凍します。

        /opt/module ディレクトリに解凍します。

tar -zxvf pushgateway-1.4.1.linux-amd64.tar.gz -C /opt/module

        ディレクトリ名の変更

cd /opt/module

mv pushgateway-1.4.1.linux-amd64 pushgateway-1.4.1

2.3 Node Exporterのインストール(選択インストール)

        Prometheus のアーキテクチャ設計では、Prometheus Server が主にデータ収集、ストレージ、外部データ クエリのサポートを担当し、監視サンプル データの実際の収集は Exporter によって完了されます。したがって、ホストの CPU 使用率などを監視できるようにするには、エクスポーターを使用する必要があります。Prometheus は、Exporter によって公開された HTTP サービス アドレス (通常は /metrics) から監視サンプル データを定期的に取得します。

         エクスポーターは比較的オープンな概念であり、監視対象から独立して独立して実行されるプログラムであることも、監視対象に直接組み込まれることもできます。標準形式のモニタリング サンプル データを Prometheus に提供できる限り。CPU、メモリ、ディスクなどのホストの動作指標やその他の情報を収集するためNode Exporter を使用できます。Node Exporter もGolangで書かれており、サードパーティへの依存関係がなく、ダウンロードして解凍するだけで実行できます。バイナリ パッケージの最新のノード エクスポーター バージョンは、https://prometheus.io/download/ から入手できます。

1. インストールパッケージをアップロードします

        node_exporter-1.2.2.linux-amd64.tar.gz を仮想マシンの /opt/software ディレクトリにアップロードします

2. インストールパッケージを解凍します。

        /opt/module ディレクトリに解凍します。

tar -zxvf node_exporter-1.2.2.linux-amd64.tar.gz -C /opt/module

        ディレクトリ名の変更

cd /opt/module

mv node_exporter-1.2.2.linux-amd64 node_exporter-1.2.2

        開始して、ページを通じて成功したかどうかを確認します

/opt/module/node_exporter-1.2.2の./node_exporter        を実行します。

        ブラウザ入力: http://xxx.xxx.xxx.xxx:9100/metrics、現在のノード エクスポーターによって取得された現在のホストのすべての監視データを確認できます。

 2.4 Prometheusサーバー、Pushgateway、およびAlertmanagerの起動

1. Prometheus Server ディレクトリで起動コマンドを実行します。

nohup ./prometheus --config.file=prometheus.yml > ./prometheus.log 2>&1 &

2. Pushgateway ディレクトリで起動コマンドを実行します。

nohup ./pushgateway 
--web.listen-address :9091 > ./pushgateway.log 2>&1 &

3. Alertmanager ディレクトリから開始します。

nohup ./alertmanager --config.file=alertmanager.yml > ./alertmanager.log 2>&1 &

2.5 Web ページを開いて表示する

  • ブラウザ入力: http://xxx.xxx.xxx.xxx:9090/
  • 「ステータス」をクリックし、「ターゲット」を選択します。

  •  prometheus、pushgateway、およびノー​​ド エクスポーターがすべて起動しており、インストールが正常に開始されたことを示しています。

3. PromQL の概要

Prometheus は、メトリック名と対応するラベルのセットを通じて時系列を一意に定義します。インジケーター名はモニタリング サンプルの基本的な識別を反映し、ラベルはこの基本的な特徴に基づいて収集されたデータの複数の特徴次元を提供します。ユーザーは、これらの特徴ディメンションに基づいてフィルター、集計、およびカウントを行い、新しい計算時系列を生成できます。PromQL は Prometheus の組み込みデータ クエリ言語であり、時系列データの豊富なクエリ、集計、論理演算機能のサポートを提供します。また、データ クエリ、視覚化、アラーム処理など、Prometheus の日常的なアプリケーションで広く使用されています。PromQL は Prometheus のすべてのアプリケーション シナリオの基礎であると言えます。PromQL を理解して習得することが、Prometheus を使い始めるための最初のレッスンです。

3.1 クエリ時系列

        Prometheus が Exporter を通じて対応するモニタリング インジケーターのサンプル データを収集した後、PromQL を通じてモニタリング サンプル データをクエリできます。モニタリング指標名を直接使用してクエリを実行すると、その指標の下にあるすべての時系列をクエリできます。のように:

に相当:

この式は、メトリック名prometheus_http_requests_totalを持つすべての時系列を返します。

prometheus_http_requests_total{}[5m]を使用すると、 クエリされた時系列の過去 5 分間のすべてのサンプル データが返されます。

PromQL についてはここでは詳しく説明しません。

4. Prometheus と Grafana の統合

        Grafana は Go 言語で書かれたオープン ソース アプリケーションです。主に大規模なインジケーター データの視覚的表示に使用されます。ネットワーク アーキテクチャとアプリケーション分析で最も人気のある時系列データ表示ツールです。現在、最も一般的に使用されている時系列をサポートしています。データベース。ダウンロードアドレス: https://grafana.com/grafana/download

4.1 Grafana のアップロードと解凍 (方法 1)

        grafana-8.1.2.linux-amd64.tar.gz を /opt/software/ ディレクトリにアップロードし、解凍します。

 tar -zxvf grafana-enterprise-8.1.2.linux-amd64.tar.gz -C /opt/module/

        Web を開きます: http://xxx.xxx.xxx:3000、デフォルトのユーザー名とパスワード: admin

4.2 Docker を使用して Grafana をインストールする (方法 2)

  1.画像をプルします

[root@VM-12-8-centos ~]# docker pull grafana/grafana

2. コンテナを起動します

docker run -d -p 3000:3000 --name=grafana -v /data/docker/grafana:/var/lib/grafana grafana/grafana

3. 実行中のコンテナを表示する

[root@VM-12-8-centos ~]# docker ps
CONTAINER ID   IMAGE             COMMAND                  CREATED         STATUS         PORTS                                                  NAMES
6f766b468f19   grafana/grafana   "/run.sh"                3 minutes ago   Up 3 seconds   0.0.0.0:3000->3000/tcp, :::3000->3000/tcp              grafana
1f205439cb44   mysql:5.7         "docker-entrypoint.s…"   3 weeks ago     Up 3 weeks     0.0.0.0:3306->3306/tcp, :::3306->3306/tcp, 33060/tcp   mysql
122ba76732eb   redis             "docker-entrypoint.s…"   3 weeks ago     Up 3 weeks     0.0.0.0:6379->6379/tcp, :::6379->6379/tcp              redis

4.3 grafana (ポート 3000) にアクセスするためのデフォルトのアカウントとパスワードは admin です。

4.4 データソース Prometheus の追加

[構成] をクリックし、[データ ソース] をクリックします。

プロメテウスのアドレスポートを設定する

 [保存してテスト]をクリックして

4.5 ダッシュボードを手動で追加する

左側の列の「+」記号をクリックし、「ダッシュボード」を選択します

新しいダッシュボードを追加するには、「空のパネルを追加」をクリックします

 

効果: 

以上がシャンシリコンバレーからの学びのまとめです 

おすすめ

転載: blog.csdn.net/weixin_53922163/article/details/126911141
おすすめ