在Kubernetes集群中,使用Nginx stream模块处理TCP和UDP流量是一种常见的方式。当我们配置Nginx stream时,我们可能会遇到需要记录日志的情况。在这篇文章中,我将介绍如何实现"Nginx stream 日志"功能。

### 步骤概览

| 步骤 | 操作 |
| --- | --- |
| 步骤一 | 在Kubernetes中部署Nginx stream服务 |
| 步骤二 | 配置Nginx stream服务为日志服务 |
| 步骤三 | 在Fluentd中配置日志收集 |
| 步骤四 | 部署Fluentd DaemonSet |

### 步骤详解

#### 步骤一:在Kubernetes中部署Nginx stream服务

在Kubernetes中部署Nginx stream服务,可以使用以下YAML文件:

```yaml
apiVersion: v1
kind: Service
metadata:
name: nginx-stream
spec:
selector:
app: nginx-stream
ports:
- name: stream
protocol: TCP
port: 1234
targetPort: 1234
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-stream
spec:
replicas: 1
selector:
matchLabels:
app: nginx-stream
template:
metadata:
labels:
app: nginx-stream
spec:
containers:
- name: nginx-stream
image: nginx
ports:
- containerPort: 1234
```

#### 步骤二:配置Nginx stream服务为日志服务

在Nginx配置文件中,配置stream块来指定日志格式和日志文件路径。示例配置如下:

```nginx
stream {
access_log /var/log/nginx/stream.log;
...
}
```

#### 步骤三:在Fluentd中配置日志收集

在Fluentd配置文件中,添加input和output来收集Nginx stream日志并发送到指定目的地。示例配置如下:

```yaml

@type tail
path /var/log/nginx/stream.log
pos_file /var/log/td-agent/nginx.stream.log.pos
tag nginx.stream



@type forward
send_timeout 60s
recover_wait 10s
hard_timeout 60s
...

```

#### 步骤四:部署Fluentd DaemonSet

在Kubernetes中部署Fluentd DaemonSet,确保Fluentd能够在所有节点收集Nginx stream日志。示例YAML文件如下:

```yaml
apiVersion: v1
kind: ServiceAccount
metadata:
name: fluentd
namespace: default

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
name: fluentd
rules:
...

---

apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
name: fluentd
roleRef:
...
subjects:
...

---

apiVersion: apps/v1
kind: DaemonSet
metadata:
name: fluentd
spec:
selector:
matchLabels:
name: fluentd
template:
metadata:
labels:
name: fluentd
spec:
containers:
- name: fluentd
image: fluent/fluentd
...
```

通过以上步骤,我们可以实现在Kubernetes集群中使用Nginx stream服务,并配置日志收集功能。这样就可以更好地监控和管理我们的Nginx stream日志了。希望这篇文章对你有所帮助!