在Kubernetes中用EFK栈(Elasticsearch、Fluent-bit、Kibana)管理应用日志

216 阅读1分钟

在这个例子中,我们将使用一个Golang应用程序来回放JSON格式的日志。我们的目的是捕捉所有这些日志,并将其可视化,以达到调试的目的。为此,我们将使用Fluent-bit来捕获日志并将其推送到Elasticsearch。之后,我们将使用Kibana对其进行可视化。所有这些都发生在一个Kubernetes集群中。

我们的EFK堆栈在Kubernetes中一个名为monitoring 的命名空间中。Fluent-bit将能够从不同的命名空间中读取日志,例如,我们的假应用程序在dev 命名空间中。Fluent-bit会从/var/log/containers 目录中读取日志,那里保存着命名空间的特定文件。你可以像我一样使用Exclude_Path 配置来排除某些命名空间。为了实现高可用性,将有三个Elasticsearch pods在运行。

结构

├── Makefile

文件

制作文件

# LOCAL -----------------------------------------------------------------------

main.go

package main

Docker文件

FROM golang:1.15-alpine3.12 as build

api.yaml

apiVersion: v1

monitoring.yaml

apiVersion: v1

elasticsearch.yaml

apiVersion: v1

kibana.yaml

apiVersion: v1

fluentbit.yaml

apiVersion: v1

设置

使用$ make docker-push 命令将应用程序的Docker镜像推送到DockerHub。

这个设置需要大量的系统资源,所以要尽可能的保持高资源。

$ minikube start --vm-driver=virtualbox --memory 5000 --cpus=3

准备好监控环境。

验证设置。

$ kubectl --namespace=monitoring get all

准备开发环境。

验证设置。

$ kubectl --namespace=dev get all

允许公众访问这些服务。

$ make kube-api-port-forward

让我们来验证Elasticsearch的设置是否正常。

$ curl http://127.0.0.1:9200
$ curl http://127.0.0.1:9200/_cluster/state?pretty

测试

运行$ make kube-test ,产生一些假的日志,以便在Kibana中看到一些东西。