このブログを検索

この記事の内容は、個人の見解、検証の範囲のものであり、誤りがある可能性があります。
個人の責任において情報活用をお願いします。


ラベル Prometheus の投稿を表示しています。 すべての投稿を表示
ラベル Prometheus の投稿を表示しています。 すべての投稿を表示

2024年3月29日金曜日

Prometheus で k8s 環境の監視に挑戦してみる 第6回 コントロールプレーンとノードを監視する。

Prometheus で k8s 環境の監視に挑戦してみる 第6回 コントロールプレーンとノードを監視する。

今回はk8sのコントロールプレーンとノードを Prometheus の監視対象として追加して Grafana で見てみたいと思います。
本当は、Kubernetes 上の Pod や Service の情報を引っ張ってきて Grafana で見て見たかったのですが、どうやら Kubernetes 上の情報を収集するには Prometheus も Grafana もその Kubernetes Cluster で動作させて内部で情報のやり取りをさせるやり方のようです。
現状の構成では、Prometheus も Grafana も Kubernetes Cluster の外部にあるため内部を見るのはちょっと難しいようです。
なので、Kubernetesで動作しているPod等の監視については環境を作り直し改めて時間を取って確認をしてみたいと思います。

では、繰り返しとなりますが、Kubernetesの外側を監視するという視点でコントロールプレーンとノードを Prometheus の監視対象として追加して Grafana で見てみたいと思います。

まずは、各ノードに 対し監視対象としての追加と node_exporter を設定します。
手順は以前作成したこちらのブログをご覧ください。
https://techblog-cidept.blogspot.com/2023/11/prometheus-k8s-2.html

次に、blackbox_exporter 設定します。
こちらも手順については以前に作成したブログをご覧ください。
https://techblog-cidept.blogspot.com/2024/01/prometheus-k8s-4.html


では、登録したものを Grafana で確認してみましょう。
以前のブログはこちら
node_exporter の方は以前導入したダッシュボードを見てみます。
ます、JobをPrometheusで登録した『Kubernetes Cluster』に切り替えます。

そのあとHostから、3台のノードから見たいホストを選択できます。
今回は、Kubernetes Cluster で動作しているアプリ等がないので動いてる感がない各種項目となっていますが、実際に使われている環境を見たりすると、スワップ使ってるのがわかったりしてありがたいんでしょうねぇ。
あとは、例えばノードが追加されたとしても、node_exporter を設定し、Prometheus の yaml に Targetとしてホスト名を設定してPrometheusの再起動で済むのでありがたい。
追加ノードの台数が多くても、ノード側の作業を Ansible で自動化しておけばどんとこいですね。


続いて ping の死活監視について確認してみましょう。
ダッシュボードを作成してみます。
データソースの指定を求められたら、以前登録したprometheusを指定します。
メトリックはprobe_successを選択します。
プレビューで5分間隔で表示してみます。
死活監視は0(失敗)か1(成功)なので問題がなければ全部1で横線状態になります。
Applyでダッシュボードとして作成してみましょう。
一つサーバーのネットワークを止めて更新すると、pingが失敗して0になったことがわかります。
ネットワークを復旧してから再度更新してみると、pingが成功するようになったので1に戻っています。
あとはこれにPrometheusの方でアラートのルールを追加すれば、X分間ping応答がなかったサーバーがいたらアラートを出すといったこともできます。
この様な形で、Kubernetes Cluster の外側といいますか、土台となっている各ノードのリソース状況やネットワーク死活監視ができます。

2024年2月29日木曜日

Prometheus で k8s 環境の監視に挑戦してみる 第5回 Grafanaで可視化

ホワイトボックス監視についてやっていこうかと思いましたが予定を変更して、Grafana での可視化をやっていきます。
まずは、Grafana のサーバーを構築します。

Grafana のインストール手順については以下から確認可能です。
https://grafana.com/docs/grafana/latest/setup-grafana/installation/redhat-rhel-fedora/

インストールのコマンドは以下から確認可能です。
今回は CentOS を使いました。
https://grafana.com/grafana/download

