ElasticSearch是一個基於Lucene構建的開源,分佈式,RESTful搜索引擎 java
使用的es版本爲1.3.2node
wget https://download.elasticsearch.org/elasticsearch/elasticsearch/elasticsearch-1.3.2.ziplinux
解壓web
unzip elasticsearch-1.3.2.zip數據庫
es的配置文件在/config/elasticsearch.yml (ps:如下的目錄路徑都是/elasticsearch-1.3.2/下)bootstrap
配置以下: 緩存
cluster.name: elasticsearch // 配置es的集羣名稱,默認是elasticsearch,es會自動發如今同一網段下的es,若是在同一網段下有多個集羣,就能夠用這個屬性來區分不一樣的集羣
node.name: "Squirrel" //es節點名稱,作標識用,可隨意定義
http.enabled: true //是否使用http協議對外提供服務,默認爲true,開啓
http.port: 9200 //設置對外服務的http端口,默認爲9200tomcat
直接啓動服務器
bin/elasticsearch網絡
後臺啓動
nohup /bin/elasticsearch > /logs/elasticsearch.log 2>&1 &
訪問http://localhost:9200/以下圖:
安裝成功!
分佈式集羣部署就是在不一樣機子上重複以上操做便可
安裝命令:bin/plugin --install mobz/elasticsearch-head
安裝完成後,訪問http://localhost:9200/_plugin/head/便可使用head插件,以下圖
安裝命令:bin/plugin --install lukas-vlcek/bigdesk
安裝完成後,訪問http://localhost:9200/_plugin/bigdesk/便可使用bigdesk插件,以下圖
安裝命令:bin/plugin -install karmi/elasticsearch-paramedic
安裝完成後,訪問http://localhost:9200/_plugin/paramedic/便可使用Paramedic插件,以下圖
若是你的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
Kibana 是一個爲 Logstash 和 ElasticSearch 提供的日誌分析的 Web 接口。可以使用它對日誌進行高效的搜索、可視化、分析等各類操做。
使用的版本爲3.1.0
wget https://download.elasticsearch.org/kibana/kibana/kibana-3.1.0.zip
解壓
unzip kibana-3.1.0.zip
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進行實時查詢了
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
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_positionlogstash 從什麼位置開始讀取文件數據,默認是結束位置,也就是說 logstash 進程會以相似 tail -F 的形式運行。若是你是要導入原有數據,把這個設定改爲 「beginning」,logstash 進程就從頭開始讀取,有點相似 cat,可是讀到最後一行不會終止,而是繼續變成 tail -F。