Elastic:使用 Filebeat 监视 Kubernetes 上的 Elastic Stack

本文详细介绍如何在Kubernetes环境中部署Filebeat,实现对ElasticStack的监控。通过配置证书和修改部署参数,确保Filebeat能顺利访问Elasticsearch。

在今天的文章中,我们将会在 Kubernetes 上部署 Filebeat,并使用 Filebeat 来监视 Kubernetes 中的 Elastic Stack 的运行情况。如果你还没有部署自己的 Kubernetes 的话,请参阅我之前的文章 “在Kubernetes多节点集群部署Elastic Stack”。

我们之前的部署情况是这样的:

 

准备工作

在我们的 Kubernete 启动起来过后,我们其实并不需要每次都登录到 kmaster 进行操作。我们可以在 Host 机器上安装 kubectl,并同时把kmaster机器里的文件目录 .kube 的内容复制到 host MacOS 机器的 home 目录。针对我的情况:

$ pwd
/Users/liuxg
liuxg:~ liuxg$ ls .kube/
cache      config     http-cache shell

也就是在我们的 host 机器的 home 目录下,复制了一份和 kmaster home 目录下一摸一样的 .kube 目录。这样我们直接可以在 host 集群上对 kubernetes 进行操作:

$ pwd
/Users/liuxg
liuxg:~ liuxg$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
quickstart-es-default-0          1/1     Running   1          2d2h
quickstart-kb-6f487c444d-7kzwb   1/1     Running   1          2d1h

在 Kubernetes 上部署 Filebeat

为了能让 Filebeat 访问 Elasticsearch,我们必须为我们的 Filebeat 配置证书:

kubectl get secrets
$ kubectl get secrets
NAME                                   TYPE                                  DATA   AGE
default-quickstart-kibana-user         Opaque                                3      2d4h
default-token-z5j79                    kubernetes.io/service-account-token   3      2d23h
quickstart-es-default-es-config        Opaque                                1      2d22h
quickstart-es-elastic-user             Opaque                                1      2d22h
quickstart-es-http-ca-internal         Opaque                                2      2d22h
quickstart-es-http-certs-internal      Opaque                                3      2d22h
quickstart-es-http-certs-public        Opaque                                2      2d22h
quickstart-es-internal-users           Opaque                                3      2d22h
quickstart-es-transport-ca-internal    Opaque                                2      2d22h
quickstart-es-transport-certificates   Opaque                                3      2d22h
quickstart-es-transport-certs-public   Opaque                                1      2d22h
quickstart-es-xpack-file-realm         Opaque                                3      2d22h
quickstart-kb-config                   Opaque                                2      2d4h
quickstart-kb-es-ca                    Opaque                                2      2d4h
quickstart-kb-http-ca-internal         Opaque                                2      2d4h
quickstart-kb-http-certs-internal      Opaque                                3      2d4h
quickstart-kb-http-certs-public        Opaque                                2      2d4h
quickstart-kibana-user                 Opaque                                1      2d4h

上面显示了 Kubernetes 的所有的 secret。还记得我们之前密码的来处吗?它就是来自上面的 quickstart-es-elastic-user。对于 Filebeat 所需要用到的证书,它将来自 quickstart-es-http-certs-public。我们将把这个拷入到 Filebeat 的容器中,以使得 Filebeat 能够正常访问我们的 Elasticsearch。

我们参照链接 “Run Filebeat on Kubernetes”, 我们首先来下载在如下地址的 yaml 文件:

curl -L -O https://raw.githubusercontent.com/elastic/beats/master/deploy/kubernetes/filebeat-kubernetes.yaml

经过实测,发现在中国地区有困难下载这个文件。我们需要找到一些办法下载这个问件。我们接下来需要对这个文件来进行修改。完整的 filebeat-kubernetes.yaml 文件,我放在github上:https://github.com/liu-xiao-guo/filebeat-kubernetes

1)这个文件里的所有的 namespace 都是针对 kube-system 的,我们需要把它修改为我们 Elastic Stack 所部署的 namespace:

$ kubectl get ns
NAME                   STATUS   AGE
default                Active   2d23h
elastic-system         Active   2d23h
kube-node-lease        Active   2d23h
kube-public            Active   2d23h
kube-system            Active   2d23h
kubernetes-dashboard   Active   2d23h

我们知道,Elastics Stack 部署在 default namespace 里,所有我们需要把文件里所有的 kube-system 替换为 default。

2) 依据文档中的介绍,它使用的是 filebeat:8.0.0 的版本,显然这个不是我们所需要的版本,而且目前 Elastic Stack 的最新的版本是7.6.2。我们部署的 Elastic Stack 的版本也是7.6.2。所以这个部分我们需要做修改。把版本改为7.6.2 (在写这篇文章的时候,由于一些原因,7.6.2的 image 下载有困难。尝试7.5.2是成功的)。