インストール
# yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.3.1-1.x86_64.rpm
インストール後の確認
# yum list installed | grep grafana
systemctl で操作ができるようなので起動します。
ちょっと時間かかるので待ちます。
# systemctl start grafana-server.service
ついでに自動起動するようにしておきます。
# systemctl enable grafana-server.service
Grafana は3000番ポートを使うので必要に応じて設定するか、ファイアウォールを停止してください。
今回は検証環境なのでファイアウォールを停止・・・しようと思ったのですが、ChatGPT先生にポート開放の方法を聞いてみました。

ポートの開放
firewall-cmd --zone=public --add-port=3000/tcp --permanent
設定の読み込み
sudo firewall-cmd --reload
これでOKなはず。
Grafana にアクセスしてみたところ無事成功しました。
初回ログイン時は、ユーザー/パスワードに admin を入れます。
新しいパスワードの入力を求められるので設定します。
ログイン出来たら、Prometheus をデータソースとして連携させます。
「≡」からメニューを開き「Connections」をクリックします。
「Data sources」をクリックします。
「Add data source」をクリックします。
「Prometheus」をクリックします。
「Prometheus server URL」に、http://<Prometheus サーバーのIPかFQDN:9090> を入力します。
「Save & test」をクリックします。
成功すると以下のようにメッセージが出ます。
これで Grafana が Prometheus を使用してデータの可視化ができるようになりました。 それでは、どのようなデータを可視化するのかを設定する Dashboard を設定していきたいと思います。 「≡」からメニューを開き「Dashboards」を表示します。
「NEW」をクリックします。
「NEW Dashborad」をクリックします。
「Add Visualization」をクリックします。
Dashboard の作成画面は3つのエリアに分かれていてそれぞれ以下の役割を持っています。
主にクエリエリアで何を表示するかクエリを設定します。
それでは設定してみましょう。
クエリエリアの「Metric」で「Select metric」をクリックし、どのメトリックでデータを収集するか指定します。
今回は、アクティブなメモリの動きを見てみようと思います。
プレビューエリアの右上にある更新ボタンで、設定したクエリのプレビューを確認します。
これで表示が可能になったため、保存して確認してみます。 右上にある「Save」をクリックします。
Dashborad の名前などを設定する画面が表示されますので必要に応じて設定を行い「Save」をクリックします。
Dashborad が作成されました。
この様に Dashboardを自作することができますがこれを一から必要なものすべて作るのは大変です。
実は、Grafana では誰かが作って公開してくれている Dashboard をインポートする機能があります。
それを使えば使いやすい Dashboard がすぐに使えるということですので、早速試してみたいと思います。

Grafana の Dashboard のページ
https://grafana.com/grafana/dashboards/

ここで利用する Dashboard を探してIDかURLをコピーして使うか、JSONをダウンロードして使います。
今回は、Node Exporter Full を使うことにしました。
URLやID、JSONファイルは右下から利用可能です。
Grafana に戻り Dashbord の作成に入ります。
先ほどと同じように「NEW」をクリックしますが、そこで「Import」を選択します。
使用する Dashboard のURLかIDの入力または、JSONファイルをアップロードします。
ここではIDを読み込ませました。
「Prometheus」で登録してある Prometheus を選択します。
「Import」をクリックします。
おお・・・カッコイイ。
というわけで今回は、Prometheus の情報を可視化してくれる Grafana の構築と連携、Dashbord を使用した Prometheus のデーター可視化方法についてやってみました。
ではまた次回

2024年1月31日水曜日

Prometheus で k8s 環境の監視に挑戦してみる 第4回 ブラックボックス監視

今回は、Prometheus を使ったブラックボックス監視について実施してみたいと思います。
ブラックボックス監視とは、システムを外部からのアクセスで状態を確認することのようです。
pingを実行して死活監視を行うような監視の仕方がこれに該当するようです。
対義語として、システム内部のアプリケーションの動作や連携を監視するホワイトボックス監視があります。

Prometheus でどのようにブラックボックス監視を行うのかというと、それ用のエクスポーター blackbox_exporter があるのでそれを使います。
こちらは node_exporter のように監視対象に導入するのではなく blackbox_exporter から監視対象へ確認を実行できます。
その情報を Prometheus へ連携して確認することができ、Prometheus と blackbox_exporter は同居させることもできます。

