自動監視システム Prometheus&Grafana

Prometheus はオールラウンダーであり、コンテナ監視をネイティブにサポートしています。もちろん、従来のアプリケーションの監視は簡単ではないため、コンテナと非コンテナの両方をサポートしています。すべての監視システムには、データ収集→データ処理→データ収集→データ処理→というプロセスがあります。データ保存→データ表示→アラーム

Prometheus 機能拡張ディレクトリ

  • 多次元データ モデル: メジャー名とキーと値のペアによって識別される時系列データ
  • PromSQL: — 多次元データに対して複雑なクエリを実行できる柔軟なクエリ言語
  • 分散ストレージに依存せず、単一のサーバーノードが直接動作可能
  • 時系列データを収集するための HTTP ベースのプル方式
  • 時系列データのプッシュは PushGateway コンポーネントによってサポートされています
  • サービス検出または静的構成を通じてターゲットを検出する
  • 複数のグラフィックス モードとダッシュボードのサポート (grafana)

プロメテウスの構成と建築の展示

ここに画像の説明を挿入します

名前 説明する
プロメテウスサーバー インジケーターを収集して時系列データを保存し、クエリ インターフェイスを提供します
プッシュゲートウェイ インジケーター データの短期保存。主に一時的なタスクに使用されます。
輸出業者 既存のサードパーティサービス監視指標を収集し、メトリクスを公開する
アラートマネージャー 警報
ウェブUI シンプルなWEBコンソール

データの収集、処理、保存、表示、警報を統合する一連のプロセスがすでに導入されています

データ・モデル

Prometheus は、同じ指標に属する同じメトリクス名とラベルを持つすべてのデータを時系列として保存します。つまり、Prometheus がデータ ソースからデータを取得した後、組み込みの TSDB に保存されます。これは時系列データです。データにはメトリック名が付けられます。たとえば、現在 nginx を監視している場合は、まず名前を付ける必要があります。この名前はメトリック名でもあります。N 個のラベルもあります。名前はテーブル名、ラベルはフィールドであることが理解できるため、各時系列はメトリクス名と一連のキーと値のペア (ラベルとも呼ばれます) によって一意に識別されます。
時系列の形式は次のようになります。
< metricname > { < labelname >=< labelvalue >,…}
metric name はメトリック名を指し、label name はラベル名を指します。複数のラベルが存在する場合があります。たとえば
jvm_memory_max_bytes{area="heap",id="Eden Space",}
、メトリック名は jvm_memory_max_bytes で、その後に 2 つのラベルとそれに対応する値が続きます。もちろん、引き続きラベルを指定することもできます。指定するラベルの数が増えるほど、クエリできるディメンションが増えます。

インジケーターの種類

型名 説明する
カウンター インクリメントカウンター。インターフェースリクエストの数を収集するのに適しています。
ゲージ CPU使用率に応じて任意に変更できる値
まとめ ヒストグラムタイプに似ています

タスクと例の拡張カタログ

インスタンスとは、取得できるターゲット ターゲットを指します。これは、Prometheus 構成ファイルに反映されます。タスクは、同じターゲットを持つインスタンスのコレクションです。グループとして理解できます (たとえば、注文サービス用の複数のインスタンス マシン) 1つのタスク内に複数のインスタンスターゲットを配置可能)

プロメテウスの導入

docker を使用してインストールし、新しいディレクトリ docker-monitor を作成し、その中にファイル docker-compose.yml を作成します。内容は次のとおりです。

version: "3"
services:
  prometheus:
    image: prom/prometheus:v2.4.3
    container_name: 'prometheus'
    volumes:
    - ./prometheus/:/etc/prometheus/    #映射prometheus的配置文件
    - /etc/localtime:/etc/localtime:ro  #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据
    ports:
    - '9090:9090'

Web アプリケーションのパフォーマンス指標を監視する

docker-monitor ディレクトリの下に新しい prometheus ディレクトリを追加し、その中に次の内容の prometheus 構成ファイル prometheus.yml を作成します。