3)配置 Filebeat 访问 Elasticsearch 所需要的证书(ConfigMap 部分):

    cloud.id: ${ELASTIC_CLOUD_ID}
    cloud.auth: ${ELASTIC_CLOUD_AUTH}

    output.elasticsearch:
      hosts: ['${ELASTICSEARCH_HOST:elasticsearch}:${ELASTICSEARCH_PORT:9200}']
      username: ${ELASTICSEARCH_USERNAME}
      password: ${ELASTICSEARCH_PASSWORD}
      ssl.certificate_authorities:
        - /etc/certificate/ca.crt

在上面的部分,我添加了:

      ssl.certificate_authorities:
        - /etc/certificate/ca.crt

目前这个证书还在当前的容器中还不存在。我们需要配置这个证书。

4) 挂载证书

我们找到 DaemonSet 如下的配置部分下的 volumeMoints 及 volumes:

apiVersion: apps/v1
kind: DaemonSet

并做相应的修改:

请注意上面红色框的部分。这些部分是我们需要添加的部分。它把我们上面所说的证书挂载到每个容器的 /etc/certificate/ca.crt 位置。

5)配置 Elasticsearch 服务

我们还是针对上面的 DaemonSet 的配置,找到 ELASTICSEARCH_HOST 部分。它需要配置为 Elasticsearch 的服务。我们可以通过如下的命令来找到 Elasticsearch 的服务:

 kubectl get svc
$ kubectl get svc
NAME                    TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
kubernetes              ClusterIP   10.96.0.1        <none>        443/TCP          3d
quickstart-es-default   ClusterIP   None             <none>        <none>           2d23h
quickstart-es-http      NodePort    10.111.1.15      <none>        9200:31308/TCP   2d23h
quickstart-kb-http      NodePort    10.109.179.162   <none>        5601:31249/TCP   2d5h

上面显示 quickstart-es-http 是我们的 Elasticsearc h的服务。我们需要做如下的修改:

我们需要把 Elasticsearch 的服务填上,并把我们之前得到的密码填入。

好了我们的修改的工作已经完成了。我们接下来打入如下的命令:

kubectl create -f filebeat-kubernetes.yaml
$ kubectl create -f filebeat-kubernetes.yaml 
configmap/filebeat-config created
daemonset.apps/filebeat created
clusterrolebinding.rbac.authorization.k8s.io/filebeat created
clusterrole.rbac.authorization.k8s.io/filebeat created
serviceaccount/filebeat created
$ kubectl get all 
NAME                                 READY   STATUS              RESTARTS   AGE
pod/filebeat-cv7tb                   0/1     ContainerCreating   0          44s
pod/quickstart-es-default-0          1/1     Running             3          2d6h
pod/quickstart-kb-6f487c444d-7kzwb   1/1     Running             3          2d5h


NAME                            TYPE        CLUSTER-IP       EXTERNAL-IP   PORT(S)          AGE
service/kubernetes              ClusterIP   10.96.0.1        <none>        443/TCP          3d
service/quickstart-es-default   ClusterIP   None             <none>        <none>           2d23h
service/quickstart-es-http      NodePort    10.111.1.15      <none>        9200:31308/TCP   2d23h
service/quickstart-kb-http      NodePort    10.109.179.162   <none>        5601:31249/TCP   2d5h

NAME                      DESIRED   CURRENT   READY   UP-TO-DATE   AVAILABLE   NODE SELECTOR   AGE
daemonset.apps/filebeat   1         1         0       1            0           <none>          45s

NAME                            READY   UP-TO-DATE   AVAILABLE   AGE
deployment.apps/quickstart-kb   1/1     1            1           2d5h

NAME                                       DESIRED   CURRENT   READY   AGE
replicaset.apps/quickstart-kb-6f487c444d   1         1         1       2d5h

NAME                                     READY   AGE
statefulset.apps/quickstart-es-default   1/1     2d23h

从上面,我们可以看出来 filebeat 已经被创建起来了。

$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
filebeat-xclxx                   1/1     Running   0          3m59s
quickstart-es-default-0          1/1     Running   3          2d7h
quickstart-kb-6f487c444d-7kzwb   1/1     Running   3          2d6h

我们可以通过如下的名来查看 Filebeat 的启动 log:

kubectl logs -f filebeat-xclxx

在 log 里,我们可以看到诸如:

从上面,我们可以看出来,我们的 Filebeat 已经成功地连接到 Elasticsearch。

 

在 Kibana 中查看数据

我们现在打开 Kibana 界面:

我们打开 Index Management 的界面,我可以看到有一个 filebeat-7.5.2-2020.04.28-000001 的索引。这个就是我们的 Filebeat 收集所有的 pod 的索引。我们创建一个 filebeat-* 的index pattern:

点击 Next step:

点击 Create index pattern:

我们可以选择感谢的 pod 来进行监测:

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值