流程圖
服務器可用資源 4 核 8G,Kubernetes 集群版本信息
源碼
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
kubectl get pods -n logging
部署 Kibana
kubectl create -f kibana-deployment.yaml kubectl create -f kibana-service.yaml
查看Kibana
kubectl get pod -n logging|grep kibana
查看Kibana Service
訪問Kibana
http://10.1.2.190:32032/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
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
創建模擬程序
kubectl create -f app-filebeat.yaml -n logging
創建es索引
查詢日志
最終pod情況
最終service情況
數據流轉情況
這個pod中有2個docker程序 一個是filebeat一個應用程序,這個應用程序是往指定目錄下寫入日志。
查看pod yaml
kubectl edit pod app-b8677899d-h44gf -n logging
應用程序往/opt/date.log文件寫入數據
該目錄並沒有做宿主機映射
filebeat從logpath目錄下讀取日志數據,並映射到/data/log/app/,從filebeatconf目錄讀取filebeat的配置文件。並映射到usr/share/filebeat/filebeat.yml
而logpath就是應用pod日志,並沒有映射到宿主機上,filebeatconf表示讀取宿主機上的filebeat.yml(configmap文件)映射到pod中usr/share/filebeat/filebeat.yml目錄下。
configmap的內容讀取pod中/data/log/xxxx.log日志文件,存儲到kafka中。
查看應用産生的日志
kubectl exec -ti -n logging app-b8677899d-h44gf -- tail -1 /data/log/app/date.log
進入kafka中
驗證是否收到filebeat傳送過來的數據
監聽kafaka消息隊列
cd /opt/bitnami/kafka/binsh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic filebeat-sidecar --from-beginning
應用pod中的filebeat進程可以讀取到應用進程産生的日志,並可以正常穿給kafka中的消息隊列中並且可以由消費者消費。
kafka消息了之後,發送給logstach進行處理並發給es
logstach的輸入是kafka消息,輸出是es,es中的數據再由kibana展示出來。