将位于Kubernetes集群上的容器日志保存到Elasticsearch,并在Kibana上进行可视化

简介

    • Kubernetesクラスタのログをログサーバに転送する.

 

    • ここではログサーバを新たにKubernetesクラスタとは別の仮想マシンに構築する.

 

    • ログサーバには,Elasticsearch 8.2とKibana 8.2をインストールする.

 

    KubernetesクラスタにはFilebeatをDaemonSetによりインストールし,Kubernetesクラスタのログをログサーバに転送する.

前提 tí)

    • 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) 建立用于日志服务器的虚拟机(运行Elasticsearch和Kibana)。

创建一个具有以下规格的虚拟机:CPU:4核,RAM:8GB,SSD:40GB,LVM禁用。这是根据Elasticsearch的要求决定的。选择操作系统为Ubuntu 20.04。将IP地址设置为192.168.201.47。

[2] 安装Elasticsearch和Kibana。安装步骤如下所示。

使用Debian软件包安装Elasticsearch | Elasticsearch指南 [8.2] | Elastic

请参照以下步骤进行Elasticsearch和Kibana的安装。

sudo apt install elasticsearch kibana

进行设置,以便从VM外部访问Elasticsearch。使用文本编辑器编辑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] Each one conducts permanence. (English)

[5] 每个人都进行永久化。 (Simplified Chinese)

sudo systemctl restart --now elasticsearch
sudo systemctl restart --now kibana

确认是否可以从外部访问。

通过 curl 命令确认与安装了 Elasticsearch 的虚拟机的 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的密码。

当您尝试从网络浏览器访问Kibana时,系统会要求您提供用户名和密码。请参考以下步骤来设置密码。

内置用户 | Elasticsearch指南 [8.2] | 弹性搜索

本次尝试重置已设定的密码。请执行以下命令,并输入密码。

sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic -i

[8] 访问Kibana。

通过Web浏览器输入连接至运行Elasticsearch的虚拟机的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
KeyValueユーザ名elasticパスワード先ほど設定したパスワード

(2) 对Kubernetes的配置

按照以下步骤,将Filebeat安装为Kubernetes的DaemonSet。

在Kubernetes上运行Filebeat | Filebeat参考手册[8.2] | Elastic

只需要一种选项,对以下内容进行汉语的本地化改写:
[1] 要能够通过kubectl命令访问Kubernetes集群。只需使用以下命令获取节点即可。

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

通过执行以下命令,可以下载用于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

根据环境调整编辑宣言。

使用文本编辑器来编辑 filebeat-kubernetes.yaml 文件。以下是使用 vim 进行编辑的示例。

vim filebeat-kubernetes.yaml

以下是需要更改的地方。将Elasticsearch运行的服务器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

应用配置到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

确定配置是否已应用于Kubernetes集群。

执行以下命令,确认Filebeat是否作为DaemonSet配置并已启动。

kubectl get ds -n kube-system

验证命令的结果是否符合以下要求。只要“READY”与节点数相等即可。以下是节点数为4时(通过kubectl get nodes命令显示)的执行结果。

确认命令结果是否为以下内容。只要”READY”与节点数相同即可。以下是节点数为4时执行的结果的描述。

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

(3) 在 Kibana 中查看日志.

[1] 进行数据视图的配置。

登录到Kibana,点击左上角的菜单按钮。

滚动页面,选择“管理→堆栈管理”。

在左侧菜单中滚动,选择“Kibana → 数据视图”。

Screen Shot 2022-05-05 at 22.52.55.png

点击右上角的”创建数据视图”,在出现的表格中的Name栏输入filebeat-*。

Screen Shot 2022-05-05 at 22.54.21.png

点击右下方的“创建数据视图”。

查看数据。

点击左上角的菜单按钮,选择”分析 → 发现”。

image.png

只要在仪表盘上显示日志即可。

广告
将在 10 秒后关闭
bannerAds