開發環境 centos release 7 3.1611.el7.centos.x86_64 elasticsearch 6.3.1 kibana 6.3.1 logstash 6.3.1 filebeat 6.3.1 ElasticSearch安裝 1. 下載ElasticSearch ,國內慢 ...
開發環境
centos-release-7-3.1611.el7.centos.x86_64
elasticsearch-6.3.1
kibana-6.3.1
logstash-6.3.1
filebeat-6.3.1
ElasticSearch安裝
- 下載ElasticSearch ,國內慢 找鏡像站下載
wget -c https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.1.tar.gz
tar -zxvf elasticsearch-6.3.1.tar.gz -C /opt/module/
mkdir data
- 修改配置文件/opt/module/elasticsearch-6.3.1/config/elasticsearch.yml
### node-1 192.168.9.101
### node-2 192.168.9.102
### node-3 192.168.9.103
http.port: 9200
http.cors.enabled: true
http.cors.allow-origin: "*"
node.master: true
node.data: true
# 集群名稱,預設是elasticsearch
###保證三台伺服器節點集群名稱相同
cluster.name: my-application
#-----------------------Node-----------------------
# 節點名稱,預設從elasticsearch-6.3.1/lib/elasticsearch-6.3.1.jar!config/names.txt中隨機選擇一個名稱
###每個節點名稱不一樣,其他兩台為node-1022,node-1033
node.name: node-101
#-----------------------Paths-----------------------
# 可以指定es的數據存儲目錄,預設存儲在es_home/data目錄下
path.data: /opt/module/elasticsearch-6.3.1/data
# 可以指定es的日誌存儲目錄,預設存儲在es_home/logs目錄下
path.logs: /opt/module/elasticsearch-6.3.1/logs
#-----------------------Memory-----------------------
# 鎖定物理記憶體地址,防止elasticsearch記憶體被交換出去,也就是避免es使用swap交換分區
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
#-----------------------Network-----------------------
# 為es設置ip綁定,預設是127.0.0.1,也就是預設只能通過127.0.0.1 或者localhost才能訪問
###實際伺服器的ip地址
network.host: 192.168.9.101
#-----------------------Discovery-----------------------
# 當啟動新節點時,通過這個ip列表進行節點發現,組建集群
# 預設節點列表:
###多個服務集群ip
discovery.zen.ping.unicast.hosts: ["192.168.9.101", "192.168.9.102","192.168.9.103"]
# 通過配置這個參數來防止集群腦裂現象 (集群總節點數量/2)+1
discovery.zen.minimum_master_nodes: 1
# 其他幾台伺服器只需修改node.name和network.host屬性
# 分別啟動每台伺服器上的ES
# 在地址欄輸入http://192.168.9.102:9200/_cat/nodes?pretty驗證群集是否啟動,帶“*”證明是master節點,否則是slave節點
### es 容災原理
###(1)ES會自動選舉新的master;
###(2)ES在群集中會有多副本,異地備份能力;
###(3)故障恢復,數據恢復能力
- 配置本機環境
# soft nproc :單個用戶可用的最大進程數量(超過會警告);
# hard nproc:單個用戶可用的最大進程數量(超過會報錯);
# soft nofile :可打開的文件描述符的最大數(超過會警告);
# hard nofile :可打開的文件描述符的最大數(超過會報錯);
vi /etc/security/limits.conf
# 添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
# centos 7 為 20-nproc.conf centos 6 為 90-nproc.conf
vi /etc/security/limits.d/20-nproc.conf
#修改為
* soft nproc 4096
vi /etc/sysctl.conf
# 添加下麵配置:
vm.max_map_count=655360
sysctl -p
# 然後,重新啟動Linux,必須重啟!!!
shutdown -r now
- 啟動 ElasticSearch
//ElasticSearch 不能以 root 啟動所以我們要新建一個用戶
adduser elk
# 將es的擁有者和group改為elk
chown -R elk:elk /opt/module/elasticsearch-6.3.1/
su elk
bin/elasticsearch
- 驗證 ElasticSearch
curl http://192.168.9.102:9200
Kibana 安裝
- 下載Kibana ,國內慢 找鏡像站下載
wget -c https://gitee.com/mirrors/kibana/repository/archive/v6.3.1
tar -zxvf kibana-6.3.1.tar.gz -C /opt/module/
- 修改 修改相關配置,kibana.yml
vi config/kibana.yml
# Kibana 埠
server.port: 5601
# Kibana ip
server.host: "192.168.9.102"
# elasticsearch 地址
elasticsearch.url: "http://192.168.9.102:9200"
- 啟動Kibana
bin/kibana
- 驗證是否啟動成功
瀏覽器 http://59.110.167.61:5601/
Logstash 安裝
- 下載Logstash ,國內慢 找鏡像站下載
wget -c https://mirrors.huaweicloud.com/logstash/6.3.1/logstash-6.3.1.tar.gz
tar -zxvf logstash-6.3.1.tar.gz -C /opt/module/
- 驗證 Logstash 是否安裝成功
bin/logstash -e 'input { stdin { } } output { stdout {} }'
# 輸入 hellow 等待返回
{
"message" => "hellow",
"@version" => "1",
"host" => "iZ2zei02d9n5g3r7vch43bZ",
"@timestamp" => 2020-04-27T16:01:53.951Z
}
# 則安裝成功
- Logstash 語法
區段input {},filter {},output {}
示例 官網插件例子地址
# /opt/module/logstash-6.3.1
mkdir job
vi job/test.conf
# 輸入
input {
stdin { }
}
output {
stdout {codec=>"rubydebug"}
}
# 保存執行
bin/logstash -f job/test.conf --verbose --debug
logstash 日誌收集
Filebeat 安裝
wget -c https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.3.1-linux-x86_64.tar.gz
tar -zxvf filebeat-6.2.1-linux-x86_64.tar.gz -C /opt/module
- 配置 filebeat.yml
vi filebeat.yml
#=========================== Filebeat inputs =============================
## 配置 多 type 多目錄日誌收集
## 配置 Multiline 匹配多行消息
## 配置 fields 向輸出的每一條日誌添加額外的信息
filebeat.inputs:
- type: log
enabled: true
paths:
- /home/tomcat/apache-tomcat-1/logs/*
tags: ["java-1"]
fields:
logIndex: tomcat
docType: tomcat-log
level: debug
fields_under_root: true
multiline:
pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
negate: true
match: after
- input_type: log
paths:
- /home/tomcat/apache-tomcat-2/logs/*
tags: ["java-2"]
fields:
logIndex: tomcat
docType: tomcat-log
level: error
fields_under_root: true
multiline:
pattern: '^[[:space:]]+(at|\.{3})\b|^Caused by:'
negate: true
match: after
#============================= Filebeat modules ===============================
#============================= Logstash output ===============================
# 輸出設置
output.logstash:
# logstsh的ip地址
hosts: ["192.168.9.101:5044"]
loadbalance: true
index: filebeat
## 調優 避免 占用記憶體過大
## 是否因為通配符的原因,造成同時監控數量巨大的文件
## 是否文件的單行內容巨大,日誌記錄不規範
## 是否output經常阻塞,event queue裡面總是一直緩存event
max_procs: 1
queue.mem.events: 256
queue.mem.flush.min_events: 128
- 啟動 filebeat
## 文件要屬於root 用戶才能運行
chown -R root /opt/module/filebeat-6.2.1-linux-x86_64
## 查看啟用或者禁用的模塊列表
./filebeat modules list
## 啟用模塊
./filebeat modules enable logstash
## 檢查配置是否正確
./filebeat -configtest
## 啟動 filebeat
./filebeat -e -c filebeat.yml
- 配置 logstash 的 filebeat.conf
input {
# 接收filebeat讀取的數據
beats {
port => 5044
}
}
# 日誌例子
#100.116.237.39 - - [17/Jul/2019:11:13:28 +0800] "HEAD /xinyuyl-admin/index.html HTTP/1.0" 200 -
## 不懂的可以去看看 [grok入門](https://www.jianshu.com/p/443f1ea7b640)
filter {
grok {
match => {
"message" => "%{IPV4:ip_address} - - \[%{HTTPDATE:timestamp}\] %{QS:referrer} %{NUMBER:status} -"
}
}
date {
match => [ "timestamp","dd/MMM/yyyy:hh:mm:ss Z"]
target => "@timastamp"
timezone => "Asia/Shanghai"
}
mutate {
remove_field => ["message","host","@timestamp","@version"]
convert => {
"referrer" => "string"
}
split => ["referrer", " "]
add_field => {
"path" => "%{[referrer][1]}"
"Protocol" => "%{[referrer][2]}"
}
}
}
output {
# 輸出到es
elasticsearch {
hosts => ["172.17.53.25:9200"]
index => "system-log-java-%{+YYYY.MM.dd}"
document_type => "log"
manage_template => false
}
}
- 測試 logstash 的 filter 是否能成功解析
# 驗證 filebeat.conf 是否正確
./bin/logstash -f job/filebeat.conf -t
#調試啟動
./bin/logstash -f job/filebeat.conf --verbose --debug
顯示 json 即為成功
總結
- 啟動 ElasticSearch
./elasticsearch-6.3.1/bin/elasticsearch -d
- 啟動 Kibana
nohup ./kibana-6.3.1-linux-x86_64/bin/kibana >/dev/null 2>&1 &
- 啟動 Logstash
nohup ./logstash-6.3.1/bin/logstash -f job/filebeat.conf >/dev/null 2>&1 &
- 啟動 Filebeat
nohup ./filebeat-6.3.1-linux-x86_64/filebeat -e -c filebeat.yml >/dev/null 2>&1 &
下一章 出高可用elk 實例
參考:
Logstash 最佳實踐