なのでイメージとしてはこんな感じに
では、導入していきましょう
node_exporter で実施可能なブラックボックス監視の種類は以下の4つのプロトコルが利用可能です。
・HTTP → HTTPサーバーにリクエストを送ってその応答で監視
・TCP → SSH等のTCPを使用してその応答で監視
・DNS → DNSサーバにクエリを実行しその結果でレコードの内容などを監視
・ICMP → pingを実行してその応答で監視

今回は ping での死活監視をやってみたいと思います。
まずはモジュールのダウンロード
# wget https://github.com/prometheus/blackbox_exporter/releases/download/v0.24.0/blackbox_exporter-0.24.0.linux-amd64.tar.gz
解凍します
# tar zxvf blackbox_exporter-0.24.0.linux-amd64.tar.gz
ディレクトリを移動します
# cd blackbox_exporter-0.24.0.linux-amd64
以下で起動可能です。 blackbox_exporter はport9115でアクセスします
# nohup ./node_exporter > /dev/null 2>&1 &

起動ができたら、ブラウザから blackbox_exporter が起動しているサーバーのport9115にアクセスして以下のような画面が出るか確認します。

続いて監視対象に対して監視が実行できるか以下のコマンドを実行します
# curl 'http://localhost:9115/probe?module=icmp&target=dev-nfs-01'
curl で指定している内容ですが、『blackbox_exporter』『実行する監視内容』『監視対象』を指定しています。
・blackbox_exporter → http://localhost:9115/probe
・実行する監視内容 → module=icmp
・監視対象 → target=dev-nfs-01

実行してみると以下のようにいろいろ情報が出てきますが、最後に probe_success 1 と出たら成功しています。
# curl 'http://localhost:9115/probe?module=icmp&target=dev-nfs-01'
# HELP probe_dns_lookup_time_seconds Returns the time taken for probe dns lookup in seconds
# TYPE probe_dns_lookup_time_seconds gauge
probe_dns_lookup_time_seconds 0.001482621
# HELP probe_duration_seconds Returns how long the probe took to complete in seconds
# TYPE probe_duration_seconds gauge
probe_duration_seconds 0.002647711
# HELP probe_icmp_duration_seconds Duration of icmp request by phase
# TYPE probe_icmp_duration_seconds gauge
probe_icmp_duration_seconds{phase="resolve"} 0.001482621
probe_icmp_duration_seconds{phase="rtt"} 0.000778443
probe_icmp_duration_seconds{phase="setup"} 0.00015706
# HELP probe_icmp_reply_hop_limit Replied packet hop limit (TTL for ipv4)
# TYPE probe_icmp_reply_hop_limit gauge
probe_icmp_reply_hop_limit 64
# HELP probe_ip_addr_hash Specifies the hash of IP address. It's useful to detect if the IP address changes.
# TYPE probe_ip_addr_hash gauge
probe_ip_addr_hash 2.973617495e+09
# HELP probe_ip_protocol Specifies whether probe ip protocol is IP4 or IP6
# TYPE probe_ip_protocol gauge
probe_ip_protocol 4
# HELP probe_success Displays whether or not the probe was a success
# TYPE probe_success gauge
probe_success 1

この『'http://localhost:9115/probe?module=icmp&target=dev-nfs-01'』を Prometheus から blackbox_exporter へ実行させるように設定変更を行うことで、Promethuesの『Targets』から結果を確認できるようになります。
prometheus.yml を編集するのでその前にコピーを取っておいてください。

編集内容は『scrape_configs:』フィールドに以下の形で情報を記入します。
scrape_configs:
 
  - job_name: "blackbox_icmp_v4"
    metrics_path: /probe
    params:
      module: [icmp]
    static_configs:
      - targets: ["dev-nfs-01"]
    relabel_configs:
      - source_labels: [__address__]
        target_label: instance
      - source_labels: [__address__]
        target_label: __param_target
      - target_label: __address__
        replacement: localhost:9115

その後は、Promethues を停止して再起動します。

再起動が終わったら Promethues で Target を見てみましょう。
『blackbox_icmp_v4』が追加され監視が行われていることがわかります。
今回はサーバーの状態を外から確認するブラックボックス監視についてやってみました。
次回はサーバーの中で動いているものを監視するホワイトボックス監視についてやってみようと思います。

2023年12月28日木曜日

