このブログを検索

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


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/)

2023年9月29日金曜日

Rancharでkubernetesの管理をしてみる 第6回 Rancharのグローバルセッティング

今回はRancharのグローバルセッティングで、意外といろいろ自分好みに変更が可能なところをご紹介していきたいと思います。
グローバルセッティングはメニューの一番下から設定が可能です。
まずSettingsから、個人的に表示されてるのが気になっていたlocalのクラスタの非表示設定。
右側の「︙」から「Edit Setting」を選択し、「True」を選んで「Save」します。
もともとはこう表示されていましたが
こうなります。これですっきりしましたw

Feature Flagsでは、使える機能をオンオフすることができます。
今回は特に設定変更しませんがGitやfleetとの連携などの機能についてオンオフができるようです。
Bannersではバナーの設定ができます。
ヘッダーとフッターに文字を入れてみます。
文字は「Show Banner in Header」と「Show Banner in Footer」のチェックボックスにチェックを入れることで入力等が可能になります。
設定の有効化は「Apply」から行います(この辺統一してくれんもんかな・・・)
有効化するとすぐに、ヘッダーとフッターに入力した文字が表示されるようになりました。
Brandingではロゴやファビコン、UIやリンクのカラーを変更できます。
私は昔からロボット系のゲームでカラー変更ができる際RGBの数値をいじってオリジナルな機体カラーにしているため、個人的に大変ポイントの高い機能です。
ではUIとリンクの色を変えてみましょう。
「Use a Custom Color」のチェックボックスにチェックを入れると、色が選べるようになります。
色の部分をクリックすると、どの色にするかRGB直接入力とスライダーでの調節が選べるので好きなほうで設定してください。 カラーコード入力はできないみたいです。
今回は変化がわかりやすい色を選んでみました。 やばそうですが「Apply」から有効化してみようと思います。
やっぱり目に優しくないとんでもないUIになりましたw

Performanceではガベージコレクションなどの設定ができるみたいです。

Home Links は最初何の事だろうと思ったのですが、ログインした際のホーム画面の右側に出てるドキュメントなどへのリンクに関するものでした。
既存のリンクに対してオンオフを設定するだけでなく、Custom Linksの「Add Link」から自分で任意のリンクを追加することも可能なようです。
ホームの画面で変更した結果を確認してみましょう
以上です。
参考情報
https://ranchermanager.docs.rancher.com/

2023年9月10日日曜日

海外でのワーケーションを考える その8 海外からChrome Remote Desktopを利用してみた



前回は、Google Cloudのジャカルタ リージョンのインスタンスにChrome Remote Desktopをインストールして、日本→ジャカルタ→日本という通信経路で自宅にあるPCへの接続を試してみました。実際に旅行先から利用する家族からは、動作に若干ラグはあるものの仕事で使えないことはない、ということでした。

今回は実際に旅行先から自宅のPCへ接続してみた結果です。
今回の旅行先は、インドネシアのバリ島でした。
 
結論から言うと、バリ島から自宅のPCへChrome Remote Desktopで直接接続して仕事ができたそうです。
滞在していたのはサヌール エリアでした。
インターネットは、ホテルのWiFiを利用したそうです。
利用した端末は、ASUS Chromebook Detachable CM3 CM3000でした。

Google Cloudのインスタンスも使ってみてもらったのですが、GPUなしの通常のLinuxインスタンスで作成したため、自宅へ直接接続するのと比べると画像が荒いとのことでした。自宅へ直接つなぐと画面が綺麗に見えるし、ラグも許容できるから自宅に直接つないで使うとのことでした。ジャカルタ経由の方が若干ラグが小さかったようですが、大きく違う感じではないようでした。現地から実際にやらなければならなくなった仕事はできたとのことでした。

業務内容によりますが、Chrome Remote Desktopを使えば簡単に海外からワーケーションできるかもしれませんね。私もワーケーションしてみたいなぁ。。

それでは。

2023年8月31日木曜日

Rancherでkubernetesの管理をしてみる 第5回 RancharからPodとServiceを作って外部から接続してみる

今回は、RancherからPodやServiceを作って外部からのアクセスをできるようにしてみたいと思います。
事前準備として、KubernetesにはMetalLBを構築してServiceでタイプLoadBarancerを作成した際に、IPアドレスを払い出してくれるようにしてあります。

