디지털오션 쿠버네티스(DOKS) 로그를 디지털오션 관리형 오픈서치로 수집하고 전달하기

소개

이 튜토리얼은 DigitalOcean Kubernetes (DOKS) 클러스터의 로그를 DigitalOcean Managed OpenSearch 인스턴스로 수집하고 转发하는 方法을 AxoSyslog, 확장性 있는 안전 데이터 처리기로 사용하는 것을 보여줍니다. 이 가이드를 따라가면 Kubernetes 응용 프로그램의 로그를 捕获하고 분석하는 강健하는 로깅 시스템을 설정하는 方法을 배울 수 있습니다. 이를 통해 인프라스트럭트URE를 모니터링, 문제 해결하고 보호하는 것이 더 쉽게 될 것입니다.

이 튜토리얼에서는 AxoSyslog를 사용하여 Kubernetes 클러스터의 로그를 OpenSearch로 转发할 것입니다.

사전 요구 사항

시작하기 전에 다음과 같은 사전 요구 사항을 확인하십시오.

  1. 디지털오cean 雲 계정이 필요합니다. 이를 사용하여 Kubernetes 및 OpenSearch 자원을 생성하고 관리합니다.
  2. 디지털오cean 명령行 인터페이스(CLI) 도구 doctl를 로컬 컴퓨터에 설치하고 構정해야 합니다.
  3. 디지털오cean Kubernetes(DOKS) クラスタ가 실행중입니다.
  4. Kubernetes パッケージ マネージャ Helm을 설치하여 Kubernetes 应用程序을 관리해야 합니다.
  5. Kubernetes, Helm, 디지털오cean의 관리 서비스에 대한 熟悉さが 필요합니다.

사용 사례

이 프로젝트는 센ralized logging solution을 사용하여 Kubernetes クラ스터에서 실행되는 여러 응용 프로그램의 log를 모니터링하고 분석하는 것이 좋은 사례이며, 소수의 응용 프로그램을 관리하는 것과 대규모의 인프라스트럱ructure를 관리하는 것 사이에서도 적용할 수 있습니다. 지정된 OpenSearch cluster로 log를 수집하고 转发하면 다음과 같은 이점을 얻을 수 있습니다.

  • 안전 모니터링: 실시간 로그 분석을 통해 안전 사고를 감지하고 대응합니다.
  • 문제 해결: Kubernetes 应用程序에 대한 자세한 로그 액세스로 빠르게 문제를 识別하고 해결합니다.
  • 规范遵守: 산업 규정에 따라 이벤트 로그를 보유합니다.

AxoSyslog을 DigitalOcean Managed OpenSearch와 인tegrating하여, 로그를 효율적으로 처리하고 저장할 수 있습니다. 이를 통해 가치 있는 정보를 抽出하고 시스템 健康과 안전을 유지하는 것이 더 容易하게 될 것입니다.

Step 1 – OpenSearch クラスタ 만들기

이 단계에서는 로그 시스템의 기본 组成部分, OpenSearch クラス터를 설정합니다. OpenSearch는 Kubernetes クラス터에서 수집한 모든 로그의 대상이 됩니다. 다음 명령어를 실행하여 선택한 지역에 새 OpenSearch 인스턴스를 만듭니다.

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

lon1를 您的 desired region으로 대체하십시오. 사용 가능한 size slugs 목록을 보려면 我们的 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并传递自定义值。

AxoSyslog 수집기를 OpenSearch 데이터베이스에 대한 올바른 주소, 사용자 및 비밀번호로 구성하려면 다음 단계를 따르십시오:

자동화된 스크립트

구성을 간소화하려면 필요한 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  cerificate를 Validate하지 않습니다.
          peerVerify: false
        # syslog 필드 + .k8s.* から metadata를 JSON 형식으로 보냅니다.
        template: "$(format-json --scope rfc5424 --exclude DATE --key ISODATE @timestamp=${ISODATE} k8s=$(format-json .k8s.* --shift-levels 2 --exclude .k8s.log))"

阶段 4 – AxoSyslog-collector 설치

이제 configurations가 완료되었으면, 다음 단계는 Kubernetes クラス터에 AxoSyslog Collector를 배포하는 것입니다. 이렇게 하면 OpenSearch로 로그를 수집하고 转发할 수 있습니다.

AxoSyslog Helm 저장소를 추가하고 사용자 정의 configurations 파일을 사용하여 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

로그가 correct OpenSearch 포트로 보내られ는지 확인하려면 AxoSyslog Collector의 configurations을 更新하기 위해 configmap를 更新하십시오.

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

결국, 현재의 팬들을 지웁니다. 이를 기반으로 更新한 configurations을 적용합니다.

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

결론

DigitalOcean KubernetesからOpenSearchにAxoSyslogを使用してログポートルを設定することは、ログを集中管理するだけでなく、アプリケーションの監視、分析、およびセキュリティを強化する。このガイドで提供された手順を利用して、このソリューションを迅速にデプロイでき、Kubernetes環境の深い視点を得ることができ、インフラスの強固さと合规性を保証することができます。

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