# 实现ELK搜集K8S日志

## 概述
在Kubernetes(K8S)集群中,要实现日志的收集和分析通常会使用ELK(Elasticsearch、Logstash、Kibana)技术栈。ELK技术栈主要由三个组件组成,Elasticsearch用于存储和索引日志数据,Logstash用于采集、转换和传输日志数据,Kibana用于日志数据的可视化和分析。

## 整体流程
下面是实现ELK搜集K8S日志的整体流程,主要分为以下几个步骤:

| 步骤 | 描述 |
| ------ | ------ |
| 1. 部署Elasticsearch | 部署Elasticsearch集群用于存储日志数据 |
| 2. 部署Logstash | 部署Logstash实例用于解析和传输日志数据 |
| 3. 在K8S集群中部署Filebeat | 部署Filebeat收集K8S节点和容器日志 |
| 4. 配置Logstash接收Filebeat传输的日志 | 配置Logstash接收来自Filebeat的日志数据进行处理 |
| 5. 配置Kibana | 配置Kibana连接Elasticsearch用于可视化日志数据 |

## 具体步骤及代码示例

### 步骤1:部署Elasticsearch
首先,我们需要在K8S集群中部署Elasticsearch用于存储日志数据。可以使用Helm来进行部署。

```bash
helm repo add elastic https://helm.elastic.co
helm install elasticsearch elastic/elasticsearch
```

### 步骤2:部署Logstash
接下来,我们需要部署Logstash实例,用于接收、处理和转发日志数据。

```bash
kubectl apply -f logstash.yaml
```

logstash.yaml示例:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: logstash
spec:
containers:
- name: logstash
image: docker.elastic.co/logstash/logstash:7.15.0
ports:
- containerPort: 5044
```

### 步骤3:在K8S集群中部署Filebeat
然后,我们需要在K8S集群中部署Filebeat,用于收集K8S节点和容器的日志数据。

```bash
kubectl apply -f filebeat.yaml
```

filebeat.yaml示例:
```yaml
apiVersion: v1
kind: Pod
metadata:
name: filebeat
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:7.15.0
```

### 步骤4:配置Logstash接收Filebeat传输的日志
在Logstash配置文件中添加Filebeat的输入和输出配置,用于接收来自Filebeat的日志数据。

### 步骤5:配置Kibana
最后,我们需要配置Kibana连接Elasticsearch,以便可视化和分析日志数据。

通过以上步骤,就可以实现在K8S集群中使用ELK技术栈来搜集和分析日志数据。希望以上内容能够帮助你理解整个过程,并顺利实现ELK搜集K8S日志的功能。