ELK+Filebeat的流程應該是這樣的:Filebeat->Logstash->(Elasticsearch<->Kibana)由我們自己的程序產生出日志,由Filebeat進行處理,將日志數據輸出到Logstash中,Logstash再將數據輸出到Elasticsearch中,Elasticsearch再與Kibana相結合展示給用戶。
Elasticsearch: 能對大容量的數據進行接近實時的存儲,搜索和分析操作。
Logstash: 數據收集引擎,它支持動態的的從各種數據源獲取數據,並對數據進行過濾,分析,豐富,統一格式等操作,然后存儲到用戶指定的位置。
Kibana: 數據分析與可視化平台,對Elasticsearch存儲的數據進行可視化分析,通過表格的形式展現出來。
Filebeat: 輕量級的開源日志文件數據搜集器。通常在需要采集數據的客戶端安裝Filebeat,並指定目錄與日志格式,Filebeat就能快速收集數據,並發送給logstash進行解析,或是直接發給Elasticsearch存儲
ElasticSearch 搭建
首先 在local下面創建elk目錄 然后下載elasticsearch,logstash,kibana
cd usr/local
mkdir elk
解壓
tar -xzvf elasticsearch-6.6.0.tar.gz -C /usr/local/elk
tar -xzvf logstash-6.6.0.tar.gz -C /usr/local/elk
tar -xzvf kibana-6.6.0-linux-x86_64.tar.gz
root用戶建議不直接啟動es
[root@master-node ~]# vim /etc/elasticsearch/elasticsearch.yml # 增加或更改以下內容
查看后台命令是否啟動成功 ps aux|grep elasticsearch
這是出於系統安全考慮設置的條件。由於ElasticSearch可以接收用戶輸入的腳本並且執行,為了系統安全考慮,
建議創建一個單獨的用戶用來運行ElasticSearch
創建elsearch用戶組及elsearch用戶
groupadd elsearch
組名 密碼
useradd elsearch -g elsearch -p elk
更改elasticsearch文件夾及內部文件的所屬用戶及組為elsearch:elsearch
用root用戶執行 : chown -R 用戶名 文件夾名
chown -R elsearch:elsearch elasticsearch-6.6.0
elasticsearch-6.6.0為你elasticsearch的目錄名稱
切換到elsearch用戶再啟動
su elsearch #切換賬戶
cd elasticsearch/bin #進入你的elasticsearch目錄下的bin目錄
./elasticsearch
elasticsearch.yml 文件用於配置集群節點等相關信息的
cluster.name: master-node # 集群中的名稱
node.name: master # 該節點名稱
node.master: true # 意思是該節點為主節點
node.data: false # 表示這不是數據節點
network.host: 0.0.0.0 # 監聽全部ip,在實際環境中應設置為一個安全的ip
http.port: 9200 # es服務的端口號
discovery.zen.ping.unicast.hosts: ["192.168.77.128", "192.168.77.130", "192.168.77.134"] # 配置自動發現
[root@master-node ~]#
ElasticSearch后台啟動命令 ./elasticsearch
curl http://127.0.0.1:9200/
curl http://127.0.0.1:9200/
nohup./bin/elasticsearch&
異常:max virtual memory areas vm.max_map_count [65530]is too low, increase to at least [262144
vim etc/sysctl.conf
vm.max_map_count=262144
sysctl -p
sysctl -a|grep vm.max_map_count
顯示:
vm.max_map_count = 262144
異常:max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
#切換到root用戶修改
vim /etc/security/limits.conf
# 在最后面追加下面內容
*** hard nofile 65536
*** soft nofile 65536
elasticsearch要進行外網訪問,需要修改config目錄下elasticsearch.yml文件,
network.publish_host: 外網ip地址
network.host: 0.0.0.0 全網ip
查詢端口是否有進程守護用如下命令grep對應端口,如9200為端口號
例:netstat -nalp|grep 9200
注意順序,network.host 放上面,
但是外網是訪問不了的。
如果要配置成外網。需要把 network.publish_host : 配置成外網ip 即可。
在阿里雲上配置對外的開放的9200端口號

elasticsearch配置文件詳解
elasticsearch的config文件夾里面有兩個配置文 件:elasticsearch.yml和logging.yml,第一個是es的基本配置文件,第二個是日志配置文件,es也是使用log4j來記錄日 志的,所以logging.yml里的設置按普通log4j配置文件來設置就行了。下面主要講解下elasticsearch.yml這個文件中可配置的 東西。
cluster.name: elasticsearch
配置es的集群名稱,默認是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
node.name: "Franz Kafka"
節點名,默認隨機指定一個name列表中名字,該列表在es的jar包中config文件夾里name.txt文件中,其中有很多作者添加的有趣名字。
node.master: true
指定該節點是否有資格被選舉成為node,默認是true,es是默認集群中的第一台機器為master,如果這台機掛了就會重新選舉master。
node.data: true
指定該節點是否存儲索引數據,默認為true。
index.number_of_shards: 5
設置默認索引分片個數,默認為5片。
index.number_of_replicas: 1
設置默認索引副本個數,默認為1個副本。
path.conf: /path/to/conf
設置配置文件的存儲路徑,默認是es根目錄下的config文件夾。
path.data: /path/to/data
設置索引數據的存儲路徑,默認是es根目錄下的data文件夾,可以設置多個存儲路徑,用逗號隔開,例:
path.data: /path/to/data1,/path/to/data2
path.work: /path/to/work
設置臨時文件的存儲路徑,默認是es根目錄下的work文件夾。
path.logs: /path/to/logs
設置日志文件的存儲路徑,默認是es根目錄下的logs文件夾
path.plugins: /path/to/plugins
設置插件的存放路徑,默認是es根目錄下的plugins文件夾
bootstrap.mlockall: true
設置為true來鎖住內存。因為當jvm開始swapping時es的效率 會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。 同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過`ulimit -l unlimited`命令。
network.bind_host: 192.168.0.1
設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0。
network.publish_host: 192.168.0.1
設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址。
network.host: 192.168.0.1
這個參數是用來同時設置bind_host和publish_host上面兩個參數。
transport.tcp.port: 9300
設置節點間交互的tcp端口,默認是9300。
transport.tcp.compress: true
設置是否壓縮tcp傳輸時的數據,默認為false,不壓縮。
http.port: 9200
設置對外服務的http端口,默認為9200。
http.max_content_length: 100mb
設置內容的最大容量,默認100mb
http.enabled: false
是否使用http協議對外提供服務,默認為true,開啟。
gateway.type: local
gateway的類型,默認為local即為本地文件系統,可以設置為本地文件系統,分布式文件系統,hadoop的HDFS,和amazon的s3服務器,其它文件系統的設置方法下次再詳細說。
gateway.recover_after_nodes: 1
設置集群中N個節點啟動時進行數據恢復,默認為1。
gateway.recover_after_time: 5m
設置初始化數據恢復進程的超時時間,默認是5分鍾。
gateway.expected_nodes: 2
設置這個集群中節點的數量,默認為2,一旦這N個節點啟動,就會立即進行數據恢復。
cluster.routing.allocation.node_initial_primaries_recoveries: 4
初始化數據恢復時,並發恢復線程的個數,默認為4。
cluster.routing.allocation.node_concurrent_recoveries: 2
添加刪除節點或負載均衡時並發恢復線程的個數,默認為4。
indices.recovery.max_size_per_sec: 0
設置數據恢復時限制的帶寬,如入100mb,默認為0,即無限制。
indices.recovery.concurrent_streams: 5
設置這個參數來限制從其它分片恢復數據時最大同時打開並發流的個數,默認為5。
discovery.zen.minimum_master_nodes: 1
設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對於大的集群來說,可以設置大一點的值(2-4)
discovery.zen.ping.timeout: 3s
設置集群中自動發現其它節點時ping連接超時時間,默認為3秒,對於比較差的網絡環境可以高點的值來防止自動發現時出錯。
discovery.zen.ping.multicast.enabled: false
設置是否打開多播發現節點,默認是true。
discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點。
安裝elasticsearch -head 插件
tar xvf node-v10.15.1-linux-x64.tar.xz
unzip master.zip
export NODE_PATH=/usr/local/node/node-v10.15.1-linux-x64
export PATH=$PATH:$JAVA_HOME/bin:$NODE_PATH/bin
.配置head
進入head文件中
執行 npm install -g grunt-cli
執行 npm install ,此過程會下載phantomjs (運行npm install時,可能PhantomJS not found on PATH ...可執行 npm install latest)
1.修改 elasticsearch/config/elasticsearch.yml
http.cors.enabled: true
http.cors.allow-origin: "*"
(2):修改elasticsearch-head下的Gruntfile.js
#其中增加一個
hostname: '0.0.0.0' 或者是 hostname: '*'
(3)cd /usr/local/es/elasticsearch-head/_site/
vim app.js
打開文件 在命令行模式輸入 “/this.base_uri” 進行搜索
然后修改為
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "
http://you ip address:9200";
打開文件 在命令行模式輸入 “/this.base_uri” 進行搜索
然后修改為
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://172.19.208.138:9200";
啟動elasticsearch
/usr/local/es/node-1/bin/elasticsearch -d
啟動elasticsearch-head服務
/usr/local/es/elasticsearch-head/node_modules/grunt/bin/grunt server
如果要后台啟動 nohup /usr/local/es/elasticsearch-head/node_modules/grunt/bin/grunt server & exit
Logstash配置
Logstash其實就是一個收集器,使用時需要為它指定Input和Output(Input和Output可以為多個)。比如若把Java代碼中Log4j的日志輸出到ElasticSearch中,Input就是Log4j,而Output就是ElasticSearch。
配置文件
這里配置輸入filebeat.輸出到ElasticSearch.
# bin/logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
然后隨意輸入hello 回車,然后看看返回結果

這樣安裝就沒有問題 。
bin目錄新建 logstash.conf
然后通過 bin/logstash -f logstash.conf 這樣的形式來運行。
此外,logstash 還提供一個方便我們規划和書寫配置的小功能.可以直接用 bin/logstash -f /etc/logstash.d/ 來運行。
logstash 會自動讀取 /etc/logstash.d/ 目錄下所有 *.conf 的文本文件,然后在自己內存里拼接成一個完整的大配置文件,再去執行。
新建 logstash.conf

遇到的問題:
(/usr/local/elk/elasticsearch-6.6.0/logs/master-node.log) java.io.FileNotFoundException: /usr/local/elk/elasticsearch-6.6.0/logs/master-node.log (Permission denied) java.io.FileNotFoundException: /usr/local/elk/elasticsearch-6.6.0/logs/master-node.log (Permission denied)
修改log日志文件的所屬權【選操作,如果已經是要啟動的用戶,則無視】
修改logs/master-node.log
chown elsearch master-node.log
chgrp elsearch master-node.log
異常 IllegalStateException
Caused by: java.lang.IllegalStateException: failed to obtain node locks, tried [[/opt/elasticsearch-5.5.2/data/ymq]] with lock id [0]; maybe thes
刪除 安裝目錄下/data
rm -rf nodes
Kibana
配置文件
在kibana的config目錄下kibana.yml
# Kibana is served by a back end server. This setting specifies the port to use.
server.port: 5601
# To allow connections from remote users, set this parameter to a non-loopback address.
server.host: "localhost"
# The URL of the Elasticsearch instance to use for all your queries.
# 這里配置的Elasticsearch的鏈接地址
elasticsearch.url: "http://192.168.2.12:9200"
# Kibana uses an index in Elasticsearch to store saved searches, visualizations and
# dashboards. Kibana creates a new index if the index doesn't already exist.
kibana.index: ".kibana"
filebeats 安裝
tar -zxvf filebeat-6.6.0-linux-x86_64.tar.gz
filebeat配置:
cd usr/local/elk/filebeat-6.6.0/
vim filebeat.yml

修改配置filebeat.yml:
- input_type: log
# Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*.log
- /opt/ywxt/log/*.log #修改掃描輸入路徑(可以配置多個路徑)
屏蔽elasticsearch 配置
當filebeats配合logstash使用,需要手動load the index template in ElasticSearch,就是filberts直連ElasticSearch load 數據,命令如下:
./filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["172.19.208.138:9200"]'
啟動:

./filebeat -e -c filebeat.yml
默認的Elasticsearch需要的index template在安裝Filebeat的時候已經提供,路徑為/etc/filebeat/filebeat.template.json,可以使用如下命令裝載該模板:
$ curl -XPUT '
http://localhost:9200/_template/filebeat?pretty' -d@/etc/filebeat/filebeat.template.json
1
當然,也不能忘了,每次修改完Filebeat的配置后,需要重啟Filebeat才能讓改動的配置生效。
修改filebeat配置
setup.template.name: "filebeat"
setup.template.fields: "fields.yml"
setup.template.overwrite: false
setup.template.settings:
_source.enabled: false
Filebeat附帶了示例Kibana儀表板,可視化和搜索,以便在Kibana中可視化Filebeat數據。在使用儀表板之前,
您需要創建索引模式filebeat-*,並將儀表板加載到Kibana中。為此,您可以運行setup命令(如此處所述)或在配置文件中配置儀表板加載filebeat.yml。(我這里暫時選用此種方式)
filebeat setup --dashboards
../bin/logstash -f logstash.conf

這需要注意默認是開啟es的,注釋掉,配置logstsah