如何一步一步搭建基于ELK的容器化日志采集服務

      網友投稿 1239 2022-05-29

      1 容器化日志收集方案

      日志系統的重要度不言而喻,開發、測試、用戶體驗等都與其密切相關。本文以k8s下ELKB日志采集方案為例,詳細介紹如何在華為云上一步一步搭建基于ELK的容器化采集服務,并分析在日志采集業務中可能遇到的一些問題。

      1.1 ELKB方案說明

      日志包含系統日志、應用服務日志、訪問日志等,以往若需要查看日志需登錄系統設備,通過vim、cat等方式查看,操作繁瑣、定位問題困難。費事費力還不能達到理想的效果。因此需要一個集中的統一日志管理分析平臺,該系統具有分析統計聚合等功能,并具有用戶友好的可視化界面。開源實時分析日志ELK應用而生。

      整體日志采集pipeline如下圖所示。kubernetes支持兩種部署模式:Deployment模式及Daemonset模式。本文使用DaemonSet的方式對每個k8snode部署日志監控收集程序loggingagent(filebeat),并將監控日志實時存儲至高性能消息隊列kafka。然后使用logstash對kafka日志消息進行消費,同步信息至ES。對于用戶可以通過kibana可視化的方式進行數據查詢。特別的,考慮到filebeat與k8s兼容的api訪問能力,在部署過程中注意需要指定filebeat用戶認證。

      1.1 日志方案接入組網流程說明

      確保已存在可用的虛擬私有云和子網,創建方法請參考創建虛擬私有云和子網。如果您已有虛擬私有云和子網,可重復使用,不需要多次創建。注意根據具體使用合理規劃vpc和子網網段,防止網絡沖突。值得一提的是,在該日志方案中需要保證各云服務(CCE、DMS、CSS、Logstash)均處于同一VPC下,否則會出現部分服務連接不通的情況。

      確保存在可用的安全組,創建方法,請參考創建安全組。如果您已有安全組,可重復使用,不需要多次創建。在安全組的配置中需要開放以下端口。

      確保各云服務資源配額充足(CCE、DMS、CSS)

      在CCE容器環境中完成需要客戶業務的微服務部署,部署方式采用deployment。在k8s中部署deployment及日志收集配置參看:k8s部署deployment配置

      在CCE容器中使用deamonset為各個k8s節點部署logging-agent(filebeat)。在k8s中部署daemonset及相關配置參看:k8S部署daemonset配置

      申請kafka實例,并完成相關配置。具體配置方式參看:kafka實例申請及配置

      申請并安裝logstash實例,根據具體業務完成logstash相關配置。請參看:logstash安裝及配置

      申請CSS實例,并通過kibana完成日志展示。請參看:CSS實例申請及配置。

      2 K8S部署deployment配置

      2.1 CCE(云容器引擎)實例申請

      如何一步一步搭建基于ELK的容器化日志采集服務

      完整的云容器引擎使用流程包含以下步驟:

      注冊華為云賬號,授予IAM用戶相應的權限。華為云注冊賬號無需授權即可擁有所有權限,由華為云賬號創建的IAM子用戶需要授予相應的權限才能使用CCE,具體請參見權限管理。

      創建kubernetes集群。創建首個集群前,必須先確保已存在虛擬私有云,否則無法創建集群。若已有虛擬私有云,可重復使用,無需重復創建。虛擬私有云為CCE集群提供一個隔離的、用戶自主配置和管理的虛擬網絡環境。創建方法請參見創建虛擬私有云和子網。創建集群前,請提前規劃好容器網段和服務網段。網段參數在集群創建后不可更改,需要重新創建集群才能調整,請謹慎選擇。

      具體創建界面如下:

      首先進入cce服務界面,選擇購買kubernetes集群,在彈出界面中可以選擇混合集群和鯤鵬集群,本文采用混合集群作為演示。單擊混合集群的購買按鈕后,進入相關配置選項,根據使用需求分為包年包月和按需計費。其中需要注意請提前規劃好容器的網段和服務網段,以免后續出現網絡不通或其他異常情況。

      完成相關配置后,點擊創建節點按鈕進入節點創建頁面,其中可以選擇目標節點規格,根據預估實際使用量來挑選合適的節點規格,并且在集群登錄方式上可以選擇密碼和密鑰對兩種方式。

      設定完成后,單擊下一步:安裝插件,插件安裝可以安裝默認,如有額外需求可以根據具體需求進行插件安裝,安裝完成后確認配置,安裝過程需5-6分鐘,至此CCE實例申請完成。

      2.2 K8S 部署 deployment 及日志收集配置

      在CCE容器服務中支持多種部署方式,包括鏡像部署、yaml文件部署等。本節將對這兩種方式分別進行簡述與演示。

      在CCE左側導航欄中單擊“工作負載>無狀態負載Deployment”,單擊頁面右上角的“創建無狀態工作負載”。

      在彈出的界面中,輸入想要創建的deployment名字及所屬集群名。這里以nginx為例,選擇工作負載名稱為nginx,并選擇該負載所屬集群名稱,然后選擇好部署的命名空間,選擇實例數量后,點擊容器配置。

      在容器設置頁面,點擊添加容器。其中在選擇鏡像時,可以選擇開源鏡像,若開源鏡像中不滿足實際需求,可以自行制作第三方鏡像,并在該頁面中選擇制作好的鏡像。

      進行容器日志配置。選擇容器日志,點擊添加日志策略,在此處設置容器日志的存儲路徑,這里提供了兩種日志收集策略,分別是添加主機路徑及容器路徑。主機路徑(HostPath)的方式將主機路徑掛載到指定的容器路徑中,用戶可以在節點的主機路徑中查看到容器輸出在掛載路徑中的日志信息。選擇容器路徑,則是采用emptyDir的方式,將節點的臨時路徑掛載到指定的路徑下,無需額外指定節點日志路徑。一般情況下,推薦采用容器路徑方式進行部署。

      選擇確定后,按照標準步驟,執行工作負載訪問設置,點擊添加服務,在本例中,采用nginx服務作為部署案例,容器端口為80,在端口配置中進行配置即可。

      單擊“下一步:高級設置”,高級設置不需要配置,單擊“創建”。

      待工作負載創建完成后,單擊“返回工作負載列表”,在工作負載列表中可查看到運行中的工作負載。至此基于容器鏡像部署的工作負載部署完成。

      具體使用詳情可參看:鏡像創建無狀態工作負載(Nginx)

      在CCE中,提供了通過yaml文件進行deployment部署的方式。仍然以nginx為例,最基礎的yaml文件如下,其中需要著重注意幾個字段:

      Namespace: 表示部署的命名空間。

      Volumes應與mountVolumes的name保持一一對應。其中mountVolumes表示容器掛載路徑。

      示例如下,文件名稱為nginx-example.yaml:

      apiVersion: apps/v1 kind: Deployment metadata: name: nginx namespace: xxxx # 需修改為目標命令空間 spec: replicas: 1 selector: matchLabels: app: nginx strategy: type: RollingUpdate template: metadata: labels: app: nginx spec: volumes: - name: vol-161175527464881854 # 配置了容器部署, 采用emptyDir模式 emptyDir: {} imagePullSecrets: - name: default-secret containers: - name: nginx image: 'elastic/filebeat:7.6.2' # 這里采用了filebeat鏡像用于測試, 實際使用時替換為實際鏡像。 resources: {} volumeMounts: - name: vol-161175527464881854 mountPath: /opt/logs # 掛載路徑 policy: logs: rotate: Hourly annotations: pathPattern: '*.log' # 表示收集.log為結尾的 terminationMessagePath: /dev/termination-log terminationMessagePolicy: File imagePullPolicy: Always

      部署方式演示:

      點擊左側資源管理中的集群管理,選擇命令行工具,CCE提供了兩種命令行工具分別為webtemernal和kubectl。本文以web-terminal作為測試工具。

      在首次點擊web-terminal時會提示需要安裝web-terminal插件。按照提示完成相應插件安裝,值得注意的是需要為web-terminal綁定彈性IP用于外部連接。

      具體界面如下:

      點擊訪問鏈接,進入web-terminal,進入后通過vi/touch等方式創建上文中的nginxexample.yaml文件。執行命令kubectlapply–fnginx-example.yaml來完成相關deployment部署。

      執行完成后,同樣可以在工作負載頁面中看到deployment方式部署的nginx。

      同時在web-terminal通過命令kubectl get pod –n {namespace}來查看容器部署情況,示例如下:

      至此,k8s容器化部署deployment完成。

      3 K8S部署daemonSet配置

      在上節中完成了deployment容器部署及其容器日志的收集配置。本節主要針對k8s中的daemonset部署方式進行深度分析。

      整體部署方式與deployment部署類似。本文以daemonset部署filebeat為例,一般而言,k8s中filebeat部署大致必須包含有幾個部分:

      ConfigMap

      為了降低耦合度及后續的維護難度,創建filebeat容器的時候將filebeat.yml配置文件以configmap的方式實現。用來指定filebeat內部配置(如監控目錄、輸出類型、是否包含k8s元數據等)

      在filebeat.inputs下可以定義監控日志的路徑,必須包含有type及paths字段。

      ConfigMap樣例,需要注意的幾個字段:

      Namespace: 配置為目標容器的命名空間

      Paths: 配置為filebeat收集日志的路徑,若需要采集多個目錄,增加inputs即可。

      Processors: 配置日志收集處理器,如需要采集k8s容器信息,通過-add_kubernetes_metadata增加元數據信息。

      Output:filbeat支持日志輸出至ES、Log

      apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: xxxx # 配置為容器的命名空間 labels: k8s-app: filebeat data: filebeat.yml: |- filebeat.inputs: - type: log enable: true # 配置filebeat收集日志路徑 paths: - /var/lib/*.log processors: - add_kubernetes_metadata: default_indexers.enabled: false default_matchers.enabled: false # 配置輸出至kafka output.kafka: # initial brokers for reading cluster metadata hosts: ["xxxx:9092", "xxx:9092", "xxx:9092"] # message topic selection + partitioning topic: 'xxxxxxx' partition.round_robin: reachable_only: false logging.level: debug

      daemonset 方式部署

      使用daemonset方式部署filebeat,其中有兩個較為重要的參數:volumeMounts及volume,分別指定了filebeat及容器節點的映射路徑,其字段為一一對應。

      注意以下字段配置:

      Namespace: 配置為目標命名空間

      VolumesMount:表示filebeat服務收集日志路徑,與volume字段保持一致

      Volume:表示容器日志收集路徑

      apiVersion: apps/v1 kind: DaemonSet # 指定daemonset部署 metadata: name: filebeat namespace: xxxx # 指定namespace labels: k8s-app: filebeat spec: selector: matchLabels: k8s-app: filebeat template: metadata: labels: k8s-app: filebeat spec: serviceAccountName: filebeat terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirstWithHostNet containers: - name: filebeat image: elastic/filebeat:7.6.2 # 指定filebeat鏡像版本 args: [ "-c", "/etc/filebeat.yml", "-e", ] env: - 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: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName securityContext: runAsUser: 0 # If using Red Hat OpenShift uncomment this: # privileged: true resources: limits: memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: # 定義卷綁定,固定字段不建議修改,表示filebeat日志收集路徑。建議在后增加額外日志收集目錄 - name: config mountPath: /etc/filebeat.yml readOnly: true subPath: filebeat.yml - name: data mountPath: /usr/share/filebeat/data - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: varlog mountPath: /var/log readOnly: true - name: pod-test mountPath: /var/lib/kubelet/pods readOnly: true volumes: # 與volumeMount字段保持一一對應,表示容器日志收集路徑。 - name: config configMap: defaultMode: 0640 name: filebeat-config - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log - name: pod-test hostPath: path:/mnt/paas/kubernetes/kubelet/pods type:DirectoryOrCreate # 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: # When filebeat runs as non-root user, this directory needs to be writable by group (g+w). path: /var/lib/filebeat-data type: DirectoryOrCreate

      在k8s中可以通過非常易用的yaml文件部署方式進行工作負載部署,這里采用的filebeat的采集器,采用的是7.6.2版本,因為filebeat是對k8s有支持,可以連接api給pod日志打標簽,所以yaml中需要進行認證,最后在配置文件中對獲取數據采集了之后輸入到kafka中,已在yaml中配置好,值得一提的是,該yaml文件中可以根據具體微服務的來綁定不同的日志路徑,在filebeat中通過volume及volumeMount字段進行適配。

      以下給出基于daemonset方式完整版示例filebeat.yml,在該yaml文件中配置了namespace為ops-monit,filebeat收集/var/lib/kubelet/pods/*/volumes/kubernetes.io~empty-dir/**/*.log該目錄下的所有.log文件,其中**表示匹配多級目錄,*表示匹配單級目錄,通過配置/var/lib/docker/container/**.log來獲取k8s的標準輸出日志。通過multiLine*參數配置了多行顯示,通過fields字段來指定從該目錄下收集日志的固定標識用于日志分類處理;在processor字段下配置了收集k8s容器信息,如podId,最終輸出至kafka。注意在后還指定了filebeat用戶認證:

      apiVersion: v1 kind: ConfigMap metadata: name: filebeat-config namespace: ops-monit labels: k8s-app: filebeat data: filebeat.yml: |- filebeat.inputs: - type: log enable: true paths: - /var/lib/kubelet/pods/*/volumes/kubernetes.io~empty-dir/**/*.log # 配置多行顯示 multiline.type: pattern multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after fields: logtype: javalog - type: log enable: true paths: - /var/lib/docker/container/*/*.log fields: logtype: stdlog processors: - add_kubernetes_metadata: default_indexers.enabled: false default_matchers.enabled: false indexers: - pod_uid: matchers: - logs_path: logs_path: '/var/lib/kubelet/pods/' resource_type: 'pod' # output.logstash: # hosts: ["121.37.15.7:5044"] # logging.level: debug output.kafka: # initial brokers for reading cluster metadata hosts: ["192.168.0.168:9092", "192.168.0.204:9092", "192.168.0.122:9092"] # message topic selection + partitioning topic: 'topic-cassmall' partition.round_robin: reachable_only: false --- apiVersion: apps/v1 kind: DaemonSet metadata: name: filebeat namespace: ops-monit labels: k8s-app: filebeat spec: selector: matchLabels: k8s-app: filebeat template: metadata: labels: k8s-app: filebeat spec: serviceAccountName: filebeat terminationGracePeriodSeconds: 30 dnsPolicy: ClusterFirstWithHostNet containers: - name: filebeat image: elastic/filebeat:7.6.2 args: [ "-c", "/etc/filebeat.yml", "-e", ] env: - 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: - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName securityContext: runAsUser: 0 # If using Red Hat OpenShift uncomment this: # privileged: true resources: limits: memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: config mountPath: /etc/filebeat.yml readOnly: true subPath: filebeat.yml - name: data mountPath: /usr/share/filebeat/data - name: varlibdockercontainers mountPath: /var/lib/docker/containers readOnly: true - name: varlog mountPath: /var/log readOnly: true - name: pod-test mountPath: /var/lib/kubelet/pods readOnly: true volumes: - name: config configMap: defaultMode: 0640 name: filebeat-config - name: varlibdockercontainers hostPath: path: /var/lib/docker/containers - name: varlog hostPath: path: /var/log - name: pod-test hostPath: path:/mnt/paas/kubernetes/kubelet/pods type:DirectoryOrCreate # 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: # When filebeat runs as non-root user, this directory needs to be writable by group (g+w). path: /var/lib/filebeat-data type: DirectoryOrCreate --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: filebeat subjects: - kind: ServiceAccount name: filebeat namespace: ops-monit roleRef: kind: ClusterRole name: filebeat apiGroup: rbac.authorization.k8s.io --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: filebeat labels: k8s-app: filebeat rules: - apiGroups: [""] # "" indicates the core API group resources: - namespaces - pods verbs: - get - watch - list --- apiVersion: v1 kind: ServiceAccount metadata: name: filebeat namespace: ops-monit labels: k8s-app: filebeat ---

      部署成功之后可以在pod里查看相應filebeat容器信息。

      查看容器控件命令:

      kubectl get pod -n {namespace} -owide

      進入容器命令:

      kubectl exec -ti filebeat-xxx -n {namespace} bash

      至此,k8s部署daemonSet并配置應用日志收集完成。

      文末整理了配置過程中常見的一些問題,參考7常見問題。

      4 Kafka實例申請及配置

      Kafka是一個擁有高吞吐、可持久化、可水平擴展,支持流式數據處理等多種特性的分布式消息流處理中間件,采用分布式消息發布與訂閱機制,在日志收集、流式數據傳輸、在線/離線系統分析、實時監控等領域有廣泛的應用。

      在日志收集場景中,隨著Beats收集的每秒數據量越來越大,若直接使用ELK方案,面對超大型流量突襲,極有可能對logstash及es造成極大的業務壓力,最終導致系統崩盤。雖然可以增加Logstash節點數量,一定程度上提高每秒數據的處理速度,但是仍需考慮Elasticsearch可能無法承載這么大量的日志的寫入。此時我們可以考慮引入高性能消息隊列,對接入日志進行緩存,進而逐漸消費,減低系統的業務壓力。

      4.1 環境準備

      確保已存在可用的虛擬私有云和子網,創建方法請參考創建虛擬私有云和子網。如果您已有虛擬私有云和子網,可重復使用,不需要多次創建。值得注意的是,創建的VPC與使用的Kafka服務應在相同的區域。

      確保存在可用的安全組,創建方法,請參考創建安全組。如果您已有安全組,可重復使用,不需要多次創建。使用kafka服務時,必須放通以下安全組規則,其他規則請根據實際需要添加。

      4.2 創建kafka實例

      登錄分布式消息服務kafka(DMS)控制臺,購買kafka專享版,單擊頁面右上方的“購買kafka實例”,按照實際情況選擇計費模式。按照提示選擇好區域和可用區。

      在設置實例網絡環境信息中,在“虛擬私有云”下拉列表中,選擇已經創建好的虛擬私有云,子網及安全組,注意在日志場景中,需要保證各云服務資源(CSS、Logstash、kafka、CCE)在保持在同一個vpc下,且安全組需要放通上述端口。

      4.3 創建Topic實例

      Topic,即消息主題。創建Kafka專享版實例成功后,如果沒有開啟“Kafka自動創建Topic”,需要手動創建Topic,然后才能進行生產消息和消費消息。如果實例開啟了“Kafka自動創建Topic”,則該操作為可選,在進行生產時,會自動創建一個包含3個分區和3個副本的Topic。

      登錄分布式消息服務Kafka控制臺,選擇Kafka實例所在的區域。

      在“Kafka專享版”頁面,單擊Kafka專享版實例的名稱。進入實例詳情頁面。在“Topic管理”頁簽,單擊“創建Topic”。彈出“創建Topic”對話框。填寫Topic名稱和配置信息,單擊“確定”,完成創建Topic。

      5 Logstash及Elasticsearch安裝及配置

      Logstash和Elasticsearch已經集成為華為云云搜索服務,用戶可以直接在云搜索服務頁面創建Logstash和Elasticsearch不同版本的服務。用戶登錄華為云開通服務即可。

      需要注意,在日志系統搭建過程中,需要虛擬私有云、子網與其他組件保持暢通,安全組注意開放9200(ES)及9300(Kibana)=。

      具體使用參看: 云搜索服務 CSS

      6 日志系統接入常見問題

      6.1 如果在filebeat中需要配置多個日志收集路徑,每種日志都有不同的結構,如何做好分詞?

      在configMap中可以配置多個日志收集路徑,如果遇到按podId命名的文件夾,可以采用**(多級目錄)/*(單目錄)來適配。實例如下:

      filebeat.inputs: - type: log paths: - /var/log/containers/*.log - type: log paths: - /var/lib/pod/**/kubernetes~io-empty/*.log

      對于分詞,可以在logstash中通過grok采用正則過濾,實例格式為(?(.*)

      filter { grok { match => { "message" => [ "\[(?(%{MONTHNUM}/%{MONTHDAY}/%{YEAR})\s+%{TIME}\s+%{WORD})\]\s+%{BASE16NUM}\s+(? ([\w|\S]+))\s+%{WORD:LogLevel}\s+(?[\w|\W]*)" ] } remove_field => ["message"] } }

      6.2 Filebeat如何讀取多個日志目錄(收集標準輸出、spring日志、nginx訪問日志等)?

      主要涉及幾個部分:

      filebeat指定監控目錄

      filebeat.inputs: - type: log paths: - /var/log/containers/*.log - type: log paths: - /var/lib/pod/**/kubernetes~io-empty/*.log

      filebeat配置卷綁定注意name,一一對應

      volumeMounts: - name: filebeat-storage mountPath: /var/log/containers - name: varlibdockercontainers mountPath: /var/lib/docker/containers volumes: - name: filebeat-storage hostPath: path: /var/log/containers - name: varlogpods

      logstash配置日志輸入輸出

      deployment配置目錄綁定

      6.3 Filebeat如何區分不同日志來源?

      通過指定field

      filebeat.inputs: - type: log paths: - /var/log/containers/*.log - fields: logtype: container

      6.4 如何配置Logstash與Elasticsearch集群通信?

      最簡單的做法是把集群中所有的Elasticsearch節點的IP或者是hostname信息都在hosts中配上(它支持數組)。但是如果集群比較大,或者是集群節點變動頻繁的話,還需要維護這個hosts值,不太方便。比較推薦的做法是只配集群中某個節點的信息,可以是client節點,也可以是master節點或者是data節點。因為不管是哪個節點,都知道該它所在集群的信息(集群規模,各節點角色)。這樣,Logstash與任意節點通信時都會先拿到集群信息,然后再決定應該給哪個節點發送數據輸出請求

      output{ elasticsearch{ user => "test-logstash" password => "xxxxx" hosts => ["http://es-ip1:9200","http://es-ip2:9200","http://es-ip3:9200"] index => "testLog-%{+YYYYMMdd}" ilm_enabled => false manage_template => false } }

      6.5 filebeat如何多行日志合并展示(如java錯誤日志,輸出棧信息)?

      通過配置multiline*

      filebeat.inputs: - type: log enable: true paths: - /var/lib/kubelet/*.log multiline.type: pattern multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}' multiline.negate: true multiline.match: after

      6.6 如何輸出k8s節點信息(日志調試使用pod信息)?

      指定processors,在其中增加kubernets元數據

      processors: - add_kubernetes_metadata: default_indexers.enabled: false default_matchers.enabled: false indexers: - pod_uid: matchers: - logs_path: logs_path: '/var/lib/kubelet/pods/' resource_type: 'pod'

      6.7 logstash如何配置多個pipeline輸出?

      修改pipeline.yml,增加多個pipelineName

      指定logstash.yml文件路徑啟動,指定方式:/bin/logstash–path.settings/etc/logstash

      6.8 Filebeat文件編碼問題

      filebeat支撐不同文件格式的編碼如果發現es數據是亂碼可以查看filebeat導入的源文件格式,選擇正確的編碼格式輸出。

      filebeat.inputs: - type: log enabled: true encoding: utf-8 paths: - /opt/syslog/security/*.log

      文件常用的編碼有UTF-8,ISO-8859-1。

      ISO-8859-1編碼是單字節編碼,向下兼容ASCII,是許多歐洲國家使用的編碼標準。其編碼范圍是0x00-0xFF,0x00-0x7F之間完全和ASCII一致,0x80-0x9F之間是控制字符,0xA0-0xFF之間是文字符號。

      參考官方文檔:

      https://www.elastic.co/guide/en/beats/filebeat/7.10/filebeat-input-filestream.html#_encoding_3

      6.9 Filebeat 多進程啟動

      如果我們啟動多個filebeat收集不同的日志對接不同的logstash或者es。我們需要指定filebeat的啟動data.path路徑,data.path記錄filebeat設置的元數據信息,文件的偏移量位置等信息。不同的filebeat需要配置不同的data.path路徑。

      可以通過以下方式啟動避免path沖突。

      /filebeat -e -c config/service.yml -path.data=/opt/data/service_beat/

      啟動腳本參考

      #!bin/bash beatpath=/opt/filebeat-7.10.1 configpath=/opt/config pathdata=/opt/data logpath=/opt/logs mkdir -p /opt/logs #文件名稱 configs="springboot-log service-log" for config in ${configs} do echo "start filebeat for config [ ${config} ] task." nohup ${beatpath}/filebeat -e -c ${configpath}/${config}.yml -path.data=${pathdata}/${config}_beat/ >> ${logpath}/${config}_beat.log 2>&1 & done echo "start filebeat task success."

      Elasticsearch 云容器引擎 CCE 云搜索服務 CSS 分布式消息服務 Kafka

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:【國產動畫的巔峰 秦時明月】
      下一篇:Python語法速覽(二)
      相關文章
      亚洲男人天堂2022| 亚洲精品成人久久| 亚洲av无码专区国产不乱码| 亚洲天堂2016| 精品亚洲456在线播放| 亚洲大香伊人蕉在人依线| 亚洲日韩乱码中文无码蜜桃| 亚洲国产美女在线观看 | 国产尤物在线视精品在亚洲| 日韩欧美亚洲国产精品字幕久久久| 亚洲精品一卡2卡3卡四卡乱码 | 亚洲日本va中文字幕久久| 亚洲日韩激情无码一区| 亚洲国产成人高清在线观看| 亚洲产国偷V产偷V自拍色戒| 久久精品亚洲日本佐佐木明希| 亚洲激情中文字幕| 亚洲福利电影在线观看| 亚洲一区在线视频观看| 亚洲小说图区综合在线| 色偷偷亚洲男人天堂| 亚洲精品无码久久毛片| 亚洲一区二区三区在线观看精品中文 | 精品国产亚洲男女在线线电影| 亚洲一级片内射网站在线观看| 一本色道久久综合亚洲精品| 亚洲va中文字幕无码久久| 亚洲一区二区三区四区在线观看| 亚洲精品不卡视频| 亚洲情A成黄在线观看动漫软件| 亚洲国产成人久久一区二区三区| 男人的天堂亚洲一区二区三区 | 亚洲精品天堂无码中文字幕| 国产成人久久精品亚洲小说| 久久久久国产成人精品亚洲午夜 | 亚洲成人国产精品| 久久被窝电影亚洲爽爽爽| 亚洲伦另类中文字幕| 亚洲jjzzjjzz在线观看| 亚洲精品动漫免费二区| 亚洲无线一二三四区手机|