在现代化的云原生环境下,随着应用程序规模的不断增长和多样化,记录和管理大量的日志变得更加困难。正是因为如此,我们需要一个系统来从各种应用程序和服务中收集、解析、存储和分析日志。Elastic Stack (ELK) 就是我们所需的解决方案之一。在本文中,我们将学习如何使用 Kubernetes 部署 ELK 平台,并将其应用于集中处理容器应用程序中的日志。
ELK 栈简介
ELK 是一个流行的开源日志管理系统,由三个分别代表 Elastic 公司内核技术软件的首字母:Elasticsearch、Logstash 和 Kibana 组成。
- Elasticsearch 是一个开源的分布式搜索和分析引擎,可以通过此工具从数百万条日志中找到重要信息。
- Logstash 是一个开源的数据收集引擎,负责从各种来源(如文件、网络、兼容不同的格式等)收集日志,并将它们转换成一个统一的格式并将其输出到 Elasticsearch 中。
- Kibana 是一个开源的 Web 应用程序,用于对 Elasticsearch 存储数据的设置和管理,并提供实时的分析和可视化工具。
我们将通过创建一个 Kubernetes 集群并部署 ELK 来演示如何将多个容器应用程序的日志集中到单个松散耦合的平台中。
步骤 1:配置本地机器
安装 Docker 并验证其已成功安装。
$ docker version
安装 Kubernetes 并验证。
$ kubectl version
安装 Helm。
Helm 是一个 Kubernetes 应用程序包管理工具,它允许您以可重复的方式配置和部署应用程序。
$ brew install helm
步骤 2:部署 ELK
克隆本地仓库。
$ git clone https://github.com/felixpan321/k8s-elk
进入仓库路径并部署 ELK。
$ cd k8s-elk $ helm upgrade --install elk ./
如果您遇到任何问题,请使用以下命令删除 Helm 实例。
$ helm delete --purge elk
部署完成后,您可以使用以下命令检查该 ELK 部署状态。
$ kubectl get pods -n logging
步骤 3:测试容器日志发布至 ELK
到目前为止,我们已经顺利部署了 ELK 平台,接下来我们将展示如何将其用于集中记录并分析容器应用程序的日志。
在本示例中,我们将使用一个简单的 Python Flask 应用程序来模拟容器应用程序。首先,我们需要创建一个名为 flask-app.yaml
的 Kubernetes 应用程序清单文件,内容如下:
-- -------------------- ---- ------- ----------- ------- ----- ---------- --------- ------- ---- --------- ----- --------- ----- --------- - --------- ------------ ---- --------- --------- --------- ------- ---- --------- ----- ----------- - ------ ---------- ----- --------- -------- ---------- ----- ----------- ------------- - ----- ---- ---------- ------------ ---- - ----- --------- ------ ---- ------ - -------------- ---- -------- - ----- ---- --------- -- --- ----------- -- ----- ------- --------- ------- ---- --------- ----- --------- ----- ----- -------- --------- ---- --------- ------ - ----- ---- ----------- ----
此文件将创建一个名为 flask-app
的 Deployment 和一个名为 flask-app
的 Service,并通过容器端口 5000 公开 Flask 应用程序。
接下来,创建一个名为 main.py
的 Python 文件,内容如下:
-- -------------------- ---- ------- ---- ----- ------ ----- ------ ------- --- - --------------- --------------- --- -------- ---------------------- -------- ------ ------ ------- -- -------- -- ----------- - --- ------- ------- - ------------------------------------------------- ------------------------------ ------------------------------ ------------------- ---------------
该文件使用 Flask 应用程序生成器创建了一个简单的 Web 应用,同时还在其入口处插入一条日志记录。
接下来,部署 Flask 应用。
$ kubectl apply -f flask-app.yaml
访问 http://<nodeip>:<nodeport>/ 可以查看 Flask 应用的输出,同时此操作也将生成一条新的日志,该日志将写入 Azure 文件存储中的 /var/logs
目录。
接下来,我们需要将 Logstash 配置文件中的输出部分配置为 Elasticsearch 内的新索引。在配置文件中添加以下内容,替换前缀为您所喜欢的内容。
output { elasticsearch { hosts => ["http://elasticsearch-client:9200"] index => "flask-app-%{+YYYY.MM.dd}" } }
该文件告诉 Logstash,在 Apache Access 日志中找到所有行,并将其推入 Elasticsearch 中,存储为新索引(每天生成一个)中的记录。 运行以下命令,部署 Logstash 配置文件。
$ kubectl create configmap logstash-config --from-file=k8s/logstash/config --namespace=logging $ helm upgrade --install elk ./
以上操作完成后,可以使用 Elasticsearch 的 Kibana 进行日志查询和分析。
结论
在本文中,我们通过实际操作展示了如何使用 Helm 在 Kubernetes 中部署 ELK 平台。然后,我们使用简单的 Python Flask 应用程序来演示如何将容器日志集中到该平台中。ELK 平台提供了一种强大的手段,可以从各种来源收集和分析日志,因此这是管理容器化应用程序中重要日志的理想选择。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/66ee7d516fbf96019722a3f6