官方文档

官方配置文件

k8s-filebeat.yaml
[root@k8s-master ~]# cat > k8s-filebeat.yaml << eric
---
# 创建命名空间
kind: Namespace
apiVersion: v1
metadata:
   # 不可以使用 下划线,
   name: filebeat-namespace
   labels:
     name: filebeat-namespace


---
# 定义一个\`name=filebeat-config\`的configMap,用于指定 filebeat output
apiVersion: v1
kind: ConfigMap
# 标准 object 的元数据
metadata:
  name: filebeat-config
  namespace: filebeat-namespace
  labels:
    k8s-app: filebeat
data:
  filebeat.yml: |-
    filebeat.config:
      inputs:
        # Mounted \`filebeat-inputs\` configmap:
        path: \${path.config}/inputs.d/*.yml
        # Reload inputs configs as they change:
        reload.enabled: false

      modules:
        path: \${path.config}/modules.d/*.yml
        # Reload module configs as they change:
        reload.enabled: false

    # To enable hints based autodiscover, remove \`filebeat.config.inputs\` configuration and uncomment this:
    #filebeat.autodiscover:
    #  providers:
    #    - type: kubernetes
    #      hints.enabled: true

    #processors:
    #  - add_cloud_metadata:

    #cloud.id: \${ELASTIC_CLOUD_ID}
    #cloud.auth: \${ELASTIC_CLOUD_AUTH}

    # ElasticSearch的配置
    #output.elasticsearch:
    #  hosts: ['\${ELASTICSEARCH_HOST:elasticsearch}:\${ELASTICSEARCH_PORT:9200}']
    #  username: \${ELASTICSEARCH_USERNAME}
    #  password: \${ELASTICSEARCH_PASSWORD}

    # redis的配置
    output.redis:
      hosts: ['\${REDIS_HOST}']
      password: '\${REDIS_PASSWORD}'
      key: '\${REDIS_KEY}'
      db: '\${REDIS_DB}'
      dataytpe: '\${REDIS_DATAYTPE}'
      # 零为一直不超时
      timeout: 0

---
# 定义一个\`name=filebeat-inputs\`的configMap,用于指定 filebeat input
apiVersion: v1
kind: ConfigMap
metadata:
  name: filebeat-inputs
  namespace: filebeat-namespace
  labels:
    k8s-app: filebeat
data:
  kubernetes.yml: |-
    - type: docker
      # 设置指定与指定模式不匹配的任何行都属于上一行
      # filebeat抓取的日志中,从头匹配 key为message对应的内容
      multiline.pattern: '^\[|^[0-9]{4}-[0-9]{2}-[0-9]{2}|^[0-9]{1,3}\.[0-9]{1,3}'
      # 是否匹配 true为将匹配的内容追加到上一行
      multiline.negate: true
      # after表示 追加到文件后面
      multiline.match: after
      multiline.timeout: 15s
      tags: ['prod-filebeat']
      containers.ids:
      - "*"
      processors:
        # 为每个 event 添加来自哪个 pod 的注解
        - add_kubernetes_metadata:
            # true: filebeat 将运行在 pod 中,否则以进程方式运行在节点上
            in_cluster: true


---
# 将 filebeat 配置为 DaemonSet
apiVersion: extensions/v1beta1
kind: DaemonSet
metadata:
  name: filebeat
  namespace: filebeat-namespace
  labels:
    k8s-app: filebeat
# DaemonSetSpec
spec:
  template:
    metadata:
      labels:
        k8s-app: filebeat
    # PodSpec
    spec:
      # 指定运行在当前 pod 的 Service Account
      serviceAccountName: filebeat
      # 优雅的终止pod所需要的时间,单位秒(0表示立即删除,nil表示使用默认宽限期)
      # 宽限期是向pod中运行的进程发送终止信号到进程被终止的时间。
      # 需要设置此值的时间大于你的进程的预期清理时间。默认为30秒
      terminationGracePeriodSeconds: 30
      # 配置运行在pod中的container
      containers:
      - name: filebeat
        image: docker.elastic.co/beats/filebeat:7.2.0
        # 向入口点传送的参数,如果没有设置则使用docker images 的 CMD
        args: [
          "-c", "/etc/filebeat.yml",
          "-e",
        ]
        # 配置环境变量,在其他配置里面可以通过 \${VAR} 获取到
        env:
        # redis 环境变量
        - name: REDIS_HOST
          value: "k8s.dev-share.top:6379"
        - name: REDIS_PASSWORD
          value: "maosiyu1987"
        - name: REDIS_KEY
          value: "sinoeyes-io"
        - name: REDIS_DB
          value: "4"
        - name: REDIS_DATAYTPE
          value: "list"

        # es 环境变量
        #- name: ELASTICSEARCH_HOST
        #  value: elasticsearch
        #- name: ELASTICSEARCH_PORT
        #  value: "9200"
        #- name: ELASTICSEARCH_USERNAME
        #  value: elastic
        #- name: ELASTICSEARCH_PASSWORD
        #  value: changeme
        #- name: ELASTIC_CLOUD_ID
        #  value:
        #- name: ELASTIC_CLOUD_AUTH
        #  value:
        # securityContext定义Pod或Container的权限和访问控制设置
        securityContext:
          # UID 用于运行容器进程的入口点。
          # 如果没有指定,默认为镜像指定的用户。如果\`SecurityContext\`和
          # \`PodSecurityContext\`都指定了,以\`SecurityContext\`为准
          runAsUser: 0
        # 分配容器所需的资源
        resources:
          # 设置允许的最大资源
          limits:
            # 内存: 可以使用的单位E、P、T、G、M、K,另外 Mi 和 M 的含义相同
            memory: 200Mi
          # 设置所需的最小资源,如果省略该配置项则默认为 limits
          requests:
            # 转换为 millicore 值并乘以100。
            # 容器每100毫秒可以使用的cpu时间总量。
            cpu: 100m
            memory: 100Mi
        # 把 volume mount 到 container 的 filesystem
        volumeMounts:
        # 将 name=\`config\` 的 volume mount 到 container 的 /etc/filebeat.yml,并设为只读
        - name: config
          mountPath: /etc/filebeat.yml
          readOnly: true
          # 应安装容器卷的卷内路径,默认为""(卷的根路径)
          subPath: filebeat.yml
        - name: inputs
          mountPath: /usr/share/filebeat/inputs.d
          readOnly: true
        - name: data
          mountPath: /usr/share/filebeat/data
        - name: varlibdockercontainers
          mountPath: /var/lib/docker/containers
          readOnly: true
      # 属于该 pod 的容器可以 mount 的 volume 列表
      volumes:
      # 给 volume 取个名字
      - name: config
        # 引用一个 configMap object 填充 volume
        configMap:
          # 设置创建文件时默认的文件读写权限
          # 必须是0~0777之间的值。默认为 0644
          defaultMode: 0600
          # 要引用的 configMap object 的 name
          name: filebeat-config
      - name: varlibdockercontainers
        # 宿主机直接暴露给 container 的预先存在的文件或目录。
        hostPath:
          # 宿主机上的路径,如果是链接文件,它会找到真实的文件路径。
          path: /var/lib/docker/containers
      - name: inputs
        configMap:
          defaultMode: 0600
          name: filebeat-inputs
      # data folder stores a registry of read status for all files, so we don't send everything again on a Filebeat pod restart
      - name: data
        hostPath:
          path: /var/lib/filebeat-data
          # 默认为"",在 mount hostPath volume 之前不会执行任何检查
          # DirectoryOrCreate 代表如果给定路径中不存在,则会根据需要创建一个空目录(0755),
          # 并与 Kubelet 具有相同的组和所有权
          # 其他的 type 参考:https://kubernetes.io/docs/concepts/storage/volumes/#hostpath
          type: DirectoryOrCreate


---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: filebeat
# 主题包含对该角色适用的对象的引用
subjects:
- kind: ServiceAccount
  name: filebeat
  namespace: filebeat-namespace
# 只能引用全局 namespace 中的 clusterRole。如果无法解析 roleRef,则 Authorizer 一定会返回错误。
roleRef:
  kind: ClusterRole
  name: filebeat
  apiGroup: rbac.authorization.k8s.io

---
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: filebeat
  labels:
    k8s-app: filebeat
# 此 ClusterRole 的所有策略规则
rules:
  # 包含 resources 的 apiGroup 的名字,如果指定了多个 apiGroup,
  # 那么对于任何一个 apiGroup 资源请求的任何操作都会允许
  # "" indicates the core API group
- apiGroups: [""]
  # 此 rule 适用的资源列表,\`ResourceAll\`代表所有资源
  resources:
  - namespaces
  - pods
  # 此 rule 适用的所有资源类型和属性限制的动词列表,VerbAll代表所有动词
  verbs:
  - get
  - watch
  - list

---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: filebeat
  namespace: filebeat-namespace
  labels:
    k8s-app: filebeat
eric

[root@k8s-master ~]#
分类: K8s

发表评论

电子邮件地址不会被公开。 必填项已用*标注