随着容器技术的快速发展,Kubernetes 成为了现代云原生应用中最流行的编排工具,越来越多的企业、组织、开发者将应用部署到 Kubernetes 集群中。而在应用运行过程中,日志是重要的运行时信息之一,但是如何有效地收集、存储、检索这些日志成为了一个很值得深入研究的问题。
在 Kubernetes 集群中,Elasticsearch、Fluentd、Kibana 这三个开源工具可以组成一个完整的日志收集、存储、检索解决方案,被称为 EFK。
本文将详细介绍 EFK 的原理、部署以及使用方法,帮助读者快速掌握 EFK 在 Kubernetes 日志收集中的应用。
EFK 的原理
- Elasticsearch:提供了分布式搜索、实时分析和存储功能,可以高效地存储和索引海量日志数据。
- Fluentd:负责从应用、宿主机、Kubernetes 等地方采集日志,并将其发送到 Elasticsearch 中进行存储。
- Kibana:提供了友好的 Web UI,可以方便地查询、可视化、分析 Elasticsearch 中存储的日志数据。
在 Kubernetes 集群中,每个节点都可以运行 Fluentd,负责采集本节点上应用和宿主机的日志。Fluentd 会将日志发送到 Elasticsearch 中进行存储,并且会根据配置应用相应的过滤器进行数据处理。用户可以使用 Kibana 查询 Elasticsearch 中的日志数据,并在 Web UI 中进行可视化操作。
EFK 的部署
以 Helm Chart 方式安装 EFK:
1. 安装 Elasticsearch
添加 Elasticsearch Helm repo:
helm repo add elastic https://helm.elastic.co helm repo update
安装 Elasticsearch:
helm install elasticsearch elastic/elasticsearch -n logging --create-namespace -f values-elasticsearch.yaml
values-elasticsearch.yaml 配置文件示例:
-- -------------------- ---- ------- --------- ------ ---------- ------ ------------ ------------- --------- - ---------- --------- ---- ---- ------- --- ------- ---- ---- ------- ---
2. 安装 Fluentd
添加 Fluentd 引擎仓库:
helm repo add fluent https://fluent.github.io/helm-charts helm repo update
安装 Fluentd:
helm install fluentd fluent/fluentd -n logging --create-namespace -f values-fluentd.yaml
values-fluentd.yaml 配置文件示例:
imageTag: v1.11-1 elasticsearch: host: "elasticsearch-client.logging.svc.cluster.local" port: 9200
3. 安装 Kibana
添加 Kibana Helm repo:
helm repo add elastic https://helm.elastic.co helm repo update
安装 Kibana:
helm install kibana elastic/kibana -n logging --create-namespace -f values-kibana.yaml
values-kibana.yaml 配置文件示例:
-- -------------------- ---- ------- --------- ------ ------------------- ------------------------------------------------------------ ---------- --------- ---- ---- ------- --- ------- ---- ----- ------- ---
以上是一个简单的 EFK 部署示例,当然在实际生产环境中还需要考虑 HA、安全等方面的部署。
使用 EFK 收集 Kubernetes 日志
1. 部署日志收集
安装 Fluentd DaemonSet:
-- -------------------- ---- ------- ----------- ------- ----- --------- --------- ----- ------- ------- ---- ------- ----- --------- ------------ ---- ------- --------- --------- ------- ---- ------- ----- ------------------- ------- ----------- - ----- ------- ------ ------------------------------------------------------------------- ---- - ----- ------------------------- ------ ------------------------------------------------ - ----- ------------------------- ------ ------ ---------- ------- ------- ------- --------- ---- ------ ------- ------- ------------- - ----- ------ ---------- -------- - ----- ---------------------- ---------- -------------------------- --------- ---- - ----- ----------------------- ------ ---------------------------------- ------------- - ----- ------ ---------- ------------ ---- - ----- ----------- ------ ------------------------ ---------- ------- ------- ------- --------- ---- ----- ------- ------ ------------------------------ -- -------- - ----- ------ ---------- ----- -------------- ------ - ---- ----------- ----- ----------- - ----- ------ --------- ----- --------- - ----- ---------------------- --------- ----- -------------------------- ----- ---------
注意:需要自行创建 serviceAccount fluentd,授权 ClusterRole fluentd-kubernetes-daemonset、ClusterRoleBinding fluentd-kubernetes-daemonset。
配置应用日志输出到标准输出,例如:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ----- ---------- ----- --------- - --------- ------------ ---- ---------- --------- --------- ------- ---- ---------- ----- ----------- - ----- ---------- ------ ------------------- ------ - -------------- ---- ---- - ----- --------- ------ ------- - ----- ------------- ------ ------ - ----- ---------- ------ --------
2. 使用 Kibana 查询日志
- 打开 Kibana 的 Web UI,选择左侧的 "Discover" 菜单。
- 进行日志查询以及数据展示。
总结
本文详细介绍了 EFK 的原理、部署以及使用方法,在 Kubernetes 环境中可以快速搭建容器日志收集、存储、检索的解决方案。在实际生产环境中需要注意 HA、安全等方面的部署,以及合理的日志采集和数据处理配置。希望本文能够对读者有所启发,帮助大家更好地掌握 Kubernetes 日志收集的应用。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64832fc148841e98942a6903