このブログを検索

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


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』が追加され監視が行われていることがわかります。
今回はサーバーの状態を外から確認するブラックボックス監視についてやってみました。
次回はサーバーの中で動いているものを監視するホワイトボックス監視についてやってみようと思います。

2024年1月14日日曜日

CSV利用してADにユーザー一括作成。。


ADで検証するときに複数ユーザー欲しいときがあります、、よね。
いろいろなところに情報があるのでブログを書くまでもないのですが、、
今後、自分が検証環境で使うときにすぐ使えるためのメモとして残します。。

利用した環境:Windows Server 2022(評価版)
ゴール:”Grp001-B-支社”にユーザーを一括作成
完成図↓

実現までのステップ
  1. グループを使う場合は、先にグループを作成する
  2. dsadd userコマンドでOU内に作成したいユーザーを作成できるコマンドを確定する
  3. 一括ユーザー作成用のパラメーターCSVを作成する
  4. 実行コマンド作成
  5. コマンドプロンプト(管理者権限)でコマンド実行
  6. 作成できたことを確認する

1.グループを使う場合は、先にグループを作成する
 一括作成したユーザをグループに登録する場合は、先にグループを作成しておく

2.dsadd userコマンドでOU内に作成したいユーザーを作成できるコマンドを確定する
ユーザーを1つ作成できるコマンドとパラメーターを確定する
作成するユーザー
・OU”Grp001-B-支社”にユーザーを作成
・作成したユーザーをグループ”Grp001-B-支社-一般”に追加
・氏名、モバイル、社員番号、会社情報、部署、役職など必要パラメーターを設定する
 ※モバイル番号はダミー番号を使用する(テストなので、、)
  ダミー番号は総務省ホームページ参照 → ☆リンク☆
   
作成したスクリプト例:
dsadd user CN="Grp001-B-GA user01",OU=Grp001-B-支社,OU=Grp001-総務,DC=site001,DC=demo,DC=test -ln Grp001-B-GA -fn user01 -empid 20100001 -mobile 070-XXXX-XXXX -pwd "パスワード" -pwdneverexpires yes -samid grp01-b-ga-user01 -upn grp01-b-ga-user01@site001.demo.test -email grp01-b-ga-user01@site001.demo.test -display "Grp001-B-GA user01" -company "TEST Lab Co.Ltd." -office "支社" -dept "総務部" -title "一般" -memberof cn="Grp001-B-支社-一般",OU="Grp001-B-支社",OU="Grp001-総務",DC="site001",DC="demo",DC="test"
3.一括ユーザー作成用のパラメーターCSVを作成する
 こんな感じでまずパラメーターごとのCSVを作成してみる。
 あとで流すコマンドで列(カラム)の対応が必要なので準備する。
 また、コマンドでカラムの数を指定するので数えておく。
 コマンドのパラメータで重複がある場合は整理する。


 最終的にこんな感じにまとめる。以下のキャプチャは一部。


 作成したCSVファイルで日本語文字列を使用する場合は、文字コードをANSIにして任意の場所に保存する。作成したCSVファイルはコマンドでパスを指定するのでパスを控えておく。

4.実行コマンド作成
 整理して以下のようなコマンドを作成する
 ※以下のコマンドはもう少しまとめられたが、今後流用するときに戻すのが面倒なので
  パラメーターの集約はほとんどしていない
for /F "tokens=1-20 delims=," %A in (C:\user.csv) do dsadd user CN="%A",OU=%B,OU=%C,DC=%D,DC=%E,DC=%F -ln %G -fn %H -empid %I -mobile %J -pwd "%K" -pwdneverexpires yes -samid %L -upn %M -email %N -display "%O" -company "%P" -office "%Q" -dept "%R" -title "%S" -memberof cn="%T",OU="%B",OU="%C",DC="%D",DC="%E",DC="%F"

5.コマンドプロンプト(管理者権限)でコマンド実行


”dsadd 成功”と表示され、ユーザーが作成されたことを確認する。
エラーとなる場合は、パラメーターの置換によりコマンドがおかしくなっているはず。。
エラー箇所もメッセージから推測できるので該当箇所を修正する。

6.作成できたことを確認する


以上。