Elastic:在Kubernetes里运行Metricbeat

在今天的文章中,我们来讲述如何在Kubernetes里安装Metricbeat,并收集Kubernetes里的pod信息。如果大家还没有开始安装自己的Kubernetes的话,建议大家阅读我之前的文章:

为了方便,在今天的展示中,我们将使用Minikube来进行我们的实验。

下载metribeat 配置文件

我们在Elastic的官方网站上找到链接“Running metricbeat on Kuberenetes”。我们通过如下的方法来下载这个配置文件:

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

这个下载的文档是不能直接使用的。我们必须对它进行修改:

1)这个文件所有的安装在默认的情况下都是安装到kube-system namespace里的。这个和我们当期的Elastic Stack运行所处的命名空间是不一样的。我们可以通过如下的命令来获得所的命令空间:

$ kubectl get ns
NAME                   STATUS   AGE
default                Active   15h
elastic-system         Active   77m
kube-node-lease        Active   15h
kube-public            Active   15h
kube-system            Active   15h
kubernetes-dashboard   Active   78m

Elastic Stack的Elasticsearch及Kibana都处于default namespace,所以,我们把下载文档metricbeat-kubernetes.yaml里的所有的namespace都替换为default。

2)在ConfigMap metadata 为metricbeat-daemonset-config的部分,我们需要为访问Elasticsearch配置必要的证书以访问Elasticsearch。为此,我们对它做如下的修改:

    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

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

3)挂载证书

我们首先找到DaemonSet的这个部分:

apiVersion: apps/v1
kind: DaemonSet

并做如下的修改:

请注意红色的部分是我们需要添加的部分。很多人可能不太理解为什么这么修改。

我们可以使用如下的命令:

$ kubectl get secrets
NAME                                   TYPE                                  DATA   AGE
default-quickstart-kibana-user         Opaque                                3      72m
default-token-94x6w                    kubernetes.io/service-account-token   3      16h
metricbeat-token-bpl4d                 kubernetes.io/service-account-token   3      54m
quickstart-es-default-es-config        Opaque                                1      78m
quickstart-es-elastic-user             Opaque                                1      78m
quickstart-es-http-ca-internal         Opaque                                2      78m
quickstart-es-http-certs-internal      Opaque                                3      78m
quickstart-es-http-certs-public        Opaque                                2      78m
quickstart-es-internal-users           Opaque                                3      78m
quickstart-es-transport-ca-internal    Opaque                                2      78m
quickstart-es-transport-certificates   Opaque                                3      78m
quickstart-es-transport-certs-public   Opaque                                1      78m
quickstart-es-xpack-file-realm         Opaque                                3      78m
quickstart-kb-config                   Opaque                                2      72m
quickstart-kb-es-ca                    Opaque                                2      72m
quickstart-kb-http-ca-internal         Opaque                                2      72m
quickstart-kb-http-certs-internal      Opaque                                3      72m
quickstart-kb-http-certs-public        Opaque                                2      72m
quickstart-kibana-user                 Opaque                                1      72m

上面的命令显示的是Kubernetes里所有的secrets。其中quickstart-es-http-certs-public里面含有访问Elasticsearch所需的证书信息。

4)配置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    16h
quickstart-es-default   ClusterIP   None             <none>        <none>     81m
quickstart-es-http      ClusterIP   10.106.166.167   <none>        9200/TCP   81m
quickstart-kb-http      ClusterIP   10.111.178.132   <none>        5601/TCP   75m

在上面,quickstart-es-http 就是Kubernetes内部可以访问Elasticsearch的一个服务。如果我们想要写入到Elasticsearch,我们必须使用这个服务:

请注意上面的红色框标识的部分。这些是我们需要改动的地方。记得把密码填入。如果你不指定这个密码的话,请参阅我之前配置Kubernetes里所述的方法。

好了,我们的配置就完成了。

安装metricbeat

在上面我们已经配置好metricbeat了。我们打入如下的命令:

kubectl apply -f metricbeat-kubernetes.yaml 

然后,我们使用如下的命令来查看pods:

kubectl get pods
$ kubectl get pods
NAME                             READY   STATUS    RESTARTS   AGE
metricbeat-cq8lv                 1/1     Running   0          42m
metricbeat-f69cc9574-q6sqm       1/1     Running   0          63m
quickstart-es-default-0          1/1     Running   0          85m
quickstart-kb-5c8d67cf65-r7gdx   1/1     Running   0          81m

因为我们有Elasticsearch及Kibana,并且我们使用的是DaemonSet部署方法,在上面我们可以看见有两个运行的metricbeat的pod。它们都处于运行的状态。

在Kibana里监测数据

我们打开Kibana:

在上面,我们可以看到有以metricbeat为开始的索引出现。我们为它创建一个index pattern,并在Discover里进查看:

在Discover里进行查看:

我们可以看到上传进来的metricbeat数据。

我们可以对相应的pod进行搜索。

 

参考:

【1】https://qbox.io/blog/shipping-kubernetes-cluster-metrics-to-elasticsearch-with-metricbeat

实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值