global:  #全局配置
  scrape_interval:   15s  #全局定时任务抓取性能数据间隔

scrape_configs:  #抓取性能数据任务配置
- job_name:       'mall-order'  #抓取订单服务性能指标数据任务,一个job下可以配置多个抓紧的targets,比如订单服务多个实例机器
  scrape_interval: 10s  #每10s抓取一次
  metrics_path: '/actuator/prometheus'  #抓取的数据url
  static_configs:
  - targets: ['192.168.31.60:8844']  #抓取的服务器地址
    labels:
      application: 'mall-order-label'  #抓取任务标签
  #- targets: ['192.168.31.60:8844']  #依次向下加   
  #  labels:
  #    application: 'mall-order-label'  #抓取任务标签

- job_name: 'prometheus'  #抓取prometheus自身性能指标数据任务
  scrape_interval: 5s
  static_configs:
  - targets: ['localhost:9090']

docker-monitor ディレクトリで次のコマンドを実行して prometheus を起動します。

docker-compose up -d

以下の図に示すように、ブラウザで prometheus にアクセスします: http://192.168.31.60:9090:
ここに画像の説明を挿入します
[ステータス] ドロップダウンをクリックし、[ターゲット] を選択すると、インターフェイスは次のようになります:
ここに画像の説明を挿入します
ここでは、prometheus で構成された 2 つのクロール タスクを示しますが、 mall-order タスク 失敗しました。状態はダウンしています。次に、prometheus がデータを取得できるように mall-order サービスを構成する必要があります。
まず、次のように、tulingmall-order サービスの下に pom 依存関係を追加する必要があります。

<!-- 开启springboot的应用监控 -->
<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!-- 增加prometheus整合 -->
<dependency>
   <groupId>io.micrometer</groupId>
   <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

また、次のように、モールオーダーサービスの設定ファイルに Springboot 管理監視を有効にする設定を追加する必要があります。

management: #开启SpringBoot Admin的监控
  endpoints:
    promethus:
      enable: true
    web:
      exposure:
        include: '*'
  endpoint:
    health:
      show-details: always

以下に示すように、mall-order サービスを再起動し、prometheus ページを更新します。
ここに画像の説明を挿入します
mall-order: http://192.168.31.60:8844/actuator/prometheus の下にある prometheus リンクをクリックすると、外部に公開されている、以下に示すように、サービスを注文します:
ここに画像の説明を挿入します
インジケーターの 1 つを例として挙げます: jvm_threads_states_threads{state="runnable",} 13.0、これは jvm_threads_states_threads メトリクスを表し、state は runnable に等しいです。データは 13 個あります。「グラフ」リンクをクリックします。プロメテウス ページで、
次のようにインジケーター クエリ ページに移動し、関連するインジケーターをクエリします。次
ここに画像の説明を挿入します
のように、クエリ ボックスにメトリクス インジケーターを入力し、[実行] ボタンをクリックします。[実行] ボタン
ここに画像の説明を挿入します
の下にある [グラフ] リンクをクリックして、対応するアイコンを表示します。以下のようにインジケーターに追加します。
ここに画像の説明を挿入します
上記は prometheus に付属するインジケーター クエリ インターフェイスですが、単純すぎるため、一般的には grafana グラフィカル表示ツールを使用して prometheus を操作します。

Grafana のデプロイメント

まず docker を使用して grafana をインストールし、次に示すように、grafana のインストール構成を上記の docker-compose.yml ファイルに追加します。

