elasticsearch+kibana+logstash 安裝部署


 

1、安裝Elastic Search

ElasticSearch是一個基於Lucene構建的開源,分布式,RESTful搜索引擎 

 

1.1、下載Elastic Search

使用的es版本為1.3.2

wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.zip

解壓

unzip elasticsearch-1.3.2.zip

1.2、配置Elastic Search

es的配置文件在/config/elasticsearch.yml  (ps:以下的目錄路徑都是/elasticsearch-1.3.2/下)

配置如下: 

cluster.name: elasticsearch // 配置es的集群名稱,默認是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個集群,就可以用這個屬性來區分不同的集群
node.name: "Squirrel" //es節點名稱,做標識用,可隨意定義
http.enabled: true //是否使用http協議對外提供服務,默認為true,開啟
http.port: 9200 //設置對外服務的http端口,默認為9200

1.3、啟動Elastic Search

直接啟動

bin/elasticsearch

后台啟動

nohup /bin/elasticsearch > /logs/elasticsearch.log 2>&1 &

訪問http://localhost:9200/如下圖:

安裝成功!

分布式集群部署就是在不同機子上重復以上操作即可

1.4、安裝Elastic Search插件

 

  elasticsearch-head插件

安裝命令:bin/plugin --install mobz/elasticsearch-head

 

安裝完成后,訪問http://localhost:9200/_plugin/head/即可使用head插件,如下圖

 

 

  bigdesk插件

安裝命令:bin/plugin --install lukas-vlcek/bigdesk

安裝完成后,訪問http://localhost:9200/_plugin/bigdesk/即可使用bigdesk插件,如下圖

 

  

 ElasticSearch Paramedic插件

安裝命令:bin/plugin -install karmi/elasticsearch-paramedic
 安裝完成后,訪問http://localhost:9200/_plugin/paramedic/即可使用Paramedic插件,如下圖

 

1.5、Elastic Search配置

 

如果你的elasticsearch運行在專用服務器上,經驗值是分配一半內存給elasticsearch。另一半用於系統緩存,這東西也很重要的。

你可以通過修改ES_HEAP_SIZE環境變量來改變這個設定。在啟動elasticsearch之前把這個變量改到你的預期值。另一個選擇設置elasticsearch的ES_JAVA_OPTS變量,這個變量時在啟動腳本(elasticsearch.in.sh或elasticsearch.bat)里傳遞的。你必須找到-Xms和-Xmx參數,他們是分配給進程的最小和最大內存。建議設置成相同大小。ES_HEAP_SIZE其實就是干的這個作用。

設置該值的文件路徑為:bin/elasticsearch.in.sh

#修改ES占用的內存大小,可根據服務器情況而定。
#例如服務器有24G內存,因此將一半給ES使用 if [ "x$ES_MIN_MEM" = "x" ]; then ES_MIN_MEM=10g fi if [ "x$ES_MAX_MEM" = "x" ]; then ES_MAX_MEM=10g fi #關於線程大小,主要是考慮到ES雖然會開很多線程,但承載的數據量較大,同時Xss並不是直接分配掉設定的內存,所以進行如下設置。 JAVA_OPTS="$JAVA_OPTS -Xss128m"


當jvm開始swapping時es的效率會降低,所以要保證它不swap,在/config/elasticsearch.yml配置文件中配置強制所有內存鎖定,不要因為swap的來影響性能,設置為bootstrap.mlockall為true來鎖住內存。通過上面配置ES_MIN_MEM和ES_MAX_MEM兩個環境變量設置成同一個值,並且保證機器有足夠的內存分配給es。同時也要允許elasticsearch的進程可以鎖住內存,linux下可以通過`ulimit -l unlimited`命令。

bootstrap.mlockall: true  


/config/elasticsearch.yml 配置文件的其他配置說明如下:

