国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

k8s與log--利用fluent bit收集k8s日志

betacat / 1582人閱讀

摘要:是一個開源和多平臺的,它允許您從不同的來源收集數據日志,統一并將它們發送到多個目的地。例如日志收集日志分析主要講部署的集群。日志主要有和的日志,一般采用部署,自然而然就是要支持格式日志的采集。業務落盤的日志。部署方案采取部署。

前言

收集日志的組件多不勝數,有ELK久負盛名組合中的logstash, 也有EFK組合中的filebeat,更有cncf新貴fluentd,另外還有大數據領域使用比較多的flume。本次主要說另外一種,和fluentd一脈相承的fluent bit。

Fluent Bit是一個開源和多平臺的Log Processor and Forwarder,它允許您從不同的來源收集數據/日志,統一并將它們發送到多個目的地。它與Docker和Kubernetes環境完全兼容。Fluent Bit用C語言編寫,具有可插拔的架構,支持大約30個擴展。它快速輕便,通過TLS為網絡運營提供所需的安全性。

之所以選擇fluent bit,看重了它的高性能。下面是官方貼出的一張與fluentd對比圖:

Fluentd Fluent Bit
Scope Containers / Servers Containers / Servers
Language C & Ruby C
Memory ~40MB ~450KB
Performance High Performance High Performance
Dependencies Built as a Ruby Gem, it requires a certain number of gems. Zero dependencies, unless some special plugin requires them.
Plugins More than 650 plugins available Around 35 plugins available
License Apache License v2.0 Apache License v2.0

在已經擁有的插件滿足需求和場景的前提下,fluent bit無疑是一個很好的選擇。

fluent bit 簡介

在使用的這段時間之后,總結以下幾點優點:

支持routing,適合多output的場景。比如有些業務日志,或寫入到es中,供查詢。或寫入到hdfs中,供大數據進行分析。

fliter支持lua。對于那些對c語言hold不住的團隊,可以用lua寫自己的filter。

output 除了官方已經支持的十幾種,還支持用golang寫output。例如:fluent-bit-kafka-output-plugin

k8s日志收集 k8s日志分析

主要講kubeadm部署的k8s集群。日志主要有:

kubelet和etcd的日志,一般采用systemd部署,自然而然就是要支持systemd格式日志的采集。filebeat并不支持該類型。

kube-apiserver等組件stderr和stdout日志,這個一般輸出的格式取決于docker的日志驅動,一般為json-file。

業務落盤的日志。支持tail文件的采集組件都滿足。這點不在今天的討論范圍之內。

部署方案

fluent bit 采取DaemonSet部署。 如下圖:

部署yaml
---

apiVersion: v1
kind: Service
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
    kubernetes.io/name: "Elasticsearch"
spec:
  ports:
  - port: 9200
    protocol: TCP
    targetPort: db
  selector:
    k8s-app: elasticsearch-logging

---

# RBAC authn and authz
apiVersion: v1
kind: ServiceAccount
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: elasticsearch-logging
  labels:
    k8s-app: elasticsearch-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
rules:
- apiGroups:
  - ""
  resources:
  - "services"
  - "namespaces"
  - "endpoints"
  verbs:
  - "get"
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  namespace: kube-system
  name: elasticsearch-logging
  labels:
    k8s-app: elasticsearch-logging
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
subjects:
- kind: ServiceAccount
  name: elasticsearch-logging
  namespace: kube-system
  apiGroup: ""
roleRef:
  kind: ClusterRole
  name: elasticsearch-logging
  apiGroup: ""
---
# Elasticsearch deployment itself
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: elasticsearch-logging
  namespace: kube-system
  labels:
    k8s-app: elasticsearch-logging
    version: v6.3.0
    kubernetes.io/cluster-service: "true"
    addonmanager.kubernetes.io/mode: Reconcile
spec:
  serviceName: elasticsearch-logging
  replicas: 2
  selector:
    matchLabels:
      k8s-app: elasticsearch-logging
      version: v6.3.0
  template:
    metadata:
      labels:
        k8s-app: elasticsearch-logging
        version: v6.3.0
        kubernetes.io/cluster-service: "true"
    spec:
      serviceAccountName: elasticsearch-logging
      containers:
      - image: k8s.gcr.io/elasticsearch:v6.3.0
        name: elasticsearch-logging
        resources:
          # need more cpu upon initialization, therefore burstable class
          limits:
            cpu: 1000m
          requests:
            cpu: 100m
        ports:
        - containerPort: 9200
          name: db
          protocol: TCP
        - containerPort: 9300
          name: transport
          protocol: TCP
        volumeMounts:
        - name: elasticsearch-logging
          mountPath: /data
        env:
        - name: "NAMESPACE"
          valueFrom:
            fieldRef:
              fieldPath: metadata.namespace
      # Elasticsearch requires vm.max_map_count to be at least 262144.
      # If your OS already sets up this number to a higher value, feel free
      # to remove this init container.
      initContainers:
      - image: alpine:3.6
        command: ["/sbin/sysctl", "-w", "vm.max_map_count=262144"]
        name: elasticsearch-logging-init
        securityContext:
          privileged: true
  volumeClaimTemplates:
  - metadata:
      name: elasticsearch-logging
      annotations:
        volume.beta.kubernetes.io/storage-class: gp2
    spec:
      accessModes:
        - "ReadWriteOnce"
      resources:
        requests:
          storage: 10Gi

