blog

プロメテウスを使ったリアルタイム・モニタリング・システム構築をステップ・バイ・ステップで学ぶシリーズ(I) - 神の火、プロメテウスの台頭

このシリーズはオープンソースのリアルタイムモニタリングとアラートソリューションについてです。毎回、神の火をもたらしたギリシャ神話の神、プロメテウスを思い出します。そしてこのオープンソースのロゴも火で、...

Aug 20, 2020 · 7 min. read
シェア

神の火

この連載は、オープンソースのリアルタイム監視・アラートソリューションであるプロメテウスに関するもので、「すごい」という言葉がぴったりです。毎回、神の火をもたらしたギリシャの神、プロメテウスを連想します。そしてこのオープンソースのロゴもまた火であり、個人的にはこのロゴのデザインがとても好きです。

このシリーズでは、Prometheusに焦点を当て、Prometheusとその周辺のエコシステムを使用して、独自のリアルタイム監視およびアラートプラットフォームを構築する方法を紹介します。

プロメテウスのユーザーとの最初の接触のための聴衆のオブジェクトのこのシリーズは、神が操作や戦闘を支持して、スプレーしませんが、重要な概念は、次の言及するために洗練されます。シリーズは主に次の作品に分かれています

  • プロメテウスのコンセプトと構築、データの取り込み方の紹介
  • Prometheusにデータをプッシュする方法と、プッシュとプルがそれぞれどのようなシナリオで使用されるか
  • Prometheusデータの構造とクエリ言語PromQLの使い方
  • JavaアプリケーションとPrometheusの統合方法、サービスディスカバリーの有効化、ビジネスメトリクスのカスタマイズ方法
  • PrometheusがGrafana可視化スイートと統合し、アラートを設定する方法
  • Dubboメトリクスのモニタリングを統合するJavaキットの書き方を教えます。
  • 大容量ディスクのビジネスサイドとシステムサイドそれぞれの監視をどのように行うか、実践的な事例を共有します。

Prometheusと時系列データベースの基本概念

Prometheusは現在、Githubで3w以上のスターを持っており、基本的にオープンソースツールの万以上のスターは、コミュニティの絶対的な主流と考えることができ、コミュニティもかなり活発で、そこから学ぶことができる経験の数が多いことができます。企業レベルのシステムでは、自信を持って使用することができます。

PrometheusはSoundCloudによって開発されたオープンソースの監視アラームシステムと時系列データベースです。文字通り、プロメテウスは監視アラームシステムと自己完結型時系列データベースの2つの部分から構成されています。

時系列データベースについて簡単に説明すると、時系列データを扱うために最適化されたデータベースであり、配列内のデータは時間によってインデックス化されています。従来の構造化データベースに比べ、いくつかの利点があります:

  • 時系列データは、大量のデータを迅速に取り込むことに重点を置いています。時系列データベースは、データの各変化を新しいデータとして捉え、過去の変化を分析し、現在の変化を監視し、将来どのように変化するかを予測するなど、変化を測定することができます。
  • 高精度のデータは短期間、中精度以下のサマリーデータは長期間保存されます。リアルタイムのモニタリングでは、必ずしもすべての精度の高いデータが必要なわけではなく、一定期間のデータの要約が必要です。構造化データベースにとってこのことが意味するのは、フィルタリングであり、ハンサムな選択とともに大量の書き込みを保証することであり、構造化データベースが処理できるように設計されている以上の作業負荷です。
  • データベース自身は、長期保存のために高精度のデータから継続的にサマリーを計算する必要があります。これらの計算には、単純な集計と複雑な計算の両方が含まれます。従来のデータベースでは、このような大量の計算には耐えられません。集計と複雑な計算はリアルタイムでカウントされなければなりません。

Prometheusの構築を開始

prometheus.io/

ダウンロードはPrometheue公式サイトのDownloadタブから:

ダウンロードしたら、解凍して実行します。

nohup /data/prometheus/prometheus --web.listen-address=0.0.0.0:9090 --config.file=/data/prometheus/prometheus.yml --web.enable-lifecycle --storage.tsdb.path=/data/prometheus/data --storage.tsdb.retention.time=15d &

これでプロメテウスサーバーのセットアップが簡単になりました。この時点で、ウェブへのアクセスは

管理ページにアクセスできるようになります。

インターフェイスのいくつかのタブでは、以下のように説明されています:

アラート: アラートルールの設定に使用します。これはGrafana独自のアラートインターフェイス設定に置き換えられます。

グラフ:PromQLステートメントを実行するために使用されるコンソールで、グラフィカルな表示でステートメントを実行することができます。