# 由於ES基於廣播方式發現集群內的服務器,所以配置起來相對簡單
# 集群名稱可以自動生成,當然也可以手動配置。如果你想要在同一網絡中運行多個集群,就需要獨一無二的集群名來區分他們
cluster.name: elasticsearch
# 節點名稱同理,可自動生成也可手動配置。
node.name: "Squirrel"
# 配置該節點為主節點(默認開啟)
# node.master: true
# 允許該節點存儲數據(默認開啟)
# node.data: true
# 一些高級的集群配置
# 1. 如果你想讓節點從不選舉為主節點,只用來存儲數據,可作為負載器
# node.master: false
# node.data: true
#
# 2. 如果想讓節點成為主節點,且不存儲任何數據,並保有空閑資源,可作為協調
# node.master: true
# node.data: false
#
# 3. 如果想讓節點既不稱為主節點,又不成為數據節點,那么可將他作為搜索器,從節點中獲取數據,生成搜索結果等。
# node.master: false
# node.data: false
# 
# 設置索引的分片數,默認為5
# index.number_of_shards: 5
# 設置索引的副本數,默認為1
# 配置文件中提到的最佳實踐是,如果服務器夠多,可以將分片書提高,將數據分布到大集群中去
# 同時,如果增加副本數量可以有效的提高搜索性能
# 由於我現在集群較小,所以仍使用默認配置

# 配置文件存儲位置
path.conf: /usr/local/elasticsearch-1.3.2/config   # 數據存儲位置
path.data: /syslog/ESdata
# 臨時文件的路徑
# path.work: /path/to/work
# 日志文件的路徑
# path.logs: /path/to/logs
# 插件安裝路徑
# path.plugins: /path/to/plugins

# 當JVM開始寫入交換空間時(swapping)ElasticSearch性能會低下,你應該保證它不會寫入交換空間
# 設置這個屬性為true來鎖定內存
bootstrap.mlockall: true

# 下面的配置控制怎樣以及何時啟動一整個集群重啟的初始化恢復過程
# (當使用shard gateway時,是為了盡可能的重用local data(本地數據))

# 一個集群中的N個節點啟動后,才允許進行恢復處理
#
gateway.recover_after_nodes: 1

# 設置初始化恢復過程的超時時間,超時時間從上一個配置中配置的N個節點啟動后算起
#
gateway.recover_after_time: 5m
# 設置這個集群中期望有多少個節點。一旦這N個節點啟動(並且recover_after_nodes也符合),
# 立即開始恢復過程(不等待recover_after_time超時)
#
gateway.expected_nodes: 2

# 下面這些配置允許在初始化恢復,副本分配,再平衡,或者添加和刪除節點時控制節點間的分片分配
# 設置一個節點的並行恢復數
# 1. 初始化恢復期間
cluster.routing.allocation.node_initial_primaries_recoveries: 4
#
# 2. 添加/刪除節點,再平衡等期間
cluster.routing.allocation.node_concurrent_recoveries: 4
# 設置恢復時的吞吐量(例如,100mb,默認為無限制。如果同上聯還有其他業務在跑的話還是限制一下的好)
#
indices.recovery.max_size_per_sec: 400mb
# Set to limit the number of open concurrent streams when
# recovering a shard from a peer:
# 設置當一個分片從對等點恢復時能夠打開的並發流的上限
indices.recovery.concurrent_streams: 5

# 多播的就不翻了,就兩條,自己看配置文件
# 當多播不可用或者集群跨網段的時候集群通信還是用單播吧
# 探查的超時時間,默認3秒,提高一點以應對網絡不好的時候
discovery.zen.ping.timeout: 20s
# 1. 禁用多播探查(默認可用)
# discovery.zen.ping.multicast.enabled: false
#
# 2. 這是一個集群中的主節點的初始列表,當節點(主節點或者數據節點)啟動時使用這個列表進行探測
# discovery.zen.ping.unicast.hosts: ["host1", "host2:port", "host3[portX-portY]"]
discovery.zen.ping.unicast.hosts: ["192.168.69.9", "192.168.69.10"]

# out of memory錯誤 避免過於頻繁的查詢時集群假死
# 1.設置es的緩存類型為Soft Reference,它的主要特點是據有較強的引用功能。只有當內存不夠的時候,才進行回收這類內存,因此在內存足夠的時候,它們通常不被回收。另外,這些引 用對象還能保證在Java拋出OutOfMemory 異常之前,被設置為null。它可以用於實現一些常用圖片的緩存,實現Cache的功能,保證最大限度的使用內存而不引起OutOfMemory。在es的配置文件加上index.cache.field.type: soft即可。
# 2.設置es最大緩存數據條數和緩存失效時間,通過設置index.cache.field.max_size: 50000來把緩存field的最大值設置為50000,設置index.cache.field.expire: 10m把過期時間設置成10分鍾。
index.cache.field.max_size: 50000
index.cache.field.expire: 10m
index.cache.field.type: soft

  




 

