[TOC]
序文
春ブーツ春ブーツアクチュエータのアプリケーションに強力な監視機能を提供します。このコンポーネントを、知っておくべき小さなパートナーの監視機能の知識を持っていました。春ブーツ2.xのを開始し、アクチュエータ基礎となるマイクロメータを変更する、それがより強く、より柔軟な監視機能を提供します。マイクロメータは、それがSLF4J監視業界に例えることができ、監視ファサードです。マイクロメータ、様々なインターフェースが可能なアプリケーションと監視システム、このような記事などを導入することである。プロメテウス
プロメテウスは、配列データベース(TSDB)+ SoundCloudがモニターによって開発されたオープンソースのシステム警告+はGoogleのBorgMonは、システムのオープンソース版を監視しているとき、プロメテウスほとんどのコンポーネントは、囲碁の言語を使用しています。現在、CNCF財団でホストされ、成功裏に孵化しました。オープンソースコミュニティではプロメテウスは、現在のクラスタの何千ものサポート十プロメテウス十分な規模の性能が非常に活発です。
プロメテウスの特徴:
- 時系列データの識別の指標と多次元データ・モデルの名前と値
- これは、柔軟なクエリ言語を持っていますPromQL
- 分散ストレージに依存しない、単一のサーバノードが自律的です
- データ取り込みタイミングプルHTTPベースの方法により、
- プッシュ配列データは、中間ゲートウェイによって実行することができる場合
- サポートサービスまたはターゲットクライアントを発見するために、静的な構成によって発見
- 等Grafanaようチャート及びインタフェース表示の様々なサポート
その他のリファレンス:公式文書、GitHubのリポジトリ
GrafanaはGO言語で書かれたオープンソースのアプリケーションで、クロスプラットフォームの計測と解析と可視化+アラームをサポートしています。データは、クエリによって収集され、その後、視覚的に実証して知らせます。Grafanaは、データソースとプレゼンテーションの様々なサポート、ワードクールな指標を監視し、強力な可視化ツールです。
その他のリファレンス:公式文書、GitHubのリポジトリ
プロジェクトを作成します。
本論文の主な目的は、我々はハンズオンを見て、制御用マイクロサービス、ツールの概念を簡単に理解を達成することです。まず、次のように主に依存しているシンプルな春のブートプロジェクトを作成します:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
- ヒント:あなたがここに他の監視システムをドッキングしたい場合は、のみに依存するパッケージ名を変更する必要があります。例えば、会いたいと思い
Influx
、それが代わりに依存するmicrometer-registry-influx
ことができます。
プロジェクト設定を編集します:
server:
port: 9562
spring:
application:
# 指定应用名
name: prometheus-demo
management:
endpoints:
web:
exposure:
# 将 Actuator 的 /actuator/prometheus 端点暴露出来
include: 'prometheus'
metrics:
tags:
# 为指标设置一个Tag,这里设置为应用名,Tag是Prometheus提供的一种能力,从而实现更加灵活的筛选
application: ${spring.application.name}
上記の手順を完了した後、データを監視し、エンドポイントが正常に戻ったことができるかどうかを確認するための簡単なテストを実行します。プロジェクト、訪問の開始/actuator/prometheus
エンドポイントを。これは、通常の状況下で、以下の内容を返します。
# HELP process_start_time_seconds Start time of the process since unix epoch.
# TYPE process_start_time_seconds gauge
process_start_time_seconds{application="prometheus-demo",} 1.577697308142E9
# HELP jvm_buffer_memory_used_bytes An estimate of the memory that the Java virtual machine is using for this buffer pool
# TYPE jvm_buffer_memory_used_bytes gauge
jvm_buffer_memory_used_bytes{application="prometheus-demo",id="mapped",} 0.0
jvm_buffer_memory_used_bytes{application="prometheus-demo",id="direct",} 16384.0
# HELP tomcat_sessions_expired_sessions_total
# TYPE tomcat_sessions_expired_sessions_total counter
tomcat_sessions_expired_sessions_total{application="prometheus-demo",} 0.0
# HELP jvm_gc_pause_seconds Time spent in GC pause
# TYPE jvm_gc_pause_seconds summary
jvm_gc_pause_seconds_count{action="end of minor GC",application="prometheus-demo",cause="Metadata GC Threshold",} 1.0
jvm_gc_pause_seconds_sum{action="end of minor GC",application="prometheus-demo",cause="Metadata GC Threshold",} 0.006
jvm_gc_pause_seconds_count{action="end of major GC",application="prometheus-demo",cause="Metadata GC Threshold",} 1.0
jvm_gc_pause_seconds_sum{action="end of major GC",application="prometheus-demo",cause="Metadata GC Threshold",} 0.032
jvm_gc_pause_seconds_count{action="end of minor GC",application="prometheus-demo",cause="Allocation Failure",} 1.0
jvm_gc_pause_seconds_sum{action="end of minor GC",application="prometheus-demo",cause="Allocation Failure",} 0.008
# HELP jvm_gc_pause_seconds_max Time spent in GC pause
# TYPE jvm_gc_pause_seconds_max gauge
jvm_gc_pause_seconds_max{action="end of minor GC",application="prometheus-demo",cause="Metadata GC Threshold",} 0.006
jvm_gc_pause_seconds_max{action="end of major GC",application="prometheus-demo",cause="Metadata GC Threshold",} 0.032
jvm_gc_pause_seconds_max{action="end of minor GC",application="prometheus-demo",cause="Allocation Failure",} 0.008
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{application="prometheus-demo",area="heap",id="PS Survivor Space",} 0.0
jvm_memory_used_bytes{application="prometheus-demo",area="heap",id="PS Old Gen",} 1.3801776E7
jvm_memory_used_bytes{application="prometheus-demo",area="nonheap",id="Metaspace",} 3.522832E7
jvm_memory_used_bytes{application="prometheus-demo",area="nonheap",id="Code Cache",} 6860800.0
jvm_memory_used_bytes{application="prometheus-demo",area="heap",id="PS Eden Space",} 1.9782928E7
jvm_memory_used_bytes{application="prometheus-demo",area="nonheap",id="Compressed Class Space",} 4825568.0
# HELP logback_events_total Number of error level events that made it to the logs
# TYPE logback_events_total counter
logback_events_total{application="prometheus-demo",level="info",} 7.0
logback_events_total{application="prometheus-demo",level="trace",} 0.0
logback_events_total{application="prometheus-demo",level="warn",} 0.0
logback_events_total{application="prometheus-demo",level="debug",} 0.0
logback_events_total{application="prometheus-demo",level="error",} 0.0
# HELP process_uptime_seconds The uptime of the Java virtual machine
# TYPE process_uptime_seconds gauge
process_uptime_seconds{application="prometheus-demo",} 30.499
# HELP jvm_buffer_count_buffers An estimate of the number of buffers in the pool
# TYPE jvm_buffer_count_buffers gauge
jvm_buffer_count_buffers{application="prometheus-demo",id="mapped",} 0.0
jvm_buffer_count_buffers{application="prometheus-demo",id="direct",} 2.0
# HELP system_cpu_count The number of processors available to the Java virtual machine
# TYPE system_cpu_count gauge
system_cpu_count{application="prometheus-demo",} 6.0
# HELP jvm_threads_peak_threads The peak live thread count since the Java virtual machine started or peak was reset
# TYPE jvm_threads_peak_threads gauge
jvm_threads_peak_threads{application="prometheus-demo",} 22.0
# HELP tomcat_sessions_alive_max_seconds
# TYPE tomcat_sessions_alive_max_seconds gauge
tomcat_sessions_alive_max_seconds{application="prometheus-demo",} 0.0
# HELP jvm_memory_committed_bytes The amount of memory in bytes that is committed for the Java virtual machine to use
# TYPE jvm_memory_committed_bytes gauge
jvm_memory_committed_bytes{application="prometheus-demo",area="heap",id="PS Survivor Space",} 1.5204352E7
jvm_memory_committed_bytes{application="prometheus-demo",area="heap",id="PS Old Gen",} 1.31596288E8
jvm_memory_committed_bytes{application="prometheus-demo",area="nonheap",id="Metaspace",} 3.7879808E7
jvm_memory_committed_bytes{application="prometheus-demo",area="nonheap",id="Code Cache",} 6881280.0
jvm_memory_committed_bytes{application="prometheus-demo",area="heap",id="PS Eden Space",} 1.76685056E8
jvm_memory_committed_bytes{application="prometheus-demo",area="nonheap",id="Compressed Class Space",} 5373952.0
# HELP jvm_buffer_total_capacity_bytes An estimate of the total capacity of the buffers in this pool
# TYPE jvm_buffer_total_capacity_bytes gauge
jvm_buffer_total_capacity_bytes{application="prometheus-demo",id="mapped",} 0.0
jvm_buffer_total_capacity_bytes{application="prometheus-demo",id="direct",} 16384.0
# HELP jvm_gc_live_data_size_bytes Size of old generation memory pool after a full GC
# TYPE jvm_gc_live_data_size_bytes gauge
jvm_gc_live_data_size_bytes{application="prometheus-demo",} 1.3801776E7
# HELP jvm_memory_max_bytes The maximum amount of memory in bytes that can be used for memory management
# TYPE jvm_memory_max_bytes gauge
jvm_memory_max_bytes{application="prometheus-demo",area="heap",id="PS Survivor Space",} 1.5204352E7
jvm_memory_max_bytes{application="prometheus-demo",area="heap",id="PS Old Gen",} 2.841116672E9
jvm_memory_max_bytes{application="prometheus-demo",area="nonheap",id="Metaspace",} -1.0
jvm_memory_max_bytes{application="prometheus-demo",area="nonheap",id="Code Cache",} 2.5165824E8
jvm_memory_max_bytes{application="prometheus-demo",area="heap",id="PS Eden Space",} 1.390411776E9
jvm_memory_max_bytes{application="prometheus-demo",area="nonheap",id="Compressed Class Space",} 1.073741824E9
# HELP jvm_threads_daemon_threads The current number of live daemon threads
# TYPE jvm_threads_daemon_threads gauge
jvm_threads_daemon_threads{application="prometheus-demo",} 18.0
# HELP jvm_threads_states_threads The current number of threads having NEW state
# TYPE jvm_threads_states_threads gauge
jvm_threads_states_threads{application="prometheus-demo",state="runnable",} 8.0
jvm_threads_states_threads{application="prometheus-demo",state="new",} 0.0
jvm_threads_states_threads{application="prometheus-demo",state="timed-waiting",} 2.0
jvm_threads_states_threads{application="prometheus-demo",state="blocked",} 0.0
jvm_threads_states_threads{application="prometheus-demo",state="waiting",} 12.0
jvm_threads_states_threads{application="prometheus-demo",state="terminated",} 0.0
# HELP jvm_gc_memory_promoted_bytes_total Count of positive increases in the size of the old generation memory pool before GC to after GC
# TYPE jvm_gc_memory_promoted_bytes_total counter
jvm_gc_memory_promoted_bytes_total{application="prometheus-demo",} 8296848.0
# HELP tomcat_sessions_active_max_sessions
# TYPE tomcat_sessions_active_max_sessions gauge
tomcat_sessions_active_max_sessions{application="prometheus-demo",} 0.0
# HELP tomcat_sessions_created_sessions_total
# TYPE tomcat_sessions_created_sessions_total counter
tomcat_sessions_created_sessions_total{application="prometheus-demo",} 0.0
# HELP jvm_gc_memory_allocated_bytes_total Incremented for an increase in the size of the young generation memory pool after one GC to before the next
# TYPE jvm_gc_memory_allocated_bytes_total counter
jvm_gc_memory_allocated_bytes_total{application="prometheus-demo",} 1.36924824E8
# HELP process_cpu_usage The "recent cpu usage" for the Java Virtual Machine process
# TYPE process_cpu_usage gauge
process_cpu_usage{application="prometheus-demo",} 0.10024585094452443
# HELP system_cpu_usage The "recent cpu usage" for the whole system
# TYPE system_cpu_usage gauge
system_cpu_usage{application="prometheus-demo",} 0.38661791030714154
# HELP tomcat_sessions_active_current_sessions
# TYPE tomcat_sessions_active_current_sessions gauge
tomcat_sessions_active_current_sessions{application="prometheus-demo",} 0.0
# HELP jvm_classes_loaded_classes The number of classes that are currently loaded in the Java virtual machine
# TYPE jvm_classes_loaded_classes gauge
jvm_classes_loaded_classes{application="prometheus-demo",} 7195.0
# HELP http_server_requests_seconds
# TYPE http_server_requests_seconds summary
http_server_requests_seconds_count{application="prometheus-demo",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 1.0
http_server_requests_seconds_sum{application="prometheus-demo",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 0.012429856
# HELP http_server_requests_seconds_max
# TYPE http_server_requests_seconds_max gauge
http_server_requests_seconds_max{application="prometheus-demo",exception="None",method="GET",outcome="CLIENT_ERROR",status="404",uri="/**",} 0.012429856
# HELP jvm_gc_max_data_size_bytes Max size of old generation memory pool
# TYPE jvm_gc_max_data_size_bytes gauge
jvm_gc_max_data_size_bytes{application="prometheus-demo",} 2.841116672E9
# HELP jvm_threads_live_threads The current number of live threads including both daemon and non-daemon threads
# TYPE jvm_threads_live_threads gauge
jvm_threads_live_threads{application="prometheus-demo",} 22.0
# HELP jvm_classes_unloaded_classes_total The total number of classes unloaded since the Java virtual machine has started execution
# TYPE jvm_classes_unloaded_classes_total counter
jvm_classes_unloaded_classes_total{application="prometheus-demo",} 1.0
# HELP tomcat_sessions_rejected_sessions_total
# TYPE tomcat_sessions_rejected_sessions_total counter
tomcat_sessions_rejected_sessions_total{application="prometheus-demo",} 0.0
プロメテウスのエンドポイントデータは、使用に返されます。それぞれが、その意味を説明し、対応するコメントが、私が理解することは困難ではないと信じています。例えば:
# HELP jvm_memory_used_bytes The amount of used memory
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{application="prometheus-demo",area="heap",id="PS Survivor Space",} 0.0
それは表し:prometheus-demo
ヒープメモリの応用PS Survivor Space
スペースが占有されている領域が0.0
バイト。
プロメテウスのインストールサービス
次のステップでは、監視エンドポイントから露出したマイクロサービスの監視データを収集するために、サーバー上のプロメテウスサービスをインストールすることです。簡単にするために、私はここにインストールドッキングウィンドウを使用し、その他のインストール方法はを参照することができ、公式インストールマニュアル。
まず、プロメテウスとして設定ファイルを準備します。
[root@localhost ~]# mkdir /etc/prometheus
[root@localhost ~]# vim /etc/prometheus/prometheus.yml
scrape_configs:
# 任意写,建议英文,不要包含特殊字符
- job_name: 'spring'
# 多久采集一次数据
scrape_interval: 15s
# 采集时的超时时间
scrape_timeout: 10s
# 采集的端点
metrics_path: '/actuator/prometheus'
# 被采集的服务地址,即微服务的ip及端口
static_configs:
- targets: ['192.168.1.252:9562']
このプロファイルの目的は、自動的にプロメテウスのサービス要求ごとに15秒を可能にすることですhttp://192.168.1.252:9562/actuator/prometheus
。その他の設定項目リファレンス:プロメテウスの設定公式文書
次のように最後にドッキングウィンドウプロメテウスサービスのコマンドを起動します。
[root@localhost ~]# docker run -d -p 9090:9090 -v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus --config.file=/etc/prometheus/prometheus.yml
正常に起動した後、通常の状況下でのアクセスはhttp://{ip}:9090
、あなたはプロメテウスのホームページを見ることができます:
クリックしてInsert metric at cursor
、あなたはメトリックを監視するために選択することができます;クリックするとGraph
、あなたはインジケータがグラフィカルに表示させることができます。クリックしExecute
、次のような結果を確認するには、ボタンを:
機能:
Insert metric at cursor
:指標を表示するように選択しますGraph
:指標がグラフで示されてみようExecute
:チャートをメトリック情報Add Graph
:より多くのチャート指標を描きます
Grafana可视化
我々は成功しプロメテウスサービス、およびプロメテウス独自の監視データの可視化インタフェースの簡単な紹介が、経験を築いてきた、前のセクションでは、機能が比較的小さい、良いではありません。Grafana統合のが、より親しみやすいと近い生産データの可視化プラットフォームの監視を実現しましょう。
Grafanaも、私はまだインストールドッキングウィンドウを使用してきた、簡単のため、サーバー上のサービスをインストールする必要があります。その他のインストール方法を参照することができ、公式インストールマニュアル。
次のように使用ドッキングウィンドウのみ1つのコマンドは、Grafanaを起動することができます。
[root@localhost ~]# docker run -d -p 3000:3000 grafana/grafana
コンフィギュレーション・監視データソース
Grafanaは、アクセスが成功し、開始後http://{ip}:3000/login
にログインするには、デフォルトのアカウントのパスワードはadmin
:
次のように成功したログインのホーム後:
まず、あなたは、データを監視するソースを追加し、ホームページ上でクリックする必要がありAdd data source
、あなたは、次のような画面を見ることができます:
プロメテウスこちらをクリックして、設定情報は、プロメテウスのサービスに関連するインターフェース、のような画面を見ることができます:
後に正常に保存され、次のヒントがあります:
監視ダッシュボードを作成します
ナビゲーションバーをクリックして+
ボタンをクリックしDashboard
、次のようなインターフェースが表示されます。
クリックしAdd Query
、次のようなインターフェイスを見ることができます。
インデックスクエリを追加し、赤いボックスマークされた位置のインデックス値を参照してください春ブートアプリケーション/actuator/prometheus
など、エンドポイント、jvm_memory_used_bytes
、jvm_threads_states_threads
、jvm_threads_live_threads
というように。
Grafana会给你较好的提示,并且支持较为复杂的计算,例如聚合、求和、平均等。如果想要绘制多个线条,可点击Add Query
按钮。如上图所示,笔者为图表绘制了两条线,分别代表daemon以及peak线程。
点击下图的按钮,并填入Title,即可设置图表标题:
若需要为Dashboard添加新的图表则点击上图中的左上角按钮:
并按下图步骤操作即可:
如果需要保存该Dashboard,则点击右上角的保存按钮即可:
Dashboard市场
至此,我们已经成功将Grafana与Prometheus集成,实现了较为丰富的图表展示——将关心的监控指标放置到Dashboard上,并且非常灵活!然而,这个配置的操作虽然不难,但还是挺费时间的。
那么是否有配置好的又强大、又通用、拿来即用的Dashboard呢?答案是肯定的!前往 Grafana Lab - Dashboards ,输入关键词即可搜索指定Dashboard:
如上图所示,可以找到若干款以 Prometheus 作为数据源,支持Micrometer的Dashboard。下面,简单演示一下如何使用 JVM(Micrometer)
这个Dashboard。点击 JVM(Micrometer)
进入Dashboard详情介绍页,如下图所示:
如图已详细描述了该Dashboard的特性、配置。其中的management.metrics.tags.application
,前面安装Prometheus服务时已经配置过了。该页的右上角用红框标注的 4701
是一个非常重要的数字,因为这是该Dashboard的id。
回到Grafana的首页,我们来导入这个Dashboard,按下图步骤操作:
输入后即可看到类似如下的界面,选择数据源,并点击Import:
此时,即可看到类似如下的界面,我们常关心的指标该Dashboard均已支持:
在上方的选项栏中可以选择查看不同的服务/应用:
また、ダッシュボードを使用することは比較的容易でいくつかありますが、あなたはここでは触れません自分自身について学ぶことができます。