使用EFK收集Kubernetes多集群日志

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: Collecting logs for multi kubernetes clusters with EFK 在有多个集群的情况下,一个集群就搭建一套日志收集分析服务实在太浪费。因此可以尝试只跑一套Elasticsearch和Kibana实例,然后让各个集群中的日志收集器向Elasticsearch发送日志,。

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多集群日志

相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5天前
|
人工智能 分布式计算 调度
打破资源边界、告别资源浪费:ACK One 多集群Spark和AI作业调度
ACK One多集群Spark作业调度,可以帮助您在不影响集群中正在运行的在线业务的前提下,打破资源边界,根据各集群实际剩余资源来进行调度,最大化您多集群中闲置资源的利用率。
|
16天前
|
Prometheus Kubernetes 监控
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
OpenAI故障复盘丨如何保障大规模K8s集群稳定性
|
20天前
|
运维 分布式计算 Kubernetes
ACK One多集群Service帮助大批量应用跨集群无缝迁移
ACK One多集群Service可以帮助您,在无需关注服务间的依赖,和最小化迁移风险的前提下,完成跨集群无缝迁移大批量应用。
|
2月前
|
缓存 容灾 网络协议
ACK One多集群网关:实现高效容灾方案
ACK One多集群网关可以帮助您快速构建同城跨AZ多活容灾系统、混合云同城跨AZ多活容灾系统,以及异地容灾系统。
|
3月前
|
Kubernetes Ubuntu 网络安全
ubuntu使用kubeadm搭建k8s集群
通过以上步骤,您可以在 Ubuntu 系统上使用 kubeadm 成功搭建一个 Kubernetes 集群。本文详细介绍了从环境准备、安装 Kubernetes 组件、初始化集群到管理和使用集群的完整过程,希望对您有所帮助。在实际应用中,您可以根据具体需求调整配置,进一步优化集群性能和安全性。
188 12
|
3月前
|
Prometheus Kubernetes 监控
OpenAI故障复盘 - 阿里云容器服务与可观测产品如何保障大规模K8s集群稳定性
聚焦近日OpenAI的大规模K8s集群故障,介绍阿里云容器服务与可观测团队在大规模K8s场景下我们的建设与沉淀。以及分享对类似故障问题的应对方案:包括在K8s和Prometheus的高可用架构设计方面、事前事后的稳定性保障体系方面。
|
3月前
|
Kubernetes 网络协议 应用服务中间件
Kubernetes Ingress:灵活的集群外部网络访问的利器
《Kubernetes Ingress:集群外部访问的利器-打造灵活的集群网络》介绍了如何通过Ingress实现Kubernetes集群的外部访问。前提条件是已拥有Kubernetes集群并安装了kubectl工具。文章详细讲解了Ingress的基本组成(Ingress Controller和资源对象),选择合适的版本,以及具体的安装步骤,如下载配置文件、部署Nginx Ingress Controller等。此外,还提供了常见问题的解决方案,例如镜像下载失败的应对措施。最后,通过部署示例应用展示了Ingress的实际使用方法。
104 2
|
25天前
|
存储 缓存 关系型数据库
图解MySQL【日志】——Redo Log
Redo Log(重做日志)是数据库中用于记录数据页修改的物理日志,确保事务的持久性和一致性。其主要作用包括崩溃恢复、提高性能和保证事务一致性。Redo Log 通过先写日志的方式,在内存中缓存修改操作,并在适当时候刷入磁盘,减少随机写入带来的性能损耗。WAL(Write-Ahead Logging)技术的核心思想是先将修改操作记录到日志文件中,再择机写入磁盘,从而实现高效且安全的数据持久化。Redo Log 的持久化过程涉及 Redo Log Buffer 和不同刷盘时机的控制参数(如 `innodb_flush_log_at_trx_commit`),以平衡性能与数据安全性。
29 5
图解MySQL【日志】——Redo Log
|
4月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
1251 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
3月前
|
监控 安全 Apache
什么是Apache日志?为什么Apache日志分析很重要?
Apache是全球广泛使用的Web服务器软件,支持超过30%的活跃网站。它通过接收和处理HTTP请求,与后端服务器通信,返回响应并记录日志,确保网页请求的快速准确处理。Apache日志分为访问日志和错误日志,对提升用户体验、保障安全及优化性能至关重要。EventLog Analyzer等工具可有效管理和分析这些日志,增强Web服务的安全性和可靠性。

热门文章

最新文章