fluent-bit收集不同业务日志
我们将服务部署在k8s中,通常需要收集业务日志进行分析,那么现在常用的日志采集是怎么做的呢,一般来说是搭建EFK系统来采集日志,今天我们来说说如何采集k8s中的不同业务日志然后投递到es不同的索引,然后通过kibana进行分析和查看。
对于EFK的搭建,我们这里不做具体的讲解,大家可参考 https://www.niewx.cn/tke/kubernetes/log/2020/06/10/TKE%E4%B8%8A%E6%90%AD%E5%BB%BAEFK%E6%97%A5%E5%BF%97%E9%87%87%E9%9B%86%E7%B3%BB%E7%BB%9F/ , 今天我们主要来讲一下如何采集不同业务日志进行分析。
这里我们一共采集3类日志,分别是nginx日志、golang的日志、以及k8s的系统日志,一般我们采集的业务日志都是将业务日志挂载到节点,然后fluent-bit去采集节点上的日志文件,输出到es,通过kibana展示和查询。
fluent-bit的部署
我们这里简单说下fluent-bit的部署,我们通过helm部署。
$ helm install --name my-release stable/fluent-bit部署应用
部署nginx
我们将nginx的日志挂载到节点的/data/nginx目录下,对应的yaml如下
apiVersion: apps/v1
kind: Deployment
metadata:
annotations:
deployment.kubernetes.io/revision: "1"
creationTimestamp: "2020-11-24T02:08:08Z"
generation: 1
labels:
k8s-app: nginx-log
qcloud-app: nginx-log
managedFields:
- apiVersion: apps/v1
manager: tke-apiserver
operation: Update
time: "2020-11-24T02:08:08Z"
- apiVersion: apps/v1
manager: kube-controller-manager
operation: Update
time: "2020-11-27T03:21:32Z"
name: nginx-log
namespace: test
resourceVersion: "2156061896"
selfLink: /apis/apps/v1/namespaces/test/deployments/nginx-log
uid: eb42b8f7-97f7-405b-a750-d46df6bcd8c6
spec:
progressDeadlineSeconds: 600
replicas: 1
revisionHistoryLimit: 10
selector:
matchLabels:
k8s-app: nginx-log
qcloud-app: nginx-log
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 0
type: RollingUpdate
template:
metadata:
creationTimestamp: null
labels:
k8s-app: nginx-log
qcloud-app: nginx-log
spec:
containers:
- image: nginx
imagePullPolicy: Always
name: nginx-log
resources:
limits:
cpu: 500m
memory: 1Gi
requests:
cpu: 250m
memory: 256Mi
securityContext:
privileged: false
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /etc/nginx/nginx.conf
name: conf
subPath: nginx.conf
- mountPath: /var/log/nginx
name: log
dnsPolicy: ClusterFirst
imagePullSecrets:
- name: qcloudregistrykey
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 30
volumes:
- configMap:
defaultMode: 420
name: nginx-conf
name: conf
- hostPath:
path: /data/nginx
type: DirectoryOrCreate
name: log部署golang
我们将golang的日志文件挂载到节点的/data/go目录下,对应的yaml如下
修改fluent-bit的配置文件和yaml
修改fluent-bit.conf
这里我们将fluent-bit.conf分成多个配置文件进行配置,你也可以配置到一个fluent-bit.conf
fluent-bit.conf配置项介绍
fluent-bit-filter.conf
日志过滤配置
fluent-bit-input.conf
日志源输入配置
fluent-bit-output.conf
日志投递输出配置
fluent-bit-service.conf
日志读取配置
fluent-bit.conf
fluent-bit的配置
parsers.conf
日志转换配置,这里暂未配置
修改fluent-bit的daemonset的yaml
我们在fluent-bit的配置文件中指定了日志源的的采集和输出,但是fluent-bit pod是无法获取节点的日志文件,我们需要将节点的文件挂载到pod进行采集。修改的挂载yaml文件如下,其实就是把/data/nginx和/data/go这2个目录挂载到fluent-bit的pod中,当然还有默认的k8s日志采集目录/var/lib/docker/containers和系统日志目录/var/log,只是这2个目录不用我们自己手动修改,默认yaml会配置这2个。
在kibana上创建索引检索日志
将上面的修改和部署都执行后,我们可以到对应的kibana上创建索引去搜索日志,这里我们已经对golang和nignx服务进行访问了,生成了一些日志
我们先查看下es的索引,看看nignx和golang的日志索引在不在
这里查看到是有nginx和golang的日志索引的,下面我们去kibana创建一下index

我们分别创建nginx-、go-、k8s-*分配来查询对应的业务日志
我们golang日志主要是存在2条类型日志“我访问了/api/v1这个路径”和“我访问了Hello World这个路径”,下面我们去检索下,看看能不能搜到


生成的日志我们都是可以搜索到的。
下面我们在49.235.179.157这个机器上对nginx的service进行访问,看看我们在日志能不能获取到49.235.179.157个客户端ip

刚刚访问的记录我们也可以早上面搜索到
k8s的一些系统日志和其他pod日志,我们可以在k8s-*这个索引下进行检索,这里我们搜一下我们部署的es的pod日志

es的日志我们也可以在kibana上查找到
到这里,对于日志的采集,我们基本上就结束了,这里我们只要按照上面步骤进行挂载和配置,你就可以通过EFK采集到不同的业务日志,然后可以在kibana进行图标的制作和展示。
最后更新于
这有帮助吗?