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