LoginSignup
3

More than 1 year has passed since last update.

Kubernetesクラスタ上にあるコンテナのログをElasticsearchへ保存&Kibanaで可視化

Last updated at Posted at 2022-05-05

概要

  • Kubernetesクラスタのログをログサーバに転送する.
  • ここではログサーバを新たにKubernetesクラスタとは別の仮想マシンに構築する.
  • ログサーバには,Elasticsearch 8.2とKibana 8.2をインストールする.
  • KubernetesクラスタにはFilebeatをDaemonSetによりインストールし,Kubernetesクラスタのログをログサーバに転送する.

前提

  • OS: Ubuntu 20.04
  • Kubernetesディストリビューション: K3s v1.22.7+k3s1 (8432d7f2)
  • 4ノードから構成されるKubernetesクラスタ
    • ノード: doktor-prod10からdoktor-prod13
コマンドと実行結果
$ kubectl get node
NAME            STATUS   ROLES                  AGE    VERSION
doktor-prod13   Ready    <none>                 4d3h   v1.22.7+k3s1
doktor-prod11   Ready    <none>                 46d    v1.22.7+k3s1
doktor-prod12   Ready    <none>                 46d    v1.22.7+k3s1
doktor-prod10   Ready    control-plane,master   46d    v1.22.7+k3s1

$ kubectl top node
NAME            CPU(cores)   CPU%   MEMORY(bytes)   MEMORY%
doktor-prod10   247m         6%     4478Mi          75%
doktor-prod11   237m         5%     3087Mi          51%
doktor-prod12   122m         3%     2305Mi          38%
doktor-prod13   148m         3%     2169Mi          36%

手順

(1) ログサーバ用のVM(ElasticsearchとKibanaを動かす)を構築する.

[1] VM(CPU: 4コア, RAM: 8GB, SSD: 40GB, LVM無効)を作成する.
これはElasticsearchのRequirementsを参考に決めた.
OSはUbuntu 20.04を選んだ.
IPアドレスは 192.168.201.47 とする.

[2] ElasticsearchとKibanaをインストールする.
インストール手順は,以下を参考にした.

Install Elasticsearch with Debian Package | Elasticsearch Guide [8.2] | Elastic

[3] ElasticsearchとKibanaは以下で導入する.

コマンド
sudo apt install elasticsearch kibana

[4] ElasticsearchをVM外からアクセスできるよう設定を行う.テキストエディタを使い elasticsearch.yaml を編集する.以下はvimを使い編集を行う例である.

コマンド
sudo vim /etc/elasticsearch/elasticsearch.yml

変更箇所(変更後の値)

設定ファイル
# 外部のホストからアクセスできるように
network.host: 0.0.0.0

# HTTPでのアクセスを許可
xpack.security.http.ssl:
  enabled: false
  keystore.path: certs/http.p12

[5] それぞれ永続化を行う.

コマンド
sudo systemctl restart --now elasticsearch
sudo systemctl restart --now kibana

[6] 外部からアクセスできるか確かめる.

curlでElasticsearchをインストールしたVMのIPアドレスへ疎通確認をする.
IPアドレスは hostname -I で調べられる.以下ではIPアドレスが192.168.201.47の場合のcurlコマンドをあらわす.

コマンド
curl -X GET "192.168.201.47:9200/_cluster/health"

コマンドの結果が次のようにJSON形式で得られればよい.

実行結果
{"error":{"root_cause":[{"type":"security_exception","reason":"missing authentication credentials for REST request [/_cluster/health]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","ApiKey"]}}],"type":"security_exception","reason":"missing authentication credentials for REST request [/_cluster/health]","header":{"WWW-Authenticate":["Basic realm=\"security\" charset=\"UTF-8\"","ApiKey"]}},"status":401}koyama@jumpsv-deployment-56fcf7d64d-b7czg:~$

[7] Elasticsearchのパスワードを設定する.

WebブラウザからKibanaにアクセスするとユーザ名とパスワードを求められる.以下の手順を参考にパスワードを設定する.

Built-in users | Elasticsearch Guide [8.2] | Elastic

今回は既に設定されたパスワードをリセットしてみる.以下のコマンドを実行し,パスワードを入力する.

コマンド
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i

[8] Kibanaにアクセスする.

WebブラウザからElasticsearchの動作するVMのIPアドレスのポート5601番へURLを入力しアクセスする.ここではIPアドレスが192.168.201.47の場合に入力するURLを示す.

http://192.168.201.47:5601/

Screen Shot 2022-05-05 at 22.32.08.png

