はじめに
某 SIer で Kubernetes の監視について検証している鈴木 (@suzuyan) です。
この記事では Kubernetes 上のリソースを Splunk Infrastructure Monitoring (SignalFX) を使い監視してみたいと思います。
監視について
ちなみにみなさんはどんな監視サービスやツールを利用されていますか?
Zabbix で サーバリソースやログの監視をされている方は、まだまだ多いのではと思います。
もちろん Zabbix には豊富な機能や多くの実績があり、強力な監視ツールであることは間違いありません。
ただ、オンプレ監視基盤の導入・運用コストを考えた上で、はてな の mackerel や Datadog、Dynatrace 等の監視 SaaS を利用検討するケースも増えてきているのではと思います。
ちなみに今回利用する Splunk Infrastructure Monitoring も SaaS です。
また、監視と一言でいっても、様々な手法があり、代表的な手法は以下のようなものがあります。
メトリクス
トレーシング
ロギング
今回試した Splunk IM ではメトリクスとトレーシングによる監視が行えます。
環境
Kubernetes: OpenShift 4.6.3 (Kubernetes v1.19)
AWS 上に構築
Splunk Infrastructure Monitoring Agent 5.9.2
macOS Catalina 10.15.7 (作業端末)
たまたま Red Hat の OpenShift の検証をしていたため、OpenShift 上で実施していますが、ベースは Kubernetes のため、EKS、GKE、AKS などでもそんなにやり方は変わらないと思います。
Splunk IM を使ってみる
Splunk のアカウント作成
Signal IM を利用するためには Splunk のアカウントが必要となるため、まずは下記のページより Splunk のアカウントを作成します。
Splunk Infrastructure Monitoring | Free 14 Day Trial
United States を選んで Next をクリックします。
Splunk のアカウント作成が完了したら以下のページに進みます。
Signal IM
https://app.us1.signalfx.com/
ここからドメインが異なります。まだ統合されていないようです。
ログインが完了するとダッシュボードが表示されますが、当然ですがこの時点では何の監視対象も登録されていません。
ログインできればアカウント作成は無事に終了です。
Agent のインストール
まずはインストール方法を確認します。
メニューバーの Integrations をクリックし、検索窓に Kubernetes と入力します。
ちなみに OpenShift と検索しても何も表示されません。
Kubernetes をクリックし、Setup をクリックすると、Requirements や Agent のインストール方法が表示されます。
Agent のインストールは Helm を使って行うため、作業端末(今回は Macbook Pro)にまずは Helm を Homebrew でインストールします。Homebrew がインストールされていない場合は事前にインストールが必要です。
brew install kubernetes-helm
Helm のインストールが完了したら、SignalFx Helm のチャートリポジトリを Helm に追加します。
helm repo add signalfx https://dl.signalfx.com/helm-repo
"signalfx" has been added to your repositories
リポジトリを最新状態にします。
helm repo update
Hang tight while we grab the latest from your chart repositories...
...Successfully got an update from the "signalfx" chart repository
Update Complete. ⎈Happy Helming!⎈
必要な設定値オプションで付与してインストールを行います。
helm install --set signalFxAccessToken=<YOUR_ACCESS_TOKEN> --set clusterName=<YOUR_CLUSTER_NAME> --set agentVersion=<VERSION_NUMBER> --set signalFxRealm=<us1> <SIGNALFX_AGENT_APPNAME> signalfx/signalfx-agent --set kubernetesDistro=openshift
AccessToken : SignalFx の AccessToken を入力 (MyProfileから確認)
clusterName : Kubernetes の cluster-name を入力
signalFxRealm : SignalFxのRealm を入力 (MyProfileから確認)
Version : 指定しなければ最新版がインストールされる
KubernetesDistro : 今回は OpenShift のため openshift を指定
設定値の確認方法は以下を参考にして下さい。
MyProfile から Realm を確認する
Realm の確認場所
青字の Show Token をクリックすると AccessToken が表示される
AccessToken の確認場所
helm install --set signalFxAccessToken=<User Api Access Token> --set clusterName=cluster-name --set signalFxRealm=us1 --generate-name signalfx/signalfx-agent --set kubernetesDistro=openshift
NAME: signalfx-agent-1618354753
LAST DEPLOYED: Wed Apr 14 07:59:21 2021
NAMESPACE: default
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
The SignalFx agent is being deployed in your Kubernetes cluster. You should
see metrics flowing once the agent image is downloaded and started (this may
take a few minutes since it has to download the agent container image).
Assuming you are logged into SignalFx in your browser, visit
https://app.us1.signalfx.com/#/navigator/kubernetes%20pods/kubernetes%20pods
to see all of the pods in your cluster.
Helm インストール実施後、Kubernetes 上に Agent Pod が立ち上がります。
kubectl get pod
NAME READY STATUS RESTARTS AGE
signalfx-agent-1618354753-7l6fm 1/1 Running 0 4m44s
signalfx-agent-1618354753-7nrb7 1/1 Running 0 4m44s
signalfx-agent-1618354753-dxdfv 1/1 Running 0 4m44s
signalfx-agent-1618354753-pb7bv 1/1 Running 0 4m44s
signalfx-agent-1618354753-sctxw 1/1 Running 0 4m44s
ダッシュボードに戻ると Kubernetes のリソースが確認できます。とても簡単です!
Dashboards - Host - Filter : 10-0-204-147.node-exporter.openshift-monitoring.svc.cluster.local
メニューバーの Infrastructure をクリックし、サイドメニューの Overview クリックすると、今回のクラスタの構成の通り、Master Node : Masters 3台、Worker Node : Nodes 2台 が表示れていることが分かります。
Infrastructure - Kubernetes Overview
コンテナリソースを監視してみる
せっかく監視できるような状態になったので、コンテナリソースも監視してみたいと思います。
まずはサンプルを用いて適当にコンテナを稼働させます。
以下のコマンドを実行すると Deployment リソースが作成され、nginx の Pod(コンテナ)が起動します。
kubectl apply -f https://raw.githubusercontent.com/kubernetes/website/master/content/ja/examples/controllers/nginx-deployment.yaml
deployment.apps/nginx-deployment created
nginx Pod が Running となっているか確認します。
kubectl get pod
NAME READY STATUS RESTARTS AGE
nginx-deployment-66b6c48dd5-4ltxj 1/1 Running 0 2m16s
nginx-deployment-66b6c48dd5-cbg28 1/1 Running 0 2m16s
nginx-deployment-66b6c48dd5-lfmzq 1/1 Running 0 2m16s
signalfx-agent-1618354753-7l6fm 1/1 Running 0 3h9m
signalfx-agent-1618354753-7nrb7 1/1 Running 0 3h9m
signalfx-agent-1618354753-dxdfv 1/1 Running 0 3h9m
signalfx-agent-1618354753-pb7bv 1/1 Running 0 3h9m
signalfx-agent-1618354753-sctxw 1/1 Running 0 3h9m
特に何も考えず上記のサンプルを実行すると3つの nginx Pod が稼働していることが分かります。
試しに nginx-deployment リソースの replicas を 3 → 10 に変更してどのように変化が起きるか試してみます。
kubectl edit deployment nginx-deployment
apiVersion: apps/v1
kind: Deployment
...
spec:
progressDeadlineSeconds: 600
replicas: 10
revisionHistoryLimit: 10
...
kubectl edit deployment nginx-deployment
deployment.apps/nginx-deployment edited
ダッシュボードから、ほぼリアルタイムに Pod の数が10になったことが確認できました!
2台の Worker Node に5 Pod ずつ配置されていることも一目で分かりますね。
おわりに
さて、今回は Splunk IM による Kubernetes のリソース監視を試してみましたが、思ったよりも気軽に試すことができました。次回はトレーシングに挑戦したいと思います。
あと、今はトライアル期間なので、特に機能制限なく利用できていますが、トライアル期間終了後はどこまでの機能が利用できるのかなど、あわせて確認していきたいと思います。
References
Monitoring Red Hat OpenShift with Splunk Infrastructure Monitoring
openshift-cluster — SignalFx documentation
signalfx-agent/README.md at master · signalfx/signalfx-agent
Monitor Kubernetes — SignalFx documentation
SignalFxでリソースのモニタリングをやってみる。
SignalFxで、kubernetesのモニタリングをやってみた
AWSのコンテナ環境を監視するベストプラクティス
Kubernetes Navigator: Real-time Monitoring and AI-Driven Analytics for Kubernetes Environments Now Generally Available