# 采集JSON格式日志并使用Filebeat

## 介绍
在Kubernetes(K8S)环境中,我们通常会遇到需要采集JSON格式日志的情况,这时可以使用Filebeat来方便地收集这些日志数据。Filebeat是一个轻量级的开源日志数据收集器,专门设计用于在各种不同的数据源中采集、筛选和转发数据。

## 实现步骤
下面是实现"filebeat采集JSON格式日志"的流程及每一步需要做的事情:

| 步骤 | 操作 |
| ------- | ----------- |
| 1 | 准备Filebeat的配置文件或者在K8S中创建ConfigMap |
| 2 | 创建DaemonSet资源对象来部署Filebeat 实例 |
| 3 | 配置Filebeat 实例采集JSON格式日志 |

### 步骤1:准备配置文件或创建ConfigMap
在K8S中,我们可以通过创建ConfigMap对象来存储配置信息,然后挂载到Filebeat的Pod中。首先,可以创建一个配置文件 filebeat.yml,内容如下:

```yaml
filebeat.inputs:
- type: log
enabled: true
paths:
- /path/to/logs/*.json
json.keys_under_root: true
json.add_error_key: true
filebeat.config.modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
setup.template.settings:
index.number_of_shards: 1
```

在这个配置文件中,我们指定了采集的日志路径为`/path/to/logs/*.json`,并设置`json.keys_under_root`为true来将JSON中的键值对放入根字段,`json.add_error_key`为true在解析错误时添加错误字段。

### 步骤2:创建DaemonSet资源对象
创建一个Filebeat的DaemonSet资源对象来保证在每个节点上均有一个Filebeat实例在运行,可以通过以下示例文件来创建一个DaemonSet:

```yaml
apiVersion: apps/v1
kind: DaemonSet
metadata:
name: filebeat
spec:
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:7.13.4
args: [
"-c", "/etc/filebeat.yml",
"-e"
]
volumeMounts:
- name: config
mountPath: /etc/filebeat.yml
subPath: filebeat.yml
- name: data
mountPath: /path/to/logs
volumes:
- name: config
configMap:
name: filebeat-config
- name: data
hostPath:
path: /path/to/logs
type: Directory
```

### 步骤3:配置Filebeat实例采集JSON格式日志
最后,根据步骤1中的配置文件,将其放置在K8S中的ConfigMap对象中,如:

```bash
kubectl create configmap filebeat-config --from-file=filebeat.yml
```

然后使用步骤2创建的DaemonSet资源对象,Filebeat就会开始采集指定路径下的JSON格式日志,并将其发送至指定的目标。

通过以上步骤,我们就可以实现在Kubernetes环境中使用Filebeat来采集JSON格式日志的功能了。希望以上内容对你有所帮助!