Prometheus とモニタリング プラットフォームの展開の基本的な紹介
1. Prometheus の基本的な紹介
Prometheus (go 言語で開発) は、オープンソースの監視、警報、時系列 (時間順にソート) データベースを組み合わせたものです。それは、kubernetes (一般に k8s として知られる) の人気が prometheus の開発を推進したためです。ホスト、サービス、およびコンテナーを監視でき、データを収集するための複数のエクスポーターをサポートし、データレポート用のプッシュゲートウェイをサポートします。Prometheus のパフォーマンスは、数万のクラスターをサポートするのに十分です。
https://prometheus.io/docs/introduction/overview/
時系列データ:システムや装置の状態の変化を時系列に記録したデータを時系列データといいます。この種の時系列データは、次のような多くのシナリオに適用されます。
- 最も一般的なものはシステムのログです
- 無人車両の運用中は、経度、緯度、速度、方位、周囲の物体までの距離などを記録する必要がある。データは常に記録および分析する必要があります。
- 一定エリア内の各車両の走行軌跡データと交通量
- 従来の証券業界のリアルタイム取引データ
- リアルタイムの運用およびメンテナンスの監視データ、ネットワーク カードのトラフィック グラフ、サービスの現在のステータス、およびリソースの使用状況 たとえば、監視しているコンテンツに急激な急増、崖の低下、または切断がある場合、それは通常、問題が発生した場合は、何が問題だったのかをすぐに突き止める必要があります。
1.1. 時系列データベースの主な利点
時系列データベースは、主に時間タグ付き(時間順に変化する、つまり時系列化)なデータを処理するために使用され、時間タグ付きデータは時系列データとも呼ばれます。
- 良い成果
リレーショナル データベースは大規模なデータを処理する際のパフォーマンスが低く、それが I/O に明確に反映されることがあります。NOSQL を使用すると、大規模なデータをより適切に処理できますが、それでも時系列データベースほど優れたものではありません。
- ストレージコストが低い
メトリクス:キー=値(タグ:キーワード=値)のデータ保存方法を採用し、効率的な圧縮アルゴリズムを使用しているため、平均ストレージコストは約3.5バイトであり、ストレージスペースを節約し、IOを効果的に削減できます。
Prometheus は非常に効率的な時系列データの保存方法を備えています。各サンプリング データはわずか約 3.5 バイトのスペースしか占有しません。数百万の時系列データは 30 秒ごとに収集され、60 日間保持され、約 200 G のスペースを占めます (公式ドキュメントより)データ)
1.2. Prometheus の主な機能
-
多次元データ モデルは、複数の次元を通じてデータをモデル化し、複数の次元を通じてデータをクエリできます。
-
柔軟なクエリ言語、柔軟な PromQL クエリ メソッドを提供し、また、Grafana や他のコンポーネントと簡単に組み合わせてデータを表示できる HTTP クエリ インターフェイスも提供します。
-
分散ストレージに依存せず、単一ノードのローカル ストレージをサポートします。Prometheus に付属する時系列データベースを介して、1 秒あたり数百万件のデータ保存が可能で、大量の履歴データを保存する必要がある場合は、サードパーティの時系列データベースに接続することもできます。
-
HTTP を使用してプル モデルを通じて時系列データをプルし、オープンなインジケーター データ標準を提供する
-
プッシュ モデルは、中間ゲートウェイを介してサポートすることもできます
。プル モニタリングは、実際にはアクティブおよびパッシブ モニタリングです。デフォルトでは、プル モードになっています。つまり、モニタリング ホストはデータを取得するためにモニタリング対象ホストにアクセスします。プッシュ方式には中間ゲートウェイのサポートが必要ですが、これは zabbix の名前とは異なります。 -
サービス検出または静的構成を通じてターゲット サービス オブジェクトを検出する
-
さまざまなチャートやインターフェイス表示をサポートし、Grafana などのサードパーティ ツールを使用してコンテンツを表示できます。
1.3. プロメテウスの監視原理
- Prometheus Server は、ターゲット上のメトリクス データを定期的にキャプチャする責任があります。
- 各クローリング ターゲット [ホスト、サービス] は、Prometheus のスケジュールされたクローリング用に HTTP サービス インターフェイスを公開する必要があります。つまり、prometheus は取得した監視データをアクセス可能な Web ページにパッケージ化し、指定された URL にアクセスすることでホストの状態を判断します。
プル方式の利点は、上流監視と水平監視を自動的に実行でき、必要な構成が少なく、拡張が容易で柔軟性が高く、高可用性を実現しやすいことです。簡単に言うと、Pull 方式では結合を減らすことができます。プッシュ型システムでは、監視システムへのデータのプッシュ失敗による監視対象システムの麻痺の問題が発生しやすいためです。多数の監視ホストが同時に監視ホストにデータをプッシュしている場合、監視ホストが処理できない可能性が高いため、Pull 方式により収集側はデータの存在を意識する必要がありません。監視システムから完全に独立しているため、データ収集は監視システムによって完全に制御されます。
1.4. Prometheus 設定ファイルの 6 つの主要な設定セクションの意味
-
prometheus 設定ファイルの各大きな設定セクション
- scrape_configs は構成セグメントをコレクターとして収集します
- rules_files アラーム、事前集約設定ファイルセグメント
- Remote_read リモート クエリ セグメント
- Remote_write リモート書き込みセグメント
- アラート: アラートマネージャー情報セグメント
-
下の図は、Prometheus アーキテクチャと、各コンポーネントがどのように相互作用し、連携するかを示しています。
- 優れたオープンソース プロジェクトのほとんどはモジュール式であり、ユーザーはビジネス シナリオに基づいてどの構成を有効にするかを決定できます。
対応する設定セクション | 使用 |
---|---|
コレクション構成セクション | コレクターになってデータをローカルに保存する |
コレクション構成セクション + リモート書き込みセクション | コレクター + トランスミッターとして機能し、データはローカルに保存され、リモートに保存されます。 |
リモートクエリセグメント | クエリ実行者になってリモート ストレージ データをクエリする |
コレクション構成セクション + リモートクエリセクション | コレクタ + クエリ実行者となり、ローカル データ + リモート ストレージ データをクエリします |
収集設定セクション + アラートマネージャー情報セクション + アラート設定ファイルセクション | コレクター + アラーム トリガーを作成し、ローカル データをクエリし、アラームを生成して Alertmanager に送信します。 |
リモートクエリセクション + アラートマネージャー情報セクション + アラート設定ファイルセクション | リモート アラーム トリガーを作成し、リモート データをクエリし、アラームを生成して Alertmanager に送信します。 |
リモートクエリセグメント + リモート書き込みセグメント + 事前集約設定ファイルセグメント | インジケーターを事前に集計し、生成された結果セット インジケーターをリモート ストレージに書き込みます |
- yaml 固有の設定形式
# 全局配置段
global:
# 采集间隔
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
# 计算报警和预聚合间隔
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# 采集超时时间
scrape_timeout: 10s
# 查询日志,包含各阶段耗时统计
query_log_file: /opt/logs/prometheus_query_log
# 全局标签组
# 通过本实例采集的数据都会叠加下面的标签
external_labels:
account: 'huawei-main'
region: 'node1'
# Alertmanager信息段
alerting:
alertmanagers:
- scheme: http
static_configs:
- targets:
- "localhost:9090"
# 告警、预聚合配置文件段
rule_files:
- /etc/prometheus/rules/record.yml
- /etc/prometheus/rules/alert.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']
# 远程查询段
remote_read:
# prometheus
- url: http://prometheus/v1/read
read_recent: true
# m3db
- url: "http://m3coordinator-read:7201/api/v1/prom/remote/read"
read_recent: true
# 远程写入段
remote_write:
- url: "http://m3coordinator-write:7201/api/v1/prom/remote/write"
queue_config:
capacity: 10000
max_samples_per_send: 60000
write_relabel_configs:
- source_labels: [__name__]
separator: ;
# 标签key前缀匹配到的drop
regex: '(kubelet_|apiserver_|container_fs_).*'
replacement: $1
action: drop
2. Prometheus監視プラットフォームを導入する
- Prometheus サービス監視ターミナルのインストールと展開
- リモートマシンを監視する
- サービスの監視: mysql
prometheus 主程序包:wget https://github.com/prometheus/prometheus/releases/download/v2.11.1/prometheus-2.16.0.linux-amd64.tar.gz
远端主机监控插件(类似于zabbix-agent): wget https://github.com/prometheus/node_exporter/releases/download/v0.18.1/node_exporter-1.0.0-rc.0linux-amd64.tar.gz
mysql业务监控插件: wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.12.0/mysqld_exporter-0.12.1.linux-amd64.tar.gz
- 実験的なトポロジ図
2.1. Prometheus サービス監視端末のデプロイ
[root@node1 ~]# tar xf prometheus-2.11.1.linux-amd64.tar.gz -C /usr/local/
[root@node1 ~]# cd /usr/local/prometheus-2.11.1.linux-amd64/
[root@node1 prometheus-2.11.1.linux-amd64]# ./prometheus --config.file=prometheus.yml &
テストを開始する
このページを見ると、prometheus が正常に起動し、デフォルトで監視されていることがわかりますので、このマシンの監視状況を見てみましょう。
ステータスターゲットをクリックすると、監視対象のマシンまたはリソースが表示されます。
このマシンを確認した後、プロンプトに従ってブラウザに http://IP またはドメイン名:9090/metrics を入力して、監視データを表示することもできます。
显示监控数据
http://192.168.98.201:9090/metrics
この情報が表示されていれば、監視システムがデータを取得していることになりますので、データが取得できれば正常に表示できるようになります。この URL を通じて、prometheus がすべての監視データをまとめて保存し、Web ページを生成することがわかります。ユーザーは Web ページを通じて関連データを参照できます。これらのデータは、時系列データベースの形式に従っています。つまり、次の形式です。 key=value のデータです。これらのデータは監視指標ですが、まだ分析する方法がありません。読みやすくするためにグラフィカルな表示を使用する必要があります。
Prometheus のディスプレイにはチャートも表示され、監視項目の状況をチャートで直感的に確認できますが、内蔵グラフィックはあまり見栄えがよくありません。
「グラフ」をクリックすると以下のグラフが表示されますので、検索バーに見たい監視項目に合わせてキーワードを入力してください。
ここでの入力は process_cpu_seconds_total であり、CPU 使用率ステータス テーブルが表示されます。グラフの左上隅にある [グラフ] ボタンに注目してください。デフォルトはコンソール ボタン ページにあります。
2.2. リモートのビジネスマシンを監視する
a. 監視クライアントのインストール
[root@node2 ~]# tar xf node_exporter-0.18.1.linux-amd64.tar.gz -C /usr/local/
[root@node2 ~]# cd /usr/local/node_exporter-0.18.1.linux-amd64/
[root@node2 node_exporter-0.18.1.linux-amd64]# ls
LICENSE node_exporter NOTICE
#后台启动
[root@node2 node_exporter-0.18.1.linux-amd64]# nohup /usr/local/node_exporter-0.18.1.linux-amd64/node_exporter &
[1] 7281
[root@node2 node_exporter-0.18.1.linux-amd64]# nohup: 忽略输入并把输出追加到"nohup.out"
#业务机器监控插件服务端口
[root@node2 node_exporter-0.18.1.linux-amd64]# lsof -i :9100
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
node_expo 7281 root 3u IPv6 42486 0t0 TCP *:jetdirect (LISTEN)
#验证 http://被监控机名称:9100/metrics
http://192.168.98.202:9100/metrics
现在这台机器上的数据被打包成了一个可以访问的页面,所以可以使用浏览器去访问这个页面,看下能否获取到相关的数据,如果能够获取的话就表示没有问题了。
b. prometheus にモニタリング情報を追加する
#被监控主机设置完成之后,需要在prometeus主配置文件中添加被监控机信息
[root@node1 prometheus-2.11.1.linux-amd64]# tail -4 prometheus.yml
- job_name: 'node2' #定义名称
static_configs:#定义具体配置
- targets: ['192.168.98.202:9100']#定义目标
####注意缩进 两个空格
#重启服务
[root@node1 prometheus-2.11.1.linux-amd64]# pkill prometheus
[root@node1 prometheus-2.11.1.linux-amd64]# ./prometheus --config.file=prometheus.yml &
注意:prometheus启动报错
**lock DB directory: resource temporarily unavailable"**
原因:prometheus没有正常关闭,锁文件存在
rm $prometheus_dir/data/lock
c. テスト検証
セットアップ後、プロメテウスのページを表示します
[Status-Targets] ページを表示すると、監視対象マシンのノード 2 (192.168.98.202) がすでに監視リストに含まれており、ブラウザを介してその監視データを表示できることがわかります。
ブラウザに http://192.168.98.202:9100/metrics と入力してデータを表示します
2.3. サービスの監視: mysql
mysql を監視するには、2 つの条件が必要です。1 つはシステムに mysql が存在すること、もう 1 つは監視プラグインがあることです。監視プラグインはダウンロードされたので、最初に mysql をインストールする必要があります。次に、プラグインがすべての情報を取得できるように、対応する認証を実行します。必要な情報を入力して、関連するプラグインを設定し、prometheus 構成ファイルを変更します。
a. mysql ビジネスを展開する
[root@node2 node_exporter-0.18.1.linux-amd64]# dnf -y install mariadb-server mariadb
[root@node2 mysqld_exporter-0.12.0.linux-amd64]# systemctl enable mariadb
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.
[root@node2 mysqld_exporter-0.12.0.linux-amd64]# systemctl start mariadb
#创建监控用户
MariaDB [(none)]> grant select,replication client,process on *.* to 'hello'@'localhost' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)
b. 監視プラグインのデプロイ
[root@node2 ~]# tar xf mysqld_exporter-0.12.1.linux-amd64.tar.gz -C /usr/local
[root@node2 ~]# vim /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
[root@node2 ~]# cat /usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf
[client]
user=hello
password=123456
#启动
[root@node2 ~]# nohup /usr/local/mysqld_exporter-0.12.1.linux-amd64/mysqld_exporter --config.my-cnf=/usr/local/mysqld_exporter-0.12.1.linux-amd64/.my.cnf &
[root@node2 ~]# lsof -i :9104
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld_ex 7698 root 3u IPv6 46415 0t0 TCP *:peerwire (LISTEN)
c. prometheus メイン設定ファイルにモニタリングを追加します。
#
[root@node1 prometheus-2.11.1.linux-amd64]# tail -10 prometheus.yml
static_configs:
- targets: ['localhost:9090']
- job_name: 'node2'
static_configs:
- targets: ['192.168.98.202:9100']
- job_name: 'mariadb'
static_configs:
- targets: ['192.168.98.202:9104']
d. Prometheus サービスを再起動します。
[root@node1 prometheus-2.11.1.linux-amd64]# pkill prometheus
[root@node1 prometheus-2.11.1.linux-amd64]# ./prometheus --config.file=prometheus.yml &
e. 監視ページからサービスを表示する
グラフページから関連チャートをチェックしてください
「積み上げ」にチェックを入れると、グラフを積み上げた形で表示できます。
3. Prometheus Grafana データ表示とアラーム
Prometheus モニタリング ソフトウェアの表示インターフェイスは非常に見苦しいので、表示方法を変更しましょう: Grafana. Grafana は、オープンソースの測定分析および可視化ツール (モニタリング機能なし). 収集したデータを分析、クエリし、可視化できます。そして警報を達成することができます。
3.1. grafana のデプロイ
a. grafana のインストール
公式 Web サイトからソフトウェア パッケージを入手します: grafana: https://grafana.com/
パッケージのインストール
[root@manage01 ~]# dnf -y localinstall grafana-6.6.1-1.x86_64...
サービス開始
#服务启动
[root@manage01 ~]# systemctl enable grafana-server
Created symlink from /etc/systemd/system/multi-user.target.wants/grafana-server.service to /usr/lib/systemd/system/grafana-server.service.
[root@manage01 ~]# systemctl start grafana-server
#验证启动
[root@manage01 ~]# lsof -i :3000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
grafana-s 17154 grafana 8u IPv6 53939 0t0 TCP *:hbci (LISTEN)
grafana が正常に起動したら、ページから grafana ページにアクセスできます。
ブラウザに http://IP またはドメイン名:3000 を入力します。
アカウントのパスワードが必要です: admin/admin (デフォルト)
このページが表示された場合は、grafana が正常にインストールされ、動作していることを意味します。
アカウントとパスワードを入力してログインするときは、初めてログインするため、セキュリティ上の理由からログインする前にパスワードを変更する必要があります。新しいパスワードを 2 回入力した後、[保存] をクリックしてログインします
。
b. Grafana ページ設定 - プロメテウス データ ソースの追加
ログインに成功すると、ページに使用方法のガイダンスが表示されるので、ガイダンスの要件に従ってセットアップし、主に grafana のデータ ソースを設定します。
アイコンからわかるように、データ ソースを設定し、ダッシュボードを表示し、これらのユーザー操作を追加する必要があります。
[データ ソースの追加] をクリックしてデータ ソースを追加します
「Prometheus」を選択して次のステップに進みます。
認証部分の設定は主にHTTPSと連携して使用され、httpsを使用する場合は証明書や認証などが必要となり、この部分の設定が必要になります。
ページの要件に従って、対応する情報を入力するだけです。通常、エラーは入力ミスによって発生します。「保存してテスト」をクリックして、正常に保存します。
追加したデータ ソースは、左側のナビゲーション バーの歯車アイコンのドロップダウン メニューの [データ ソース] から確認できます。
3.2. グラフィックの描画
a. ダッシュボード管理
データ ソースを追加した後、引き続きダッシュボードを追加して、データをグラフの形式で表示できます。引き続き [新しいダッシュボード] をクリックします。
この図は、ダッシュボードにグラフを追加でき、スタイル アイコンも選択できることを示しています
ここではどれを選んでも構いませんが、作者がこのバージョンについてどう思っているかはわかりませんが、実際にはすべての機能が実現できます。
ここで最初の追加クエリを選択します
ページに入ると、左側に 4 つのロゴがあります。
情報元
チャート
設定
警報
まずアイコンの手順に従ってデータ ソースを設定しましょう。
上記のように、項目 A で、必要に応じて監視項目を一致させます。項目が複数ある場合は、右上隅のクエリの追加から追加できます。設定が完了したら、グラフのスタイルを設定できます。チャート上で。
このチャートでは主にチャートのスタイルについて説明し、主な項目について説明します。
- 最初の描画モードは、チャート内の画像の表示方法を指し、ストリップ、ライン、ポイントの 3 種類があります。
- 2 番目のモード オプションでは、チャートの塗りつぶしシャドウ透明度チャートの線の太さについて説明します。
- 最後のグラフでグラフの積み重ねをオンにし、パーセンテージを表示するかどうか
設定が完了したら、設定アイコンを確認します。
このページは主にチャート名とコメントを設定するために使用されます。
設定後、当面はこのようなチャート設定となりますが、以降のアラームについては、アラーム設定について詳しく説明します。
「保存」をクリックしてグラフを保存します。
グラフを保存するときに、ダッシュボード名の入力を求められます。ここにノード2を入力します
すべてが正しいことを確認したら、「保存」をクリックします
ダッシュボードの準備が整い、グラフィックスも表示されます。
次に、ユーザーを設定します。このユーザーは招待メカニズムを使用して追加されます。つまり、招待リンクを生成し、対応するユーザーに送信する必要があります。その後、相手は対応するリンクにアクセスして登録します。このようにして、ユーザーが正常に追加された場合は、「ユーザーの追加」ボタンをクリックします。
必要に応じてユーザーを追加します
クリックしてユーザーを招待します
ユーザー名とユーザーの役割を入力し、「招待」をクリックします。
招待をクリックした後、招待リンクをユーザーに送信するか、ブラウザで開いて招待を確認する必要があります。
別のホストに切り替えてブラウザで開きます。
メールアドレスとユーザーパスワードを入力し、「登録」をクリックします
管理者アカウントを使用して grafana にログインしているホストに戻ります。更新すると、新しく登録されたユーザーが表示されます。ユーザーを削除して権限を変更することもできます。
b. grafana 設定 – CPU 負荷を監視するグラフィックを追加します。
左側のサイドバーをクリックします: ➕—ビジュアライゼーションの選択
グラフ チャート スタイルの選択
必要に応じてデータ項目を入力します。
- node_load1 1分間のCPU平均負荷
- node_load5 CPU の 5 分間の平均負荷
- node_load15 15 分間の CPU 平均負荷
注: 複数のマシンを同時に監視している場合、チャートにはすべてのマシンが表示されますが、特定のマシンのみを表示したい場合は、監視マッチングを使用できます。
入力方法は以下の通りです。
監視項目 {instance="監視対象マシンのIP:ポート"}
以下に示すように
これにより、マシンが表示されます。
c. grafana 設定 - テンプレート グラフを使用して MySQL モニタリングを表示します
mysql 監視テンプレートのダウンロード
https://github.com/percona/grafana-dashboards
テンプレートの設定
#在grafana配置文件中添加插件信息
[root@manage01 ~]# vim /etc/grafana/grafana.ini
[root@manage01 grafana]# tail -3 /etc/grafana/grafana.ini
[dashboards.json]
enabled = true
path = /var/lib/grafana/dashboards
#下载插件
[root@manage01 ~]# unzip grafana-dashboards-master.zip
#拷贝插件到指定位置
[root@manage01 ~]# cd grafana-dashboards-master/
[root@manage01 grafana-dashboards-master]# cp -r dashboards /var/lib/grafana/
[root@manage01 dashboards]# vim /var/lib/grafana/dashboards/MySQL_Overview.json
#搜索pmm-singlestat-panel替换为singlestat
#重启生效
[root@manage01 grafana]# systemctl restart grafana-server.service
Web インターフェイスを介してテンプレートをインポートする
左側のメニューを選択します—➕—インポート
対応するjsonファイルを選択してインポートします
クリックしてインポートすると、画像が表示されます。
3.3 グラファナアラーム
grafanaのアラームチャンネルを設定する
左側のベルチャートをクリック - 通知チャネル - チャネルの追加
- 名前部分:名前を記入します
- タイプ部分: Webhookメソッドの選択
- すべてのアラートで送信: チェックすると、デフォルトですべてのアラームがこのチャネルを通じて送信されることを意味します。
- 画像を含める: チェックすると、アラーム発生と同時にスクリーンショットが送信されますが、現在のアラーム通知は画像をサポートしていないため、ここでチェックする必要はありません。
- 解決メッセージを無効にする: チェックすると、アラームから正常に戻ったときに、それ以上のメッセージは送信されない、つまり、正常に戻るための通知は行われません。ここでチェックする必要はありません。
- リマインダーを送信: チェックすると、ステータスが最初にアラームに変化したときにアラーム メッセージを送信することに加えて、まだアラーム状態にある場合は、アラームが繰り返し送信されることを意味します。
- リマインダーの送信間隔: 繰り返しアラームを送信する頻度を示します。ここでのデフォルト値は 30 分です。
- URL: 公式サーバーアラームサーバー
- HTTP メソッド: POST を選択します。
設定完了後、「テスト送信」をクリックすると、アカウント登録時のメールアドレスにアラームメールが届くので確認してください。
チャンネルの設定と検証が完了したら、チャートのアラームを設定します
チャートを選択し、チャート名のドロップダウン メニューをクリックして編集メニューに入ります。
ベル チャートを選択します。チャート アラートを設定するには、アラートを作成します。
ここでのアラームしきい値の設定は、平均 CPU 負荷を取得することです。これは実験であるため、アラームのテストを容易にするために、早期警告値は 0.5 です。
設定が完了すると、チャート上に早期警告ラインが表示されます。「保存」をクリックします。
次に、node2 の CPU 負荷を増やします。
アラームが完了しました。