ELK 安裝過程


ELK6.5.4安裝文檔

1.本地環境介紹

 

IP   

用戶

組件  

192.168.10.124

elk

elasticsearch head

192.168.10.184

elk

kibanakibana漢化

192.168.10.116

elk

logstash,測試日志

 

 

2. Elasticsearch

2.1 elasticsearch基本概念

Index

 

  類似於mysql數據庫中的database

  

Type

 

  類似於mysql數據庫中的table表,es中可以在Index中建立typetable),通過mapping進行映射。

  

Document

 

  由於es存儲的數據是文檔型的,一條數據對應一篇文檔即相當於mysql數據庫中的一行數據row,一個文檔中可以有多個字段也就是mysql數據庫一行可以有多列。

  

Field

  es中一個文檔中對應的多個列與mysql數據庫中每一列對應

  

Mapping

 

  可以理解為mysql或者solr中對應的schema,只不過有些時候es中的mapping增加了動態識別功能,感覺很強大的樣子,其實實際生產環境上不建議使用,最好還是開始制定好了對應的schema為主。

  

 

indexed

 

  就是名義上的建立索引。mysql中一般會對經常使用的列增加相應的索引用於提高查詢速度,而在es中默認都是會加上索引的,除非你特殊制定不建立索引只是進行存儲用於展示,這個需要看你具體的需求和業務進行設定了。

 

Query DSL

 

  類似於mysqlsql語句,只不過在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 &

  1. 配置文件修改

*****************************************************

#集群地址

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

#正常只需要修改此文件就OKelk 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安裝

這個比較容易,下載后除路徑自己填寫外,其他直接nextOK了。下載地址: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為實際ip0.0.0.0,還無法連接應該是端口被防火牆攔截,建議使用方法一開啟相關端口

方法一:開始相關端口

  1. 編輯/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 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM