Splunkでk8sのモニタリングをしてみる

Splunkが提供しているk8sのモニタリングappを使ってk8sのログとかを集めて可視化してみる。

# 必要なもの
- k8sの環境(AWSさんが提供しているkopsでの作り方を参照しました）
https://aws.amazon.com/jp/blogs/news/configure-kubernetes-cluster-on-aws-by-kops/

- テスト用のpodとかいろいろ(今回はguestbook使ってます）
https://github.com/kubernetes/examples/tree/master/guestbook

- Splunkのdocker-it-monitoring
https://github.com/splunk/docker-itmonitoring


# 手順

## kopsでk8sの環境作成

```
#S3のbucket作成
[xxxxx@xxxx-mbp-c9067] # export S3_BUCKET=example-state-store-$(cat /dev/random | LC_ALL=C tr -dc "[:alpha:]" | tr '[:upper:]'
 '[:lower:]' | head -c 32)
[xxxxx@xxxx-mbp-c9067] # export KOPS_STATE_STORE=s3://${S3_BUCKET}
[xxxxx@xxxx-mbp-c9067] # aws s3 mb $KOPS_STATE_STORE
make_bucket: example-state-store-xxxxxxxxxxxx

#S3のverioning有効
[xxxxx@xxxx-mbp-c9067] # aws s3api put-bucket-versioning \
  --bucket $S3_BUCKET \
  --versioning-configuration \
  Status=Enabled

#k8sのcluster作成
  [xxxxx@xxxx-mbp-c9067] # kops create cluster \
  --name sudagawa-splunk.cluster.k8s.local \
  --zones ap-northeast-1a,ap-northeast-1c \
  --yes

#少し待った後に作成確認
[xxxxx@xxxx-mbp-c9067] # kops validate cluster
Using cluster from kubectl context: sudagawa-splunk.cluster.k8s.local

Validating cluster sudagawa-splunk.cluster.k8s.local

INSTANCE GROUPS
NAME                    ROLE    MACHINETYPE     MIN     MAX     SUBNETS
master-ap-northeast-1a  Master  m3.medium       1       1       ap-northeast-1a
nodes                   Node    t2.medium       2       2       ap-northeast-1a,ap-northeast-1c

NODE STATUS
NAME                                                    ROLE    READY
ip-172-20-47-79.ap-northeast-1.compute.internal         node    True
ip-172-20-51-170.ap-northeast-1.compute.internal        master  True
ip-172-20-95-19.ap-northeast-1.compute.internal         node    True

Your cluster sudagawa-splunk.cluster.k8s.local is ready
```

##サンプルのpod配置
https://kubernetes.io/docs/tutorials/stateless-application/guestbook にしたがって実施すればOK

##splunkの環境設定

このリポジトリからcloneしてくる
https://github.com/splunk/docker-itmonitoring


その中になるk8s-splunk-full-demo.yamlを編集

```
#各コンテナのimageを自分でdockerhubにあげたものに修正
#コンテナイメージはsplunkのofficialイメージからダウンロードしたものをそのままtag名を変更して、自分のdockerhubにupした
<修正箇所 計３箇所>
      containers:
      - name: splunkenterprise
        image: suda1234docker5678/splunkkube:7.0.0-monitor-k8s

#修正後、apply
[xxxxx@xxxx-mbp-c9067] # kubectl apply -f k8s-splunk-full-demo.yaml
serviceaccount/splunk created
clusterrole.rbac.authorization.k8s.io/splunk created
clusterrolebinding.rbac.authorization.k8s.io/splunk created
deployment.extensions/splunkenterprise created
service/splunkenterprise created
daemonset.extensions/ta-k8s-logs created
deployment.extensions/ta-k8s-meta created
[xxxxx@xxxx-mbp-c9067] #
[xxxxx@xxxx-mbp-c9067] #
[xxxxx@xxxx-mbp-c9067] #
[xxxxx@xxxx-mbp-c9067] # kubectl get services
NAME               TYPE           CLUSTER-IP       EXTERNAL-IP                                                                   PORT(S)                                        AGE
frontend           NodePort       100.67.234.105   <none>                                                                        80:32128/TCP                                   1m
kubernetes         ClusterIP      100.64.0.1       <none>                                                                        443/TCP                                        11m
redis-master       ClusterIP      100.68.248.80    <none>                                                                        6379/TCP                                       5m
redis-slave        ClusterIP      100.67.135.204   <none>                                                                        6379/TCP                                       3m
splunkenterprise   LoadBalancer   100.71.217.113   a888662d7834411e9a4a7062b676aca0-570875382.ap-northeast-1.elb.amazonaws.com   8000:32052/TCP,9997:32734/TCP,8088:31705/TCP   11s
[xxxxx@xxxx-mbp-c9067] # 
```

## splunkにアクセスしてみる
EXTERNAL-IPにELBのアドレスが割り当てられているので、http://ELBのDNS名:8000 でアクセス

![Screen Shot 2019-05-31 at 10.42.11 AM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/1dd220f7-1db1-0459-b748-fce463c7b914.jpeg)


## k8sアプリをのぞいてみる
各serviceとかdeployments、cpu/memoryとかのリソース情報、podの状況等が一覧で確認できる。

![FireShot Capture 027 - Kubernetes Overview - Splunk 7.0.0_ - a888662d7834411e9a4a7062b676aca0-570875382.ap-northeast-1.elb.amazonaws.com.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/d9612b14-67c3-d975-a794-85bdccd5ef47.png)


## ドリルダウンしてみる
Serviceやdeploymentsの箇所をクリックすると、細かい情報が取れる。
![Screen Shot 2019-05-31 at 10.49.53 AM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/d95f954c-a65c-0612-09a9-53132d1c36fd.jpeg)

![Screen Shot 2019-05-31 at 10.49.38 AM.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/190656/53140c36-4edf-735f-fbcb-7db1326ba39d.jpeg)

#最後に
結構簡単にデータを可視化できるので、便利かもですね。indexにデータを集めているので、状況に応じて自分でdashboard作ればOKかな。