Key Value
ユーザ名 elastic
パスワード 先ほど設定したパスワード

(2) Kubernetesへの設定

以下の手順に従いながらKubernetesへFilebeatをDaemonSetとしてインストールする.

Run Filebeat on Kubernetes | Filebeat Reference [8.2] | Elastic

[1] Kubernetesクラスタへ kubectl コマンドでアクセスできる状態になる.以下のコマンドでノードが取得できればよい.

コマンド
kubectl get nodes

以下はコマンドの実行結果の例である.

実行結果
NAME            STATUS   ROLES                  AGE    VERSION
doktor-prod13   Ready    <none>                 4d3h   v1.22.7+k3s1
doktor-prod11   Ready    <none>                 46d    v1.22.7+k3s1
doktor-prod10   Ready    control-plane,master   46d    v1.22.7+k3s1
doktor-prod12   Ready    <none>                 46d    v1.22.7+k3s1

[2] Filebeat用のKubernetesマニュフェストを以下のコマンドを実行することでダウンロードする.

コマンド
curl -L -O https://raw.githubusercontent.com/elastic/beats/8.2/deploy/kubernetes/filebeat-kubernetes.yaml

ファイルがダウンロードできているか以下のコマンドを実行して確かめる.

コマンド
ls filebeat-kubernetes.yaml

ファイルが存在する場合,以下の結果が得られる.

実行結果
filebeat-kubernetes.yaml

[3] マニュフェストを環境にあわせて編集する.

テキストエディタを使い filebeat-kubernetes.yaml を編集する.以下はvimを使い編集を行う例である.

コマンド
vim filebeat-kubernetes.yaml

変更箇所を以下に示す.Elasitcsearchの動作するサーバのIPアドレスを ELASTICSEARCH_HOST に設定する.ここでは 192.168.201.47 に設定した.
また,先ほど設定したパスワードを ELASTICSEARCH_PASSWORD に設定する.ここでは xxxx に設定した.

設定ファイル(抜粋)
env:
- name: ELASTICSEARCH_HOST
  value: 192.168.201.47
- name: ELASTICSEARCH_PORT
  value: "9200"
- name: ELASTICSEARCH_USERNAME
  value: elastic
- name: ELASTICSEARCH_PASSWORD
  value: xxxx
- name: ELASTIC_CLOUD_ID
  value:
- name: ELASTIC_CLOUD_AUTH
  value:
- name: NODE_NAME
  valueFrom:
    fieldRef:
      fieldPath: spec.nodeName

変更が保存されているか cat コマンドを実行して確かめる.

コマンド
cat filebeat-kubernetes.yaml

[4] Kubernetesクラスタへ設定を適用する.以下のコマンドを実行しFilebeatを配置する.

コマンド
kubectl apply -f filebeat-kubernetes.yaml

以下はコマンドの実行結果の例である.

実行結果
configmap/filebeat-config unchanged
daemonset.apps/filebeat configured
clusterrolebinding.rbac.authorization.k8s.io/filebeat unchanged
rolebinding.rbac.authorization.k8s.io/filebeat unchanged
rolebinding.rbac.authorization.k8s.io/filebeat-kubeadm-config unchanged
clusterrole.rbac.authorization.k8s.io/filebeat unchanged
role.rbac.authorization.k8s.io/filebeat unchanged
role.rbac.authorization.k8s.io/filebeat-kubeadm-config unchanged
serviceaccount/filebeat unchanged

[5] Kubernetesクラスタへ設定が適用できたか確かめる.

以下のコマンドを実行して,FilebeatがDaemonSetとして配置されて起動しているか確かめる.

コマンド
kubectl get ds -n kube-system

コマンドの結果が以下になるか確かめる.READYがノード数と一致すればよい.以下はノード数( kubectl get nodes で表示されるノードの数)が4の場合の実行結果をあらわす.

実行結果
NAME       DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
filebeat   4         4         4       4            4           <none>          45m

(3) Kibanaでログを閲覧

[1] Data Viewの設定を行う.

Kibanaへログインし,左上のメニューボタンを押す.

ページをスクロールし,「Magement → Stack Management」を選ぶ.

左側のメニューをスクロールし,「Kibana → Data Views」を選ぶ.

Screen Shot 2022-05-05 at 22.52.55.png

右上にある「Create data view」を押し,表示されるフォームのNameに filebeat-* と入力する.

Screen Shot 2022-05-05 at 22.54.21.png

右下の「Create data view」を押す.

[2] データを閲覧する.

左上のメニューを押し,「Analytics → Discover」を押す.

image.png

ダッシュボードにログが表示されればよい.

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3