Posted at

SplunkでKubernetesクラスター環境のログとメトリクスを可視化してモニタリング

More than 1 year has passed since last update.

前回の記事 でKubernetesやコンテナのログ・メトリクスをSplunkにインデックスする方法を投稿しましたが、今回はそのデータの可視化について書きたいと思います。


はじめに

こちらの記事は Splunk Add-on for KubernetesSplunk Connect for Kubernetes を使ってSplunkにデータを取り込んでいることを前提としています。

取り込み方法は前回の記事をご参照ください。

SplunkでKubernetesのログとメトリクスを監視してみよう


ソースタイプ

ソースタイプごとのデータの種類です。

ざっくり以下のようなデータがインデックスされます。

ソースタイプ
概要(データの中身からの推測となります)

kube kube:kubelet

Pod管理のログ

kube:kube-controller-manager
コントローラー管理ログ

kube:kube-apiserver
APIサーバーログ

kube:docker
Dockerサービスログ

kube:container:*
各コンテナのログ(Logging Driverから取得)

kube:objects:*
NodeやPod、Service、Namespace等のオブジェクト情報

fluentd:monitor-agent
fluentdでSplunk HECにPOSTする際のログ

Kubernetesの各コンポーネントはこちら↓の記事がとても参考になります。

Kubernetes: 構成コンポーネント一覧

https://qiita.com/tkusumi/items/c2a92cd52bfdb9edd613

メトリクスのソースタイプは httpevent となるようです。

実際サーチ書くときに意識することは無いので、知らなくても良いです。

| mcatalog values(sourcetype) where `k8s-metrics-index`

Screen Shot 2018-07-07 11.20.09 PM.png


マクロ

Splunk Add-on for Kubernetes にはデフォルトで k8s-event-indexk8s-metrics-index の2種類のマクロが入っています。

それぞれを編集して作成したk8s用インデックス名を書きましょう。

Screen Shot 2018-07-07 11.24.54 PM.png

Screen Shot 2018-07-07 11.25.05 PM.png


ダッシュボード

自分で作ったダッシュボードです。


Kubernetes Overview (概要)

NodeやNamespace、Pod、Serviceといったリソースを見ることができます。

kubectl get ...kubectl describe ... で取れるような情報を意識しています。

主にソースタイプ kube:objects:* から作ってあります。

Screen Shot 2018-07-07 11.26.46 PM.png


Kubernetes Operation Monitoring (Kubernetes運用監視)

Pod作成時のkube-controller-managerログやKubernetes各コンポーネントのエラーログ、レプリカの状態や各種メトリクスを入れてます。

Podが作成されると、リアルタイムに成功/失敗のログが吐き出されるので、モニタリングには良いでしょう。

Screen Shot 2018-07-07 11.34.27 PM.png


Pod Detail (Pod詳細)

Podのリソースメトリクスや、Logging Driverから取得されたコンテナのログを入れました。

Screen Shot 2018-07-07 11.40.00 PM.png

Kubernetes Overview ダッシュボード内のPod詳細からもリンクを貼って遷移できるようにしてあります。

Screen Shot 2018-07-07 11.41.55 PM.png


App

Splunk AppとしてGitHubの公開リポジトリに置きました。

https://github.com/kikeyama/splunk_kubernetes_demo

各種サーチ文や設定はこちらをご参照ください。


デモ

動画に撮ってみました。

実際にPodを作成したらどのようにSplunkでモニタリングできるのか、ということを実演しました。

KubernetesをSplunk各ダッシュボードのデモ

https://youtu.be/2A_SOZ4Q3wA


最後に

ダッシュボード作ってみての感想ですが、一番苦労したのは kube:objects:* のJSONを表形式にまとめることでした。

いろいろサーチコマンドを駆使してやってみたのですが、自分にはこれが限界...

正直あまりきれいなサーチ文になっていないので、今後改善していきたいです。

あと、自分のお気に入りは Kubernetes Operation Monitoring にある、Error Messagesパネル内でエラーログをクラスターにまとめるところです。

Screen Shot 2018-07-07 11.46.50 PM.png

サーチ文は以下

`k8s-event-index` (severity="ERROR" OR severity="WARN") 

| rex "[^:]+:\w+\]\s+(?P<message>[^$$]+)$$"
| cluster field=message t=0.9 labelonly=$labelonly$ showcount=true
| eval labelonly = "$labelonly$", message = if(labelonly="false", message . " (count: " . cluster_count . ")", message)
| table _time sourcetype severity message

$labelonly$ トークンをラジオボタンで作りつつ、Onを選択することでクラスターにまとめることができます。

似通ったエラーメッセージがずっと吐き出され続けて重要なものが埋もれる可能性があるので、似たものはまとめてしまった方が見やすいです。

k8s運用者の観点から、もしくはアプリ開発者の観点から、「こういうのが見られると便利だな」といったご意見いただけるとありがたいです。