上の青いフォントをクリックして、「スター公式アカウント」を選択してください
高品質の記事、すぐに配達
舞台裏で公式アカウントをフォローして、支払いまたはモールに返信し、実際のプロジェクト情報とビデオを入手してください
著者:私は喫煙します
cnblogs.com/2YSP/p/12827487.html
1.背景
SpringBootには多くのアプリケーション監視ソリューションがあり、SpringBoot + Prometheus + Grafanaは現在最も一般的に使用されているソリューションの1つです。3つの関係は次のとおりです。
2つ目は、SpringBootアプリケーションを開発することです。
まず、SpringBootプロジェクトを作成します。pomファイルは次のとおりです。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_spring_boot -->
<dependency>
<groupId>io.prometheus</groupId>
<artifactId>simpleclient_spring_boot</artifactId>
<version>0.8.1</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
注: ここでのSpringBootのバージョンは1.5.7.RELEASEです。最新の2.Xが使用されない理由は、最新のsimpleclient_spring_bootが1.5.Xのみをサポートし、2.Xバージョンがサポートできるかどうかわからないためです。
MonitorDemoApplicationスタートアップクラスにアノテーションを追加しました
package cn.sp;
import io.prometheus.client.spring.boot.EnablePrometheusEndpoint;
import io.prometheus.client.spring.boot.EnableSpringBootMetricsCollector;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@EnablePrometheusEndpoint
@EnableSpringBootMetricsCollector
@SpringBootApplication
public class MonitorDemoApplication {
public static void main(String[] args) {
SpringApplication.run(MonitorDemoApplication.class, args);
}
}
構成ファイルapplication.yml
server:
port: 8848
spring:
application:
name: monitor-demo
security:
user:
name: admin
password: 1234
basic:
enabled: true
# 安全路径列表,逗号分隔,此处只针对/admin路径进行认证
path: /admin
# actuator暴露接口的前缀
management:
context-path: /admin
# actuator暴露接口使用的端口,为了和api接口使用的端口进行分离
port: 8888
security:
enabled: true
roles: SUPERUSER
テストコードTestController
@RequestMapping("/heap/test")
@RestController
public class TestController {
public static final Map<String, Object> map = new ConcurrentHashMap<>();
@RequestMapping("")
public String testHeapUsed() {
for (int i = 0; i < 10000000; i++) {
map.put(i + "", new Object());
}
return "ok";
}
}
ここでのロジックは、多数のオブジェクトを作成してマップに保存し、このインターフェイスを要求した後にヒープメモリの使用量を増やすことです。これは、後で電子メールアラームをテストするのに便利です。
プロジェクトを開始すると、次の図に示すように、IDEAに多くのエンドポイントが表示されます。
最初、私のIDEAはこのエンドポイントを表示しませんでしたが、後で、使用しているアイデアのバージョンが古すぎる、つまり2017.1で
あることがわかりました。これを表示するには、idea2017.2以降が必要です。
その後、再度ダウンロードしてインストールする必要があり、時間がかかりました。。。。
起動後、http:// localhost:8888 / admin / prometheusにアクセスして、サービスによって公開されている監視インジケーターを確認します。注意:
セキュリティ認証がオンになっているため、このURLにアクセスするには、アカウント/パスワードの入力を求めるプロンプトが表示されます。404が表示された場合は、要求されたアドレスが正しいかどうかを確認してください。management.context-pathを設定しない場合、デフォルトアドレスはhttp:// ip:port / prometheusです
3、Prometheusをインストールします
ダウンロードリンク
https://prometheus.io/download/
この記事では、Windowsバージョンのprometheus-2.17.2.windows-amd64.tar.gzをダウンロードします。
解凍後、prometheus.ymlファイルを変更して、データ収集のターゲット情報を構成します。
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']
- job_name: 'monitor-demo'
scrape_interval: 5s # 刮取的时间间隔
scrape_timeout: 5s
metrics_path: /admin/prometheus
scheme: http
basic_auth: #认证信息
username: admin
password: 1234
static_configs:
- targets:
- 127.0.0.1:8888 #此处填写 Spring Boot 应用的 IP + 端口号
構成の詳細については、公式ドキュメントを確認してください。
これでPrometheusを起動できます。コマンドラインprometheus.exe--config.file = prometheus.ymlを入力して
http:// localhost:9090 / targetsにアクセスし、SpringBootコレクションのステータスが正常かどうかを確認します。
第四に、Grafanaをインストールします
ダウンロードリンク
https://grafana.com/grafana/download
この記事では、Windowsバージョンのgrafana-6.3.3.windows-amd64.zipを使用します。
解凍後、binディレクトリでgrafana-server.exeを実行して開始すると、ブラウザはhttp:// localhost:3000にアクセスしてログインページを表示できます。デフォルトのアカウントパスワードはadmin / adminです。
次に、独自の視覚的監視パネルの作成を開始します。
1.データソースを設定します
2.ダッシュボードを作成します
3.収集したインデックスポイントを入力します
注: ここでのインジケーターポイントは、気軽に入力することはできません。存在している必要があり、プロメテウスで見ることができます。4.グラフのスタイルを選択し
ます。5。タイトルの説明を入力します
最後に、右上隅にある[保存]をクリックして、Dashboadの名前を入力します。
ヒント: ここのグラフのレイアウトはマウスでドラッグできます
5、メールアラームを追加
実際のプロジェクトでは、監視対象のインジケーターがしきい値を超えた場合(CPU使用率が高すぎるなど)、監視システムがSMS、DingTalk、および電子メールを介して運用および保守担当者に自動的に警告することが期待されます。Grafanaはこの機能をサポートしています。 。
ステップ1: [Alerting]-> [Notificationchannels]をクリックして通知チャネルを追加します
ここでの入力には、webhook、Dingdingなど、多くのオプションがあります。ここでは、例として電子メールを取り上げます。
ステップ2: メール設定
Grafanaは、デフォルトでconfディレクトリのdefaults.iniを構成ファイルとして使用して実行されます。公式の推奨事項によれば、defaults.iniを変更せずに、同じディレクトリに新しい構成ファイルcustom.iniを作成する必要があります。
Tencentエンタープライズメールボックスを例にとると、構成は次のとおりです。
#################################### SMTP / Emailing #####################
[smtp]
enabled = true
host = smtp.exmail.qq.com:465
user = [email protected]
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = XXX
cert_file =
key_file =
skip_verify = true
from_address = [email protected]
from_name = Grafana
ehlo_identity = ininin.com
然后需要重启Grafana,命令grafana-server.exe -config=E:\file\grafana-6.3.3\conf\custom.ini
ステップ3: インジケーターにアラートを追加する
すべてを評価する
検出率を示します。ここでは効果をテストするために、1秒に変更します。
ために
アラートルールがForで構成されていて、クエリが構成されたしきい値に違反している場合、最初にOKからPendingに変更されます。OKからPendingGrafanaに通知は送信されません。アラートルールのトリガー時間が期間を超えると、アラートに変わり、アラート通知が送信されます。
条件
が時間を表し、のが条件を表し、が上にある場合
は同時にトリガー値を表し、上に設定すると赤い線が表示されます。
データがないか、すべての値がnullの場合
データがないか、すべての値が空の場合は、ここでトリガーアラームを選択します
実行エラーまたはタイムアウトの場合
実行が間違っているか残業している場合は、ここでアラームをトリガーすることを選択します
注: 10秒後など、次にトリガーされたときは、アラームストームの発生を防ぐために再度トリガーされることはありません。
ステップ4: テスト
要求http:// localhost:8848 / heap / testインターフェイスの後、メモリが設定されたしきい値を超えて上昇し、アラーム電子メールが受信されます。
こちらの写真は掲載しておりませんので、理由がわかりません。
6、まとめ
この一連の監視機能は非常に強力ですが、Prometheusには多くの表現があります。
いくつかのリンクを添付してください:
https://prometheus.io/docs/introduction/first_steps/
https://grafana.com/docs/grafana/latest/
https://github.com/2YSP/monitor-demo
}
有热门推荐????
10个解放双手实用在线工具,有些代码真的不用手写!微信小程序练手实战:前端+后端(Java)
又一神操作,SpringBoot2.x 集成百度 uidgenerator搞定全局ID为什么阿里不允许用Executors创建线程池,而是通过ThreadPoolExecutor的方式?
为什么要在2021年放弃Jenkins?我已经对他失去耐心了...
Docker + FastDFS + Spring Boot 一键式搭建分布式文件服务器
点击阅读原文,前往学习SpringCloud实战项目