Prometheus はオープンな監視ソリューションであり、ユーザーは Prometheus を簡単にインストールして使用し、非常に簡単に拡張できます。
Prometheus のアーキテクチャ設計では、Prometheus Server は特定のターゲットの監視を直接行うことはなく、主なタスクはデータの収集、保存、および外部データ クエリのサポートです。したがって、ホストの CPU 使用率などを監視できるようにするには、エクスポーターを使用する必要があります。Prometheus は、Exporter によって公開された HTTP サービス アドレス (通常は /metrics) から監視サンプル データを定期的に取得します。
エクスポーターは比較的オープンな概念であり、監視対象から独立して独立して実行されるプログラムであることも、監視対象に直接組み込まれることもできます。標準形式のモニタリング サンプル データを Prometheus に提供できる限り。
1 環境構成
Prometheus を Windows にインストールします。
1.1 Prometheusのインストール
ダウンロードアドレス: https://prometheus.io/download/
Windows インストール パッケージを選択します。私が選択したのはprometheus-2.41.0.windows-amd64
、ダウンロード後に解凍し、prometheus.exe を直接実行することです。
prometheus のデフォルトのポートは 9090 です。ブラウザで http://localhost:9090 にアクセスすると、プロジェクトがすでに実行されていることがわかります。
Prometheus 関連の設定は prometheus.yaml で変更できます。
1.2 NodeExporterのインストール
NodeExporter は Prometheus が提供するホスト情報を収集できるアプリケーションで、マシンの CPU、メモリ、ディスクなどの情報を収集できます。
ダウンロードアドレス: https://prometheus.io/download/
Windows のバージョンを選択します。ここでは、windows_exporter-0.20.0-amd64
windows_exporter-0.20.0-amd64.exe ファイルをダウンロード後に直接実行することにしました。
windows_exporter のデフォルトのポートは 9182 で、ブラウザ経由でアクセスします: http://localhost:9182/metrics、
現在のノード エクスポーターによって取得された現在のホストのすべての監視データを確認できます。このうち、HELP は現在のインジケーターの意味を説明するために使用され、TYPE は現在のインジケーターのデータ型を記述します。
2 データソースの追加
prometheus 構成ファイルを編集しprometheus.yml
、scrape_configs
次のように変更します。
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
# node exporter 监控源
- job_name: 'prometheus2'
static_configs:
- targets: ['localhost:8080']
つまり、2 つのタスクが設定されます。1 つは prometheus という名前で、「localhost:9090」アドレスからデータを読み取ります。もう 1 つは prometheus2 という名前で、「localhost:8080」アドレスからデータを読み取ります。次に、Prometheus を再起動します。
ブラウザ アクセス: http://localhost:9090、検索ボックスに入力しup
、[実行] をクリックすると、構成した 2 つのタスクが表示されます。
3 書き込んだデータをカスタマイズする
新しい SpringBoot プロジェクトを作成します。プロジェクトの完全なアドレス:
GitHub アドレス: https://github.com/Snowstorm0/learn-prometheus
Gitee アドレス: https://gitee.com/Snowstorm0/learn-prometheus
サービス層にデータを挿入するコードを記述します。
public void insertPrometheus() {
meterRegistry.clear();
setIdList();
setNameMap();
setValueMap();
for (String id : idList) {
List<Tag> list = new ArrayList<>();
list.add(Tag.of("id", id));
list.add(Tag.of("name", nameMap.get(id)));
String name = "insertPrometheus";
double value = Double.parseDouble(String.valueOf(valueMap.get(id)));
meterRegistry.gauge(name, Tags.of(list), value);
}
}
コントローラー層に読み取りコードを記述します。
@RequestMapping(value = "/metric/custom", method = RequestMethod.GET,produces = "text/plain; charset=utf-8")
public Object metric() {
return prometheusMeterRegistry.scrape();
}
ブラウザまたは Postman を使用して、http://localhost:8081/metric/custom にアクセスします。
書き込まれたデータを確認できます。
# HELP insertPrometheus
# TYPE insertPrometheus gauge
insertPrometheus{id="1002",name="钱二",} 1002.0
insertPrometheus{id="1001",name="赵一",} 1001.0
insertPrometheus{id="1003",name="孙三",} 1003.0
ここのデータはローカルに保存され、Prometheus で読み取ることができます。
4 データを更新する
サービス層にデータを挿入するコードを記述します。
public void updatePrometheus() {
String name = "updatePrometheus";
List<Tag> list = new ArrayList<>();
list.add(Tag.of("id", "1001"));
list.add(Tag.of("name", "测试更新"));
// 通过引用的方式将 Prometheus 的 value 存入 valueMap,修改 valueMap 即可修改 Prometheus
updateValueMap.put("1001", meterRegistry.gauge(name, Tags.of(list), new AtomicDouble(0)));
for (int value = 0; value < 12; value++) {
try {
updateValueMap.get("1001").set(value); // 修改 valueMap 中的 value
Thread.sleep(5 * 1000); // 暂停5秒
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
ブラウザまたは Postman を使用して、http://localhost:8081/metric/custom にアクセスします。
書き込まれたデータを確認できます。
updatePrometheus{id="1001",name="测试更新",} 1.0
プログラミングの知識をさらに学ぶには、私の公式アカウントをフォローしてください。