今天來安裝 ELK Stack,並且收集 k8s 的 log,但是會有一點點不同,我們看下圖:
這個圖簡單表現出一個利用 ELK 收集 log 的流程,你的 log file 會被送到 logstash 做資料清洗或是處理, logstash 再將處理好的資料(log)送至 elsaticsearch 做儲存,最後再由 kibana 將你的資料視覺化、展示給你看,而今天所分享的方法較為簡單,雖然也可以收集 log 但卻在實際應用上會不大方便使用,我們看下圖:
跟上面那張圖相比,多了一個 beat,那 beat 在這裡擔任什麼工作呢?beat 負責的主要是收集資料,並送至 elasticsearch 或 logstash 做資料處理,再送至 elasticsearch,不過beat有分很多種,metricbeat 、 filebeat 等,每個 beat 的分工各不相同,像 filebeat ,顧名思義就是會去收集 file 的 data ,而這也是我們今天要使用的,不過我們今天不做資料處理,也就是沒有 logstash 的部分,所以會導致數面所提到的問題,那不贅述太多,先來安裝看看吧!
kubectl apply -f https://download.elastic.co/downloads/eck/1.3.1/all-in-one.yaml
kubectl apply -f es.yaml
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
spec:
version: 7.10.2
nodeSets:
- name: default
count: 1
config:
node.store.allow_mmap: false
podTemplate:
spec:
volumes:
- name: elasticsearch-data
emptyDir: {}
kubectl port-forward service/quickstart-es-http 9200
默認帳號:elastic
PASSWORD=$(kubectl get secret quickstart-es-elastic-user -o go-template='{{.data.elastic | base64decode}}')
echo $PASSWORD
curl -u "elastic:$PASSWORD" -k "https://localhost:9200"
kubectl apply -f kibana.yaml
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: quickstart
spec:
version: 7.10.2
count: 1
elasticsearchRef:
name: quickstart
kubectl port-forward --address=0.0.0.0 service/quickstart-kb-http 5601:5601
默認帳號:elastic
kubectl get secret quickstart-es-elastic-user -o=jsonpath='{.data.elastic}' | base64 --decode; echo
https://{node-IP}:5601
kubectl apply -f filebeat.yaml
apiVersion: beat.k8s.elastic.co/v1beta1
kind: Beat
metadata:
name: quickstart
spec:
type: filebeat
version: 7.10.2
elasticsearchRef:
name: quickstart
config:
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
daemonSet:
podTemplate:
spec:
dnsPolicy: ClusterFirstWithHostNet
hostNetwork: true
securityContext:
runAsUser: 0
containers:
- name: filebeat
volumeMounts:
- name: varlogcontainers
mountPath: /var/log/containers
- name: varlogpods
mountPath: /var/log/pods
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
volumes:
- name: varlogcontainers
hostPath:
path: /var/log/containers
- name: varlogpods
hostPath:
path: /var/log/pods
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
apiVersion: v1
kind: Pod
metadata:
name: counter
spec:
containers:
- name: count
image: busybox
# 輸出hello world
args: [/bin/sh, -c,
'i=0; while true; do echo "hello world: $i: $(date)"; i=$((i+1)); sleep 3; done']
ps: 記得create 或 apply :)
Ya! 有 log 了,不過省略 logstash 其實還蠻麻煩的,這些 log 一但多了起來,樣式也多樣化之後,會挺不好看的,目前我不清楚是否能在 filebeat 上進行簡單的資料處理,所以資料處理的部分都在 logstash 上做,如果有人知道 filebeat 可以多做一些什麼的話,還請各位留言告知謝謝!
一天:)