EFK是一个开源的日志管理解决方案,由Elasticsearch、Fluentd和Kibana三个工具组成。在Kubernetes集群中,我们可以利用EFK来实现日志的采集、存储和可视化。本文将详细介绍如何在Kubernetes集群中配置EFK来实现日志的采集和索引。

在配置EFK采集Kubernetes日志索引时,主要分为以下几个步骤:

| 步骤 | 操作 |
| ------ | ------ |
| 步骤一 | 在Kubernetes集群中部署EFK组件 |
| 步骤二 | 配置Fluentd DaemonSet来采集Kubernetes容器日志 |
| 步骤三 | 在Elasticsearch中创建索引模板和索引 |

### 步骤一:在Kubernetes集群中部署EFK组件
在Kubernetes集群中部署EFK组件主要是部署Elasticsearch、Fluentd和Kibana。

### 步骤二:配置Fluentd DaemonSet来采集Kubernetes容器日志
Fluentd是用于日志采集和传输的工具,我们需要在Kubernetes集群中配置Fluentd DaemonSet来实现对Kubernetes容器日志的采集。

1. 创建Fluentd DaemonSet的yaml文件:
```yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
namespace: kube-system
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd
volumeMounts:
- name: varlog
mountPath: /var/log
resources:
limits:
memory: 200Mi
requests:
cpu: 100m
memory: 200Mi
env:
- name: FLUENTD_ARGS
value: "-c /etc/fluent.conf"
volumeMounts:
- name: fluentd-conf
mountPath: /etc/fluent.conf
volumes:
- name: varlog
hostPath:
path: /var/log
- name: fluentd-conf
configMap:
name: fluentd-conf
```

2. 创建Fluentd配置文件fluent.conf,用于配置日志的收集和发送:
```json

@type tail
path /var/log/containers/*.log
pos_file /var/log/fluentd-containers.log.pos
time_format %Y-%m-%dT%H:%M:%S.%NZ
tag kubernetes.*
format json



@type elasticsearch
host elasticsearch-service-name
port 9200
user username
password password
index_name fluentd
type_name kubernetes_cluster
logstash_format true
logstash_prefix kubernetes_cluster

```

### 步骤三:在Elasticsearch中创建索引模板和索引
在Elasticsearch中创建索引模板来定义索引的mappings,然后创建索引用于存储日志数据。

1. 创建索引模板template.json:
```json
{
"index_patterns": ["fluentd-*"],
"mappings": {
"properties": {
"timestamp": {
"type": "date",
"format": "strict_date_optional_time||epoch_millis"
},
"log": {
"type": "text"
},
"container_id": {
"type": "keyword"
},
"pod_name": {
"type": "keyword"
},
"namespace_name": {
"type": "keyword"
},
"stream": {
"type": "keyword"
}
}
}
}
```

2. 创建索引:
```bash
curl -X PUT "localhost:9200/fluentd-2022.01.01" -H 'Content-Type: application/json' -d'
{
"settings" : {
"number_of_shards" : 1,
"number_of_replicas" : 0
}
}'
```

通过以上步骤,我们成功地配置了EFK来采集Kubernetes日志并建立索引。小白开发者可以按照这个流程来配置EFK,实现日志的采集和索引功能。希望本文对初学者有所帮助!