早速、今回の作業用として新しく名前空間demoを作成するところから開始していきたいところですが、Rancherではプロジェクトという単位で管理ができるのでこれから作成する名前空間を管理するプロジェクトを作成したいと思います。
『Create Project』から新しくプロジェクトを作っていきましょう
プロジェクト名demoを設定し、せっかくなので前に作ったユーザーもアクセスできるようにしてみます。
これは名前空間ではなく、Rancher上の設定になりますので実機の方ではまだ変化はありません。
(一応、新しいリソースでProjectとかないか確認しましたが、見当たらなかったのでRancher側だけのはず・・・)
表示が見づらくなるので、作成したProject:demoだけ表示するように上部のプルダウンから切り替えます。
ここから『Create Namespace』をクリックして名前空間の作成に入ります。
名前空間名にdemoを入力してCreateします。 特にリミットは設定しません。
名前空間demoが作成できたので、実機の方もsshでログインして確認してみます。
続いてPodの作成をしますが、Podから作るのではなくDeploymentを使用して作ってみましょう。
『Workload』を展開し、『Deployments』から『Create』をクリックします。
ここで使用するイメージはデモでよく使われているkuardをお借りします。
先ほど作成した名前空間を指定し、Deploymentsの名前を設定し、レプリカ数はとりあえず1にしておきます。
このアプリケーションはポート番号8080を使うので『Add Port』をクリックします。
ここで一緒に外部と接続するためのリソースのServiceを作成することができるようなので、コンテナが待ち受けるポート8080とプロトコル、外部から待ち受けるポート80を設定します。
PodとServiceを紐付けるためにラベルが必要なので『pod』に表示を切り替えてラベルの設定をしましょう。
手動で設定かなと思ったら自動で入ってましたのでこれを使ってみることにしました。
この辺は普段yamlを書いている人なら使いたい値だけ入れればいいのですが、何も知らない人が使ってもさっぱりわからないと思うのでKubernetesの経験者が扱うツールなのだなぁと実感しますね。
『Create』から作成します。
作成を実行すると以下のように、DeploymentsとPodにそれぞれリソースが作成されます。
作成したら実機を見てみましょう。
それぞれリソースが作成されていますね。
Podにはラベルが付与されています。
ServiceにはPodに付与されたラベルがSELECTORにセットされています。
では、ちゃんと接続できるかEXTERNAL-IPに表示されているIPへブラウザからアクセスしてみます。
ちゃんと動いていてくれていますね。
動くかどうか若干不安ではあったんですが問題がないようでほっとしました。
結構素直に動いてくれてありがたいです。
私は正直もうyamlを書くことの方に慣れてしまったのでyamlを書いたほうがしっくりくる体質になっているのですが、GUIで完結できそうなのはいろんな人が使う上ではいいのかなと思います。

今回は以上です。

参考情報
https://github.com/kubernetes-up-and-running/kuard

2023年8月4日金曜日

海外でのワーケーションを考える その7 Google CloudでChrome Remote Desktopを利用する


「海外でのワーケーションを考える」7回目の投稿です。

まとめはこちら

https://techblog-cidept.blogspot.com/2023/08/blog-post.html


前回は、Google Chrome Remote Desktopの通信について、調べてみました。

今回は、海外の旅行先の最寄りのGoogle Cloud リージョンにGoogle Chrome Remote Desktop用のVMインスタンスを作成してみます。Google Cloudは東南アジアのシンガポールとジャカルタにリージョンを展開しています。今回は、ジャカルタ リージョン(asia-southeast2)にインスタンスを作成します。


今回Google Cloudで構成するVMインスタンスは以下となります。

Google Cloud

 VM インスタンス

  • VMインスタンス名:crdhost
  • マシンタイプ:e2-medium
  • イメージ:debian-11-bullseye-v20230711
  • 他はデフォルトのまま
Google Cloud でGoogle Chrome Remote Desktopを利用するVMインスタンスの作成手順は以下のGoogle Cloudのドキュメントに記載されています。

Compute Engine での Linux 向け Chrome リモート デスクトップのセットアップ
https://cloud.google.com/architecture/chrome-desktop-remote-on-compute-engine?hl=ja

このドキュメントに沿って作成するとChrome Remote Desktop HostがインストールされたVMインスタンスを簡単に構築できます。

VMインスタンスを作成したあと、ドキュメントに準備されているChrome リモートデスクトップのインストール用スクリプトをコピー&ペーストしてインストールするだけです。ものすごく簡単です。


Google Cloud のコンピュートインスタンスの操作は、コンソールからSSHクライアントを起動して操作できます。コピー&ペーストまでできるのでとても便利です。


同様に用意されているX Windows System デスクトップ環境のスクリプトを利用してGUI環境をインストールします。低速なネットワーク経由のリモート接続には、Xfceが良いようなのでXfceを利用します。 好みに応じてDebianの日本語環境を整えます。今回は私の家族が使うことを想定していますので、日本語環境をインストールしました。Debian日本語環境のインストール方法はGoogle Cloud のドキュメントに記載されていないので、インターネット上に公開されているDebianの情報を参考に設定します。

X Windows System デスクトップ環境までインストールしたらChrome リモート デスクトップ サービスを構成してクライアントからジャカルタリージョンに構築したVMインスタンスへリモート接続できるように構成します。手順は前回の操作とそれほど変わりません。

構成が完了したら、クライアントから以下のURLにアクセスします。

https://remotedesktop.google.com/access

  

Google Chrome リモートデスクトップよりリモートアクセスを表示します。

作成したVMインスタンス「crdhost」が表示されオンラインになっています。


クリックしてリモート接続します。接続手順は前回と同じです。


ジャカルタリージョンのVMインスタンスにアクセスできました。


東京のクライアント → ジャカルタのVMインスタンス → 東京のホストへアクセスしてみました。若干のラグはありましたが、リモート操作も可能でした。この環境で家族に一度テストしてもらい、問題ないか確認してもらおうと思います。それでは。