Elasticsearch+Filebeat+Kibana搭建程序
傳統查看日志的形式都是通過連接服務器查看服務器日志完成,這種方式會有以下弊端:
- 效率太慢,需要不停的連接服務器
- 日志檔案本身對條件篩選并不友好
- 需要查看日志的人員對linux系統有些許熟悉
- 如果涉及分布式服務系統,需要同時查看多個服務的日志才能找到對應一條請求的整體日志
- 日志無法做整體的統計
日志收集系統介紹(Elasticsearch+Filebeat+Kibana)
ElasticSearch(https://www.elastic.co/cn/elasticsearch/) 是一個基于Lucene的開源分布式搜索服務器,它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格介面,多資料源,自動搜索負載等,它提供了一個分布式多用戶能力的全文搜索引擎,基于RESTful web介面,Elasticsearch是用Java開發的,并作為Apache許可條款下的開放原始碼發布,是第二流行的企業搜索引擎,設計用于云計算中,能夠達到實時搜索,穩定,可靠,快速,安裝使用方便,
Filebeat(https://www.elastic.co/cn/beats/) 是一個完全開源的工具,屬于Beats中的一種,具體介紹可以從官網中查看,它可以對你的日志進行收集、分析,支持大量的資料獲取方法,并將其存盤供以后使用(如搜索),server端負責將收到的各節點日志進行過濾、修改等操作在一并發往elasticsearch上去,Filebeat對比Logstash更為輕量,但是如果要實作過濾等功能需要用到ES中pipeline技術,
Kibana(https://www.elastic.co/cn/kibana) 是一個基于瀏覽器頁面的Elasticsearch前端展示工具,也是一個開源和免費的工具,Kibana可以為 Filebeat 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助您匯總、分析和搜索重要資料日志,
單節點EFK搭建
使用版本:Elasticsearch6.3.2,Filebeat6.3.2,Kibana6.3.2
因為官網下載速度太慢,可以使用以下鏈接下載:
- Elasticsearch6.3.2: https://pan.baidu.com/s/1i-dbRzQshpro8RQqM9cqeQ 提取碼:1234
- Filebeat6.3.2: https://pan.baidu.com/s/1xiQtZe6IVtaPBnjcJTALnA 提取碼:1234
- Kibana6.3.2: https://pan.baidu.com/s/1JC8WeMqLsxtIELI4wx_MDw 提取碼:1234
Elasticsearch
#將下載的檔案上傳到服務器
#解壓檔案
tar -zxvf elasticsearch-6.3.2.tar.gz -C /usr/local/elk/
#更改解壓后檔案夾名稱
mv /usr/local/elk/elasticsearch-6.3.2 /usr/local/elk/es
es不能用root用戶啟動,因為es可以接收用戶輸入的腳本并且執行,為了系統安全考慮,需要重新創建用戶,
useradd es_user
切換root用戶將剛剛解壓的es檔案夾設定為所有人可讀可寫
su root
chmod -R 777 /usr/local/elk/es/
因為es對當前用戶的記憶體和可打開的檔案數有最小限制,我們需要修改普通用戶的最大記憶體和最大可打開檔案數,如果服務器本身沒有這么多記憶體,可以修改es啟動變數來減少使用的記憶體大小,具體操作自行查詢
#記憶體修改
vi /etc/sysctl.conf
#添加以下配置:
vm.max_map_count=262144 #具體大小可以查看es最小記憶體配置
#執行以下命令生效
sysctl -p
#最大可打開的檔案數
vi /etc/security/limits.conf
#添加以下配置
es_user soft nofile 65535
es_user hard nofile 65535
設定組態檔elasticsearch.yml,這里我只用了部分配置,具體配置詳解:https://www.elastic.co/guide/en/elasticsearch/reference/6.3/modules.html
vi /usr/local/elk/es/config/elasticsearch.yml
#配置內容
cluster.name: es
node.name: node-1
node.master: true
node.data: true
path.data: /usr/local/elk/es/data
path.logs: /usr/local/elk/es/logs
network.host: 0.0.0.0
http.port: 9200
啟動es,并且查看
#切換用戶
su es_user
cd /usr/local/elk/es/
#后臺啟動es,不輸出日志
nohup bin/elasticsearch >/dev/null 2>&1 &
#后臺啟動es,輸出日志es_nohup.log
nohup bin/elasticsearch >es_nohup.log 2>&1 &
驗證啟動是否成功
http://ip:9200/
停止es
netstat -tunlp | grep 9200
kill -9 PID
Kibana
#將下載的檔案上傳到服務器
#解壓檔案
tar -zxvf kibana.tar -C /usr/local/elk/
修改組態檔kibana.yml
vi /usr/local/elk/kibana/config/kibana.yml
#配置內容
server.port: 5601
server.host: "0.0.0.0"
#ip 是elasticsearch所在服務器的IP
elasticsearch.url: "http://ip:9200"
啟動kibana
cd /usr/local/elk/kibana
#后臺啟動kibana,不輸出日志
nohup config/kibana >/dev/null 2>&1 &
#后臺啟動kibana,輸出日志 kibana_nohup.log
nohup config/kibana >kibana_nohup.log 2>&1 &
停止kibana
netstat -tunlp | grep 5601
kill -9 PID
Filebeat
#將下載的檔案上傳到服務器
#解壓檔案
tar xzvf filebeat-6.3.2-linux-x86_64.tar.gz -C /usr/local/elk/
#更改解壓后檔案夾名稱
mv /usr/local/elk/filebeat-6.3.2-linux-x86_64 /usr/local/elk/filebeat
修改組態檔filebeat.yml,可以配置多個組態檔,在啟動時選擇,filebeat配置詳細: https://www.elastic.co/guide/en/beats/filebeat/6.3/filebeat-configuration.html
filebeat.inputs:
- type: log
#啟用
enabled: true
#掃描路徑
paths:
- /home/levi/project_1/logs/log_error.log
- /home/levi/project_1/logs/log_warn.log
- /home/levi/project_1/logs/log_info.log
include_lines: ['INFO', 'WARN', 'ERROR']
#忽略12個小時之前更新的檔案
ignore_older: 12h
#自定義欄位
fields:
log_source: project_1
#多行日志配置
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
#每隔 scan_frequency 時間讀取一次檔案內容,對于關閉的檔案,如果后續有更新,則經過 scan_frequency 時間后,Filebeat 將重新打開該檔案,讀取新增加的內容
scan_frequency: 10s
#生命周期持續時間
close_inactive: 2h
- type: log
enabled: true
paths:
- /home/levi/project_2/logs/log_error.log
- /home/levi/project_2/logs/log_warn.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_2
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h
- type: log
enabled: true
paths:
- /home/levi/project_3/logs/*.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_3
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h
- type: log
enabled: true
paths:
- /home/levi/project_4/logs/*.log
include_lines: ['INFO', 'WARN', 'ERROR']
ignore_older: 12h
fields:
log_source: project_4
multiline.pattern: '^\d{4}\-\d{2}\-\d{2}\s\d{2}:\d{2}:\d{2}\.\d{3}'
multiline.negate: true
multiline.match: after
scan_frequency: 10s
close_inactive: 2h
#==================== Elasticsearch template setting ==========================
setup.template.settings:
#索引分片數量配置
index.number_of_shards: 5
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
#es 對應服務器ip
hosts: ["ip:9200"]
#自定義索引名稱
index: "levi-%{[fields.log_source]}"
#es中實作的過濾pipeline系結
pipeline: "levi-elk-pipeline"
setup:
#es的filebeat模板,用來設定在Elasticsearch中的映射,如果模板加載是啟用的(默認的),Filebeat在成功連接到Elasticsearch后自動加載索引模板
template:
enabled: true
name: "levi"
pattern: "levi-*"
overwrite: true
啟動filebeat之前需要初始化es中的pipeline ,pipeline詳解: https://www.elastic.co/guide/en/elasticsearch/reference/6.3/pipeline.html
PUT _ingest/pipeline/levi-elk-pipeline
{
"description": "levi elk pipeline",
"processors": [
{
"grok": {
"field": "message",
"patterns": [
"""(?<timestamp>(?:%{YEAR}-%{MONTHNUM}-%{MONTHDAY})%{SPACE}(?:%{HOUR}:%{MINUTE}:%{SECOND}.\d{3}))(?<thread>(?:%{SPACE}\[.*?\]%{SPACE}))%{LOGLEVEL:level}(?<class>(?:%{SPACE}(\w+(\.)+)+\w*%{SPACE}))"""
]
}
},
{
"gsub": {
"field": "thread",
"pattern": """\s\[""",
"replacement": ""
}
},
{
"gsub": {
"field": "thread",
"pattern": """\]\s""",
"replacement": ""
}
},
{
"gsub": {
"field": "class",
"pattern": "\\s",
"replacement": ""
}
},
{
"date": {
"field": "timestamp",
"formats": [
"yyyy-MM-dd HH:mm:ss.SSS"
],
"timezone": "Asia/Shanghai"
},
"remove": {
"field": "timestamp"
}
}
]
}
啟動filebeat
cd /usr/local/elk/filebeat
#后臺啟動filebeat 且不輸出啟動日志
nohup ./filebeat -e -c filebeat.yml >/dev/null 2>&1 &
#后臺啟動filebeat 輸出啟動日志 filebeat_nohup.log
nohup ./filebeat -e -c filebeat.yml >filebeat_nohup.log 2>&1 &
停止filebeat
ps -ef|grep filebeat
kill -9 PID
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/244815.html
標籤:其他
