Splunk Infrastructure Monitoring (SignalFX)でKubernetesのリソース監視をしてみる

# はじめに
某 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 をクリックします。
![unnamed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/c69b9966-1887-b478-1948-05737a4c4eca.png)

続いてアカウントの作成に必要な項目を入力します。
![スクリーンショット 2021-04-06 7.16.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/d6462996-b965-ec10-4a23-4847018cd88c.png)


Splunk のアカウント作成が完了したら以下のページに進みます。
Signal IM
https://app.us1.signalfx.com/
ここからドメインが異なります。まだ統合されていないようです。
![スクリーンショット 2021-04-06 7.21.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/b448eb13-f098-e762-c0b7-aa643cbbbf25.png)


ログインが完了するとダッシュボードが表示されますが、当然ですがこの時点では何の監視対象も登録されていません。
![unnamed (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/c894f54f-11a1-244b-6ec2-e5bd4965ab33.png)

ログインできればアカウント作成は無事に終了です。


## Agent のインストール
まずはインストール方法を確認します。
メニューバーの Integrations をクリックし、検索窓に Kubernetes と入力します。
ちなみに OpenShift と検索しても何も表示されません。

![スクリーンショット 2021-04-06 8.53.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/71ca4147-58a9-1aa6-15df-82c664939d25.png)


Kubernetes をクリックし、Setup をクリックすると、Requirements や Agent のインストール方法が表示されます。
![スクリーンショット 2021-04-06 8.54.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/2e072aa3-2960-ad65-3f43-68efb07c504e.png)



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 を確認する
![スクリーンショット 2021-04-14 7.44.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/dd7e77d5-fa03-0f40-53c6-dec477823036.png)
Realm の確認場所

青字の Show Token をクリックすると AccessToken が表示される
![unnamed (4).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/585e7caa-d96f-eeaf-821d-cafaf9aeb716.png)
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 のリソースが確認できます。とても簡単です！
![スクリーンショット 2021-04-14 8.17.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/66c809cd-b82a-8c34-b5bb-49e6effbc6ca.png)
Dashboards - Host - Filter : 10-0-204-147.node-exporter.openshift-monitoring.svc.cluster.local


メニューバーの Infrastructure をクリックし、サイドメニューの Overview クリックすると、今回のクラスタの構成の通り、Master Node : Masters 3台、Worker Node : Nodes 2台 が表示れていることが分かります。
![unnamed (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/fb145a37-aff7-c4cc-d9a9-af10762f3a16.png)
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 が稼働していることが分かります。
![unnamed (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/015a4d57-2e15-9c5b-f5d6-2c1f29494494.png)


試しに 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 ずつ配置されていることも一目で分かりますね。
![unnamed.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55284/10a56d74-4820-92c3-1c2b-5ca918c5c7b5.png)



# おわりに
さて、今回は Splunk IM による Kubernetes のリソース監視を試してみましたが、思ったよりも気軽に試すことができました。次回はトレーシングに挑戦したいと思います。
あと、今はトライアル期間なので、特に機能制限なく利用できていますが、トライアル期間終了後はどこまでの機能が利用できるのかなど、あわせて確認していきたいと思います。
# References
[Monitoring Red Hat OpenShift with Splunk Infrastructure Monitoring](https://www.splunk.com/en_us/blog/devops/monitoring-red-hat-openshift.html)
[openshift-cluster — SignalFx documentation](https://docs.signalfx.com/en/latest/integrations/agent/monitors/openshift-cluster.html)
[signalfx-agent/README.md at master · signalfx/signalfx-agent](https://github.com/signalfx/signalfx-agent/blob/master/deployments/k8s/helm/signalfx-agent/README.md)
[Monitor Kubernetes — SignalFx documentation](https://docs.signalfx.com/en/latest/integrations/kubernetes/index.html)
[SignalFxでリソースのモニタリングをやってみる。](https://qiita.com/saeoshi/items/8898c0a34d52c71906d7)
[SignalFxで、kubernetesのモニタリングをやってみた](https://qiita.com/saeoshi/items/c3691e477db558c0d1bb)
[AWSのコンテナ環境を監視するベストプラクティス](https://www.splunk.com/ja_jp/form/best-practices-to-monitor-containerized-deployments-on-aws.html)
[Kubernetes Navigator: Real-time Monitoring and AI-Driven Analytics for Kubernetes Environments Now Generally Available](https://www.splunk.com/en_us/blog/devops/kubernetes-navigator-real-time-monitoring-and-ai-driven-analytics-for-kubernetes-environments-now-generally-available.html)