k8s elk namespace下的 filebeat 怎么采集 default namespace下的nginx podnginx里面的日志都是输出到前台 devstdout里面的进行举例说明
要在k8s elk命名空间下使用filebeat来采集default命名空间中的nginx pod日志,可以按照以下步骤进行设置:
- 创建一个名为
filebeat-configmap的ConfigMap,其中包含filebeat的配置文件filebeat.yml。例如,可以使用以下文件内容:
filebeat.yml: |
filebeat.inputs:
- type: container
paths:
- /var/log/containers/*.log
processors:
- add_kubernetes_metadata:
in_cluster: true
namespace: default
output.elasticsearch:
hosts: ['elasticsearch:9200']
在该配置中,我们将filebeat配置为监视/var/log/containers/目录下的所有日志文件,并添加kubernetes元数据(例如,pod名称,命名空间等)。然后将日志发送到Elasticsearch。
- 创建一个名为
filebeat的Deployment和Service。Deployment负责运行filebeat容器,并将其配置为使用上面创建的ConfigMap。Service允许从k8s elk命名空间中的elasticsearch进行访问。
apiVersion: apps/v1
kind: Deployment
metadata:
name: filebeat
namespace: k8s-elk
spec:
replicas: 1
selector:
matchLabels:
app: filebeat
template:
metadata:
labels:
app: filebeat
spec:
containers:
- name: filebeat
image: docker.elastic.co/beats/filebeat:7.14.0
volumeMounts:
- name: config
mountPath: /usr/share/filebeat/filebeat.yml
subPath: filebeat.yml
- name: varlogcontainers
mountPath: /var/log/containers/
readOnly: true
volumes:
- name: config
configMap:
name: filebeat-configmap
items:
- key: filebeat.yml
path: filebeat.yml
- name: varlogcontainers
hostPath:
path: /var/log/containers
---
apiVersion: v1
kind: Service
metadata:
name: filebeat
namespace: k8s-elk
spec:
selector:
app: filebeat
ports:
- name: filebeat
port: 5044
targetPort: 5044
在上面的配置中,我们将filebeat容器映射到/var/log/containers/目录,以便能够访问default命名空间中的nginx容器的日志文件。此外,我们创建了一个Service,将filebeat容器的5044端口公开给k8s elk命名空间中的其他容器。
- 在default命名空间中的nginx Deployment中,将日志输出到
/dev/stdout。可以通过在nginx容器的配置文件中设置access_log选项来实现。例如:
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx
namespace: default
spec:
replicas: 1
selector:
matchLabels:
app: nginx
template:
metadata:
labels:
app: nginx
spec:
containers:
- name: nginx
image: nginx:latest
ports:
- containerPort: 80
volumeMounts:
- name: varlogcontainers
mountPath: /var/log/containers/
command: ["/bin/sh", "-c"]
args: ["nginx -g 'daemon off;' 2>&1 | tee /dev/stdout > /var/log/containers/nginx.log"]
volumes:
- name: varlogcontainers
emptyDir: {}
在上面的配置中,我们通过将nginx的输出重定向到/dev/stdout,并使用tee命令将输出写入/var/log/containers/nginx.log文件中,以便filebeat能够访问日志文件。
通过以上步骤,filebeat将能够监视default命名空间中的nginx日志,并将其发送到k8s elk命名空间中的Elasticsearch进行索引和存储
原文地址: http://www.cveoy.top/t/topic/i1YZ 著作权归作者所有。请勿转载和采集!