ELK6.5.4安裝文檔
1.本地環境介紹
IP |
用戶 |
組件 |
192.168.10.124 |
elk |
elasticsearch ,head |
192.168.10.184 |
elk |
kibana,kibana漢化 |
192.168.10.116 |
elk |
logstash,測試日志 |
2. Elasticsearch
2.1 elasticsearch基本概念
Index
類似於mysql數據庫中的database
Type
類似於mysql數據庫中的table表,es中可以在Index中建立type(table),通過mapping進行映射。
Document
由於es存儲的數據是文檔型的,一條數據對應一篇文檔即相當於mysql數據庫中的一行數據row,一個文檔中可以有多個字段也就是mysql數據庫一行可以有多列。
Field
es中一個文檔中對應的多個列與mysql數據庫中每一列對應
Mapping
可以理解為mysql或者solr中對應的schema,只不過有些時候es中的mapping增加了動態識別功能,感覺很強大的樣子,其實實際生產環境上不建議使用,最好還是開始制定好了對應的schema為主。
indexed
就是名義上的建立索引。mysql中一般會對經常使用的列增加相應的索引用於提高查詢速度,而在es中默認都是會加上索引的,除非你特殊制定不建立索引只是進行存儲用於展示,這個需要看你具體的需求和業務進行設定了。
Query DSL
類似於mysql的sql語句,只不過在es中是使用的json格式的查詢語句,專業術語就叫:QueryDSL
GET/PUT/POST/DELETE
分別類似與mysql中的select/update/delete......
2.2 JDK安裝
需要jdk1.8以上版本,網上下載
配置環境變量:
***************************************************
JAVA_HOME=/root/baiyang/jdk1.7.0_80 #jdk安裝路徑
PATH=$JAVA_HOME/bin:$PATH
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME
export PATH
export CLASSPATH
***************************************************
2.3 Elasticsearch6.5.4 安裝
2.3.1 安裝
下載地址:https://www.elastic.co/cn/downloads
#Elasticsearch 默認不允許用root用戶登錄,會報錯,如果真想用root需要進行配置
1.創建用戶useradd ekl
2.修改密碼:root 用戶下 passwd elk
3.上傳壓縮包到/home/elk
4.Tar -zxvf elasticsearch-6.5.4.tar.gz
5.系統啟動:[elk@myhost bin]$ ./elasticsearch ,
后台啟動 nohup ./elasticsearch &
- 配置文件修改
*****************************************************
#集群地址
discovery.zen.ping.unicast.hosts: ["192.168.10.124", "127.0.0.1"]
#主節點數
discovery.zen.minimum_master_nodes: 1
#集群名稱
cluster.name: my-application
#節點名稱
node.name: node-1
#日志路徑
path.data: /home/elk/elasticsearch-6.5.4/data
path.logs: /home/elk/elasticsearch-6.5.4/log
#監聽ip端口
network.host: 192.168.10.124
http.port: 9200
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: "*"
*****************************************************
2.3.2 主機參數修改
修改參數是為了解決es啟動時的這三個報錯
[1]: max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
[2]: memory locking requested for elasticsearch process but memory is not locked
[3]: system call filters failed to install; check the logs and fix your configuration or disable system call filters at your own risk
vi /etc/sysctl.conf
添加下面配置:
*********************************
vm.max_map_count=655360
*********************************
並執行命令:
sysctl -p
vi /etc/security/limits.con
#正常只需要修改此文件就OK,elk soft nofile 65536,此處elk可以改為*,但是部分系統如unbuntu會有bug,*不好使,所以可以指定用戶
*********************************
* soft nproc 4096
* hard nproc 4096
root soft nproc unlimited
elk soft nofile 65536
elk hard nofile 65536
*********************************
#如果上面修改沒有生效,那么修改下面文件,系統會優先加載下面文件,並且會覆蓋上面文件,如果使上面文件生效,可以直接清空下面文件
Vi /etc/security/limits.d/90-nproc.conf
*********************************
* soft nproc 65535
elk soft nproc 65535
*********************************
2.4 head插件安裝
2.4.1 Head 插件簡介
就是一個界面化的es集群調試工具,沒有這個也可以通過命令調試,但是非常非常麻煩
2.4.2 head插件安裝
手動下載:下載地址:https://github.com/mobz/elasticsearch-head;點擊clone or download按鈕,點擊download zip進行下載。下載完畢后解壓放在elasticsearch平級路徑上。
說明:5.6版本不能用/bin/plugin -install mobz/elasticsearch-head安裝了(好像5.x之前的版本可以這么安裝)
也可以在命令下載:
2.4.3 node.js安裝
這個比較容易,下載后除路徑自己填寫外,其他直接next就OK了。下載地址:https://nodejs.org/en/download/ 。
源碼安裝方法:
yum -y install gcc make gcc-c++ openssl-devel wget
下載源碼及解壓: wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar -zvxf node-v0.10.26.tar.gz
編譯及安裝: cd node-v0.10.26
make && make install
驗證是否安裝配置成功: node -v
2.4.3 grunt安裝
cd elasticsearch-head-master
npm install -g grunt-cli //執行后會生成node_modules文件夾
npm install
修改 vim _site/app.js 文件:修改head的連接地址:
this.base_uri = this.config.base_uri || this.prefs.get(“app-base_uri”) || “http://localhost:9200“;
修改成ElasticSearch的機器地址
this.base_uri = this.config.base_uri || this.prefs.get(“app-base_uri”) || “http://192.168.0.153:9200“;
修改完成你就可以啟動head插件了:在 elasticsearch-head-master下啟動服務
cd elasticsearch-head-master
grunt server & #后台啟動
3. Logstash
3.1安裝
下載,上傳,解壓,無特殊說明
3.2配置
*************************************************
node.name: logstash.node1
#path.data: /home/elk/elk/logstash-6.5.4/data
#pipeline.workers: 2
#pipeline.output.workers: 1
#pipeline.batch.size: 125
#path.config: /
#config.reload.automatic: true
#onfig.reload.interval: 60
#path.logs: /home/elk/elk/logstash-6.5.4/log
#http.host: 192.168.10.170
#http.port: 5000-9700
#log.level: info
#log.format: * plain*
#path.plugins
*************************************************
3.3調試
屏幕調試模式:
單機調試:logstash -e 'input{stdin{}}output{stdout{codec=>rubydebug}}'
連接遠程elasticsearch調試:
[elk@myhost bin]$ ./logstash -e 'input {
stdin{}
}
output{
elasticsearch{ hosts=>["http://192.168.10.124:9200"]}
}'
------------------------------------------------------------------------------------------
input {
beats {
port => 5044
}
file {
#日志路徑
path => ["/data/*"]
#日志類型 kibana能用到,logstash也能用到這個參數
type => "system"
start_position => "beginning"
}
}
output {
elasticsearch {
hosts =>["http://192.168.10.124:9200"]
index =>"data_log-%{+YYYY.MM.dd}"
}
stdout {
codec=>"rubydebug"
}
}
------------------------------------------------------------------------------------------
可以將上面配置寫入一個配置文件 xxx.conf
Logstash/Bin 下 ./logstash -f xxx.comf
3.4.插件簡解
3.4.1File插件
使用,輸入,讀取日志位置
File插件講解:beginning ,會從path 路徑文件頭開始讀取,會把讀取位置存儲到本地數據庫
/home/elk/elk/logstash-6.5.4/data/plugins/inputs/file
下次繼續從該位置開始讀取
想要從新讀取,刪除數據庫文件
3.4.2multline插件
正則表達式過濾,將 [ 開頭視為一行的開始
3.4.3Grop ,kv插件
過濾,拆分
Filter 過濾器參數和在線調試工具
3.4.4Json 插件
讀取json格式文件
3.4.5Geoip 插件
通過ip,判斷ip來源,屬於哪個地方,哪個城市
4、Kibana
4.1安裝
啟動 bin目錄下 ./kabana
配置文件修改conf目錄下,kibana.yml
server.port : 5601
server.host : 192.168.10.184 #本機
elasticsearch.url : http://192.168.10.124:9200
下面配置測試未生效
********************************
#解決頁面訪問Kibana server is not ready yet
kibana.index: ".newkibana"
xpack.security.enabled: false
npm update caniuse-lite browserslist
********************************
啟動報錯:如報錯末尾出現[waring] 具體內容忘了,提示等待或者重啟kinaba
需要在elasticsearch -head 插件界面上 刪除kinaba的索引並重啟kibana,
命令行應該也能刪除,可惜不會
4.2 Kibana漢化
啟動:bin目錄下./kibana
kibana [kɪbana]
需要安裝python環境
# 下載並解壓 wget https://github.com/anbai-inc/Kibana_Hanization/archive/master.zip
unzip master.zip
cd master
# 漢化 python main.py Kibana目錄
將索引變為非只讀,解決kibana啟動時報錯,報錯具體內容忘了,大概意思就是索引加載失敗
5.ELK的訪問認證
建議用ng代理實現,找人配置
6.ELK環境信息收集
1.ELK主機環境,cpu,內存,磁盤,主機個數
2.日志收集方式,文件,端口。。。
3.日志類別,系統日志,服務日志,ng日志。。。
4.日志服務器個數,cpu,內存
5.日志過濾規則
6.日志收集規則,全部收集,部分收集
7.ELK 目標要求,具體做什么
8.日志大小,單位時間大小
9.日志留存規則,留存時間,備份數目
7.ELK性能優化,參數配置
以下為網上搜索來的,原鏈接都在下面
------------------------------------------------ES優化-----------------------------------------------
參考文檔https://blog.csdn.net/cjfeii/article/details/79771409
Index 月為單位做索引
Cluster 3
index.number_of_shards 分片大小32G(預估一下)左右,數量<50
index.number_of_replicas 2(2個副本加上自己就三個)
index.translog.durability:async 異步持久化
index.translog.sync_interval:60s 1分鍾一寫入
index.refresh_interval 索引刷新時間,默認1s,寫入慢可以加長
client: Bulk write
4. ElasticSearch
index.number_of_shards:36
index.number_of_replicas:0
index.refresh_interval:60s
index.translog.durability:async
index.translog.sync_interval:60s
Mapping.all.enabled:false
client: Bulk write
bulk寫入能成倍的提升寫入性能
建議的bulk大小是:5-15MB,這個寫入能力是根據logstash 日志大小,單位寫入數量來計算
--------------------------------logstash優化-------------------------------------------------
worker: 40
batch_size: 150
Input.consumer_threads:5
Output.flush_size:1500
Output.idle_flush_time:30
Output.workers: 20
Filter.grok
單機寫入提升: 2000/s -> 18000/s
worker
logstash worker的數量,默認是機器cpu的核心數
logstash的瓶頸一般都在filter上,增大worker的數量,可以有效提升filter的效率
可以設置為略高於CPU核心數
./bin/logstash -w 48 ...
batch_size
表示worker一次批量處理的數據條數,默認是150
和ES的bulk寫入有關系:worker * batch_size / flush_size = ES bulk index api 調用次數
./bin/logstash -w 48 -b 300 ...
Input.consumer_threads
該參數用於標識消費者的線程數,是在logstash.conf中指定的
該參數標識至少會占用kafka的partition的數目
配置的時候需要注意,避免占用過多的partition,導致其他logstash進程餓死
Output.flush_size&Output.idle_flush_time
用來表示flush的大小以及頻率
控制着bulk的大小
Filter.grok
grok是logstash的filter插件中的功能,用來對日志數據進行正則匹配實現各個字段的切割
增加錨點可以有效提升性能,比如:^、$等
使用合適的類型去分割字段,盡量避免使用DATA
------------------------------------------------------------------------------------------
ElasticSearch配置文件說明
1、cluster.name:elasticsearch
配置es的集群名稱,默認是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群。
2、node.name:”FranzKafka”
節點名,默認隨機指定一個name列表中名字,該列表在es的jar包中config文件夾里name.txt文件中,其中有很多作者添加的有趣名字。
3、node.master:true
指定該節點是否有資格被選舉成為node,默認是true,es是默認集群中的第一台機器為master,如果這台機掛了就會重新選舉master。
4、node.data:true
指定該節點是否存儲索引數據,默認為true。
5、index.number_of_shards:5
設置默認索引分片個數,默認為5片。
6、index.number_of_replicas:1
設置默認索引副本個數,默認為1個副本。
7、path.conf:/path/to/conf
設置配置文件的存儲路徑,默認是es根目錄下的config文件夾。
8、path.data:/path/to/data
設置索引數據的存儲路徑,默認是es根目錄下的data文件夾,可以設置多個存儲路徑,用逗號隔開,例:path.data:/path/to/data1,/path/to/data2
9、path.work:/path/to/work
設置臨時文件的存儲路徑,默認是es根目錄下的work文件夾。
10、path.logs:/path/to/logs
設置日志文件的存儲路徑,默認是es根目錄下的logs文件夾
11、path.plugins:/path/to/plugins
設置插件的存放路徑,默認是es根目錄下的plugins文件夾
12、bootstrap.mlockall:true
設置為true來鎖住內存。因為當jvm開始swapping時es的效率會降低,所以要保證它不swap,可以把ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過ulimit-l unlimited命令。
13、network.bind_host:192.168.0.1
設置綁定的ip地址,可以是ipv4或ipv6的,默認為0.0.0.0。
14、network.publish_host:192.168.0.1
設置其它節點和該節點交互的ip地址,如果不設置它會自動判斷,值必須是個真實的ip地址。
15、network.host:192.168.0.1
這個參數是用來同時設置bind_host和publish_host上面兩個參數。
16、transport.tcp.port:9300
設置節點間交互的tcp端口,默認是9300。
17、transport.tcp.compress:true
設置是否壓縮tcp傳輸時的數據,默認為false,不壓縮。
18、http.port:9200
設置對外服務的http端口,默認為9200。
19、http.max_content_length:100mb
設置內容的最大容量,默認100m
20、http.enabled:false
是否使用http協議對外提供服務,默認為true,開啟。
21、gateway.type:local
gateway的類型,默認為local即為本地文件系統,可以設置為本地文件系統,分布式文件系統,hadoop的HDFS,和amazon的s3服務器,其它文件系統的設置方法下次再詳細說。
22、gateway.recover_after_nodes:1
設置集群中N個節點啟動時進行數據恢復,默認為1。
23、gateway.recover_after_time:5m
設置初始化數據恢復進程的超時時間,默認是5分鍾。
24、gateway.expected_nodes:2
設置這個集群中節點的數量,默認為2,一旦這N個節點啟動,就會立即進行數據恢復。
25、cluster.routing.allocation.node_initial_primaries_recoveries:4
初始化數據恢復時,並發恢復線程的個數,默認為4。
26、cluster.routing.allocation.node_concurrent_recoveries:2
添加刪除節點或負載均衡時並發恢復線程的個數,默認為4。
27、indices.recovery.max_size_per_sec:0
設置數據恢復時限制的帶寬,如入100mb,默認為0,即無限制。
28、indices.recovery.concurrent_streams:5
設置這個參數來限制從其它分片恢復數據時最大同時打開並發流的個數,默認為5。
29、discovery.zen.minimum_master_nodes:1
設置這個參數來保證集群中的節點可以知道其它N個有master資格的節點。默認為1,對於大的集群來說,可以設置大一點的值(2-4)
30、discovery.zen.ping.timeout:3s
設置集群中自動發現其它節點時ping連接超時時間,默認為3秒,對於比較差的網絡環境可以高點的值來防止自動發現時出錯。
31、discovery.zen.ping.multicast.enabled:false
設置是否打開多播發現節點,默認是true。
32、discovery.zen.ping.unicast.hosts:[“host1”, “host2:port”,”host3[portX-portY]”]
設置集群中master節點的初始列表,可以通過這些節點來自動發現新加入集群的節點
參考文檔
Es分片和副本操作https://blog.csdn.net/jiao_fuyou/article/details/50501717
Es 配置文件中文詳解https://blog.csdn.net/baicd1990/article/details/79287517
外部無法訪問解決辦法
需要修改network.host為實際ip或0.0.0.0,還無法連接應該是端口被防火牆攔截,建議使用方法一開啟相關端口
方法一:開始相關端口
- 編輯/etc/sysconfig/iptables文件:vi /etc/sysconfig/iptables
加入內容並保存:-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 8080 -j ACCEPT
2.重啟服務:/etc/init.d/iptables restart
3.查看端口是否開放:/sbin/iptables -L -n
方法二:命令行開啟防火牆
1.開啟防火牆:systemctl start firewalld.service
2.開啟5601端口:firewall-cmd --permanent --zone=public --add-port=5601/tcp
3.重啟防火牆:firewall-cmd –reload
方法三:關閉防火牆
1) 重啟后生效
開啟: chkconfig iptables on
關閉: chkconfig iptables off
2) 即時生效,重啟后失效
開啟: service iptables start
關閉: service iptables stop