---
apiVersion: v1
kind: ConfigMap
metadata:
  name: fluent-bit-config
  namespace: kube-system
  labels:
    k8s-app: fluent-bit
data:
  # Configuration files: server, input, filters and output
  # ======================================================
  fluent-bit.conf: |
    [SERVICE]
        Flush         1
        Log_Level     info
        Daemon        off
        Parsers_File  parsers.conf
        HTTP_Server   On
        HTTP_Listen   0.0.0.0
        HTTP_Port     2020

    @INCLUDE input-kubernetes.conf
    @INCLUDE filter-kubernetes.conf
    @INCLUDE output-elasticsearch.conf

  input-kubernetes.conf: |
    [INPUT]
        Name              tail
        Tag               kube.*
        Path              /var/log/containers/*.log
        Parser            docker
        DB                /var/log/flb_kube.db
        Mem_Buf_Limit     5MB
        Skip_Long_Lines   On
        Refresh_Interval  10

    [INPUT]
        Name           systemd
        Tag             host.*
        Systemd_Filter  _SYSTEMD_UNIT=kubelet.service
        Path            /var/log/journal
        DB              /var/log/flb_host.db

  filter-kubernetes.conf: |
    [FILTER]
        Name                kubernetes
        Match               kube.*
        Kube_URL            https://kubernetes.default.svc.cluster.local:443
        Merge_Log           On
        K8S-Logging.Parser  On
        K8S-Logging.Exclude On
    [FILTER]
        Name                kubernetes
        Match               host.*
        Kube_URL            https://kubernetes.default.svc.cluster.local:443
        Merge_Log           On
        Use_Journal         On

  output-elasticsearch.conf: |
    [OUTPUT]
        Name            es
        Match           *
        Host            ${FLUENT_ELASTICSEARCH_HOST}
        Port            ${FLUENT_ELASTICSEARCH_PORT}
        Logstash_Format On
        Retry_Limit     False

  parsers.conf: |
    [PARSER]
        Name   apache
        Format regex
        Regex  ^(?[^ ]*) [^ ]* (?[^ ]*) [(?
總結

真實場景的日志收集比較復雜,在日志量大的情況下,一般要引入kafka。
此外關于注意日志的lograte。一般來說,docker是支持該功能的。可以通過下面的配置解決:

cat >  /etc/docker/daemon.json <

在k8s中運行的業務日志,不僅要考慮清除過時的日志,還要考慮新增pod的日志的收集。這個時候,往往需要在fluent bit上面再包一層邏輯,獲取需要收集的日志路徑。比如log-pilot。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/33104.html

相關文章

  • k8slog--利用fluent bit收集k8s日志

    摘要:是一個開源和多平臺的,它允許您從不同的來源收集數據日志,統一并將它們發送到多個目的地。例如日志收集日志分析主要講部署的集群。日志主要有和的日志,一般采用部署,自然而然就是要支持格式日志的采集。業務落盤的日志。部署方案采取部署。 前言 收集日志的組件多不勝數,有ELK久負盛名組合中的logstash, 也有EFK組合中的filebeat,更有cncf新貴fluentd,另外還有大數據領域...

    CoffeX 評論0 收藏0
  • k8slog--利用lua為fluent bit添加一個filter

    摘要:最近我們遇到奇葩的需求,不得不利用編寫的,來滿足需求。所以找到官方的代碼倉庫,下來,稍作更改。新的如下注意增加了。使用姿勢使用比較簡單的。遇到問題和使用一些不明白的地方,解決起來費力。官方文檔寫的也不夠詳細,只是描述了個大概。 前言 之前我們介紹過fluent bit這個日志收集神器。最近我們遇到奇葩的需求,不得不利用lua編寫fluent bit的filter,來滿足需求。 首先介紹...

    wing324 評論0 收藏0
  • k8slog--利用lua為fluent bit添加一個filter

    摘要:最近我們遇到奇葩的需求,不得不利用編寫的,來滿足需求。所以找到官方的代碼倉庫,下來,稍作更改。新的如下注意增加了。使用姿勢使用比較簡單的。遇到問題和使用一些不明白的地方,解決起來費力。官方文檔寫的也不夠詳細,只是描述了個大概。 前言 之前我們介紹過fluent bit這個日志收集神器。最近我們遇到奇葩的需求,不得不利用lua編寫fluent bit的filter,來滿足需求。 首先介紹...

    learn_shifeng 評論0 收藏0
  • k8s日志--采用golang實現Fluent Bit的output插件

    摘要:采用實現的插件前言目前社區日志采集和處理的組件不少,之前方案中的,社區中的,方案中的以及大數據用到比較多的。適合采用的方案,實現日志中心化收集的方案。主要負責采集,負責處理和傳送。 采用golang實現Fluent Bit的output插件 前言 目前社區日志采集和處理的組件不少,之前elk方案中的logstash,cncf社區中的fluentd,efk方案中的filebeat,以及大...

    岳光 評論0 收藏0
  • k8s日志--采用golang實現Fluent Bit的output插件

    摘要:采用實現的插件前言目前社區日志采集和處理的組件不少,之前方案中的,社區中的,方案中的以及大數據用到比較多的。適合采用的方案,實現日志中心化收集的方案。主要負責采集,負責處理和傳送。 采用golang實現Fluent Bit的output插件 前言 目前社區日志采集和處理的組件不少,之前elk方案中的logstash,cncf社區中的fluentd,efk方案中的filebeat,以及大...

    binta 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<