如何在Kubernetes上部署ELK堆栈

ELK堆栈是Elasticsearch、Logstash和Kibana的缩写,提供以下功能:

  • Elasticsearch:一个可扩展的搜索和分析引擎,配备日志分析工具和应用程序型数据库,非常适合数据驱动型应用。
  • Logstash:一种日志处理工具,从多个来源收集日志,对其进行解析,并发送至Elasticsearch进行存储和分析。
  • Kibana:一个强大的可视化工具,允许您通过交互式图表、图形和仪表板探索和分析存储在Elasticsearch中的数据。

Elasticsearch的基础架构

在深入部署ELK堆栈之前,我们先来了解Elasticsearch基础架构的关键组件:

  • 节点:Elasticsearch运行在称为节点的专用服务器上,这些节点作为二进制文件执行搜索和分析任务。
  • 分片:数据库空间逻辑上被划分为分片,以实现更快的数据访问和分布。
  • 索引:Elasticsearch将存储的数据组织成索引,便于高效的数据管理。
  • 配置ELK堆栈:您需要一个Kubernetes集群来在Kubernetes上部署ELK堆栈。如果您已有集群,可直接进行部署。或者,您可以使用提供的GitHub仓库中的Terraform文件来设置Kubernetes集群。
  • 部署Elasticsearch: 利用Helm图表,我们可以高效地部署Elasticsearch。修改values文件以匹配您的特定需求,例如调整副本数量或开启/关闭某些功能。从Artifactory Hub下载这些文件。

values-elasticsearch.yaml 

YAML

clusterName: "itsyndicateblog"
replicas: 1 
minimumMasterNodes: 1 
createCert: true
secret:
  enabled: true
  password: "" # generated randomly if not defined
image: "docker.elastic.co/elasticsearch/elasticsearch"
imageTag: "8.5.1"
resources:
  requests:
    cpu: "200m"
    memory: "500Mi"
  limits:
    cpu: "300m"
    memory: "1Gi"
ingress:
  enabled: false # enable ingress only if you need external access to elasticsearch cluster
  hosts:
    - host: elastic.itsyndicate.org
      paths:
        - path: /

在定制完values后,使用Helm图表安装Elasticsearch:

Shell

helm install elasticsearch -f elasticsearch-values.yaml <chart-name>

注意:确保已为持久卷(EBS或EFS)配置了驱动程序。

部署Kibana

使用Helm图表部署Kibana非常简单。在values文件中,指定Elasticsearch服务的URL和端口:

values-kibana.yaml

YAML

elasticsearchHosts: "https://elasticsearch-master:9200"
enterpriseSearch:
  host: "https://elasticsearch-master:9200"
Shell

helm install kibana -f kibana-values.yaml <chart-name>

检查Kibana是否正确安装,将容器的端口转发到本地网络(我使用的是K8s Lens)

部署Logstash和Filebeat

为了有效管理日志,我们使用Logstash和Filebeat。Filebeat从各种来源收集记录,Logstash处理并将它们发送到Elasticsearch。

部署Logstash

  1. 克隆配置所在的仓库:logstash-k8s
  2. 移动到tf-modules/eks/manifests/logstash-k8s
  3. 编辑 configmap.yaml 文件
    1. 添加 Elasticsearch 主机、用户和密码(可从 Kubernetes 资源“Secrets”中获取)
  4. 应用模板:
Shell

kubectl apply -f logstash-k8s -n $CHANGE_TO_ELASTIC_NS

部署 Filebeat

  1. 确保 Filebeat 配置指向节点上正确的日志文件。通常在 EKS 中,路径是 /var/log/containers。为验证这一点,登录到任一节点并转到 /var/log/containers 目录;如果没有文件,尝试更改目录。
  2. 一切正确后,应用 Kubernetes 模板:
Shell

kubectl apply -f filebeat-k8s

部署一个简单应用以检查日志如何流入 Elasticsearch

  1. 从克隆的仓库进入 eks/manifests 文件夹。
  2. 执行命令:
Shell

kubeclt apply -f app -n default

安装完成后,重新访问 Kibana 并创建一个 Elasticsearch 索引。

创建索引:

创建 logstash 索引模式:logstash-[namespace]* 

现在,您应该能看到来自部署应用的日志。如果没有,对该应用发起一些请求并尝试解决问题;如有需要,可参考视频指南获取帮助。

结论

您已成功在Kubernetes上部署了ELK Stack,为您的应用赋予了强大的日志分析能力和数据驱动的洞察力。Elasticsearch、Logstash和Kibana无缝处理大数据流,并提供有意义的可视化。

现在,您拥有了一个强大的日志解决方案,可以高效管理日志并获得宝贵见解。祝分析愉快!

感谢您阅读本指南关于部署ELK Stack的内容。如有任何疑问或需要进一步帮助,请随时联系。祝编码愉快!

Source:
https://dzone.com/articles/how-to-deploy-the-elk-stack-on-kubernetes