使用EFK收集Kubernetes多集群日志

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: 使用EFK收集Kubernetes多集群日志 Collecting logs for multi kubernetes clusters with EFK 在有多个集群的情况下,一个集群就搭建一套日志收集分析服务实在太浪费。

使用EFK收集Kubernetes多集群日志

Collecting logs for multi kubernetes clusters with EFK

在有多个集群的情况下,一个集群就搭建一套日志收集分析服务实在 太浪费。因此可以尝试只跑一套Elasticsearch和Kibana实例,然后让各个集群中的日志收集器向Elasticsearch发送日志,。

如图所示:

graph TD;
Elastic---|analysis the data|Kibana;

cluster1-->|send log|Elastic((Elastic server)); cluster2-->|send log|Elastic; cluster3-->|send log|Elastic;
cluster(...)-->|send log|Elastic;

Elasticsearch和Kibana可以放在Kubernetes集群中也可以独立部署。这里为了方便就选择独立部署.

部署ElasticSearch和Kibana

Elastic自建了docker镜像仓库,因此到https://www.docker.elastic.co/拉去最新的Elasticsearch和Kibana 的镜像.

然后编写docker-compose.yaml文件.

关于详细配置,参考官方文档:

version: '2' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.4.0 restart: unless-stopped
 ports:
 - "9200:9200"
 - "9300:9300" ulimits: memlock: soft: -1 hard: -1 nofile: soft: -1 hard: -1 environment:
 bootstrap.memory_lock: "true"
 discovery.type: "single-node" volumes:
 - /opt/es_data:/usr/share/elasticsearch/data
 kibana: image: docker.elastic.co/kibana/kibana:6.4.0 restart: unless-stopped
 ports:
 - "5601:5601" environment:
 server.host: "0.0.0.0"
 elasticsearch.url: "http://elasticsearch:9200" volumes: # 挂载kibana.yaml,可以在其中编写更详细的配置.这里图方便,用环境变量传进去. # - ./kibana.yml:/usr/share/kibana/config/kibana.yml:ro
 - /opt/kibana_data:/usr/share/kibana/data

然后启动docker-compose up -d,查看日志 docker-compose logs -f可以看到ES和Kibana输出的全部都是INFO等级的日志,没有ERROR,并且Kibana已经连接上ES。

curl -X GET 127.0.0.1:9200

{
 "name" : "h9sEa61",
 "cluster_name" : "docker-cluster",
 "cluster_uuid" : "8MjE8hwVSq2Vvbe2azZggQ",
 "version" : {
 "number" : "6.4.0",
 "build_flavor" : "default",
 "build_type" : "tar",
 "build_hash" : "595516e",
 "build_date" : "2018-08-17T23:18:47.308994Z",
 "build_snapshot" : false,
 "lucene_version" : "7.4.0",
 "minimum_wire_compatibility_version" : "5.6.0",
 "minimum_index_compatibility_version" : "5.0.0"
 },
 "tagline" : "You Know, for Search"
}

curl 127.0.0.1:5601

<script>
var hashRoute = '/app/kibana';
var defaultRoute = '/app/kibana';

var hash = window.location.hash;
if (hash.length) {
 window.location = hashRoute + hash;
} else {
 window.location = defaultRoute;
}
</script>

可以看到ES和Kibana成功返回数据.

部署Fluent

将Fluent以DaemonSet的方式部署在Kuberntes集群中,让Fluent收集每个Node上的日志。

在Gihub上Fluent的官方库下载fluentd-daemonset-elasticsearch-rbac.yaml

只需对yaml文件修改一个地方,就是将envFLUENT_ELASTICSEARCH_HOST的value改成ES的IP地址或网址即可。至于X-Pack的鉴权,ES默认是收费使用的,暂不用理会,或装第三方的HTTP Basic Auth实现鉴权。

同时有的人会遇到一个错误,如果K8s集群是用root权限运行的,则fluentd在收集日志的时候会遇到权限问题。

