-
K8s部署EFK(elasticsear + filebeat + kibana)日志收集
- 一.準(zhǔn)備鏡像
-
二.搭建Elasticsearch + kibana
- 1.在可執(zhí)行kubectl命令的服務(wù)器準(zhǔn)備安裝的yml文件
- 2.在elasticsearch-kibana目錄下創(chuàng)建配置文件elasticsearch.yml
- 3.創(chuàng)建kibana配置文件kibana.yml
- 4.在k8s中創(chuàng)建elasticsearch和kibana的配置文件configmap
- 5.檢查是否有StorageClass
- 6.創(chuàng)建es-kibana的yaml配置文件: es-statefulset.yaml
- 7.創(chuàng)建es-kibana cluserip的svc
- 8.創(chuàng)建es-kibana的nodeport類型的svc
-
三.配置NFS服務(wù)器
- 1).安裝NFS服務(wù)
- 2).k8s注冊nfs服務(wù)
-
四.創(chuàng)建filebeat服務(wù)
- 1.創(chuàng)建filebeat主配置文件filebeat.settings.configmap.yml
- 2.創(chuàng)建Filebeat索引生命周期策略配置文件
- 3.Filebeat操作權(quán)限
- 4.Filebeat Daemonset配置文件
-
五.檢查File beat與es,Kibana是否配置成功
- 1.首先在側(cè)邊欄找到Stack Management
- 2.選擇索引管理,查看是否有以filebeat-demo加時(shí)間戳為名的索引
- 3.創(chuàng)建索引模式
- 4.查看日志
K8s部署EFK(elasticsear + filebeat + kibana)日志收集
一.準(zhǔn)備鏡像
# 在本機(jī)拉取鏡像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.2
docker pull docker.elastic.co/kibana/kibana:7.17.2
docker pull docker.elastic.co/beats/filebeat:7.17.2
# 對鏡像重打標(biāo)簽 將${harbor_url}和${harbor_project}換成自己的harbor私服地址和目錄
docker tag docker.elastic.co/elasticsearch/elasticsearch:7.17.2 ${harbor_url}/${harbor_project}/elasticsearch:7.17.2
docker tag docker.elastic.co/kibana/kibana:7.17.2 ${harbor_url}/${harbor_project}/kibana:7.17.2
docker tag docker.elastic.co/beats/filebeat:7.17.2 ${harbor_url}/${harbor_project}/filebeat:7.17.2
# 登陸自己的harbor服務(wù)器
docker login -u admin -p ${password} ${harbor_url}
# 上傳至harbor倉庫
docker push ${harbor_url}/${harbor_project}/elasticsearch:7.17.2
docker push ${harbor_url}/${harbor_project}/kibana:7.17.2
docker push ${harbor_url}/${harbor_project}/filebeat:7.17.2
此處的目的是避免某些服務(wù)器從docker外網(wǎng)倉庫拉取不了鏡像,從而導(dǎo)致pod一直運(yùn)行不了,當(dāng)然也可以不用這一步,可以直接使用官方的鏡像地址
如果此處的Harbor目錄是私有的,則需要在k8s集群中創(chuàng)建docker拉取harbor私庫的密鑰
# -n 后是指定的空間,根據(jù)自己的情況去更改,不加-n,默認(rèn)是default空間,因?yàn)楸敬蜤FK安裝在kube-system命名空間下,所以-n為kube-system。
kubectl create secret docker-registry harbor-pull-secret --docker-server=${harbor_url} --docker-username=admin --docker-password=${password} -n kube-system
kube-system為集群默認(rèn)存在的空間,不用手動創(chuàng)建
#檢查密鑰是否創(chuàng)建成功
kubectl get secrets -n kube-system
二.搭建Elasticsearch + kibana
1.在可執(zhí)行kubectl命令的服務(wù)器準(zhǔn)備安裝的yml文件
2.在elasticsearch-kibana目錄下創(chuàng)建配置文件elasticsearch.yml
cluster.name: my-es
node.name: "node-1"
path.data: /usr/share/elasticsearch/data
#path.logs: /var/log/elasticsearch
bootstrap.memory_lock: false
network.host: 0.0.0.0
http.port: 9200
discovery.seed_hosts: ["127.0.0.1", "[::1]"]
cluster.initial_master_nodes: ["node-1"]
#增加參數(shù),使head插件可以訪問es
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
xpack.monitoring.collection.enabled: true
3.創(chuàng)建kibana配置文件kibana.yml
server.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: "http://es-kibana-0.es-kibana.kube-system:9200"
kibana.index: ".kibana"
i18n.locale: "zh-CN"
monitoring.ui.elasticsearch.hosts: ["http://es-kibana-0.es-kibana.kube-system:9200"]
monitoring.ui.enabled: true
其中elasticsearch.hosts的地址構(gòu)成為pod名:es-kibana-0,service名:es-kibana,命名空間:kube-system,以及service中配置的端口號9200
4.在k8s中創(chuàng)建elasticsearch和kibana的配置文件configmap
#在編寫yml配置文件的目錄執(zhí)行該命令
kubectl create configmap es-config -n kube-system --from-file=elasticsearch.yml
kubectl create configmap kibana-config -n kube-system --from-file=kibana.yml
5.檢查是否有StorageClass
kubectl get sc
#如下圖所示是有StorageClass的
如果有則跳過第三步,沒有則需要按照第三步配置NFS服務(wù)器
創(chuàng)建es存儲pvc,pv配置文件:es-pvc.yaml
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: es-pv-claim
namespace: kube-system
labels:
app: es
spec:
accessModes:
- ReadWriteMany
storageClassName: "nfs-storage"
resources:
requests:
storage: 20Gi
kubectl apply -f es-pvc.yaml
6.創(chuàng)建es-kibana的yaml配置文件: es-statefulset.yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
labels:
app: es-kibana
name: es-kibana
namespace: kube-system
spec:
replicas: 1
selector:
matchLabels:
app: es-kibana
serviceName: "es-kibana"
template:
metadata:
labels:
app: es-kibana
spec:
containers:
- image: [ Harbor私庫地址 ]/elasticsearch:7.17.2
imagePullPolicy: IfNotPresent
name: elasticsearch
resources:
requests:
memory: "800Mi"
cpu: "800m"
limits:
memory: "1Gi"
cpu: "1000m"
volumeMounts:
- name: es-config
mountPath: /usr/share/elasticsearch/config/elasticsearch.yml
subPath: elasticsearch.yml
- name: es-persistent-storage
mountPath: /usr/share/elasticsearch/data
env:
- name: TZ
value: Asia/Shanghai
- image: [ Harbor私庫地址 ]/kibana:7.17.2
imagePullPolicy: IfNotPresent
name: kibana
env:
- name: TZ
value: Asia/Shanghai
volumeMounts:
- name: kibana-config
mountPath: /usr/share/kibana/config/kibana.yml
subPath: kibana.yml
volumes:
- name: es-config
configMap:
name: es-config
- name: kibana-config
configMap:
name: kibana-config
- name: es-persistent-storage
persistentVolumeClaim:
claimName: es-pv-claim
#hostNetwork: true
#dnsPolicy: ClusterFirstWithHostNet
nodeSelector:
kubernetes.io/hostname: k8s-uni-node3
#創(chuàng)建pod
kubectl create -f es-statefulset.yaml
# 查看
kubectl get pod -o wide -n kube-system|grep es
# 使用curl命令測試elasticsearch是否正常
kubectl get pod -o wide -n kube-system|grep es
然后在集群內(nèi)部服務(wù)器上測試是否能通信
當(dāng)然也可以在Rancher上查看pod是否運(yùn)行成功
這個(gè)pod一次運(yùn)行了兩個(gè)容器,分別是kibanah和elasticsearch,并且把elasticsearch容器中的/usr/share/elasticsearch/data目錄下的內(nèi)容,掛載到了es-pv-claim下,我們可以在第三步中的NFS服務(wù)器共享目錄中找到掛載的數(shù)據(jù)。
7.創(chuàng)建es-kibana cluserip的svc
vi es-cluster-none-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: es-kibana
name: es-kibana
namespace: kube-system
spec:
ports:
- name: es9200
port: 9200
protocol: TCP
targetPort: 9200
- name: es9300
port: 9300
protocol: TCP
targetPort: 9300
clusterIP: None
selector:
app: es-kibana
type: ClusterIP
kubectl apply -f es-cluster-none-svc.yaml
這個(gè)配置文件描述了一個(gè)名為
es-kibana
的 Kubernetes Service,該 Service 不分配 Cluster IP(ClusterIP: None
),它會將流量路由到具有特定標(biāo)簽app: es-kibana
的 Pod,這些 Pod 的端口 9200 和 9300 將被公開,并且可以通過相應(yīng)的targetPort
進(jìn)行訪問。用于集群內(nèi)部訪問
8.創(chuàng)建es-kibana的nodeport類型的svc
vi es-nodeport-svc.yaml
apiVersion: v1
kind: Service
metadata:
labels:
app: es-kibana
name: es-kibana-nodeport-svc
namespace: kube-system
spec:
ports:
- name: 9200-9200
port: 9200
protocol: TCP
targetPort: 9200
#nodePort: 9200
- name: 5601-5601
port: 5601
protocol: TCP
targetPort: 5601
#nodePort: 5601
selector:
app: es-kibana
type: NodePort
kubectl apply -f es-nodeport-svc.yaml
這個(gè)配置文件創(chuàng)建了一個(gè)名為 "es-kibana-nodeport-svc" 的 Kubernetes Service。該 Service 使用 NodePort 類型,允許從集群外部訪問服務(wù)。Service 公開了兩個(gè)端口,9200 和 5601,分別將流量路由到具有相應(yīng)標(biāo)簽的 Pod 的對應(yīng)端口。Pod 的選擇基于標(biāo)簽
app: es-kibana
。用于暴露端口,從集群外部訪問es和kibana
外網(wǎng)暴露的端口是k8s隨機(jī)分配的,有兩種辦法可以查看
#在服務(wù)器使用命令查看
kubectl get svc -n kube-system|grep es-kibana
Rancher上查看
可以看到Kibana的端口為31200,然后就能使用nodeip+port訪問
檢查es是否注冊上Kibana,點(diǎn)擊側(cè)邊欄找到堆棧檢測,然后點(diǎn)Nodes
至此,Elasticsearch + kibana已經(jīng)搭建完成,可以進(jìn)行第四步。
三.配置NFS服務(wù)器
1).安裝NFS服務(wù)
Ubuntu:
sudo apt update
sudo apt install nfs-kernel-server
Centos:
yum update
yum -y install nfs-utils
# 創(chuàng)建或使用用已有的文件夾作為nfs文件存儲點(diǎn)
mkdir -p /home/data/nfs/share
vi /etc/exports
寫入如下內(nèi)容
/home/data/nfs/share *(rw,no_root_squash,sync,no_subtree_check)
# 配置生效并查看是否生效
exportfs -r
exportfs
# 啟動rpcbind、nfs服務(wù)
#Centos
systemctl restart rpcbind && systemctl enable rpcbind
systemctl restart nfs && systemctl enable nfs
#Ubuntu
systemctl restart rpcbind && systemctl enable rpcbind
systemctl start nfs-kernel-server && systemctl enable nfs-kernel-server
# 查看 RPC 服務(wù)的注冊狀況
rpcinfo -p localhost
# showmount測試
showmount -e localhost
以上都沒有問題則說明安裝成功
2).k8s注冊nfs服務(wù)
新建storageclass-nfs.yaml文件,粘貼如下內(nèi)容:
## 創(chuàng)建了一個(gè)存儲類
apiVersion: storage.k8s.io/v1
kind: StorageClass #存儲類的資源名稱
metadata:
name: nfs-storage #存儲類的名稱,自定義
annotations:
storageclass.kubernetes.io/is-default-class: "true" #注解,是否是默認(rèn)的存儲,注意:KubeSphere默認(rèn)就需要個(gè)默認(rèn)存儲,因此這里注解要設(shè)置為“默認(rèn)”的存儲系統(tǒng),表示為"true",代表默認(rèn)。
provisioner: k8s-sigs.io/nfs-subdir-external-provisioner #存儲分配器的名字,自定義
parameters:
archiveOnDelete: "true" ## 刪除pv的時(shí)候,pv的內(nèi)容是否要備份
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nfs-client-provisioner
labels:
app: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
spec:
replicas: 1 #只運(yùn)行一個(gè)副本應(yīng)用
strategy: #描述了如何用新的POD替換現(xiàn)有的POD
type: Recreate #Recreate表示重新創(chuàng)建Pod
selector: #選擇后端Pod
matchLabels:
app: nfs-client-provisioner
template:
metadata:
labels:
app: nfs-client-provisioner
spec:
serviceAccountName: nfs-client-provisioner #創(chuàng)建賬戶
containers:
- name: nfs-client-provisioner
image: registry.cn-hangzhou.aliyuncs.com/lfy_k8s_images/nfs-subdir-external-provisioner:v4.0.2 #使用NFS存儲分配器的鏡像
volumeMounts:
- name: nfs-client-root #定義個(gè)存儲卷,
mountPath: /persistentvolumes #表示掛載容器內(nèi)部的路徑
env:
- name: PROVISIONER_NAME #定義存儲分配器的名稱
value: k8s-sigs.io/nfs-subdir-external-provisioner #需要和上面定義的保持名稱一致
- name: NFS_SERVER #指定NFS服務(wù)器的地址,你需要改成你的NFS服務(wù)器的IP地址
value: 192.168.0.0 ## 指定自己nfs服務(wù)器地址
- name: NFS_PATH
value: /home/data/nfs/share ## nfs服務(wù)器共享的目錄 #指定NFS服務(wù)器共享的目錄
volumes:
- name: nfs-client-root #存儲卷的名稱,和前面定義的保持一致
nfs:
server: 192.168.0.0 #NFS服務(wù)器的地址,和上面保持一致,這里需要改為你的IP地址
path: /home/data/nfs/share #NFS共享的存儲目錄,和上面保持一致
---
apiVersion: v1
kind: ServiceAccount #創(chuàng)建個(gè)SA賬號
metadata:
name: nfs-client-provisioner #和上面的SA賬號保持一致
# replace with namespace where provisioner is deployed
namespace: default
---
#以下就是ClusterRole,ClusterRoleBinding,Role,RoleBinding都是權(quán)限綁定配置,不在解釋。直接復(fù)制即可。
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: nfs-client-provisioner-runner
rules:
- apiGroups: [ "" ]
resources: [ "nodes" ]
verbs: [ "get", "list", "watch" ]
- apiGroups: [ "" ]
resources: [ "persistentvolumes" ]
verbs: [ "get", "list", "watch", "create", "delete" ]
- apiGroups: [ "" ]
resources: [ "persistentvolumeclaims" ]
verbs: [ "get", "list", "watch", "update" ]
- apiGroups: [ "storage.k8s.io" ]
resources: [ "storageclasses" ]
verbs: [ "get", "list", "watch" ]
- apiGroups: [ "" ]
resources: [ "events" ]
verbs: [ "create", "update", "patch" ]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: run-nfs-client-provisioner
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: ClusterRole
name: nfs-client-provisioner-runner
apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
rules:
- apiGroups: [ "" ]
resources: [ "endpoints" ]
verbs: [ "get", "list", "watch", "create", "update", "patch" ]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
name: leader-locking-nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
subjects:
- kind: ServiceAccount
name: nfs-client-provisioner
# replace with namespace where provisioner is deployed
namespace: default
roleRef:
kind: Role
name: leader-locking-nfs-client-provisioner
apiGroup: rbac.authorization.k8s.io
需要修改的就只有服務(wù)器地址和共享的目錄
創(chuàng)建StorageClass
kubectl apply -f storageclass-nfs.yaml
# 查看是否存在
kubectl get sc
四.創(chuàng)建filebeat服務(wù)
1.創(chuàng)建filebeat主配置文件filebeat.settings.configmap.yml
vi filebeat.settings.configmap.yml
apiVersion: v1
kind: ConfigMap
metadata:
namespace: kube-system
name: filebeat-config
labels:
app: filebeat
data:
filebeat.yml: |-
filebeat.inputs:
- type: container
enabled: true
paths:
- /var/log/containers/*.log
include_lines: ['ERROR', 'WARN']
multiline:
pattern: ^\d{4}-\d{1,2}-\d{1,2}\s\d{1,2}:\d{1,2}:\d{1,2}
negate: true
match: after
processors:
- add_kubernetes_metadata:
in_cluster: true
host: ${NODE_NAME}
matchers:
- logs_path:
logs_path: "/var/log/containers/"
- add_cloud_metadata:
- add_kubernetes_metadata:
matchers:
- logs_path:
logs_path: "/var/log/containers/"
- add_docker_metadata:
output.elasticsearch:
hosts: ["http://[k8s節(jié)點(diǎn)ip]:32494"]
index: "filebeat-demo-%{[agent.version]}-%{+yyyy.MM.dd}"
setup.template.name: "filebeat-demo"
setup.template.pattern: "filebeat-demo-*"
setup.ilm.rollover_alias: "filebeat-demo"
setup.ilm:
policy_file: /etc/indice-lifecycle.json
#執(zhí)行
kubectl apply -f filebeat.settings.configmap.yml
filebeat.inputs
: 定義輸入配置,這里配置了從容器日志中收集數(shù)據(jù)。
type
: 定義輸入類型為 container,表示從容器日志中收集數(shù)據(jù)。
enabled
: 啟用該輸入配置。
paths
: 指定要監(jiān)視的日志文件路徑,這里是容器日志路徑。k8s容器的日志默認(rèn)是保存在在服務(wù)器的/var/log/containers/下的。
multiline
: 多行日志配置,用于將多行日志合并為單個(gè)事件。正則表示如果前面幾個(gè)數(shù)字不是4個(gè)數(shù)字開頭,那么就會合并到一行,解決Java堆棧錯(cuò)誤日志收集問題
processors
: 定義處理器,用于添加元數(shù)據(jù)。add_kubernetes_metadata:為日志事件添加 Kubernetes 相關(guān)的元數(shù)據(jù)信息,例如 Pod 名稱、命名空間、標(biāo)簽等。
output.elasticsearch
: 定義輸出配置,將收集到的日志發(fā)送到 Elasticsearch。
hosts
: 指定 Elasticsearch 節(jié)點(diǎn)的地址和端口。端口號為第二步安裝es時(shí),nodeport暴露的端口號。indices
: 定義索引模式,這里以日期為后綴,創(chuàng)建每日索引。
setup.ilm
: 配置索引生命周期管理 (ILM),用于管理索引的生命周期。
- policy_file:后面定義的是生命周期配置文件的地址
此處禁用了filebeat默認(rèn)的索引格式。默認(rèn)的索引格式為filebeat-%{[agent.version]}-%{+yyyy.MM.dd},在Kibana上呈現(xiàn)的就是filebeat-2023.10.21-000001這樣的索引命名格式,而且默認(rèn)的索引模板和索引生命周期都與index中設(shè)置的filebeat-demo-%{[agent.version]}-%{+yyyy.MM.dd}無關(guān)。故出現(xiàn)的問題就是我們所需的日志內(nèi)容在索引filebeat-demo-%{[agent.version]}-%{+yyyy.MM.dd}中,但是并不能被準(zhǔn)確分片和使用索引生命周期管理。
#相關(guān)模板字段意義
setup.template.name: “filebeat-demo” # 設(shè)置一個(gè)新的模板,模板的名稱為filebeat-demo
setup.template.pattern: “filebeat-demo-*” # 模板匹配那些索引,這里表示以filebeat-demo開頭的所有的索引
setup.ilm.rollover_alias: "filebeat-demo" #索引生命周期寫別名。默認(rèn)值為
filebeat-%{[agent.version]}
。設(shè)置此選項(xiàng)將更改別名為filebeat-demo。用以滾動更新大索引文件的分片
同時(shí)該配置過濾了其他info級別的日志,只收集了'ERROR', 'WARN'級別的日志,相關(guān)配置:
include_lines: ['ERROR', 'WARN'] 該配置可根據(jù)實(shí)際使用情況進(jìn)行刪改
下圖為,索引格式配置正確的示范截圖:
2.創(chuàng)建Filebeat索引生命周期策略配置文件
為了防止大量的數(shù)據(jù)存儲,可以利用 indice 的生命周期來配置數(shù)據(jù)保留。 如下所示的文件中,配置成每天或每次超過5GB的時(shí)候就對 indice 進(jìn)行輪轉(zhuǎn),并刪除所有超過30天的 indice 文件。
vi filebeat.indice-lifecycle.configmap.yml
---
apiVersion: v1
kind: ConfigMap
metadata:
namespace: kube-system
name: filebeat-indice-lifecycle
labels:
app: filebeat
data:
indice-lifecycle.json: |-
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_size": "5GB" ,
"max_age": "1d"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
#執(zhí)行
kubectl apply -f filebeat.indice-lifecycle.configmap.yml
3.Filebeat操作權(quán)限
vi filebeat.permission.yml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: filebeat
rules:
- apiGroups: [ "" ]
resources:
- namespaces
- pods
- nodes
verbs:
- get
- watch
- list
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: filebeat
subjects:
- kind: ServiceAccount
name: filebeat
namespace: kube-system
roleRef:
kind: ClusterRole
name: filebeat
apiGroup: rbac.authorization.k8s.io
---
apiVersion: v1
kind: ServiceAccount
metadata:
namespace: kube-system
name: filebeat
#執(zhí)行
kubectl apply -f filebeat.permission.yml
- ClusterRole:
- 作用:定義了一個(gè) ClusterRole,它是一種權(quán)限集合,指定了 Filebeat 在集群范圍內(nèi)可以執(zhí)行的操作,如獲?。╣et)、監(jiān)視(watch)、列出(list)等。
- 權(quán)限:
- 可以對命名空間執(zhí)行 get、watch、list 操作。
- 可以對 Pod 執(zhí)行 get、watch、list 操作。
- 可以對節(jié)點(diǎn)執(zhí)行 get、watch、list 操作。
- ClusterRoleBinding:
- 作用:定義了一個(gè) ClusterRoleBinding,將 ClusterRole (
filebeat
) 綁定到特定的 ServiceAccount (filebeat
)。- 意義:將 ClusterRole 與 ServiceAccount 綁定,以使 Filebeat 具有在 Kubernetes 中執(zhí)行相應(yīng)操作的權(quán)限。
- ServiceAccount:
- 作用:定義了一個(gè) ServiceAccount (
filebeat
),它是 Kubernetes 中用于身份驗(yàn)證和授權(quán)的實(shí)體。- 意義:創(chuàng)建了一個(gè)用于 Filebeat 的身份實(shí)體,使得 Filebeat 在 Kubernetes 中能夠以其身份運(yùn)行。
4.Filebeat Daemonset配置文件
vi filebeat.daemonset.yml
---
apiVersion: apps/v1
kind: DaemonSet
metadata:
namespace: kube-system
name: filebeat
labels:
app: filebeat
spec:
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
serviceAccountName: filebeat
terminationGracePeriodSeconds: 30
containers:
- name: filebeat
image: [ Harbor私服地址 ]/filebeat:7.17.2
args: [
"-c", "/etc/filebeat.yml",
"-e",
]
env:
- name: NODE_NAME
valueFrom:
fieldRef:
fieldPath: spec.nodeName
securityContext:
runAsUser: 0
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 100Mi
volumeMounts:
- name: config
mountPath: /etc/filebeat.yml
readOnly: true
subPath: filebeat.yml
- name: filebeat-indice-lifecycle
mountPath: /etc/indice-lifecycle.json
readOnly: true
subPath: indice-lifecycle.json
- name: data
mountPath: /usr/share/filebeat/data
- name: varlog
mountPath: /var/log
readOnly: true
- name: varlibdockercontainers
mountPath: /var/lib/docker/containers
readOnly: true
- name: dockersock
mountPath: /var/run/docker.sock
volumes:
- name: config
configMap:
defaultMode: 0600
name: filebeat-config
- name: filebeat-indice-lifecycle
configMap:
defaultMode: 0600
name: filebeat-indice-lifecycle
- name: varlog
hostPath:
path: /var/log
- name: varlibdockercontainers
hostPath:
path: /var/lib/docker/containers
- name: dockersock
hostPath:
path: /var/run/docker.sock
- name: data
hostPath:
path: /var/lib/filebeat-data
type: DirectoryOrCreate
#執(zhí)行
kubectl apply -f filebeat.daemonset.yml
volumeMounts配置示意:
- name: config:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將 ConfigMap 中的
filebeat.yml
配置文件掛載到容器中的/etc/filebeat.yml
路徑。- readOnly: 設(shè)置為 true,表示只讀訪問該配置文件。
- name: filebeat-indice-lifecycle:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將 ConfigMap 中的
indice-lifecycle.json
文件掛載到容器中的/etc/indice-lifecycle.json
路徑。- readOnly: 設(shè)置為 true,表示只讀訪問該文件。
- name: data:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將宿主機(jī)的
/var/lib/filebeat-data
目錄掛載到容器中的/usr/share/filebeat/data
路徑。- type: DirectoryOrCreate: 指定掛載類型為目錄,如果該目錄不存在則創(chuàng)建。
- name: varlog:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將宿主機(jī)的
/var/log
目錄掛載到容器中的/var/log
路徑。- readOnly: 設(shè)置為 true,表示只讀訪問該目錄。
- name: varlibdockercontainers:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將宿主機(jī)的
/var/lib/docker/containers
目錄掛載到容器中的/var/lib/docker/containers
路徑。- readOnly: 設(shè)置為 true,表示只讀訪問該目錄。
- name: dockersock:
- 作用: 創(chuàng)建一個(gè)掛載點(diǎn),將宿主機(jī)的 Docker socket 文件
/var/run/docker.sock
掛載到容器中的/var/run/docker.sock
路徑。
volumes配置示意:
- name: config:
- 作用: 與volumeMounts中的name: config相對應(yīng)。
- defaultMode: 0600: 表示只有文件所有者可讀寫,其他用戶無權(quán)限。
- name:filebeat-config對應(yīng)第一步創(chuàng)建的filebeat.settings.configmap.yml中的Configmap的名字
- name: filebeat-indice-lifecycle:
- 作用: 與volumeMounts中的filebeat-indice-lifecycle相對應(yīng)。
- defaultMode: 0600: 表示只有文件所有者可讀寫,其他用戶無權(quán)限。
- name:filebeat-indice-lifecycle對應(yīng)第二步創(chuàng)建的filebeat.indice-lifecycle.configmap.yml中的Configmap的名字
- name: data
- 作用:與volumeMounts中的name: data相對應(yīng)。
- path:需要掛載的目錄路徑
- type:DirectoryOrCreatea表示容器啟動時(shí)會檢查宿主機(jī)是否存在該目錄,不存在則創(chuàng)建。因?yàn)镕ilebeat在每個(gè)節(jié)點(diǎn)的宿主機(jī)上都會運(yùn)行,所以直接掛載到宿主機(jī)目錄
檢查是否執(zhí)行成功
kubectl get pod -o wide -n kube-system|grep filebeat
#如下圖,全為Running則表示運(yùn)行成功
也可以在Rancher上查看文章來源:http://www.zghlxwxcb.cn/news/detail-710607.html
五.檢查File beat與es,Kibana是否配置成功
1.首先在側(cè)邊欄找到Stack Management
2.選擇索引管理,查看是否有以filebeat-demo加時(shí)間戳為名的索引
3.創(chuàng)建索引模式
4.查看日志
點(diǎn)擊側(cè)邊欄,選擇discover,就能看到Filebeat收集到的容器日志,可以按照自己的需求進(jìn)行日志篩選文章來源地址http://www.zghlxwxcb.cn/news/detail-710607.html
到了這里,關(guān)于K8s部署輕量級日志收集系統(tǒng)EFK(elasticsearch + filebeat + kibana)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!