KubernetesにおけるELKスタックのデプロイ方法

ELKスタックは、Elasticsearch、Logstash、Kibanaの略称で、以下の機能を提供します:

  • Elasticsearch: ログ解析ツールとアプリケーション構成データベースを備えたスケーラブルな検索および分析エンジンで、データ駆動型アプリケーションに最適です。
  • Logstash: 様々なソースからログを収集し、解析してElasticsearchに送信するログ処理ツールです。
  • Kibana: Elasticsearchに保存されたデータをインタラクティブなグラフ、グラフ、ダッシュボードを使用して探索および分析できる強力な可視化ツールです。

Elasticsearchのインフラストラクチャ

ELKスタックのデプロイに進む前に、まずElasticsearchのインフラストラクチャの重要なコンポーネントを理解しましょう:

  • ノード: Elasticsearchは、検索および分析タスクのバイナリとして機能する専用サーバーであるノード上で実行されます。
  • シャード: データベーススペースは論理的にシャードに分割され、データのアクセスと分散を高速化します。
  • インデックス: Elasticsearchは、保存されたデータをインデックスに整理し、効率的なデータ管理を促進します。
  • ELKスタックの構成: ELKスタックをKubernetes上にデプロイするには、Kubernetesクラスタが必要です。既にクラスタを持っている場合は、デプロイに進むことができます。そうでない場合は、Terraformファイルを含む提供されたGitHubリポジトリを使用してKubernetesクラスタを設定できます。
  • Elasticsearchのデプロイ: Helmチャートを利用することで、Elasticsearchを効率的にデプロイできます。値ファイルを変更して、特定の要件に合わせることができます。例えば、レプリカの数を調整したり、特定の機能をオン/オフにすることができます。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: /

値をカスタマイズした後、Helmチャートを使用してElasticsearchをインストールしてください。

Shell

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

注意: 永続ボリューム用にドライバー(EBSまたはEFS)を構成していることを確認してください。

Kibanaのデプロイ

Helmチャートを使用してKibanaをデプロイするのは簡単です。値ファイルで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フォルダです)を指していることを確認してください。確認するには、ノードの1つにログインし、/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]*

これで、デプロイされたアプリケーションからのログが表示されるはずです。そうでない場合は、このアプリにいくつかのリクエストを送信し、問題をトラブルシューティングしてみてください。必要に応じてビデオガイドを参照してください。

結論

ELKスタックをKubernetesに正常にデプロイし、アプリケーションに強力なログ分析とデータ駆動型の洞察を提供しました。Elasticsearch、Logstash、Kibanaは大規模なデータストリームを効果的に処理し、意味のある可視化を提供します。

これで強力なロギングソリューションが整いましたので、ログを効率的に管理し、貴重な洞察を得ることができます。分析を楽しんでください!

ELKスタックをデプロイするためのこのガイドを読んでいただき、ありがとうございます。質問がある場合やさらなる支援が必要な場合は、お気軽にご連絡ください。コーディングを楽しんでください!

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