要在k8s elk命名空间下使用filebeat来采集default命名空间中的nginx pod日志,可以按照以下步骤进行设置:

  1. 创建一个名为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。

  1. 创建一个名为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命名空间中的其他容器。

  1. 在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进行索引和存储

k8s elk namespace下的 filebeat 怎么采集 default namespace下的nginx podnginx里面的日志都是输出到前台 devstdout里面的进行举例说明

原文地址: http://www.cveoy.top/t/topic/i1YZ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录