ステータス:システム情報、システムステータス、構成情報、ターゲットノードのステータス、サービスディスカバリーステータス、およびその他のメタ情報を表示します。

プロメテウス建築とエコロジー

この写真は公式の全体アーキテクチャ図です。ベージュ色の部分がプロメテウス独自のコンポーネントで、緑色の部分がサードパーティのミドルウェアとアプリケーションです。

プロメテウス・エコ・アーキテクチャー全体の概要:

  1. prometheusは、アプリケーション、プロキシ、キャッシュミドルウェア、データベース、その他のミドルウェアなどのHttpプロトコルを使って、ターゲットから時々メトリクスを取得します。
  2. 引き出されたデータは、Prometheusによって独自のTSDBデータベースに保存されます。PrometheusのWebUIコンソールとGrafanaは、常にデータを照会し、リアルタイムのチャートやグラフにプロットすることができます。
  3. Prometheusは、zookeeperやconsulなどのサービス発見ミドルウェアをサポートし、ターゲットの自動発見を行います。ターゲットを1つ1つ設定する必要はありません。
  4. alertManagerコンポーネントは、カスタム警告ルールと様々な警告チャネルをサポートしています。

データのプル

プロメテウスは主にプルによってデータを取得します。簡単に言うと、設定されたターゲットを一定間隔で訪問し、ターゲットはデータを取得するためのURLです。

さて、いよいよデータソースをシミュレートし、prometheus にそれを取り込ませます。

新しいSpringBoot webプロジェクトを作成し、pom依存関係を追加します。

<dependency>
 <groupId>org.springframework.boot</groupId>
 <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
 <groupId>io.micrometer</groupId>
 <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

application.properties付ける

server.port=8080
anagement.endpoints.web.exposure.include=*

起動すると、次のアドレスのページにアクセスできます:

得られたデータは以下の通り:

jvm_memory_max_bytes{area="heap",id="PS Old Gen",} 2.863661056E9例えば、インジケータの前にキーがあり、その後に値が続きます。

``jvm_memory_max_bytesキーは、キー名とキーラベル、キー名と2つのキーラベルに分かれています。

areaはheapで、これがヒープメモリ領域であることを示し、idはPS Old Genで、これが旧世代であることを示します。この値を合計すると、jvmにおける旧ゲンの最大値となります。値のタイプはbyteで、約286Mになります。

メトリクスのデータ・ソースができたら、prometheus のルート・ディレクトリにある prometheus.yml ファイルを編集し、以下の設定を追加します:

- job_name: 'test'
 scrape_interval: 5s
 metrics_path: '/actuator/prometheus'
 static_configs:
 - targets: ['localhost:8080']
 labels:
 instance: demo

"http://localhost:8080"/actuator/prometheusこのコンフィギュレーションは次のことを意味します: prometheueは5秒ごとにurlからメトリクスを取得し、各メトリクスにラベルインスタンスを追加します。

追加したら、prometheusを再起動してください。前のステップに問題がなければ、次のように表示されます:

UPのステータスは、プロメテウスがこのターゲットのデータを正常に取得したことを示します。

クエリーページで、先ほど使用したインジケーターのキーを入力します:

ここにある各値はprometheusが取得した最新のデータです。実行するたびにデータは変わります。

ここに複数のデータがあるのは、各指標のラベルが異なるからです。全く同じラベルは1つの指標にまとめられます。

グラフ]タブをタップすると、時系列の指標のトレンドを確認できます。

上図は、システムCPUメトリクスの変化のグラフです。

最後

マイクロサービスが普及し、小規模企業のマイクロサービス・ノードが数百に迫る今、プロメテウス・エコロジーは最小限のコストですべてのデータをリアルタイムに可視化することができます。開発・運用にとってこの意義は、すべてのデータがブラックボックスではなくなること、少なくとも個人的にはすべてのデータを観察・分析できる安心感があることです。

このシリーズは、実際のオペレーションを使って全体像を監視するための独自のシステムとビジネスを構築するためのステップバイステップを学ぶためのものです。今後も更新していく予定です。次のセクションでは、Prometheusにデータをプッシュするためのpushgatewayの構築と、2つの異なるデータ取得方法がどのようなシナリオで使用されるかについて分析します。

Read next

プロキシを介してBeegoフレームワークをダウンロードする

しかし、長い間全く応答がなく、タイムアウトやその他の問題が次々に発生しました。最終的に、プロキシを設定することで解決しました:その後、go getコマンドによるダウンロードは非常に速くなります。

Aug 20, 2020 · 1 min read