k8s收集日志
一.收集控制台日志
采用fluentd+es+kibana来做
所需要的文件可以在这里找
https://github.com/kubernetes/kubernetes/tree/v1.23.0/cluster/addons/fluentd-elasticsearch
1.创建目录并下载所需文件
cd /root/k8s/yaml/efk
[root@worker1 efk]# ll
total 44
-rw-r--r-- 1 root root 172 Dec 28 15:58 create-logging-namespace.yaml
-rw-r--r-- 1 root root 572 Dec 28 15:59 es-service.yaml
-rw-r--r-- 1 root root 3153 Dec 28 16:05 es-statefulset.yaml
drwxr-xr-x 2 root root 4096 Dec 28 23:15 filebeat
-rw-r--r-- 1 root root 16121 Dec 28 15:58 fluentd-es-configmap.yaml
-rw-r--r-- 1 root root 2569 Dec 28 15:58 fluentd-es-ds.yaml
-rw-r--r-- 1 root root 1542 Dec 28 16:09 kibana-deployment.yaml
-rw-r--r-- 1 root root 387 Dec 28 16:29 kibana-service.yaml
2.创建es
基本不需要改动,yaml文件下载下来直接创建就行
kubectl create -f create-logging-namespace.yaml
kubectl create -f es-service.yaml
kubectl create -f es-statefulset.yaml
查看
kubectl get pod.svc -n logging
NAME READY STATUS RESTARTS AGE
pod/elasticsearch-logging-0 1/1 Running 0 17h
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
service/elasticsearch-logging ClusterIP 192.168.253.134 <none> 9200/TCP,9300/TCP 17h
测试
[root@worker1 efk]# curl 192.168.253.134:9200
{
"name" : "elasticsearch-logging-0",
"cluster_name" : "kubernetes-logging",
"cluster_uuid" : "TgivkC3MTiCSUYoKdJJ7Nw",
"version" : {
"number" : "7.10.2",
"build_flavor" : "oss",
"build_type" : "docker",
"build_hash" : "747e1cc71def077253878a59143c1f785afa92b9",
"build_date" : "2021-01-13T00:42:12.435326Z",
"build_snapshot" : false,
"lucene_version" : "8.7.0",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
3.创建fluentd
kubectl create -f fluentd-es-configmap.yaml
kubectl create -f fluentd-es-ds.yaml
4.创建kibana
kibana的两个文件需要稍作修改
kibana-service.yaml
apiVersion: v1
kind: Service
metadata:
name: kibana-logging
namespace: logging
labels:
k8s-app: kibana-logging
kubernetes.io/cluster-service: "true"
addonmanager.kubernetes.io/mode: Reconcile
kubernetes.io/name: "Kibana"
spec:
type: NodePort
ports:
- port: 5601
protocol: TCP
targetPort: ui
nodePort: 30022
selector:
k8s-app: kibana-logging
kibana-deployment.yaml
将文件中的下面两行注释掉,不然访问不了
# - name: SERVER_BASEPATH
# value: /api/v1/namespaces/logging/services/kibana-logging/proxy
然后创建
kubectl create -f kibana-service.yaml
kubectl create -f kibana-deployment.yaml
5.浏览器访问kibana
先创建对应的索引,然后选择需要的字段,就可以看到内容了
注意: 这种方式主要是收集k8s打到控制台的日志,也就是/var/lib/docker/containers
这里的json日志文件,收集这种日志文件还有个前提,就是你的k8s运行时组件是docker,而不是container,要不然是收集不到的,接下来是收集业务容器内日志
二.收集业务容器内日志
这种架构是采用filebeat+kafka+zookeeper+logstash+es+kibana来做的,所需的文件可以在这找
https://github.com/dotbalo/k8s/tree/master/fklek/7.x
1.安装zookeeper+kafka
我们采用helm的方式来安装,比较快
wget https://get.helm.sh/helm-v3.1.2-linux-amd64.tar.gz
tar xf helm-v3.1.2-linux-amd64.tar.gz
mv linux-amd64/ helm
cd helm/
cp -r helm /usr/local/bin/
helm version
添加两个仓库
helm repo add bitnami https://charts.bitnami.com/bitnami
helm repo add ali-stable https://kubernetes.oss-cn-hangzhou.aliyuncs.com/charts
注意最后的 点
别忘了
helm pull bitnami/zookeeper
cd zookeeper/
helm install zookeeper -n logging --set auth.enabled=false --set allowAnonymousLogin=true .
helm pull bitnami/kafka
cd kafka/
helm install kafka -n logging --set zookeeper.enabled=false --set replicaCount=1 --set externalZookeeper.servers=zookeeper .
kubectl get pod -n logging
2.安装logstash
logstash的版本最好和之前安装的es的版本一致
cd /root/k8s/yaml/efk/filebeat/
kubectl create -f filebeat-cm.yaml -n logging
kubectl create -f logstash-cm.yaml -n logging
kubectl create -f logstash-service.yaml -n logging
kubectl create -f logstash-deploy.yaml -n logging
3.安装业务pod
业务pod以便车模式绑定filebeat容器,然后共享日志目录,这样filebeat就可以直接收集对应日志,并发送到kafka,再由logstash打到es
kubectl create -f app.yaml -n logging
安装的时候,下面记得修改为你自己的标签
nodeSelector:
kubernetes.io/hostname: 172.16.0.2
4.浏览器访问kibana
建立索引,然后查看数据,查看之前先生成一些数据,进到app业务pod中,再到共享的日志目录,创建日志文件,循环写入一些日志
kubectl exec -it -n logging app-8477d9675b-fd4v5 -c app -- sh
cd /home/tomcat/target/
touch 123.log
for i in `seq 1 100`;do echo $i >> 123.log ;done
这个索引名字是在logstash-cm.yaml
中定义的,可自行查看
图中可以看到收集到的日志信息