K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

流程圖

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

服務器可用資源 4 核 8G,Kubernetes 集群版本信息

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

源碼

https://gitee.com/pingfanrenbiji/k8s/

創建命名空間

kubectl create -f create-logging-namespace.yaml

創建 ElasticSearch 集群

kubectl create -f es-service.yamlkubectl create -f es-statefulset.yaml

查看資源是否已創建

kubectl get service -n logging

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

kubectl get pods -n logging

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

部署 Kibana

kubectl create -f kibana-deployment.yaml kubectl create -f kibana-service.yaml

查看Kibana

kubectl get pod -n logging|grep kibana

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

查看Kibana Service

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

訪問Kibana

http://10.1.2.190:32032/kibana/

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

安裝helm

mkdir -p /tmp/helmcd /tmp/helmwget -O helm.tar.gz https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gztar zxvf helm.tar.gzsudo cp linux-amd64/helm /usr/bin/helm version若輸出:version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"},說明安裝成功。初始化 Helmhelm repo add stable https://kubernetes-charts.storage.googleapis.com/

部署kafka 和 Logstash

cd k8s/efk-7.10.2/filebeathelm install zookeeper zookeeper/ -n logging # 安裝 zookeeperkubectl get pods -n logging -l app.kubernetes.io/name=zookeeper

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

helm install kafka kafka/ -n logging # 安裝 Kafkakubectl get pods -n logging -l app.kubernetes.io/component=kafka

當所有 Pod 都正常後,創建 logstash 服務

kubectl create -f logstash-service.yaml -f logstash-cm.yaml -f logstash.yaml -n logging

注意

logstash-cm.yaml 文件中的一些配置:input: 數據來源,本次示例配置的是 kafkainput.kafka.bootstrap_servers: kafka 的地址,由于是安裝在集群內,可以直接使用 kafka 集群的 Service 接口,如果是外部地址,按需配置既可;input.kafka.topics: Kafka 的 topic,需要和 Filebeat 輸出的 topic 一致;input.kafka.type: 定義一個 type,可以用于 logstash 輸出至不同的 Elasticsearch 集群;output: 數據輸出至哪裏,本次示例輸出至 Elasticsearch 集群,在裏面配置了一個判斷語句,當 type 爲 filebeat-sidecar 時,將會輸出至 Elasticsearch 集群,並且索引爲 filebeat-xxx。注入 Filebeat Sidecar

當應用的日志沒有輸出到控制台,而是被輸出到一個文件中時,此時可以使用 Filebeat 進行采集。以下示例會創建一個模擬程序,該程序會在 /opt/date.log 文件輸出當前日志

``

cd k8s/efk-7.10.2/filebeatkubectl create -f app.yaml -n logging kubectl get configmap -n logging|grep filebeat

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

創建模擬程序

kubectl create -f app-filebeat.yaml -n logging

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

創建es索引

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

查詢日志

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

最終pod情況

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

最終service情況

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

數據流轉情況

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

這個pod中有2個docker程序 一個是filebeat一個應用程序,這個應用程序是往指定目錄下寫入日志。

查看pod yaml

kubectl edit pod app-b8677899d-h44gf -n logging

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

應用程序往/opt/date.log文件寫入數據

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

該目錄並沒有做宿主機映射

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

filebeat從logpath目錄下讀取日志數據,並映射到/data/log/app/,從filebeatconf目錄讀取filebeat的配置文件。並映射到usr/share/filebeat/filebeat.yml

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

而logpath就是應用pod日志,並沒有映射到宿主機上,filebeatconf表示讀取宿主機上的filebeat.yml(configmap文件)映射到pod中usr/share/filebeat/filebeat.yml目錄下。

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

configmap的內容讀取pod中/data/log/xxxx.log日志文件,存儲到kafka中。

查看應用産生的日志

kubectl exec -ti -n logging app-b8677899d-h44gf -- tail -1 /data/log/app/date.log

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

進入kafka中

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

驗證是否收到filebeat傳送過來的數據

監聽kafaka消息隊列

cd /opt/bitnami/kafka/binsh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic filebeat-sidecar --from-beginning

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

應用pod中的filebeat進程可以讀取到應用進程産生的日志,並可以正常穿給kafka中的消息隊列中並且可以由消費者消費。

kafka消息了之後,發送給logstach進行處理並發給es

K8S搭建監控平台二之EFK(ElasticSearch + Filebeat + Kibana)

logstach的輸入是kafka消息,輸出是es,es中的數據再由kibana展示出來。