2、安裝Kibana


Kibana 是一個為 Logstash 和 ElasticSearch 提供的日志分析的 Web 接口。可使用它對日志進行高效的搜索、可視化、分析等各種操作。




2.1、下載Kibana

使用的版本為3.1.0

wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.zip

解壓

unzip kibana-3.1.0.zip

2.2、配置Kibana

kibana的配置文件為kibana-3.1.0/config.js
修改如下值:
elasticsearch: "http://"+window.location.hostname+":9200" 修改為
elasticsearch: "http://localhost:9200"elasticsearch: "http://192.168.69.xxx:9200"
此屬性值為kibana與es集成時,關聯es的IP和端口

kibana是一個web服務,完全由js實現,所以配置完成之后,部署到任何一種web服務器上就可以使用了,以下是部署到Tomcat中的操作
將kibana拷貝到tomcat中
cp -r kibana-3.1.0/* tomcat/webapps/ROOT/
啟動tomcat
tomcat/bin/catalina.sh start
訪問http:localhost:8080/即可訪問kibana界面了,如下圖:



此時的es中沒有數據,所以kibana也沒有數據進行展示,接下來就可以安裝Logstash,采集數據到es中,再通過kibana進行實時查詢了






3、安裝Logstash

 

Logstash 是一個應用程序日志、事件的傳輸、處理、管理和搜索的平台。你可以用它來統一對應用程序日志進行收集管理


3.1、下載Logstash 

使用的Logstash版本為1.4.2

wget https://download.elasticsearch.org/logstash/logstash/logstash-1.4.2.tar.gz

解壓Logstash

tar -zvxf logstash-1.4.2.tar.gz

3.2、啟動Logstash 

Logstash 可以抓取多種數據,以下是Logstash官網的展示(地址:http://www.logstash.net/docs/1.4.2/)




進入logstash-1.4.2目錄執行命令啟動Logstash

bin/logstash -e 'input {
  stdin{}  
}

output {
  elasticsearch { host => localhost }
}'

以上命令為將命令行輸入的數據寫入elasticsearch去

輸入命令后在當前命令行中輸入“hello world!!”后,通過kibana頁面就可以查看到剛才寫入es中的數據了,如下圖:



通過logstash收集日志文件數據到es中

bin/logstash -e 'input {
  file {
    path => "xxxx/tomcat/logs/data.log"
    type => "log"

    start_position => "end"

  }
}


output {
  elasticsearch { host => localhost }
}'

 

以上是用logstash的File插件收集日志文件數據

分析網站訪問日志應該是一個運維工程師最常見的工作了。而用 logstash 就可以來處理日志文件。

Logstash 使用一個名叫 FileWatch 的 Ruby Gem 庫來監聽文件變化。這個庫支持 glob 展開文件路徑,而且會記錄一個叫 .sincedb 的數據庫文件來跟蹤被監聽的日志文件的當前讀取位置。所以,不要擔心 logstash 會漏過你的數據。

logstash File插件配置說明:

一些比較有用的配置項,可以用來指定 FileWatch 庫的行為:

path

收集的日志的文件路徑

discover_interval
logstash 每隔多久去檢查一次被監聽的 path 下是否有新文件。默認值是 15 秒。

exclude
不想被監聽的文件可以排除出去,這里跟 path 一樣支持 glob 展開。

sincedb_path
如果你不想用默認的 $HOME/.sincedb,可以通過這個配置定義 sincedb 文件到其他位置。

sincedb_write_interval
logstash 每隔多久寫一次 sincedb 文件,默認是 15 秒。

stat_interval
logstash 每隔多久檢查一次被監聽文件狀態(是否有更新),默認是 1 秒。

start_position
logstash 從什么位置開始讀取文件數據,默認是結束位置,也就是說 logstash 進程會以類似 tail -F 的形式運行。如果你是要導入原有數據,把這個設定改成 “beginning”,logstash 進程就從頭開始讀取,有點類似 cat,但是讀到最后一行不會終止,而是繼續變成 tail -F。




免責聲明!

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



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