version: "3"
services:
  prometheus:
    image: prom/prometheus:v2.4.3
    container_name: 'prometheus'
    volumes:
    - ./prometheus/:/etc/prometheus/    #映射prometheus的配置文件
    - /etc/localtime:/etc/localtime:ro  #同步容器与宿主机的时间,这个非常重要,如果时间不一致,会导致prometheus抓不到数据
    ports:
    - '9090:9090'
  grafana:  
    image: grafana/grafana:5.2.4
    container_name: 'grafana'
    ports:  
    - '3000:3000'
    volumes: 
    - ./grafana/config/grafana.ini:/etc/grafana/grafana.ini  #grafana报警邮件配置
    - ./grafana/provisioning/:/etc/grafana/provisioning/  #配置grafana的prometheus数据源
    - /etc/localtime:/etc/localtime:ro
    env_file:
    - ./grafana/config.monitoring  #grafana登录配置
    depends_on:
    - prometheus  #grafana需要在prometheus之后启动

docker-monitor ディレクトリの下に grafana ディレクトリを追加し、その中に次の内容のファイル config.monitoring を作成します。

GF_SECURITY_ADMIN_PASSWORD=password  #grafana管理界面的登录用户密码,用户名是admin
GF_USERS_ALLOW_SIGN_UP=false  #grafana管理界面是否允许注册,默认不允许

grafana ディレクトリにプロビジョニング ディレクトリを作成し、その中に datasources ディレクトリを作成し、datasources ディレクトリに次の内容の新しいファイル datasource.yml を作成します。

# config file version
apiVersion: 1

deleteDatasources:  #如果之前存在name为Prometheus,orgId为1的数据源先删除
- name: Prometheus
  orgId: 1

datasources:  #配置Prometheus的数据源
- name: Prometheus
  type: prometheus
  access: proxy
  orgId: 1
  url: http://prometheus:9090  #在相同的docker compose下,可以直接用prometheus服务名直接访问
  basicAuth: false
  isDefault: true
  version: 1
  editable: true

grafana ディレクトリの下にディレクトリ config を作成し、その中に次の内容のファイル grafana.ini を作成します。

#################################### SMTP / Emailing ##########################
# 配置邮件服务器
[smtp]
enabled = true
# 发件服务器
host = smtp.qq.com:465
# smtp账号
user = 135*****[email protected]
# smtp 授权码
password = fyjucfwgwjadgfdj
# 发信邮箱
from_address = 135*****[email protected]
# 发信人
from_name = yuyang

認証コードはqqメールボックス設定で取得されます。
ここに画像の説明を挿入します

docker compose で grafana を起動し、grafana ページ http://192.168.31.60:3000 にアクセスします。ユーザー名は admin、パスワードはpassword です。ログインして、次のようにホームページに入ります。プラス記号をクリックしてオンにし
ここに画像の説明を挿入します
ます
ここに画像の説明を挿入します
。左側は、事前に準備したビジュアライゼーションをインポートします。 インジケーター ファイル web-dashboard.json (ファイルはこのレッスンのコース資料に含まれています。これらはすべて運用およびメンテナンスのインジケーターであり、既製のものはオンラインで見つけることができます) インポート
ここに画像の説明を挿入します
後web-dashboard.json で、ページ上で Prometheus を選択し、インポート ボタンをクリックすると、ページが次のように表示されます (データがない場合があります)。
ここに画像の説明を挿入します

監視インジケーター アラームの例を作成します。たとえば、システムが特定のレベルの 5XX エラーを報告すると、アラームに電子メール通知が送信されます。

[エラー] パネルをクリックし、[編集] を選択して、次のようにエラー インジケーターの詳細パネルに入ります。
ここに画像の説明を挿入します
下の図をクリックして、新しいアラーム チャネルを追加します。
ここに画像の説明を挿入します
次に、電子メール アラームを選択するか、Web フック メソッドを選択して http 呼び出しを設定できます。通知方法は次のとおりです:
ここに画像の説明を挿入します
最後に、[保存] ボタンをクリックして保存し
、[エラーの詳細] ページに入り、アラート アラームを設定します。図に示すように、設定する必要がある場所は次のとおりです。図中:
ここに画像の説明を挿入します
ここに画像の説明を挿入します
ここに画像の説明を挿入します
アラームメールは以下のとおりです。

ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/Forbidden_City/article/details/132713385