EFKスタック(Elasticsearch, Fluentd, Kibana)をKubernetes環境でセットアップするための手順は、ログ管理において非常に強力なソリューションを提供します。ここでは、Kubernetes上でEFKスタックをセットアップするための詳細かつ包括的なガイドを提供します。
EFKスタックの構成要素
EFKスタックは、3つの主要なコンポーネントで構成されています:
- Elasticsearch:分散型の検索エンジンで、ログデータをインデックス化し、検索および分析を行うためのデータストレージを提供します。
- Fluentd:ログの収集、処理、転送を行うデータ収集ツール。Kubernetes環境で生成されたログを収集し、Elasticsearchに転送します。
- Kibana:Elasticsearchのデータを可視化するためのダッシュボードツール。Fluentdが送信したログデータを視覚的に表示します。
Kubernetes上でEFKスタックをセットアップする手順
以下に示すのは、Kubernetesクラスター上にEFKスタックをデプロイするための基本的な手順です。
1. Elasticsearchのデプロイ
ElasticsearchはKubernetesクラスタにおいてStatefulSetを使用してデプロイされることが一般的です。これにより、永続的なストレージとスケーラビリティが提供されます。
まず、elasticsearch-deployment.yaml
というマニフェストファイルを作成します。
yamlapiVersion: apps/v1
kind: StatefulSet
metadata:
name: elasticsearch
labels:
app: elasticsearch
spec:
serviceName: "elasticsearch"
replicas: 3
selector:
matchLabels:
app: elasticsearch
template:
metadata:
labels:
app: elasticsearch
spec:
containers:
- name: elasticsearch
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
resources:
limits:
memory: 2Gi
cpu: 1
requests:
memory: 1Gi
cpu: 0.5
env:
- name: discovery.type
value: single-node
- name: cluster.name
value: "elasticsearch-cluster"
volumeMounts:
- name: elasticsearch-data
mountPath: /usr/share/elasticsearch/data
volumes:
- name: elasticsearch-data
persistentVolumeClaim:
claimName: elasticsearch-pvc
---
apiVersion: v1
kind: Service
metadata:
name: elasticsearch
spec:
clusterIP: None
ports:
- port: 9200
targetPort: 9200
selector:
app: elasticsearch
次に、Elasticsearch用の永続ボリューム(PVC)を作成します。
yamlapiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: elasticsearch-pvc
spec:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
これらのマニフェストを適用して、ElasticsearchをKubernetesにデプロイします。
bashkubectl apply -f elasticsearch-deployment.yaml kubectl apply -f elasticsearch-pvc.yaml
2. Fluentdのデプロイ
次に、Fluentdを使用してログを収集し、Elasticsearchに転送します。Fluentdのコンフィグレーションは、ログの収集先や処理方法を定義します。
FluentdのConfigMapを作成します。fluentd-configmap.yaml
を以下のように設定します。
yamlapiVersion: v1
kind: ConfigMap
metadata:
name: fluentd-config
namespace: kube-system
data:
fluentd.conf: |
@type tail
tag kubernetes.*
path /var/log/containers/*.log
pos_file /var/log/fluentd-containers.log.pos
format json
kubernetes.**>
@type elasticsearch
host elasticsearch
port 9200
logstash_format true
logstash_prefix kubernetes-logs
次に、Fluentdのデプロイメントを作成します。fluentd-deployment.yaml
を以下のように設定します。
yamlapiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
spec:
selector:
matchLabels:
app: fluentd
template:
metadata:
labels:
app: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd-kubernetes-daemonset:v1.12-debian-elasticsearch7-1.0
volumeMounts:
- name: config-volume
mountPath: /fluentd/etc
subPath: fluentd.conf
- name: varlog
mountPath: /var/log
volumes:
- name: config-volume
configMap:
name: fluentd-config
- name: varlog
hostPath:
path: /var/log
type: Directory
このマニフェストを適用することで、FluentdがKubernetesの各ノードで動作し、ログをElasticsearchに送信するようになります。
bashkubectl apply -f fluentd-configmap.yaml kubectl apply -f fluentd-deployment.yaml
3. Kibanaのデプロイ
KibanaはElasticsearchのデータを可視化するために使用されます。Kibanaは通常、Deploymentとしてデプロイされ、Serviceを通じてアクセスできるように設定します。
kibana-deployment.yaml
を作成します。
yamlapiVersion: apps/v1
kind: Deployment
metadata:
name: kibana
spec:
replicas: 1
selector:
matchLabels:
app: kibana
template:
metadata:
labels:
app: kibana
spec:
containers:
- name: kibana
image: docker.elastic.co/kibana/kibana:7.10.0
ports:
- containerPort: 5601
env:
- name: ELASTICSEARCH_URL
value: "http://elasticsearch:9200"
---
apiVersion: v1
kind: Service
metadata:
name: kibana
spec:
ports:
- port: 5601
selector:
app: kibana
Kibanaをデプロイします。
bashkubectl apply -f kibana-deployment.yaml
Kibanaが正常に動作していれば、Kibanaのダッシュボードにアクセスすることができます。Kubernetes環境におけるServiceのポートフォワーディングを使って、ローカルマシンからアクセスできます。
bashkubectl port-forward service/kibana 5601:5601
ブラウザで http://localhost:5601
にアクセスすると、Kibanaのインターフェースが表示されます。
4. ログの可視化
Kibanaにログインすると、Elasticsearchに格納されたログがインデックスとして表示されます。これにより、Kubernetesクラスターからのログを可視化し、分析できるようになります。Kibanaのダッシュボードを使用して、ログデータに対してクエリを実行し、様々なフィルターやグラフを作成できます。
まとめ
以上が、Kubernetes環境にEFKスタック(Elasticsearch、Fluentd、Kibana)をセットアップするための基本的な手順です。このスタックを使用することで、Kubernetesクラスター内で生成される大量のログを効率的に収集、保存、可視化することができます。ログのモニタリングと分析は、運用の改善やトラブルシューティングに非常に役立ちます。