Prometheus で k8s 環境の監視に挑戦してみる 第3回 監視対象への情報取得

今回は Prometheus に監視対象として追加したサーバーへどのような情報が取得できるのかを確認していきたいと思います。
情報の取得には PromQL というクエリを発行するのですが、それをどう実行するのかというと式ブラウザという Prometheus にアクセスした際に最初に表示された画面で実行できてしまいます。

実際に以下の情報を取得してみたいと思います。

 ・CPU
 ・メモリ
 ・ディスク
 ・ネットワーク

まずは、CPUから。
指定した期間のCPU使用率を表示させる式を使って、直近10分間の情報を表示してもらいます。
式ブラウザに以下を入力します。
rate(node_cpu_seconds_total[10m])
node_cpu_seconds_total がCPUの情報を取得するメトリクスです。
rate() で指定した期間の平均値を求めることができます。
[10m] が10分間を指定しています。
結果はこちら

cpuのidle状態やiowaitについても情報を出してくれるようです。
また、以下のように特定の情報に絞ることもできます。
rate(node_cpu_seconds_total{mode="iowait"}[10m])
{mode="iowait"} でiowaitの情報だけに絞っています。
つづいてメモリの使用量を見たいと思ったんですが、node_exporterにはメモリ使用量を取得するメトリクスがないようです。
結構意外な気もしましたが、メモリの総量を取得するメトリクス(node_memory_MemTotal_bytes)と空きメモリを取得するメトリクス(node_memory_MemFree_bytes)から算出するやり方で表示するようです。
以下のような式になります。
node_memory_MemTotal_bytes - node_memory_MemFree_bytes
この様に、メトリクスを使って式を組み立てていくようなやり方で見たいものを見るというのがプロメテウスのようです。
あまりこのようなやり方をした経験がなかったので新鮮でした。
使いこなすのに時間がかかりそうですけどねw

次は、ディスクの使用量を表示させてみたいと思います。
こちらは、node_filesystem_avail_bytes メトリクスで表示できるようです。
個別のデバイスに絞って確認したいときは、デバイスを以下の形で指定します。
node_filesystem_avail_bytes{device="/dev/mapper/centos-root"}
最後にネットワークの情報を表示してみます。
10分間の送信トラフィックと受信トラフィックの量を見てみたいと思います。
複数NICを追加してるわけではないですがNICを絞って表示してみます。

式はそれぞれ、以下となります。

受信量
rate(node_network_receive_bytes_total{device="ens192"}[10m])
送信量
rate(node_network_transmit_bytes_total{device="ens192"}[10m])
式は『Add Panel』をクリックすることで追加できます。
並べて見れるようになるので便利ですね。

今回は、Node exporter を使用して監視対象の情報を表示してみました。
これはごく一部の内容だと思いますので、興味をひかれた方は調べてみてください。

では、よいお年を。

