在这个例子中,我们将使用一个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中看到一些东西。