收集并转发DigitalOcean Kubernetes (DOKS)日志到DigitalOcean管理的OpenSearch>

简介

本教程将展示如何使用可扩展的安全数据处理器AxoSyslog,从DigitalOcean Kubernetes (DOKS)集群收集并转发日志到一个DigitalOcean 托管 OpenSearch实例。按照本指南,你将学会如何搭建一个健壮的日志系统,捕获并分析Kubernetes应用程序的日志,从而更容易地监控、故障排除和保护你的基础架构。

在本教程中,你将使用AxoSyslog将Kubernetes集群的日志转发到OpenSearch。

先决条件

开始之前,请确保你已经具备以下先决条件:

  1. 您需要一个DigitalOcean云账户来创建和管理您的Kubernetes和OpenSearch资源。
  2. DigitalOcean命令行接口(CLI)工具doctl,应该安装并配置在您的本地机器上。
  3. 一个正在运行的DigitalOcean Kubernetes(DOKS)集群。
  4. Kubernetes包管理器,Helm,应该安装以管理Kubernetes应用程序。
  5. 熟悉Kubernetes,Helm和DigitalOcean的托管服务。

使用场景

该项目适用于需要集中式日志解决方案来监控和分析在Kubernetes集群中运行的各种应用程序的场景。无论您是管理一组小型应用程序还是大规模基础设施,将日志收集并转发到专门的OpenSearch集群都有助于:

  • 安全监控:通过实时分析日志,检测和响应安全事件。
  • 故障排除:通过访问详细日志,快速识别并解决Kubernetes应用程序中的问题。
  • 合规性:按照行业规定,记录事件日志。

通过将AxoSyslog与DigitalOcean托管OpenSearch集成,您可以高效处理和存储大量日志,从而更容易提取有价值的信息,并维护系统的健康和安全。

步骤1 – 创建OpenSearch集群

在这一步中,您将设置日志系统的核心组件,即OpenSearch集群。OpenSearch将是您从Kubernetes集群收集的所有日志的目的地。您将在DigitalOcean的所选地区运行以下命令创建一个新的OpenSearch实例。

doctl databases create opensearch-doks --engine opensearch --region lon1 --size db-s-1vcpu-2gb --num-nodes 1

lon1替换为您期望的地区。要查看可用的大小别名,请访问我们的API参考文档。

第2步 – 生成一些随机日志

在将日志转发到OpenSearch之前,您需要一些日志来操作。如果您还没有在Kubernetes集群中生成日志的应用程序,这个步骤将向您展示如何部署一个日志生成器。这个日志生成器将产生一个稳定的样本日志流,可以用来测试和展示您的日志流水线。

首先,添加日志生成器的Helm图表仓库并安装日志生成器:

helm repo add kube-logging https://kube-logging.github.io/helm-charts
helm repo update

然后,使用Helm安装日志生成器:

helm install --generate-name --wait kube-logging/log-generator

您可以通过查看它产生的日志来验证日志生成器是否正常工作:

kubectl logs -l app.kubernetes.io/name=log-generator

第3步 – 准备AxoSyslog Collector以进行安装

在这个步骤中,您将配置AxoSyslog Collector,它负责从您的Kubernetes集群中收集日志并将它们转发到OpenSearch。这涉及到为您的OpenSearch集群提供正确的连接详情(主机名、用户名和密码)。

我们将使用helm来安装AxoSyslog Collector并传递自定义值。

要为您的OpenSearch数据库配置AxoSyslog收集器正确的地址、用户和密码,请按照以下步骤操作:

自动化脚本

为了简化配置,您可以使用一个自动化脚本来获取必要的OpenSearch连接详情并更新您的AxoSyslog配置文件。

将以下脚本保存为update_axoflow_demo.sh

update_axoflow_demo.sh
#!/bin/bash

# 提取opensearch-doks的数据库ID
DB_ID=$(doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}')

# 获取主机名、用户名和密码
OPENSEARCHHOSTNAME=$(doctl databases connection $DB_ID --no-header --format Host)
OPENSEARCHUSERNAME=$(doctl databases connection $DB_ID --no-header --format User)
OPENSEARCHPASSWORD=$(doctl databases connection $DB_ID --no-header --format Password)

# 使用yq更新axoflow-demo.yaml,填入提取的值
yq eval ".config.destinations.opensearch[0].address = \"$OPENSEARCHHOSTNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].user = \"$OPENSEARCHUSERNAME\"" -i axoflow-demo.yaml
yq eval ".config.destinations.opensearch[0].password = \"$OPENSEARCHPASSWORD\"" -i axoflow-demo.yaml

echo "axoflow-demo.yaml has been updated."

在运行此脚本之前,请确保您有对脚本的执行权限:

chmod +x update_axoflow_demo.sh && ./update_axoflow_demo.sh

此脚本将使用doctl从您的DigitalOcean账户获取必要信息,并相应地更新您的axoflow-demo.yaml文件。

手动更新axoflow-demo.yaml的步骤

如果您更喜欢手动配置您的AxoSyslog收集器,请按照以下步骤操作:

运行以下命令以提取opensearch-doks的数据库ID:

doctl databases list --format Name,ID --no-header | grep opensearch-doks | awk '{print $2}'

要检索主机名、用户名和密码,请分别执行以下命令:

doctl databases connection <id> --no-header --format Host
doctl databases connection <id> --no-header --format User
doctl databases connection <id> --no-header --format Password

现在,您需要手动更新axoflow-demo.yaml文件:

使用文本编辑器打开您的axoflow-demo.yaml文件,并将提取的值替换相关字段:

axoflow-demo.yaml
config:
  sources:
    kubernetes:
      # 收集Kubernetes日志
      enabled: true
  destinations:
    # 将日志发送到OpenSearch
    opensearch:
      - address: "x.k.db.ondigitalocean.com"
        index: "doks-demo"
        user: "doadmin"
        password: "AVNS_x"
        tls:
          # 不验证服务器的TLS证书。
          peerVerify: false
        # 以JSON格式发送syslog字段以及.k8s.*中的元数据
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

步骤4 – 安装AxoSyslog-collector

配置完成后,下一步是将AxoSyslog Collector部署到您的Kubernetes集群。这将使您能够将日志收集并发送到OpenSearch。

添加AxoSyslog Helm仓库,并使用自定义配置文件安装AxoSyslog Collector:

helm repo add AxoSyslog https://axoflow.github.io/AxoSyslog-charts
helm repo update
helm install AxoSyslog -f axoflow-demo.yaml AxoSyslog/AxoSyslog-collector --wait

为确保日志被发送到正确的OpenSearch端口,请通过更新您的configmap来更新AxoSyslog Collector的配置:

kubectl get configmap AxoSyslog-AxoSyslog-collector -o yaml | sed 's/9200\/_bulk/25060\/_bulk/' | kubectl apply -f -

最后,删除现有pod以应用更新配置:

kubectl delete pods -l app=AxoSyslog-AxoSyslog-collector

结论

通过AxoSyslog将DigitalOcean Kubernetes的日志流水线设置为OpenSearch,不仅集中了您的日志,还增强了您监控、分析和保护应用程序的能力。按照本指南提供的步骤,您可以快速部署此解决方案,更深入地了解您的Kubernetes环境,并确保您的基础设施保持弹性且合规。

Source:
https://www.digitalocean.com/community/tutorials/collect-and-forward-kubernetes-logs-to-opensearch