--------
参考情報
Prometheus実践ガイド クラウドネイティブな監視システムの構築(書籍)
公式ドキュメン(トhttps://prometheus.io/docs/introduction/overview/)

2023年11月30日木曜日

Prometheus で k8s 環境の監視に挑戦してみる 第2回 監視対象を追加

今回はPrometheusに監視を追加してみたいと思います。
Prometheus の構成ファイル(prometheus.yml)に対象を追加する方法を行います。

Prometheus.yml の中身を見てみましょう。
global、alerting、rule_files、scrape_configs の4つのセクションがあり、それぞれ以下の役割を持っています。

・global 全体の設定
・alerting アラートに関する設定
・rule_files ルールファイルに関する設定
・scrape_configs 監視ターゲットに関する設定

監視対象を追加するには scrape_configs の部分を編集することになるようです。
今回は、dev-nfs-01 というサーバーを監視対象として追加したいと思います。
編集する前に、prometheus.yml のコピーを取ってどこかに保存しておいてください。
なお、Prometheus のUIで監視対象を確認するには Status から Targets を表示することで可能です。

scrape_configs に監視対象を追加する際の記述は以下のように、job_name で表示名を設定し、targets で監視対象のIPアドレスかホスト名と必要に合わせてport番号を設定します。
  - job_name: "dev-nfs-01"
    static_configs:
      - targets: ["dev-nfs-01:9100"]

一度 Prometheus をCtrl + C で停止して再度起動して、Targets を見てみましょう。
赤く表示され正常に監視はできていませんが、対象が追加されたことがわかります。
監視対象としては追加できましたが、情報を収集するためのエージェントの役割を行うエクスポーターが監視対象に存在しないのでそちらの設定を行いたいと思います。
手順は以下になります。
https://prometheus.io/docs/guides/node-exporter/

まずは、使用する node-exporter のバージョンを確認してみましょう
https://github.com/prometheus/node_exporter/releases

1.6.1が最新のようですのでそちらを使っていきます。
監視対象とするサーバーへログインして node-exporter をダウンロードします。
# wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
ダウンロードしたものを展開します。
# tar zxvf node_exporter-1.6.1.linux-amd64.tar.gz
展開したディレクトリに移動します。
# cd node_exporter-1.6.1.linux-amd64
node-exporter を起動します。
# ./node_exporter
バックグラウンドで実行する場合は以下です。
# nohup ./node_exporter > /dev/null 2>&1 &
起動すると最後に address=[::]:9100 と表示されますがこれは 9100番port で待ち受けているためです。
先ほど prometheus.yml を編集した際に 9100番port を設定していたのは、このエクスポーターが待ち受けている 9100番port へ情報を取りに行くようにするためです。
設定をしないと 80番port へ情報を取りに行ってしまいます。
各エクスポーターがどのport番号を使用するかはエクスポーターによるようですので使用するエクスポーターのport番号は忘れずに確認しましょう。

ブラウザで Prometheus のUIを更新してみてください。
エクスポーターと通信が行えるようになったため表示が正常になっていると思います。
これで監視対象として追加することができました。
次回はこのサーバーに対して情報を取ってくるとどんな形で見ることができるのかなどを調べていこうと思います。
--------
参考情報
Prometheus実践ガイド クラウドネイティブな監視システムの構築(書籍)
公式ドキュメン(トhttps://prometheus.io/docs/introduction/overview/)

2023年10月31日火曜日

Prometheus で k8s 環境の監視に挑戦してみる 第1回 まずは環境の用意

今回から、k8s 環境の監視を行うことができる Prometheus について勉強していきたいと思います。
Prometheus は情報の収集を行いますがその情報を GUI で表示する Grafana との連携などもやっていきたいと思います。

それでは、Prometheus の構築をしていきたいと思います。
環境構築用は CentOS 7 を使用しています。

カーネルバージョン
 # uname -a
Linux dev-prometheus 3.10.0-1160.66.1.el7.x86_64 #1 SMP Wed May 18 16:02:34 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux 
Prometheus は以下の方法で構築が可能です。
・バイナリを使用する
・ソースからコンパイルする
・Docker を使用する

今回はバイナリを使用してインストールしていきます。
最新版を使おうと思うので、以下のサイトでバージョンの確認をしたいと思います。

https://github.com/prometheus/prometheus/releases

一番新しいのが Pre-release となっている場合もあると思いますが、ちゃんとした最新版を使いたいとおもうので Latest と表示があるバージョンを使いたいと思います。
2.47.2が最新版のようなのでそちらを使っていきたいと思います。
# wget https://github.com/prometheus/prometheus/releases/download/v2.47.2/prometheus-2.47.2.linux-amd64.tar.gz
ダウンロードしたファイルを解凍します。
# tar zxvf prometheus-2.47.2.linux-amd64.tar.gz
展開したフォルダに移動して Prometheus を起動します。
# cd prometheus-2.47.2.linux-amd64
# ./prometheus
Prometheus を起動したサーバーの9090ポートにブラウザでアクセスし以下のような画面が表示されれば構築成功です。
これでこれからの検証や設定確認で使用する環境が用意できました。
Prometheus では、監視対象に合わせてエクスポーターというものを使用して情報の収集を行うようなので、適当なサーバーを対象に情報の収集を行ったりしてみたいと思います。
その後は、k8s のクラスタや Pod の情報収集が可能なるようにしていきたいと思います。
ではまた次回お会いしましょう。
--------
参考情報
Prometheus実践ガイド クラウドネイティブな監視システムの構築(書籍)
公式ドキュメン(トhttps://prometheus.io/docs/introduction/overview/)