Filebeatを使用してオンラインdockerログを収集する

15398 ワード

Filebeat公式サイト:https://www.elastic.co/guide/en/beats/filebeat/index.html
警告:ここでは必ず自分がインストールしたfilebeatがどのバージョンなのかを確認してください.それから公式サイトの対応バージョンの下で、パラメータの設定を行います;踏み込みを避ける.
一、概説
  • FilebeatはBeatメンバーの1つであり、Go言語に基づいて開発され、依存を追加する必要はありません.Logstashfilebeatはログ収集の機能を持っていますが、filebeatはより軽量で、リソースの消費量が少ないため、filebeatは一般的にクライアントサーバにインストールされ、クライアント上でログを収集し、最終的にLogstashに転送して分析します.
  • Filebeatは、harvestersprospectorの2つの主要な構成要素から構成される.この2つのコンポーネントは一緒にFilebeatの仕事を完成し、inputは指定されたパスファイルでデータを読み出します.その後、イベントデータを構成されたoutputに送信します.
  • Harvestersは、単一のファイルのコンテンツ収集を担当し、実行中に各Harvesterは、1つのファイルに対して行単位のコンテンツ読み出しを行い、読み出したコンテンツを構成されたoutputに送信する.
  • Prospectorは、Harvstersを管理し、読み取りが必要なすべてのデータソースを見つける責任を負います.inputがlog(ログ)タイプで構成されている場合、Prospectorは構成されたパスの下で一致するすべてのファイルを検索し、最後に各ファイルにHarvsterを作成します.

  • input-log関連プロパティの構成は以下の通りです.https://www.elastic.co/guide/en/beats/filebeat/6.5/filebeat-input-log.html output-redis関連プロパティの構成を参照してください.https://www.elastic.co/guide/en/beats/filebeat/6.5/redis-output.html
    当社の環境および構成を参照して、filebeatのパラメータ設定について詳しく説明します.バージョン:6.5.4
    オンラインfilebeat構成:
    filebeat.inputs:
    #      docker     
    - type: log                                                 
      enabled: true                                             
      paths:                                                    
        - "/qj/docker/data/docker/containers/*/*-json.log"      
      scan_frequency: 6s                                        
      harvester_buffer_size: 16384                                   
      max_bytes: 10485760                                              
      fields:                                                  
        level: debug                                                
        fields_under_root: true                                         
        log_topics: ali245                                              
      encoding: utf-8                                           
      json:                                                    
        json.keys_under_root: true                                              
        json.add_error_key: true                                                
        json.message_key: log                                               
      tail_files: true                                              
      processors:                                               
      - add_docker_metadata:                                                
          host: "unix:///var/run/docker.sock"                                               
          match_source: true                                                
          match_source_index: 5                                             
    
    #      Nginx    
    - type: log                                                 
      enabled: true                                             
      encoding: utf-8                                               
      paths:                                                
        - "/qj/nginx/log/access.log"                                                
      fields:                                               
        log_topics: nginx                                               
    
    #      Nginx    
    - type: log                                             
      enabled: true                                             
      encoding: utf-8                                               
      paths:                                                
        - "/qj/nginx/log/error.log"                                             
      fields:                                               
        log_topics: nerror                                              
    
    #      Mysql    
    - type: log                                             
      enabled: true                                             
      paths:                                                
        - "/qj/mysql/data3306/slow.log"                                             
      backoff: 1s                                               
      max_backoff: 10s                                              
      backoff_factor: 2                                             
      harvester_limit: 10                                               
      multiline.pattern: "^# User@Host:"                                            
      multiline.negate: true                                                
      multiline.match: after                                                
      multiline.timeout: 5s                                             
      fields:                                               
        log_topics: slow                                                
                                                    
    queue.mem:                                              
      events: 8192                                              
      flush.min_events: 4096                                                
      flush.timeout: 60s                                                
                                                    
    force_close_files: true                                             
                                                    
    output.redis:                                               
      hosts: ["172.17.3.102:6379"]                                              
      key: "ali1_log"                                               
      keys:                                             
        - key: "{[fields.list]}"                                                
          mappings:                                             
            log_topics: "ali245"                                                
            log_topics: "nginx"                                             
            log_topics: "nerror"                                                
            log_topics: "slow"                                              
      db: 1                                             
      timeout: 5                                                
    

    Input入力部
    1.dockerログ注記の収集:
    #   filebeat      
    filebeat.inputs:
    
    #     log      
    type: log                                   
    
    #        。     ,enabled   true。
    enabled: true
    
    #           ,     docker      
    paths:                      
    
    #               ,  /qj/*/*.log     /qj        
    - "/qj/docker/data/docker/containers/*/*-json.log" 
    
    #            , 6s    ,      ,  Filebeat   CPU  ,   10s
    scan_frequency: 6s                                        
    
    #   harvester (   )               (    ),   16384      
    harvester_buffer_size: 16384
    
    #                 ,         。    10M(40485760 bytes)    
    max_bytes: 10485760                                       
    
    #        
    fields:                                 
    
    #                 ,  “level:debug”,             。
    #      ,       fields          fields     ,  fields.level
    #          es        ,    "filelds":{"level":"debug"}
    level: debug                                                
        
    #      true: field          ;      fields    ;    field   filebeat   field。
    fields_under_root: true                                   
    
    # redis topic  。             ,               index,      
    log_topics: ali245                                              
    
    #                      
    encoding: utf-8                          
    
    #      Filebeat      JSON       。Filebeat      ,          JSON   ,JSON      。
    json:                                             
    
    #         :
    json.keys_under_root: true
    json.add_error_key: true
    json.message_key: log
    
    #       Filebeat       ,     true,Filebeat                                                  。
    #     :             Filebeat ,                。      ,          ,                 。
    tail_files: false
    
    #               。
    processors:
    
    #   docker       
    - add_docker_metadata:
    
    # Docker   (UNIX TCP   )。unix:///var/run/docker.sock    
    host: "unix:///var/run/docker.sock"
    
    #   source             ID 。       
    match_source: true
    
    #          /     ID。    4   /var/lib/docker/containers//*.log   
    #       :/qj/docker/data/docker/containers/container_id/*-json.log     5 。
    match_source_index: 5
    

    2.Nginxログ注記の収集:
    #                  ,         
    #      Nginx    
    - type: log
      enabled: true                                             
      encoding: utf-8                                               
      paths:                                                
        - "/qj/nginx/log/access.log"                                                
      fields:                                               
        log_topics: nginx                                               
    
    #      Nginx    
    - type: log                                             
      enabled: true                                             
      encoding: utf-8                                               
      paths:                                                
        - "/qj/nginx/log/error.log"                                             
      fields:                                               
        log_topics: nerror                                              
    
    "      docker         ,        fields      "
    redis topic  。             ,               index,      。
        Nginx   topics nginx
    Nginx     topics nerror
    
    

    3.Mysqlスローログ注記の収集:
    #      Mysql   
    - type: log                                             
      enabled: true                                             
      paths:                                                
        - "/qj/mysql/data3306/slow.log"                                             
    
    # Filebeat         EOF(  )  ,                 ,   1s。
    backoff: 1s
    
    # Filebeat         EOF               ,   10 。
    # max_backoff         ,         backoff_factor
    max_backoff: 10s                                              
    
    #               。backoff    ,max_backoff      。backoff       。       1.       1,   backoff  
    #  backoff       。 backoff          backoff_factor,  max_backoff  。    2。
    backoff_factor: 2                                             
    
    #  harvester_limit                  。  harvester_limit  0,      .
    #                           ,       。
    harvester_limit: 10                                               
    
    # multiline   Filebeat                  。
    #      :https://www.elastic.co/guide/en/beats/filebeat/6.5/multiline-examples.html
    
    # pattern,             。
    multiline.pattern: "^# User@Host: "                                               
    
    # negate,         。   false。
    multiline.negate: true
    
    # match,  Filebeat             (                    。)
    multiline.match: after
    
    # timeout,       ,               ,Filebeat        。    5 。
    multiline.timeout: 5s                     
    
    # Mysql    topics slow
      fields:                                               
        log_topics: slow                                                
    

    output出力部
    #    queue.mem  ,        (               。)    
    queue.mem:                               
    
    #                    ,                    
    #             ,   flush.min_events flush.timeout  。
    #   flush.min.events   2048 flush.timeout   1s。
      events: 8192                        #           ,    4096   。                    
      flush.min_events: 4096              #           。       0,                     。                。   2048
      flush.timeout: 60s                  #       flush.min_events。     0,          。    1                               
    
    #      true ,             Filebeat     。    false。
    force_close_files: true                                             
    
    #     
    output.redis:                           
    
    #     Redis     。         (      ),               。           ,              。
      hosts: ["172.17.3.102:6379"]                    
    
    #      Redis        。     ,index        。
      key: "ali1_log"                                               
      
    # keys          。      key          。
      keys:                                             
        - key: "{[fields.list]}"      #           fields.list   Redis   。 
        
    #         ,   key      。
          mappings:                                             
            log_topics: "ali245"                                                
            log_topics: "nginx"                                             
            log_topics: "nerror"                                                
            log_topics: "slow"            
            
    #      Redis     。    0。
      db: 1                                 
    
    # Redis    (     )。    5 。
      timeout: 5          
    

    上記の複雑なケース注釈を通じて、簡単なfilebeat構成を見ると、理解しやすくなります.
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - "/qj/docker-data/containers/*/*-json.log"
      encoding: utf-8
      json:
        json.keys_under_root: true
        json.add_error_key: true
        json.message_key: log
      tail_files: true
    processors:
    - add_docker_metadata:
        host: "unix:///var/run/docker.sock"
        match_source: true
        match_source_index: 3
    output.redis:
      hosts: ["172.17.3.102:6379"]
      key: "ali2_log"
      db: 2
      timeout: 5
    

    はい、filebeatの構成はここまでです.より多くの収集項目は実際の環境に基づいて構成する必要があります.後日会社はk 8 sに行くのでfilebeatは大規模な修正を行います.
    最初の文章、よく書けないのはまだ責任を負ってください.もしこの文章があなたに役に立つなら、私に注目してください.これからは定期的に技術の干物を分かち合います.
    転載明記原文:Filebeatを使用してオンラインdockerログを収集する