• windows下使用filebeat将本地log日志实时写入到ELK


    1、ELK安装

    可以参考我上篇https://www.cnblogs.com/KQNLL/p/14583177.html

    2、filebeat安装

    下载filebeat,可以到官网下载https://www.elastic.co/cn/downloads/beats/filebeat

    解压后的目录如下

    下载后无需安装,不安装也可以直接使用。最好还是部署成winservice
    在当前目录右键点击 PowerSHell 图标,选择『以管理员身份运行』,通过命令行 .install-service-filebeat.ps1执行安装
    可能需要额外授予执行权限。命令为:PowerShell.exe -ExecutionPolicy RemoteSigned -File .install-service-filebeat.ps1

    3、filebeat配置

    配置有两种方式

    3.1、直接写入ES中写

    使用这种方式可以免去安装logstash了,因为filebeat本身可以直接向ES输出日志,但是有个缺点,没法对日志数据进行过滤及一些特殊处理。

    filebeat配置如下
    #=========================== Filebeat inputs =============================
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - c:logs*   #扫描的日志目录
      fields:
        index: "mytestlog"
      multiline.pattern: '^DEBUG|ERROR|INFO|WARN|FATAL.*'
      multiline.negate: true
      multiline.match: after
    
    #============================= Filebeat modules ===============================
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    #==================== Elasticsearch template setting ==========================
    setup.template.settings:
      index.number_of_shards: 1
    #-------------------------- Elasticsearch output ------------------------------
    output.elasticsearch:
      # Array of hosts to connect to.
       hosts: ["192.168.22.188:9200"]
       indices:
        - index: "mytestlog-%{+YYYY-MM}"
          when.contains:
            fields:
              index: "mytestlog"
    #================================ Processors =====================================
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
      - add_docker_metadata: ~
      - add_kubernetes_metadata: ~
    

    3.2、通过logstash再转入ES

    通过filebeat输出到logstash可以对数据过滤及特殊处理。

    filebeat配置如下
    #=========================== Filebeat inputs =============================
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - c:logs*  #扫描的日志目录
      tags: ["applog"] #tags在logstash中可以用来做判断
      fields:
        logtype: apploginfo #这样可以在es中添加这个字段
      multiline.pattern: '^[[:space:]]|^System.*|^---.*'
      multiline.negate: false
      multiline.match: after
    
    #============================= Filebeat modules ===============================
    filebeat.config.modules:
      path: ${path.config}/modules.d/*.yml
      reload.enabled: false
    
    #==================== Elasticsearch template setting ==========================
    setup.template.settings:
      index.number_of_shards: 1
    #----------------------------- Logstash output --------------------------------
    output.logstash:
      hosts: ["192.168.22.188:5044"] #logstash的IP和端口
    
    #================================ Processors =====================================
    processors:
      - add_host_metadata: ~
      - add_cloud_metadata: ~
      - add_docker_metadata: ~
      - add_kubernetes_metadata: ~
    

    logstash配置

    修改/home/elk/logstash/pipeline/pipeline/logstash.conf

    input {
      beats {
        port => 5044 #注意要和filebeat的输出端口一致
      }
    }
    filter {
            grok {
                    #过滤格式,从日志文件中提取特定的数据到ES的某个字段
                    match => { "message" => "%{LOGLEVEL:level} - %{GREEDYDATA:message}" }
            }
    }
    output {
            #通过filebeat的tag来判断输出目标
            if "moonlog" in [tags] {
                    elasticsearch {
                            hosts => [ "192.168.22.188:9200" ]
                            index => "applog-%{+YYYY.MM.dd}"
                     }
             }
            #同时输出日志到控制台
            stdout { codec => rubydebug }
    }
    

    配置说明,
    filter 的match规则可以使用http://grokdebug.herokuapp.com/这个网址验证。
    Logstash中过滤器Grok使用说明可以参照https://www.missshi.cn/api/view/blog/5ac6dea622890914df000001
    比如要过滤的日志格式如下

    2020-05-19 10:59:25.844  INFO 10724 [           main-1] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup
    

    这时配置的filter如下

    filter {
    	grok {
    		match => { "message" => "%{TIMESTAMP_ISO8601:log_date}  %{LOGLEVEL:log_info} %{DATA:thread} %{NOTSPACE} %{SPACE} %{NOTSPACE} %{JAVACLASS:log_class} %{SPACE}: %{GREEDYDATA:log_message}" }
    	}
    }
    

    最后,在C盘logs文件夹下创建日志文件,写入日志,打开kibana,可以在Kibana中看到日志,在kibana中创建index后即可对日志数据进行查询了。

    参考链接:
    https://blog.csdn.net/qq330983778/article/details/106242768/
    https://www.jianshu.com/p/c801ec3a64e5
    https://www.jianshu.com/p/861091c71bcd

  • 相关阅读:
    前端开发 —— 快速入门:JavaScript & CSS 脚手架
    MySQL全方位练习(学生表 教师表 课程表 分数表)
    php判断是爬虫在访问还是用户浏览器在访问
    Eclipse 安装Activiti插件
    随机生成一串字符串(java)
    js文字转语音(speechSynthesis)
    语音识别(Web Speech API)
    js判断是否为手机端访问
    tomcat部署安全证书文件(阿里云SSL证书)
    springboot文字转语音(jacob)
  • 原文地址:https://www.cnblogs.com/KQNLL/p/14583517.html
Copyright © 2020-2023  润新知