Collect and Forward DigitalOcean Kubernetes (DOKS) Logs to DigitalOcean Managed OpenSearch

はじめのこと

このチュートリアルは、DigitalOcean Kubernetes (DOKS)クラスタのログをDigitalOcean Managed OpenSearchインスタンスに集めることと、AxoSyslogという伸缩性のある安全データ処理機能を使用して、

このガイドに従って、Kubernetesアプリケーションからのログを捕捉し、分析する強力なログ管理システムを設定する方法を学びます。これにより、インフラの監視、問題解決、および保護がより簡単になります。このチュートリアルでは、

事前準備

開始する前に、以下の前提条件を整備していることを確認してください。

  1. デジタルオーシャンクラウドアカウントにアクセスする必要があります。これにより、KubernetesとOpenSearchのリソースを作成および管理することができます。
  2. デジタルオーシャンコマンドラインインターフェース(CLI)ツールdoctlは、ローカルマシンにインストールされ、設定されている必要があります。
  3. 稼働中のデジタルオーシャンKubernetes(DOKS)クラスタが必要です。
  4. KubernetesパッケージマネージャHelmがインストールされており、Kubernetesアプリケーションの管理ができるようになっています。
  5. Kubernetes、Helm、およびデジタルオーシャンの管理サービスについての知識があること。

使用例

このプロジェクトは、Kubernetesクラスタ内で実行しているいくつかのアプリケーションのログを監視・分析するための集中的なログ解決策が理想的な場面に適しています。小さなアプリケーションの集合を管理しているか、大規模なインフラを管理しているかに関わらず、特定のOpenSearchクラスタにログを収集し、転送することが助ければ、以下の点で改善されます:

  • セキュリティ監視: 实时にログを分析して、セキュリティ事件を侦知して対応する。
  • トラブルシュooting: Kubernetesアプリケーション内の問題を迅速に特定し解決するために、詳細なログにアクセスする。
  • 合规性: 産業 regulationsに基づいて、事件のログを保持する。

AxoSyslogをDigitalOcean Managed 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リファレンスドキュメントに移動してください。diy13>

ステップ2 – いくつかのランダムなログを生成する

OpenSearchにログを送信する前に、作業するためのログが必要です。Kubernetesクラスタ内で既にログを生成しているアプリケーションがない場合、このステップでログ生成器をデプロイします。このログ生成器は、テストとデモに使用できる、一定のストリームのサンプルログを生成します。

まず、log generator Helm chartレポジトリを追加し、log generatorをインストールします。

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

次に、Helmを使用してlog generatorをインストールします。

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

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 証明書を検証しない。
          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 をインストールする

設定が完了したら、次のステップは 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 ポートにログが送信されていることを確認するため、AxoSyslog Collector の設定を更新して configmap を更新します。

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

最後に、既存のポッドを削除して更新された設定を適用します。

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