皆さんこんにちは
あっという間に年末になってびっくりしている@tereka114です。
本記事は「Elastic Stack」のアドベントカレンダー19日目の記事です。
アドベントカレンダーで本日公開しようと思ったら、
偶然にも公式のアドベントカレンダーもKubernetesです。びっくりです。
さて、KubernetesのメトリックをElastic Stack 6.0から標準の機能で取得できるようになりました。
しかし、Kubenetes初心者である私が試しに使ってみると非常に苦労したので、その戦いの記録を掲載します!!!
Kubernetesを可視化することの利点
Kubernetesは複数のコンテナを操作するオーケストレーションツールです。
Elastic Stackを使うことで、Kubernetesから得られるメトリックを取得し、可視化できます。
利点としては、dockerコンテナをオーケストレーションするKubernetesでは
やっぱり、ログ収集をやりたくなりますよね?
それをElastic Stackで実現したら、さらにdockerコンテナの情報や、Kubernetes自身の情報(PodやServiceなど)などの
メトリクス情報を集めて、Kibanaで可視化されると便利ですよね?
そんな便利なことの実現の第一歩として、今回、Kubernetesの可視化に挑戦しました。
実際にやってみた。
Kubernetesの準備
KubernetesのElastic Stack監視をするために
minikube(0.23.0)、kubectl(1.8.0)、kube-state-metrics(1.1.0)のインストールが必要です。
OSによってインストール方法は異なりますが、まずはそれらをインストールしましょう。
インストール方法は次を参考にしてください。
■minikube
github.com
■kubectl
kubernetes.io
■kube-state-metrics
github.com
Elastic Stack 6.0による可視化
Elastic Stack6.0で可視化をします。
Kubernetesのメトリックの取得方法ですが、
MetricbeatのmoduleにKubenetesが標準で追加されたので、それを使用します。
まずは、設定ファイルをKubernetes用に書き換えます。
metricbeat.modules: # Node metrics, from kubelet: - module: kubernetes metricsets: - node - system - pod - container - volume period: 10s hosts: ["http://localhost:8001/api/v1/proxy/nodes/minikube:10255/stats/summary"] # State metrics from kube-state-metrics service: - module: kubernetes enabled: true metricsets: - state_node - state_deployment - state_replicaset - state_pod - state_container period: 10s hosts: ["http://localhost:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:8080/proxy/metrics"]
Elasticsearch, Kibana, Metricbeatを起動します。Metricbeatの起動コマンドは次の通りです。
./metricbeat -e -c metricbeat.yml
Discoverを確認して、投入できているか確認しましょう。
非常にシンプルで簡単ですね。
しかし、Kubernetes初心者にとって、意外と正しく取得先を
設定することが難しかったので、その点をこれから紹介します。
hostsについて
意外なハマりポイントとして、「hostsに書くべき項目は何か」といったことです。
これがドキュメントにあまりに書かれておらず、
kubernetesをこれを機に勉強していた人間としてはかなり難しい要素でした。
Kubernetes moduleはkubeletとkube-state-metricsのAPIからメトリックを取得します。
そのため、どちらもAPIの然るべきURL(これを探すのが大変)にアクセスしなければなりません。
Kubernetesのコンテナへアクセスするために、プロキシが必要です。Kubernetesのプロキシの起動は次の通りです。
kubectl proxy
この後、kubeletとkube-state-metricsのurlの探し方を説明します。
kubelet
kubeletのURLは、次の通りです。
URL内のminikubeと記載されている箇所はnodeの名前(NAME)を示しています。
http://localhost:8001/api/v1/proxy/nodes/minikube:10255/stats/summary
$ kubectl get node --all-namespaces=true NAMESPACE NAME STATUS ROLES AGE VERSION minikube Ready <none> 22h v1.8.0
kube-state-metrics
次にkube-state-metricsから取得します。
kube-state-metricsをインストールすると、podとserviceが起動します。
serviceの一覧の「kube-state-metrics」の/metricsへアクセスする必要があります。
プロキシを用いたアクセスするurlがKubernetesのバージョンで異なっているので
アクセス先を特定するのに苦労しました。
$ kubectl get service --all-namespaces=true NAMESPACE NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE default banking-ladybird-kube-state-metrics ClusterIP 10.0.0.201 <none> 8080/TCP 6h default edgy-camel-kube-state-metrics ClusterIP 10.0.0.14 <none> 8080/TCP 6h default kubernetes ClusterIP 10.0.0.1 <none> 443/TCP 22h default snug-sasquatch-kube-state-metrics ClusterIP 10.0.0.151 <none> 8080/TCP 6h default spark-master ClusterIP 10.0.0.20 <none> 7077/TCP,8080/TCP 22h default spark-ui-proxy LoadBalancer 10.0.0.192 <pending> 80:32499/TCP 22h default zeppelin LoadBalancer 10.0.0.117 <pending> 80:31618/TCP 22h kube-system kube-dns ClusterIP 10.0.0.10 <none> 53/UDP,53/TCP 22h kube-system kube-state-metrics ClusterIP 10.0.0.133 <none> 8080/TCP 7h kube-system kubernetes-dashboard NodePort 10.0.0.157 <none> 80:30000/TCP 22h kube-system tiller-deploy ClusterIP 10.0.0.237 <none> 44134/TCP 6h
この中からkube-state-metricsのserviceを発見し、urlを作成することで、アクセス可能です。
URLの作り方は次の通りです。
http://localhost:8001/api/v1/namespaces/[namespace]/services/[service:port]/proxy/metrics
■例
http://localhost:8001/api/v1/namespaces/kube-system/services/kube-state-metrics:8080/proxy/metrics
可視化
最後にデータをKibanaのダッシュボードで可視化しましょう。
Kubanetesのダッシュボードですが、Metricbeatのmodulesに標準で搭載されています。
標準ダッシュボードの準備方法ですが、Beatsのバージョン5系と6系でsetupの方法が少々異なっています。
「./scripts/import_dashboards」がなくなり、Metricbeatの実行ファイルを利用します。
metricbeatからindexとダッシュボードを次のコマンドで設定します。
./metricbeat setup
後はKibana上で「 [Metricbeat Kubernetes] Overview」へアクセスします。
アクセスすると次のダッシュボードが見られます。
おっ、なんだかそれっぽいですね!。
最後に
ログ集約していくとElasticに情報集めたくなり、
Kubernetesも一緒に簡単にみられるようになるのはよいですね!
どんどん使っていきたいです!
Acroquest Technologyでは、キャリア採用を行っています。
- ビッグデータ(Hadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
- マイクロサービス、DevOpsなどの技術を使ったり、データ分析、機械学習などのスキルを活かしたい。
- 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
- 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com