计算机系统应用教程网站

网站首页 > 技术文章 正文

K8S搭建监控平台二之EFK(ElasticSearch + Filebeat + Kibana)

btikc 2024-09-22 01:07:47 技术文章 35 ℃ 0 评论

流程图

服务器可用资源 4 核 8G,Kubernetes 集群版本信息

源码

https://gitee.com/pingfanrenbiji/k8s/

创建命名空间

kubectl create -f create-logging-namespace.yaml

创建 ElasticSearch 集群

kubectl create -f es-service.yaml

kubectl create -f es-statefulset.yaml

查看资源是否已创建

kubectl get service -n logging
kubectl get pods -n logging

部署 Kibana

kubectl create -f kibana-deployment.yaml 

kubectl create -f kibana-service.yaml

查看Kibana

kubectl get pod -n logging|grep kibana

查看Kibana Service

访问Kibana

http://10.1.2.190:32032/kibana/

安装helm

mkdir -p /tmp/helm

cd /tmp/helm

wget -O helm.tar.gz https://get.helm.sh/helm-v3.0.0-linux-amd64.tar.gz

tar zxvf helm.tar.gz

sudo cp linux-amd64/helm /usr/bin/

helm version


若输出:version.BuildInfo{Version:"v3.0.0", GitCommit:"e29ce2a54e96cd02ccfce88bee4f58bb6e2a28b6", GitTreeState:"clean", GoVersion:"go1.13.4"},说明安装成功。

初始化 Helm
helm repo add stable https://kubernetes-charts.storage.googleapis.com/

部署kafka 和 Logstash

cd k8s/efk-7.10.2/filebeat
helm install zookeeper zookeeper/ -n logging      # 安装 zookeeper
kubectl get pods -n logging -l app.kubernetes.io/name=zookeeper
helm install kafka kafka/ -n logging              # 安装 Kafka
kubectl get pods -n logging -l app.kubernetes.io/component=kafka

当所有 Pod 都正常后,创建 logstash 服务

kubectl create -f logstash-service.yaml -f logstash-cm.yaml -f logstash.yaml -n logging

注意

logstash-cm.yaml 文件中的一些配置:

input: 数据来源,本次示例配置的是 kafka

input.kafka.bootstrap_servers: kafka 的地址,由于是安装在集群内,可以直接使用 kafka 集群的 Service 接口,如果是外部地址,按需配置既可;

input.kafka.topics: Kafka 的 topic,需要和 Filebeat 输出的 topic 一致;

input.kafka.type: 定义一个 type,可以用于 logstash 输出至不同的 Elasticsearch 集群;

output: 数据输出至哪里,本次示例输出至 Elasticsearch 集群,在里面配置了一个判断语句,当 type 为 filebeat-sidecar 时,将会输出至 Elasticsearch 集群,并且索引为 filebeat-xxx。

注入 Filebeat Sidecar

当应用的日志没有输出到控制台,而是被输出到一个文件中时,此时可以使用 Filebeat 进行采集。以下示例会创建一个模拟程序,该程序会在 /opt/date.log 文件输出当前日志

``

cd k8s/efk-7.10.2/filebeat
kubectl create -f app.yaml -n logging 

kubectl get configmap -n logging|grep filebeat

创建模拟程序

kubectl create -f app-filebeat.yaml -n logging

创建es索引

查询日志

最终pod情况

最终service情况

数据流转情况

这个pod中有2个docker程序 一个是filebeat一个应用程序,这个应用程序是往指定目录下写入日志。

查看pod yaml

kubectl edit pod app-b8677899d-h44gf -n logging

应用程序往/opt/date.log文件写入数据

该目录并没有做宿主机映射

filebeat从logpath目录下读取日志数据,并映射到/data/log/app/,从filebeatconf目录读取filebeat的配置文件。并映射到usr/share/filebeat/filebeat.yml

而logpath就是应用pod日志,并没有映射到宿主机上,filebeatconf表示读取宿主机上的filebeat.yml(configmap文件)映射到pod中usr/share/filebeat/filebeat.yml目录下。

configmap的内容读取pod中/data/log/xxxx.log日志文件,存储到kafka中。

查看应用产生的日志

kubectl exec -ti -n logging app-b8677899d-h44gf  -- tail -1 /data/log/app/date.log

进入kafka中

验证是否收到filebeat传送过来的数据

监听kafaka消息队列

cd /opt/bitnami/kafka/bin

sh kafka-console-consumer.sh --bootstrap-server localhost:9092  --topic filebeat-sidecar --from-beginning

应用pod中的filebeat进程可以读取到应用进程产生的日志,并可以正常穿给kafka中的消息队列中并且可以由消费者消费。

kafka消息了之后,发送给logstach进行处理并发给es

logstach的输入是kafka消息,输出是es,es中的数据再由kibana展示出来。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表