通俗來說,ELK是由Elasticsearch、Logstash、Kibana 、filebeat三個開源軟件的組成的一個組合體,這三個軟件當中,每一個軟件用於完成不一樣的功能,ELK 又稱爲ELK stack,官方域名爲stactic.co,ELK stack的主要優勢有以下幾個:
處理方式靈活: elasticsearch是實時全文索引,具備強大的搜索功能
配置相對簡單:elasticsearch所有使用JSON 接口,logstash使用模塊配置,kibana的配置文件部分更簡單。
檢索性能高效:基於優秀的設計,雖然每次查詢都是實時,可是也能夠達到百億級數據的查詢秒級響應。
集羣線性擴展:elasticsearch和logstash均可以靈活線性擴展
前端操做絢麗:kibana的前端設計比較絢麗,並且操做簡單前端
是一個高度可擴展的開源全文搜索和分析引擎,它可實現數據的實時全文搜索搜索、支持分佈式可實現高可用、提供API接口,能夠處理大規模日誌數據,好比Nginx、Tomcat、系統日誌等功能。node
能夠經過插件實現日誌收集和轉發,支持日誌過濾,支持普通log、自定義json格式的日誌解析。linux
主要是經過接口調用elasticsearch的數據,並進行前端數據可視化的展示。nginx
Beats在這裏是一個輕量級日誌採集器,其實Beats家族有6個成員,早期的ELK架構中使用Logstash收集、解析日誌,可是Logstash對內存、cpu、io等資源消耗比較高。相比 Logstash,Beats所佔系統的CPU和內存幾乎能夠忽略不計git
1.新建用戶es:useradd esgithub
2.下載包npm
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.6.0.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.6.0-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.6.0.tar.gz
wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-6.6.0-linux-x86_64.tar.gzjson
3.環境初始化化(IP 主機名 jdk git npm)bootstrap
4.解壓vim
tar xf elasticsearch-6.6.0.tar.gz
mv elasticsearch-6.6.0 es
mkdir data
mkdir logs
chown -R es. es/
cd es/config
vi elasticsearch.yml # 編輯內容
cluster.name: elk
node.name: node-1
path.data: /es/data #固然這個目錄能夠你本身定
path.logs: /es/logs #固然這個目錄能夠你本身定
network.host: 你這臺的ip
http.port: 9200
discovery.zen.ping.unicast.hosts: ["你的ip"]
http.cors.enabled: true # 開放插件head訪問
http.cors.allow-origin: "*" # 開放插件head訪問
bootstrap.system_call_filter: false
啓動
cd es
./bin/elasticsearch &
1、max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
異常緣由:單進程可打開文件數不夠
解決辦法:
sudo vim /etc/security/limits.conf
在最下面一行添加(具體數值看你報錯的數,按照他推薦的來):
es soft nofile 65536 # 軟限制,小於等於下面的數值
es hard nofile 65536 # 硬限制
返回後從新登陸該帳戶(否則數量不變化)
ulimit -Hn # 查看數量是否爲65536
2、max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
異常緣由:jvm最大進程數低
解決辦法:
sudo vim /etc/sysctl.conf
而後添加下面這行
vm.max_map_count=655360
保存退出,而後查看
sysctl -p # 顯示的數量爲更改後的就沒問題了
3、(個人服務器並未報這個異常)
memory locking requested for elasticsearch process but memory is not locked
解決辦法:
vim /etc/security/limits.conf
es - memlock unlimited
4、(個人服務器並未報這個異常)
max number of threads [3802] for user [elastic] is too low, increase to at least [4096]
解決辦法:
$ vim /etc/security/limits.d/20-nproc.conf
es - nproc 4096
最後敲下面這行命令若是顯示下面這樣的json就算成功了
curl http://192.168.66.128:9200
{
"name" : "node-1",
"cluster_name" : "elk",
"cluster_uuid" : "SgN1OKlHRy6eaeMKCEHJig",
"version" : {
"number" : "6.6.0",
"build_flavor" : "default",
"build_type" : "tar",
"build_hash" : "a9861f4",
"build_date" : "2019-01-24T11:27:09.439740Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
git clone https://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head/
sudo npm install -g grunt-cli
sudo npm install # 這一步我報錯了,安裝phantomjs錯誤,可是無大礙。
修改Gruntfile.js:
connect: {
server: {
options: {
port: 9100,
hostname: "*", # 新增
base: '.',
keepalive: true
}
}
}
});
修改_site/app.js # 若是很差找這一行,進入vi後非編輯狀態下輸入/localhost就找到了
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://你的ip:9200"; # 修改成本身的服務
grunt server #啓動命令
安裝logstash
tar xvf logstash-6.6.0.tar.gz
mv logstash-6.6.0 logstash
測試logstash服務是否正常
bin/logstash -e 'input { stdin { } } output { stdout {} }'
輸入hello 肯定
建立配置目錄和配置文件logstash/etc/nginx.conf
# 監聽5044端口做爲輸入
input {
beats {
port => "5044"
}
}
# 數據過濾
filter {
grok {
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
geoip {
source => "clientip"
}
}
# 輸出配置爲本機的9200端口,這是ElasticSerach服務的監聽端口
output {
elasticsearch {
hosts => ["192.168.66.128:9200"]
}
}
啓動服務
nohup bin/logstash -f etc/nginx.conf --config.reload.automatic &
安裝filebeat
解壓文件
vim filebeat.yml
enabled: true
- /var/log/nginx/*.log
#output.elasticsearch:
# hosts: ["localhost:9200"]
output.logstash:
hosts: ["192.168.66.128:5044"]
驗證:egrep -v '^$|#' filebeat.yml
啓動FileBeat
nohup ./filebeat -e -c filebeat.yml &>/dev/null &
安裝kibana
tar xvf kibana-6.6.0-linux-x86_64.tar.gz
mv kibana-6.6.0-linux-x86_64 kibana
vim kibana/config/kibana/yaml
server.port: 5601
server.host: "192.168.66.128"
server.name: "es"
elasticsearch.preserveHost: true
elasticsearch.username: "es"
elasticsearch.password: "es"
i18n.locale: "cn"
xpack.monitoring.ui.container.elasticsearch.enabled: "true"
啓動
bin/kibana
http://192.168.66.128:5601
Discover->輸入logstash-*,點擊」Next step」->選擇Time Filter,再點擊「Create index pattern」->頁面提示建立Index Patterns成功:
在下圖的此處能夠關鍵詞搜索:error*,也能夠查看nginx的報錯信息
配置tomcat
filebeat.yml添加
- type: log
enabled: true
paths:
- /usr/app/tomcat8087/logs/localhost_access_log.*.txt
重啓filebeat
kill -9 $(ps -ef | grep -i "filebeat" | awk '{print $2}')
nohup ./filebeat -e -c filebeat.yml &>/dev/null &
kibana搜索tomcat