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 呼び出しを設定できます。通知方法は次のとおりです:
最後に、[保存] ボタンをクリックして保存し
、[エラーの詳細] ページに入り、アラート アラームを設定します。図に示すように、設定する必要がある場所は次のとおりです。図中:
アラームメールは以下のとおりです。