zoukankan      html  css  js  c++  java
  • ELK搭建-windows

    一、E

     

    二、L

     启动

    三、K

     

     

     四、filebeat

    五、配置文件使用

    1、logstash-sample.conf

    # Sample Logstash configuration for creating a simple
    # Beats -> Logstash -> Elasticsearch pipeline.
    
    
    input {
        redis {
            batch_count => 1
            type => "redis-input"
            data_type => "list"
            key => "logstash_test_list"
            host => "127.0.0.1"
            port => 6379
            password => "Aroot1234@A"
            db => 0
            threads => 5
            codec => "json"
    
        }
    
         beats{
             host => "127.0.0.1"
             port => 5044
       }
    }
    filter {
    
    }    
    output {
        if [fields][document_type]=="api" {
            elasticsearch {
                hosts => ["127.0.0.1:9200"]
                index => "apinadiyi-%{+YYYY.MM.dd}"
                # template_name => "apinadiyi"
            }        
            stdout {
                codec => rubydebug
            }  
        }
    
        if [type]=="redis-input" {
            elasticsearch { 
                hosts => ["127.0.0.1:9200"]
                index => "logstash-%{+YYYY.MM.dd}"
                # document_type => "logs" # 7之后不支持了
            }
            stdout {
                codec => rubydebug
            }  
        }
    
    }
    View Code

    2、filebeat.yml

    ###################### Filebeat Configuration Example #########################
    
    # This file is an example configuration file highlighting only the most common
    # options. The filebeat.reference.yml file from the same directory contains all the
    # supported options with more comments. You can use it as a reference.
    #
    # You can find the full configuration reference here:
    # https://www.elastic.co/guide/en/beats/filebeat/index.html
    
    # For more available modules and options, please see the filebeat.reference.yml sample
    # configuration file.
    
    #=========================== Filebeat inputs =============================
    
    filebeat.inputs:
    
    # Each - is an input. Most options can be set at the input level, so
    # you can use different inputs for various configurations.
    # Below are the input specific configurations.
    
    - type: log
    
      # Change to true to enable this input configuration.
      enabled: true
    
      # Paths that should be crawled and fetched. Glob based paths.
      paths:
        #- /var/log/*.log
        #- c:programdataelasticsearchlogs*
        - C:PythonLog*.log
        #定义写入 ES 时的 _type 值
      
      fields:
        document_type: "api" 
      #   logsource: 192.168.2.116
      #   logtype: nginx
      #   logdj: baseapi
    
      # Exclude lines. A list of regular expressions to match. It drops the lines that are
      # matching any regular expression from the list.
      #exclude_lines: ['^DBG']
    
      # Include lines. A list of regular expressions to match. It exports the lines that are
      # matching any regular expression from the list.
      #include_lines: ['^ERR', '^WARN']
    
      # Exclude files. A list of regular expressions to match. Filebeat drops the files that
      # are matching any regular expression from the list. By default, no files are dropped.
      #exclude_files: ['.gz$']
    
      # Optional additional fields. These fields can be freely picked
      # to add additional information to the crawled log files for filtering
      #fields:
      #  level: debug
      #  review: 1
    
      ### Multiline options
    
      # Multiline can be used for log messages spanning multiple lines. This is common
      # for Java Stack Traces or C-Line Continuation
    
      # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
      #multiline.pattern: ^[
    
      # Defines if the pattern set under pattern should be negated or not. Default is false.
      #multiline.negate: false
    
      # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
      # that was (not) matched before or after or as long as a pattern is not matched based on negate.
      # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
      #multiline.match: after
    
    
    #============================= Filebeat modules ===============================
    
    filebeat.config.modules:
      # Glob pattern for configuration loading
      path: ${path.config}/modules.d/*.yml
    
      # Set to true to enable config reloading
      reload.enabled: true
    
      # Period on which files under path should be checked for changes
      #reload.period: 10s
    
    #==================== Elasticsearch template setting ==========================
    
    setup.template.settings:
      index.number_of_shards: 1
      #index.codec: best_compression
      #_source.enabled: false
    
    #================================ General =====================================
    
    # The name of the shipper that publishes the network data. It can be used to group
    # all the transactions sent by a single shipper in the web interface.
    #name:
    
    # The tags of the shipper are included in their own field with each
    # transaction published.
    #tags: ["service-X", "web-tier"]
    
    # Optional fields that you can specify to add additional information to the
    # output.
    #fields:
    #  env: staging
    
    
    #============================== Dashboards =====================================
    # These settings control loading the sample dashboards to the Kibana index. Loading
    # the dashboards is disabled by default and can be enabled either by setting the
    # options here or by using the `setup` command.
    #setup.dashboards.enabled: false
    
    # The URL from where to download the dashboards archive. By default this URL
    # has a value which is computed based on the Beat name and version. For released
    # versions, this URL points to the dashboard archive on the artifacts.elastic.co
    # website.
    #setup.dashboards.url:
    
    #============================== Kibana =====================================
    
    # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API.
    # This requires a Kibana endpoint configuration.
    setup.kibana:
    
      # Kibana Host
      # Scheme and port can be left out and will be set to the default (http and 5601)
      # In case you specify and additional path, the scheme is required: http://localhost:5601/path
      # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601
      #host: "localhost:5601"
    
      # Kibana Space ID
      # ID of the Kibana Space into which the dashboards should be loaded. By default,
      # the Default Space will be used.
      #space.id:
    
    #============================= Elastic Cloud ==================================
    
    # These settings simplify using Filebeat with the Elastic Cloud (https://cloud.elastic.co/).
    
    # The cloud.id setting overwrites the `output.elasticsearch.hosts` and
    # `setup.kibana.host` options.
    # You can find the `cloud.id` in the Elastic Cloud web UI.
    #cloud.id:
    
    # The cloud.auth setting overwrites the `output.elasticsearch.username` and
    # `output.elasticsearch.password` settings. The format is `<user>:<pass>`.
    #cloud.auth:
    
    #================================ Outputs =====================================
    
    # Configure what output to use when sending the data collected by the beat.
    
    #-------------------------- Elasticsearch output ------------------------------
    #output.elasticsearch:
      # Array of hosts to connect to.
      #hosts: ["localhost:9200"]
    
      # Optional protocol and basic auth credentials.
      #protocol: "https"
      #username: "elastic"
      #password: "changeme"
    
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      # The Logstash hosts
      hosts: ["127.0.0.1:5044"]
    
      # Optional SSL. By default is off.
      # List of root certificates for HTTPS server verifications
      #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
    
      # Certificate for SSL client authentication
      #ssl.certificate: "/etc/pki/client/cert.pem"
    
      # Client Certificate Key
      #ssl.key: "/etc/pki/client/cert.key"
    
    #================================ Processors =====================================
    
    # Configure processors to enhance or manipulate events generated by the beat.
    
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
    
    #================================ Logging =====================================
    
    # Sets log level. The default log level is info.
    # Available log levels are: error, warning, info, debug
    #logging.level: debug
    
    # At debug level, you can selectively enable logging only for some components.
    # To enable all selectors use ["*"]. Examples of other selectors are "beat",
    # "publish", "service".
    #logging.selectors: ["*"]
    
    #============================== X-Pack Monitoring ===============================
    # filebeat can export internal metrics to a central Elasticsearch monitoring
    # cluster.  This requires xpack monitoring to be enabled in Elasticsearch.  The
    # reporting is disabled by default.
    
    # Set to true to enable the monitoring reporter.
    #monitoring.enabled: false
    
    # Sets the UUID of the Elasticsearch cluster under which monitoring data for this
    # Filebeat instance will appear in the Stack Monitoring UI. If output.elasticsearch
    # is enabled, the UUID is derived from the Elasticsearch cluster referenced by output.elasticsearch.
    #monitoring.cluster_uuid:
    
    # Uncomment to send the metrics to Elasticsearch. Most settings from the
    # Elasticsearch output are accepted here as well.
    # Note that the settings should point to your Elasticsearch *monitoring* cluster.
    # Any setting that is not set is automatically inherited from the Elasticsearch
    # output configuration, so if you have the Elasticsearch output configured such
    # that it is pointing to your Elasticsearch monitoring cluster, you can simply
    # uncomment the following line.
    #monitoring.elasticsearch:
    
    #================================= Migration ==================================
    
    # This allows to enable 6.7 migration aliases
    #migration.6_to_7.enabled: true
    View Code

    六、别人配置文件参考

    1、filebeat.yml

    ###################### Filebeat Configuration Example #########################
    
    # This file is an example configuration file highlighting only the most common
    # options. The filebeat.full.yml file from the same directory contains all the
    # supported options with more comments. You can use it as a reference.
    #
    # You can find the full configuration reference here:
    # https://www.elastic.co/guide/en/beats/filebeat/index.html
    
    #=========================== Filebeat prospectors =============================
    
    filebeat.prospectors:
    
    # Each - is a prospector. Most options can be set at the prospector level, so
    # you can use different prospectors for various configurations.
    # Below are the prospector specific configurations.
       
    - input_type: log
    
      # Paths that should be crawled and fetched. Glob based paths.
      paths:
         - /usr/local/nginx/logs/api/api.filebeat_*.log
         - /usr/local/nginx/logs/api/msg/api.message_*.log
      #定义写入 ES 时的 _type 值
      document_type: "api" 
      fields:
        logsource: 192.168.2.116
        logtype: nginx
        logdj: baseapi
        
      #排除更改时间超过定义的文件,时间字符串可以用2h表示2小时,5m表示5分钟,默认0
      ignore_older: 0
      #prospector扫描新文件的时间间隔,默认10秒
      scan_frequency: 5s 
    
      # Defines the buffer size every harvester uses when fetching the file, 16K
      #harvester_buffer_size: 16384
      
      #单文件最大收集的字节数,单文件超过此字节数后的字节将被丢弃,默认10MB,需要增大,保持与日志输出配置的单文件最大值一致即可
      # Maximum number of bytes a single log event can have
      # All bytes after max_bytes are discarded and not sent. The default is 10MB. 10485760
      # This is especially useful for multiline log messages which can get large.
      max_bytes: 1048576000
      
      # Exclude lines. A list of regular expressions to match. It drops the lines that are
      # matching any regular expression from the list.
      #exclude_lines: ["^DBG"]
    
      # Include lines. A list of regular expressions to match. It exports the lines that are
      # matching any regular expression from the list.
      #include_lines: ["^ERR", "^WARN"]
    
      # Exclude files. A list of regular expressions to match. Filebeat drops the files that
      # are matching any regular expression from the list. By default, no files are dropped.
      #exclude_files: [".gz$"]
    
      # Optional additional fields. These field can be freely picked
      # to add additional information to the crawled log files for filtering
      #fields:
      #  level: debug
      #  review: 1
    
      ### Multiline options
    
      # Mutiline can be used for log messages spanning multiple lines. This is common
      # for Java Stack Traces or C-Line Continuation
    
      # The regexp Pattern that has to be matched. The example pattern matches all lines starting with [
      #multiline.pattern: ^[
    
      # Defines if the pattern set under pattern should be negated or not. Default is false.
      #multiline.negate: false
    
      # Match can be set to "after" or "before". It is used to define if lines should be append to a pattern
      # that was (not) matched before or after or as long as a pattern is not matched based on negate.
      # Note: After is the equivalent to previous and before is the equivalent to to next in Logstash
      #multiline.match: after
    
    #========================= Filebeat global options ============================
    
    # Event count spool threshold - forces network flush if exceeded
    #filebeat.spool_size: 2048
    
    # Enable async publisher pipeline in filebeat (Experimental!)
    #filebeat.publish_async: false
    
    # Defines how often the spooler is flushed. After idle_timeout the spooler is
    # Flush even though spool_size is not reached.
    #filebeat.idle_timeout: 5s
    
    # Name of the registry file. If a relative path is used, it is considered relative to the
    # data path.
    #filebeat.registry_file: ${path.data}/registry
    
    #
    # These config files must have the full filebeat config part inside, but only
    # the prospector part is processed. All global options like spool_size are ignored.
    # The config_dir MUST point to a different directory then where the main filebeat config file is in.
    #filebeat.config_dir:
    
    # How long filebeat waits on shutdown for the publisher to finish.
    # Default is 0, not waiting.
    #filebeat.shutdown_timeout: 0
    
    #================================ General =====================================
    
    # The name of the shipper that publishes the network data. It can be used to group
    # all the transactions sent by a single shipper in the web interface.
    #name:
    
    # The tags of the shipper are included in their own field with each
    # transaction published.
    #tags: ["service-X", "web-tier"]
    
    # Optional fields that you can specify to add additional information to the
    # output.
    #fields:
    #  env: staging
    
    #处理管道中单个事件内的队列大小,默认1000
    # Internal queue size for single events in processing pipeline
    queue_size: 2000
    
    # The internal queue size for bulk events in the processing pipeline.
    # Do not modify this value.
    #bulk_queue_size: 0
    
    #================================ Outputs =====================================
    
    # Configure what outputs to use when sending the data collected by the beat.
    # Multiple outputs may be used.
    
    #-------------------------- Elasticsearch output ------------------------------
    #output.elasticsearch:
      # Array of hosts to connect to.
      #hosts: ["localhost:9200"]
    
      # Optional protocol and basic auth credentials.
      #protocol: "https"
      #username: "elastic"
      #password: "changeme"
    
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      # The Logstash hosts
      hosts: ["192.168.6.204:4501"]
    
      # Optional SSL. By default is off.
      # List of root certificates for HTTPS server verifications
      #ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
    
      # Certificate for SSL client authentication
      #ssl.certificate: "/etc/pki/client/cert.pem"
    
      # Client Certificate Key
      #ssl.key: "/etc/pki/client/cert.key"
    
    #================================ Logging =====================================
    
    # Sets log level. The default log level is info.
    # Available log levels are: critical, error, warning, info, debug
    #logging.level: debug
    
    # At debug level, you can selectively enable logging only for some components.
    # To enable all selectors use ["*"]. Examples of other selectors are "beat",
    # "publish", "service".
    #logging.selectors: ["*"]
    View Code

    2、nginx_log.conf

    input {
            file {
                    path => "/opt/logstash-6.7.0/data/*.test.json"
                    type => "test"
                    start_position => "beginning" 
                    sincedb_path => "/opt/logstash-6.7.0/data/test-sincedb"
            }
    }
    
    input {
            beats {
                port => 4501
                ssl  => false
            }
    }
    
    filter {
            if [fields][logtype] in ["test", "nginx"] or [type]=="test" {
                grok {
                        #设置自定义正则路径
                        patterns_dir => ["/opt/logstash-6.7.0/config/patterns/nginx"]  
                        match => {
                                "message" => "%{NGINXACCESS}"
                        }
                }
                date {
                        match => [ "timestamp" , "dd/MMM/YYYY:HH:mm:ss Z" ]
                        target => "@timestamp"
                        locale => "cn"
    
                }
                
                useragent{
                    source => "agent"
                    prefix => "agent_"
                    remove_field =>  "agent"
                }
    
                #定义客户端的IP是哪个字段(上面定义的数据格式)
                if [clientip] {
                    geoip { 
                        source => "clientip"   # 取自nginx中的客户端ip 
                    }
                }
    
                if ![request_time] {
                    mutate {
                        add_field =>   {
                            "request_time" => "0.0"
                        }                    
                    }
                }
                
                if ![upstream_response_time] {                
                    mutate {
                        add_field =>   {
                            "upstream_response_time" => "0.0"
                        }
                    }
                }
                
    
                #需要进行转换的字段,这里是将访问的时间转成int,再传给Elasticsearch
                mutate {
                    convert => ["bytes", "integer"]            
                    convert => ["[geoip][coordinates]", "float" ] 
                    convert => ["request_time", "float"]                
                    convert => ["upstream_response_time", "float"]
                }
                  
            }
            
            
            # 对模板点击参数进行分解
            # /Mould/GetLmsgBoard/?t=1554737610678&id=1&m_no=F2018_11_21_00100
            # func=Mould 
            # module=GetLmsgBoard 
            # para=?t=...
            if [type]=="api" {
                mutate{
                    add_field =>   {
                        "tempmessage" => "%{[request]}"
                    }        
                }
                
                 mutate{
                    split => ["tempmessage","/"]
                    add_field =>   {
                        "module" => "%{[tempmessage][1]}"
                    }
                    add_field =>   {
                        "func" => "%{[tempmessage][2]}"
                    }        
                    add_field =>   {
                        "para" => "%{[tempmessage][3]}"
                    }
                }
                
                if [func] == "GetLmsgBoard" {
                    kv {
                        source => "para"
                        include_keys => ["id","m_no"]
                        prefix => "msg_"
                        field_split => "&? "
                        add_field =>   {
                            "type" => "api"
                        }
                    }   
                        
                    mutate{
                        convert => [ "meg_id", "integer"]    
                        replace => { "type" => "message"}    
                    }
                }
        
                mutate{    
                    remove_field => "tempmessage"
                    remove_field => "para"
                }
        
            }
            #####################################################################
            #        Baidu
            #####################################################################        
            if [type]=="baidu" {
                date {
                  match => ["datetime", "yyyy/MM/dd HH:mm:ss Z"]
                  target => "@timestamp"
                  locale => "cn"
                  timezone => "Asia/Shanghai"
                }
    
                #定义客户端的IP是哪个字段(上面定义的数据格式)
                geoip { 
                    source => "ip"   
                }
                
                mutate {        
                    convert => { "datetime" => "string" }        
                }    
            }
            #####################################################################
            #        ERP User
            #####################################################################
            if [type]=="erpuser" {
                date {
                  match => ["time", "yyyy-MM-dd HH:mm:ss Z"]
                  target => "@timestamp"
                  locale => "cn"
                  timezone => "Asia/Shanghai"
                }
    
                #定义客户端的IP是哪个字段(上面定义的数据格式)
                geoip { 
                    source => "ip"   
                }
                
                mutate {        
                    convert => { "time" => "string" }        
                }    
            }        
    }
    output {
            if [type]=="fanyi" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-fanyi-%{+YYYY.MM}"
                    template_name => "nginx"
                }        
            }
    
            if [type]=="api" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "apinadiyi-%{+YYYY.MM.dd}"
                    template_name => "apinadiyi"
                }        
            }
            
            if [type]=="message" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "message-%{+YYYY.MM.dd}"
                    template_name => "message"
                }
            }
            
            if [type]=="beimu" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-beimu-%{+YYYY.MM}"
                    template_name => "nginx"
                }
            }
            
            if [type]=="syd" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-syd-%{+YYYY.MM}"
                    template_name => "nginx"
                }            
            }
            
            if [type]=="nadiyi" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-nadiyi-%{+YYYY.MM}"
                    template_name => "nginx"
                }            
            }
    
            if [type]=="jiajiao" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-jiajiao-%{+YYYY.MM}"
                    template_name => "nginx"
                }            
            }
    
            if [type]=="tingclass" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-tingclass-%{+YYYY.MM}"
                    template_name => "nginx"
                }            
            }
    
            if [type]=="baidu" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "baidu-%{+YYYY.MM.dd}"
                    template_name => "baidu"
                }    
                #stdout {
                #    codec => rubydebug
                #}            
            }
            
            if [type]=="erpuser" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "erpuser-new-%{+YYYY.MM}"
                    template_name => "erpuser"
                }              
            } 
                
                
            if [type] == "test" {
                elasticsearch {
                    hosts => ["http://192.168.6.204:9200"]
                    index => "nginx-access-test-%{+YYYY.MM}"
                } 
                stdout {
                    codec => rubydebug
                }        
            }
    }
    View Code

    3、nginx_template.json

    PUT _template/nginx
    {
        "order" : 0,
        "version" : 190407,
        "index_patterns" : [
          "nginx-*"
        ],
        "settings" : {
          "number_of_shards": 1,
          "number_of_replicas": 1,
          "index" : {
            "refresh_interval" : "30s"
          }
        },
        "mappings" : {
          "doc" : {
            "dynamic_templates" : [
              {
                "message_field" : {
                  "path_match" : "message",
                  "mapping" : {
                    "index": "false",
                    "norms" : false,
                    "type" : "text"
                  },
                  "match_mapping_type" : "string"
                }
              },
              {
                "string_fields" : {
                  "mapping" : {
                    "index": "true",
                    "analyzer": "ik_max_word",
                    "search_analyzer": "ik_smart",
                    "norms" : false,
                    "type" : "text",
                    "fields" : {
                      "keyword" : {
                        "ignore_above" : 512,
                        "type" : "keyword"
                      }
                    }
                  },
                  "match_mapping_type" : "string",
                  "match" : "*"
                }
              }
            ],
            "properties" : {
              "@timestamp" : {
                "type" : "date"
              },
              "geoip" : {
                "dynamic" : true,
                "properties" : {
                  "ip" : {
                    "type" : "ip"
                  },
                  "latitude" : {
                    "type" : "half_float"
                  },
                  "location" : {
                    "type" : "geo_point"
                  },
                  "longitude" : {
                    "type" : "half_float"
                  }
                }
              },
              "@version" : {
                "type" : "keyword"
              }
            }
          }
        },
        "aliases" : {
            "nginx_this_week":{}
        }
      }
    View Code

    4、nginx

    URIPATH1 (?:/[\A-Za-z0-9$.+!*'(){},~:;=@#% []_<>^-&?]*)+
    URI1 %{URIPROTO}://(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATH1 })?
    NGINXACCESS %{IPORHOST:clientip} [%{HTTPDATE:timestamp}] %{NUMBER:response} (?:%{WORD:catch}|-) %{WORD:verb} %{URIPATH1:request} HTTP/%{NUMBER:httpversion} (?:%{NUMBER:bytes}|-) (?:%{NUMBER:request_time}|-) (?:%{NUMBER:upstream_response_time}|-) (?:%{URI1:referrer}|-) (?:%{QS:agent}|-) (?:(%{IPORHOST:upsteam_server}:%{POSINT:up_port})|-) (?:%{NUMBER:up_request}|-)
    View Code
  • 相关阅读:
    ajax异步服务器获取时间
    JavaScript基本知识
    JavaScript使用button提交表单
    spring与hibernate整合
    Spring的事务属性
    注解方式实现Spring声明式事务管理
    svn的安装使用
    sbn
    恢复oracle中误删除drop掉的表
    ORA-20000: ORU-10027: buffer overflow, limit of 2000 bytes的解决办法
  • 原文地址:https://www.cnblogs.com/xiao-xue-di/p/11766202.html
Copyright © 2011-2022 走看看