因为fluentd镜像在构建的时候用的是fluent用户权限运行,所以会发生权限不足的情况。

解决方法就是可以去拉取fluent代码自行构建并在Dockfile中指定用户;或使用最简单的方法,在env中指定fluent用户的UID为0,如下所示:

...
 env:
 - name: FLUENT_UID
 value: "0"
...

查看es日志,发现类似如下的日志

xxx update_mapping [fluentd] 

说明fluent已经连接.

用浏览器打开Kibana,点击Discover栏可以看到类似logstash-xxxx.xx.xx的条目,说明Kibana成功获取到了日志。接下来就是根据自己的日志格式编写过滤语句了。

本文转自开源中国-使用EFK收集Kubernetes多集群日志

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务&nbsp;ACK 容器服务&nbsp;Kubernetes&nbsp;版(简称&nbsp;ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情:&nbsp;https://www.aliyun.com/product/kubernetes
相关文章
|
20天前
|
数据库 存储 监控
什么是 SAP HANA 内存数据库 的 Delta Storage
什么是 SAP HANA 内存数据库 的 Delta Storage
16 0
什么是 SAP HANA 内存数据库 的 Delta Storage
|
2天前
|
存储 运维 Kubernetes
Kubernetes 集群的持续性能优化实践
【4月更文挑战第22天】在动态且复杂的微服务架构中,确保 Kubernetes 集群的高性能运行是至关重要的。本文将深入探讨针对 Kubernetes 集群性能优化的策略与实践,从节点资源配置、网络优化到应用部署模式等多个维度展开,旨在为运维工程师提供一套系统的性能调优方法论。通过实际案例分析与经验总结,读者可以掌握持续优化 Kubernetes 集群性能的有效手段,以适应不断变化的业务需求和技术挑战。
13 4
|
9天前
|
Kubernetes 搜索推荐 Docker
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
使用 kubeadm 部署 Kubernetes 集群(二)k8s环境安装
47 17
|
22天前
|
消息中间件 Kubernetes Kafka
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
Terraform阿里云创建资源1分钟创建集群一键发布应用Terraform 创建 Kubernetes 集群
15 0
|
22天前
|
Kubernetes 安全 网络安全
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
搭建k8s集群kubeadm搭建Kubernetes二进制搭建Kubernetes集群
104 0
|
29天前
|
Kubernetes Cloud Native Docker
【云原生】kubeadm快速搭建K8s集群Kubernetes1.19.0
Kubernetes 是一个开源平台,用于管理容器化工作负载和服务,提供声明式配置和自动化。源自 Google 的大规模运维经验,它拥有广泛的生态支持。本文档详细介绍了 Kubernetes 集群的搭建过程,包括服务器配置、Docker 和 Kubernetes 组件的安装,以及 Master 和 Node 的部署。此外,还提到了使用 Calico 作为 CNI 网络插件,并提供了集群功能的测试步骤。
218 0
|
1月前
|
Prometheus 监控 Kubernetes
Kubernetes 集群的监控与日志管理实践
【2月更文挑战第31天】 在微服务架构日益普及的今天,容器编排工具如Kubernetes已成为部署、管理和扩展容器化应用的关键平台。然而,随着集群规模的扩大和业务复杂性的增加,如何有效监控集群状态、及时响应系统异常,以及管理海量日志信息成为了运维人员面临的重要挑战。本文将深入探讨 Kubernetes 集群监控的最佳实践和日志管理的高效策略,旨在为运维团队提供一套系统的解决思路和操作指南。
27 0
|
1月前
|
存储 Kubernetes 监控
Kubernetes(k8s)集群健康检查常用的五种指标
Kubernetes(k8s)集群健康检查常用的五种指标
98 1
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(五)
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(五)
127 0
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(五)
|
Kubernetes 容器
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(三)
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(三)
144 0
KUBERNETES02_集群安装逻辑、前置环境、搭建一主两从、部署dashboard访问页面(三)