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