[运维]3.containerd无法使用fluentd的问题

一开始看的教程是使用dockerd的运行时配置fluentd,但是我使用的是containerd的容器运行时,这两个运行时存储日志的位置不一样,导致fluentd一开始什么日志都收集不到。

修改fluentd的deployment文件,更改Mounts挂载的位置。

containerd的挂载位置是/var/log/pods和/var/log/containers。

如下是我fluentd的挂载配置,其中还包括一个configMap的挂载,这个configMap是帮助fluentd解析containerd日志的。

volumeMounts:
        - name: varlog
          mountPath: /var/log
        - name: varlogcontainers
          mountPath: /var/log/containers
          readOnly: true
        - name: varlogpods
          mountPath: /var/log/pods
          readOnly: true
        - name: fluentd-config
          mountPath: /fluentd/etc/kubernetes.conf
          subPath: kubernetes.conf
      terminationGracePeriodSeconds: 30
      volumes:
      - name: varlog
        hostPath:
          path: /var/log
      - name: varlogcontainers
        hostPath:
          path: /var/log/containers
      - name: varlogpods
        hostPath:
          path: /var/log/pods
      - name: fluentd-config
        configMap:
          name: fluentd-config
          items:
            - key: kubernetes.conf
              path: kubernetes.conf

具体的configMap如下:
 

apiVersion: v1
kind: ConfigMap
metadata:
  name: fluentd-config
  namespace: kube-logging31
data:
  kubernetes.conf: |
    <source>
      @type tail
      @id in_tail_container_logs
      path /var/log/containers/*.log
      pos_file /var/log/fluentd-containers.log.pos
      tag "#{ENV['FLUENT_CONTAINER_TAIL_TAG'] || 'kubernetes.*'}"
      exclude_path "#{ENV['FLUENT_CONTAINER_TAIL_EXCLUDE_PATH'] || ''}"
      read_from_head true
      <parse>
        @type regexp
        expression /^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<flags>[^ ]+) (?<message>.*)$/
        time_format %Y-%m-%dT%H:%M:%S.%N%:z
      </parse>
    </source>
    <source>
      @type tail
      @id in_tail_pod_logs
      path /var/log/pods/**/*.log
      pos_file /var/log/fluentd-pods.log.pos
      tag kubernetes_pods.*
      read_from_head true
      <parse>
        @type regexp
        expression /^(?<time>[^ ]+) (?<stream>stdout|stderr) (?<flags>[^ ]+) (?<message>.*)$/
        time_format %Y-%m-%dT%H:%M:%S.%N%:z
      </parse>
    </source>
    <filter kubernetes.**>
      @type kubernetes_metadata
      kubernetes_url "https://kubernetes.default.svc"
      bearer_token_file "/var/run/secrets/kubernetes.io/serviceaccount/token"
      ca_file "/var/run/secrets/kubernetes.io/serviceaccount/ca.crt"
      cache_size 1000
      cache_ttl 300
    </filter>
    <filter kubernetes.**>
      @type concat
      key log
      partial_key logtag
      partial_value P
      separator ""
    </filter>
    <match kubernetes.**>
      @type elasticsearch
      host "#{ENV['FLUENT_ELASTICSEARCH_HOST'] || 'elasticsearch-svc.kube-logging31.svc.cluster.local'}"
      port "#{ENV['FLUENT_ELASTICSEARCH_PORT'] || 9200}"
      scheme "#{ENV['FLUENT_ELASTICSEARCH_SCHEME'] || 'http'}"
      logstash_format true
      logstash_prefix fluentd
      include_tag_key true
      type_name _doc
      logstash_dateformat %Y.%m.%d
      time_key @timestamp
      time_key_format %Y-%m-%dT%H:%M:%S.%N%:z
      reconnect_on_error true
      reload_connections true
      reload_on_failure true
      request_timeout 2147483648
    </match>

这个configmap还有问题,具体来讲识别不了kubernetes开头的数据标签。这个留到后面解决。

好的,您想了解如何使用Fluentd读写OSS,我可以为您提供一些基本信息。首先,Fluentd是一种开源的数据收集和转发引擎,它可以将来自不同数据源的数据进行聚合、过滤、转换和输出。而OSS(Object Storage Service)是阿里云提供的一种云端对象存储服务,可以用来存储和管理各种类型的非结构化数据,如图片、视频、文本等。下面是使用Fluentd读写OSS的基本步骤: 1. 安装Fluentd和相应的OSS插件。您可以在Fluentd的官网上下载和安装最新版本的Fluentd,然后使用以下命令安装OSS插件: ``` gem install fluent-plugin-oss ``` 2. 配置Fluentd。您需要在Fluentd的配置文件中添加OSS输出插件的相关信息,如OSS的访问密钥、Bucket名称、Region等。以下是一个示例配置: ``` <match oss.*> @type oss oss_key_id YOUR_ACCESS_KEY_ID oss_access_key YOUR_ACCESS_KEY_SECRET oss_bucket YOUR_BUCKET_NAME oss_region YOUR_BUCKET_REGION <buffer> @type memory flush_interval 10s </buffer> </match> ``` 3. 使用Fluentd向OSS写入数据。您可以使用Fluentd的in_tail插件来监控日志文件,并将其输出到OSS中。以下是一个示例配置: ``` <source> @type tail path /path/to/your/log/file pos_file /var/log/td-agent/your_log.pos tag oss.your_log format json <parse> @type json </parse> </source> <match oss.your_log> @type oss oss_key_id YOUR_ACCESS_KEY_ID oss_access_key YOUR_ACCESS_KEY_SECRET oss_bucket YOUR_BUCKET_NAME oss_region YOUR_BUCKET_REGION <buffer> @type memory flush_interval 10s </buffer> </match> ``` 4. 从OSS中读取数据。您可以使用Fluentd的in_oss插件来读取OSS中的数据,并将其输出到其他数据源中。以下是一个示例配置: ``` <source> @type oss oss_key_id YOUR_ACCESS_KEY_ID oss_access_key YOUR_ACCESS_KEY_SECRET oss_bucket YOUR_BUCKET_NAME oss_prefix YOUR_OBJECT_PREFIX oss_endpoint YOUR_BUCKET_ENDPOINT format json tag oss.your_data </source> <match oss.your_data> @type stdout </match> ``` 这些是使用Fluentd读写OSS的基本步骤,您可以根据自己的需求进行配置和调整。需要注意的是,使用Fluentd读写OSS可能会产生一定的费用,具体费用和计费方式可以参考阿里云的官方文档。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值