概述
ELK日志分析平臺是指Elasticsearch、Logstash 和 Kibana 三個項目的集合,后面又增加了Filebeat數(shù)據(jù)采集器。
- Elasticsearch是一個數(shù)據(jù)搜索分析引擎。
- Logstash 是日志數(shù)據(jù)處理的管理和日志采集器,能從各個客戶端/業(yè)務(wù)系統(tǒng)采集,轉(zhuǎn)換,發(fā)送到Elasticsearch。
- Kibana 則是數(shù)據(jù)圖形/報表的可視化展示。
- Filebeat 是比Logstash更輕巧的數(shù)據(jù)采集器
一般而言,日志數(shù)據(jù)流采用一下兩種方案
- Filebeat負責數(shù)據(jù)采集日志,然后轉(zhuǎn)發(fā)到Logstash進行格式處理并發(fā)送到Elasticsearch進行存儲,然后管理員通過Kibana實現(xiàn)數(shù)據(jù)可視化。
-
Filebeat負責數(shù)據(jù)采集日志,然后進行格式處理并發(fā)送到Elasticsearch進行存儲,然后管理員通過Kibana實現(xiàn)數(shù)據(jù)可視化。
image.png
本篇文章將對方案二的搭建以及使用進行講解。
目的
- 項目線上出現(xiàn)錯誤,快速定位問題。
- 項目節(jié)點過多,日志太分散,ELK可以統(tǒng)一管理日志。
- 方便在大量日志文件中精準搜索關(guān)鍵字
- 解決開發(fā)人員無服務(wù)器權(quán)限需要查看日志的痛點
安裝
git clone https://github.com/deviantony/docker-elk.git # 我下載的是8.6.2版本
docker-compose up #啟動容器 只會啟動 elasticsearch、kibana、logstash
默認用戶:elastic
默認密碼:changeme
kibana UI : http://localhost:5601
elasticsearch: http://localhost:9200/
詳情可以查看.env 文件

image.png
設(shè)置用戶名密碼
輸入默認賬號密碼登錄kibana

image.png
步驟一

image.png
步驟二

image.png

image.png
漢化kibana
在 /kibana/config/kibana.yml 文件最后添加:i18n.locale: "zh-CN"

image.png
配置filebeat 通過filebeat采集日志輸出到elasticsearch
/extensions/filebeat/config/filebeat.yml,
注意里面的賬號密碼需要在kibana預(yù)先設(shè)置好
setup.kibana:
#kibanaIP地址
host: "http://kibana:5601"
username: "filebeat_internal"
password: ${FILEBEAT_INTERNAL_PASSWORD}
filebeat.inputs:
- type: log
enabled: true
paths:
- /usr/share/filebeat/logs/*.log # 這個路徑是需要收集的日志路徑,是docker容器中的路徑
fields:
type: "testing" # 日志標簽,區(qū)別不同日志,下面建立索引會用到
fields_under_root: true
encoding: utf-8 # 指定被監(jiān)控的文件的編碼類型,使用plain和utf-8都是可以處理中文日志的
multiline.pattern: '^\[[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate: true # 是否需要對pattern條件轉(zhuǎn)置使用,不翻轉(zhuǎn)設(shè)為true,反轉(zhuǎn)設(shè)置為false。 【建議設(shè)置為true】
multiline.match: after # 匹配pattern后,與前面(before)還是后面(after)的內(nèi)容合并為一條日志
processors:
- drop_fields:
# 去除多余字段
fields: ["agent.type","agent.name", "agent.version","log.file.path","log.offset","input.type","ecs.version","host.name","agent.ephemeral_id","agent.hostname","agent.id","_id","_index","_score","_suricata.eve.timestamp","agent.hostname","cloud. availability_zone","host.containerized","host.os.kernel","host.os.name","host.os.version"]
output.elasticsearch:
hosts: [ http://elasticsearch:9200 ]
indices:
#索引名稱,一般為 ‘服務(wù)名稱+ip+ --%{+yyyy.MM.dd}’。
- index: "testing-%{+yyyy.MM.dd}"
when.contains:
#標簽,對應(yīng)日志和索引,和上面對應(yīng)
type: "testing"
username: filebeat_internal
password: ${FILEBEAT_INTERNAL_PASSWORD}

image.png
映射日志目錄文件
建立/logs目錄,并寫入一寫測試的日志文件
/extensions/filebeat/filebeat-compose.yml

image.png
啟動容器
# 同時啟動elasticsearch、kibana、logstash、filebeat
docker-compose -f docker-compose.yml -f extensions/filebeat/filebeat-compose.yml up
配置工作空間
步驟一創(chuàng)建工作區(qū)

image.png
切換工作區(qū)

image.png
步驟二

image.png
步驟三

image.png
步驟四

image.png
步驟五

image.png
步驟六

image.png

image.png
elasticsearch kibana 提示Your trial license is expired 問題解決

image.png

image.png
選擇Basic許可證
給索引設(shè)置生命周期
1.創(chuàng)建索引生命周期策略,超過30天自動刪除索引

image.png

image.png

image.png

image.png
2.設(shè)置索引模版

image.png

image.png

image.png

image.png

image.png

image.png

image.png
PUT _ilm/policy/log_delete_policy
{
"policy": {
"phases": {
"delete": {
"min_age": "5m",
"actions": {
"delete": {}
}
}
}
}
}
PUT _template/logs_template
{
"index_patterns": ["testing*"],
"settings":{
"index.lifecycle.name": "log_delete_policy"
},
"mappings":{
"properties":{
"message":{
"type": "text",
"fields": {
"keyword": {
"type": "keyword",
"ignore_above": 256
}
}
}
}
}
}
