序言:Lucene和Solr和Elasticsearch的區別
Lucene
Lucene是apache下的一個子項目,是一個開放源代碼的全文檢索引擎工具包,但它不是一個完整的全文檢索引擎,而是一個全文檢索引擎的架構,提供了完整的查詢引擎和索引引擎,部分文本分析引擎。官網地址:https://lucene.apache.org/
Solr
Solr是一個高性能,採用Java5開發,基於Lucene的全文搜索服務器。同時對其進行了擴展,提供了比Lucene更爲豐富的查詢語言,同時實現了可配置、可擴展並對查詢性能進行了優化,並且提供了一個完善的功能管理界面,是一款非常優秀的全文搜索引擎。官網地址:http://lucene.apache.org/solr/
Elasticsearch
Elasticsearch跟Solr一樣,也是一個基於Lucene的搜索服務器,它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口。官網地址:https://www.elastic.co/products/elasticsearch
原文:https://blog.csdn.net/ms_lang/article/details/83215015
1、Elasticsearch的優缺點:
優點:
1.Elasticsearch是分佈式的。不需要其他組件,分發是實時的,被叫做”Push replication”。
2.Elasticsearch 完全支持 Apache Lucene 的接近實時的搜索。
3.處理多租戶(multitenancy)不需要特殊配置,而Solr則需要更多的高級設置。
4.Elasticsearch 採用 Gateway 的概念,使得完備份更加簡單。
5.各節點組成對等的網絡結構,某些節點出現故障時會自動分配其他節點代替其進行工作。
缺點:
1.只有一名開發者(當前Elasticsearch GitHub組織已經不只如此,已經有了相當活躍的維護者)
2.還不夠自動(不適合當前新的Index Warmup API)
2、Solr的優缺點:
優點
1.Solr有一個更大、更成熟的用戶、開發和貢獻者社區。
2.支持添加多種格式的索引,如:HTML、PDF、微軟 Office 系列軟件格式以及 JSON、XML、CSV 等純文本格式。
3.Solr比較成熟、穩定。
4.不考慮建索引的同時進行搜索,速度更快。
缺點
1.建立索引時,搜索效率下降,實時索引搜索效率不高。
3、Elasticsearch 與 Solr 的比較:
1.二者安裝都很簡單;
2.Solr 利用 Zookeeper 進行分佈式管理,而 Elasticsearch 自身帶有分佈式協調管理功能;
3.Solr 支持更多格式的數據,而 Elasticsearch 僅支持json文件格式;
4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高級功能多有第三方插件提供;
5.Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch。
6.Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch 更適用於新興的實時搜索應用。
使用案例:
1.維基百科使用Elasticsearch來進行全文搜做並高亮顯示關鍵詞,以及提供search-as-you-type、did-you-mean等搜索建議功能。
2.英國衛報使用Elasticsearch來處理訪客日誌,以便能將公衆對不同文章的反應實時地反饋給各位編輯。
3.StackOverflow將全文搜索與地理位置和相關信息進行結合,以提供more-like-this相關問題的展現。
4.GitHub使用Elasticsearch來檢索超過1300億行代碼。
5.每天,Goldman Sachs使用它來處理5TB數據的索引,還有很多投行使用它來分析股票市場的變動。
優點:
1.Elasticsearch是分佈式的。不需要其他組件,分發是實時的,被叫做”Push replication”。
2.Elasticsearch 完全支持 Apache Lucene 的接近實時的搜索。
3.處理多租戶(multitenancy)不需要特殊配置,而Solr則需要更多的高級設置。
4.Elasticsearch 採用 Gateway 的概念,使得完備份更加簡單。
5.各節點組成對等的網絡結構,某些節點出現故障時會自動分配其他節點代替其進行工作。
缺點:
1.只有一名開發者(當前Elasticsearch GitHub組織已經不只如此,已經有了相當活躍的維護者)
2.還不夠自動(不適合當前新的Index Warmup API)
2、Solr的優缺點:
優點
1.Solr有一個更大、更成熟的用戶、開發和貢獻者社區。
2.支持添加多種格式的索引,如:HTML、PDF、微軟 Office 系列軟件格式以及 JSON、XML、CSV 等純文本格式。
3.Solr比較成熟、穩定。
4.不考慮建索引的同時進行搜索,速度更快。
缺點
1.建立索引時,搜索效率下降,實時索引搜索效率不高。
3、Elasticsearch 與 Solr 的比較:
1.二者安裝都很簡單;
2.Solr 利用 Zookeeper 進行分佈式管理,而 Elasticsearch 自身帶有分佈式協調管理功能;
3.Solr 支持更多格式的數據,而 Elasticsearch 僅支持json文件格式;
4.Solr 官方提供的功能更多,而 Elasticsearch 本身更注重於核心功能,高級功能多有第三方插件提供;
5.Solr 在傳統的搜索應用中表現好於 Elasticsearch,但在處理實時搜索應用時效率明顯低於 Elasticsearch。
6.Solr 是傳統搜索應用的有力解決方案,但 Elasticsearch 更適用於新興的實時搜索應用。
使用案例:
1.維基百科使用Elasticsearch來進行全文搜做並高亮顯示關鍵詞,以及提供search-as-you-type、did-you-mean等搜索建議功能。
2.英國衛報使用Elasticsearch來處理訪客日誌,以便能將公衆對不同文章的反應實時地反饋給各位編輯。
3.StackOverflow將全文搜索與地理位置和相關信息進行結合,以提供more-like-this相關問題的展現。
4.GitHub使用Elasticsearch來檢索超過1300億行代碼。
5.每天,Goldman Sachs使用它來處理5TB數據的索引,還有很多投行使用它來分析股票市場的變動。
安裝ELK-Elasticsearch
首先elkuser用戶登錄:
啓動順序:
(1)cd elasticsearch-6.1.0
bin/elasticsearch -d
(2)cd elasticsearch-head
grunt server &
(3)cd kibana-6.6.1
bin/kibana &
web界面查看:
http://192.168.100.200:9100/
http://192.168.100.200:9200/
http://192.168.100.200:5601/
Elasticsearch是個開源分佈式搜索引擎,它的特點有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。要負責數據存儲與搜索。
1、Elasticsearch安裝所需環境
Elasticsearch對於JAVA JDK環境有要求,需要JDK1.8或以上的支持
先查看 `rpm -qa | grep java`,如果openjdk,則可使用yum remove來刪除
[root@localhost /]# `rpm -qa | grep java`
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
[root@localhost /]#`yum -y remove java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5`
下載JDK之後,解壓文件,並設置PATH、JAVA_HOME既可以配置完成。
2、Elasticsearch下載安裝及配置
[root@localhost local]# `tar -zxvf elasticsearch-6.1.0.tar.gz`
[root@localhost elasticsearch-6.1.0]# pwd
/usr/local/elasticsearch-6.1.0
(1)Elasticsearch配置文件
現在我們來配置config/elasticsearch.yml
文件,
cluster.name: jun-application
node.name: centOS7
node.attr.rack: r1
path.data: /path/to/data
path.logs: /path/to/logs
bootstrap.memory_lock: true
network.host: 192.168.100.200
http.port: 9200
discovery.zen.ping.unicast.hosts: ["host1", "host2"]
discovery.zen.minimum_master_nodes:
gateway.recover_after_nodes: 3
action.destructive_requires_name: true
http.cors.enabled: true
http.cors.allow-origin: "*"
置文件註釋
. cluster.name: kencery 配置Elasticsearch的集羣名稱,默認是elasticsearch,Elasticsearch會自動發現在同一網段下的es集羣,如果在同一個網段下有多個集羣,可以利用這個屬性來區分不同的集羣。
. node.name : "kencery-node1" 集羣的節點名稱,Elasticsearch啓動的時候會自動創建節點名稱,但是你也可以進行配置。
. node.rack: r1 每個節點都可以定義一些與之關聯的通用屬性,用於後期集羣進行碎片分配時的過濾。
. path.data: /path/to/data 設置索引數據的存儲路徑,默認是Elasticsearch根目錄下的data文件夾,可以設置多個存儲路徑,用逗號隔開,是的數據在文件級別跨域位置,這樣在創建時就有更多的自由路徑,如:path.data: /path/to/data1,/path/to/data2
. path.logs: /path/to/logs 設置日誌文件的存儲路徑,默認是Elasticsearch根目錄下的logs文件夾。
. bootstrap.mlockall: true 設置爲true來鎖住內存,因爲當JVM開始swapping的時候Elasticsearch的效率會降低,所以要保證他不被swap,可以吧ES_MIN_MEN和ES_MAX_MEN兩個環境變量設置爲同一個值,並且保證機器有足夠的內存分配給Elasticsearch,同時也要允許Elasticsearch的進程可以鎖住內存,Linux下可以通過`ulimit -l unlimited`命令。
. network.host: 192.168.37.133 設置綁定的IP地址,可以是ipv4或者ipv5,默認使用0.0.0.0地址,併爲http傳輸開啓9200、9300端口,爲節點到節點的通信開啓9300-9400端口,也可以自行設置IP地址。
. http.port: 9200 設置對外服務的Http端口,默認是9200
. discovery.zen.ping.unicast.hosts: ["192.168.37.133", "192.168.37.137"] 設置集羣中master節點的初始化列表,可以通過這些節點來自動發現新加入集羣的節點(主要用於不同網段機器連接)。
. discovery.zen.minimum_master_nodes: 3 設置這個參數來保證集羣中的節點可以知道其它N個有master資格的節點,默認爲1,當集羣多餘三個節點時,可以設置大一點的值(2-4)
. gateway.recover_after_nodes: 3 設置集羣中國N個節點啓動時進行數據恢復,默認是1
. node.max_local_storage_nodes: 1 默認情況下,多個節點可以在同一個安裝路徑啓動,如果你想讓你的Elasticsearch只啓動一個節點,在這合理設置。
. action.destructive_requires_name: true 設置是否可以通過正則或者_all刪除或者關閉索引。
具體修改如下:
cluster.name: my-application
node.name: node-1
path.data: /usr/local/elastic/data
path.logs: /usr/local/elastic/logs
bootstrap.system_call_filter: false
network.host: 192.168.1.20
http.port: 9200
discovery.zen.ping.unicast.hosts: ["192.168.1.11"]
discovery.zen.minimum_master_nodes: 1
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: "Authorization"
action.auto_create_index: true
增加用戶:useradd -d /usr/username -m username
爲用戶增加密碼:passwd username
新建工作組:groupadd groupname
將用戶添加進工作組:usermod -G groupname username
刪除用戶:userdel username
(2)Elasticsearch創建普通用戶
[root@localhost /]# useradd elkuser
#elasticsearch 只能用非 root 啓動
[root@localhost /]# chown -R elkuser.elkuser elasticsearch-6.1.0
(3)Elasticsearch文件打開數及堆大小檢測
1.max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
修改/etc/security/limits.conf
文件,添加或修改如下行:
* hard nofile 65536
* soft nofile 65536
2.max virtual memory areas vm.max……
修改 /etc/sysctl.conf 文件
,添加如下行:
vm.max_map_count=262144
修改好了以後,運行/sbin/sysctl -p
重啓以後,再啓動es即可,就可以通過主機ip訪問。
3.如果是內存不足就需要調整內存大小了或者調整config/jvm.options的參數
在elasticsearch-6.1.0/config目錄中有jvm.options文件,可以設置JVM大小
[root@localhost config]# pwd
/usr/local/elasticsearch-6.1.0/config
[root@localhost config]# ls
elasticsearch.yml jvm.options log4j2.properties
[root@localhost config]# vi jvm.options
-Xms2g
-Xmx2g
(4)啓動Elasticsearch
前序工作全部準備完成後,即可在elasticsearch-6.1.0目錄中的bin目錄下執行elasticsearch-6.1.0文件:
[root@localhost bin]# ./elasticsearch
[root@localhost bin]# ./elasticsearch -d
可以使其在後臺運行
(5)瀏覽器訪問 http://localhost:9200 ,可以查看到對應的節點信息,如下顯示則說明啓動正常:
如果集羣啓動出現問題:
1. 修改/etc/security/limits.conf在最後添加
* soft nofile 65536
* hard nofile 131072
* soft nproc 2048
* hard nproc 4096
2. 切換到root用戶修改配置sysctl.conf
vi /etc/sysctl.conf
vm.max_map_count=655360
3.刪除 elasticsearch-6.1.0/data目錄下的所有文件
4. /sbin/sysctl -p
5. 然後重啓
ELK的安裝配置啓動
1)安裝kibana
tar -zxf kibana-5.3.0-linux-x86_64.tar.gz -C /usr/local
cd /usr/local/; mv kibana-5.3.0-linux-x86_64.tar.gz kibana
vim kibana/config/kibana.yml
具體修改如下:
server.port: 5601
server.host: "192.168.1.20"
elasticsearch.url: "http://192.168.1.20:9200"
kibana.index: "kibana"
2)安裝logstash
tar -zxf logstash-5.3.0.tar.gz -C /usr/local
cd /usr/local;mv logstash-5.3.0.tar.gz logstash
編輯logstash.conf配置文件
input {
file {
type => "logstash-log"
path => "/usr/local/logstash/logs/logstash-plain.log" #定義數據源
}
}
output {
elasticsearch {
hosts => ["http://192.168.1.20:9200"]
index => "logstash20_%{+YYYY-MM-dd}" #定義數據的格式
}
}
3)IK分詞器安裝:
第一步:
./elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v6.6.1/elasticsearch-analysis-ik-6.6.1.zip
第二步:
cp elasticsearch-analysis-ik-6.6.1.zip ./elasticsearch-6.6.1/plugins/
第三步:
unzip elasticsearch-analysis-ik-6.6.1.zip -d ik-analyzer
4)jieba分詞插件安裝
https://blog.csdn.net/tingkr/article/details/84029738#24_jieba_213
1>:jieba分詞插件下載: https://github.com/sing1ee/elasticsearch-jieba-plugin/releases
2>:gradle工具下載: http://services.gradle.org/distributions/
3>:gradle安裝
第一步:下載某版本的gradle工具後,解壓到某路徑。
第二步:添加gradle路徑。通過修改/etc/profile文件,在文件末尾添以下語句,並通過語句source /etc/profile
使修改生效。
export GRADLE_HOME=/usr/local/gradle-5.0 #gradle 路徑
export PATH=$GRADLE_HOME/bin:$PATH
export GRADLE_USER_HOME=$GRADLE_HOME/.gradle #gradle的配置文件位置,該目錄下的init.gradle指定了遠程庫路徑
在命令行窗口輸入gradle -version,若顯示正確的gradle版本信息,則表示安裝成功。
在使用gradle pz編譯jieba插件時,從國外鏡像下載相關資源一般會失敗,需要添加國內的阿里雲鏡像。
對單個項目生效,則修改該項目路徑下的build.gradle
的內容,修改對應buildscript
和allprojects
項的內容如下
buildscript {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven{ url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {#建議註釋該項內容,在使用gradle pz時易報錯
classpath 'com.android.tools.build:gradle:2.2.3'
}
}
allprojects {
repositories {
maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
}
修改完後,在使用語句gradle pz在Linux環境下編譯jieba插件時一般不會報錯。接下來就可以進入到編譯jieba插件階段。
而本人在服務器上編譯時遇到如下問題,懷疑是和網絡連接限制的相關問題。網上很少資料涉及到這個問題,做了基本能做的嘗試,都沒法解決此問題,如果有人遇到類似問題也解決了,請不要吝嗇來告訴我方法吧。
FAILUER: Build failed with an exception.
- What went wrong:
Execution failed for task ‘:compileJava’.
Could not resolve all files for configuration ‘:compileClasspath’.
Could not resolve com.huaban:jieba-analysis:1.0.2.
Required by:
project :
Could not resolve com.huaban:jieba-analysis:1.0.2.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
maven.aliyun.com
Could not resolve com.huaban:jieba-analysis:1.0.2.
Could not get resource ‘https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
Could not GET ‘https://jcenter.bintray.com/com/huaban/jieba-analysis/1.0.2/jieba-analysis-1.0.2.pom’.
jcenter.bintray.com
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Required by:
project :
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
maven.aliyun.com
Could not resolve org.elasticsearch:elasticsearch:6.4.0.
Could not get resource ‘https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
Could not GET ‘https://jcenter.bintray.com/org/elasticsearch/elasticsearch/6.4.0/elasticsearch-6.4.0.pom’.
jcenter.bintray.com
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Required by:
project :
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
maven.aliyun.com
Could not resolve org.apache.logging.log4j:log4j-api:2.7.
Could not get resource ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
Could not GET ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-api/2.7/log4j-api-2.7.pom’.
jcenter.bintray.com
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Required by:
project :
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Could not get resource ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
Could not GET ‘http://maven.aliyun.com/nexus/content/groups/public/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
maven.aliyun.com
Could not resolve org.apache.logging.log4j:log4j-core:2.7.
Could not get resource ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
Could not GET ‘https://jcenter.bintray.com/org/apache/logging/log4j/log4j-core/2.7/log4j-core-2.7.pom’.
jcenter.bintray.com
jieba插件安裝
和windows環境下幾乎相同。
下載和es版本相同版本的jieba分詞插件,解壓,運行gradle pz。
在運行gradle pz時可能會提示沒有操作權限,則需查看當前文件夾是否可執行,可用chmod -R 777
.修改當前用戶對整個文件夾的操作權限。
第一步:從命令行窗口進入jieba分詞插件解壓路徑,運行gradle pz。編譯成功,將會在./build/distributions/目錄下生成一個壓縮包。
第二步:將壓縮包解壓,拷貝到${elasticsearch_home}/plugins路徑下,可刪除壓縮包文件。
編譯成功,在./build/distributions/
目錄下生成一個壓縮包,拷貝到${elasticsearch_home}/plugins
路徑下並解壓,可刪除壓縮包文件。
驗證jieba分詞是否安裝成功同windows環境。略微差異在於,如果是服務器,在局域網的其它機器的瀏覽器輸入內容時,localhost替換成瀏覽器的ip地址,
在瀏覽器中輸入 http://localhost:9200/_analyze?analyzer=jieba_index&pretty=true&text=輸入要分詞的句子,瀏覽器返回分詞後的結果,則說明jieba分詞安裝成功。
logstash配置文件具體可參考
https://blog.csdn.net/gamer_gyt/article/details/59077189
http://www.51niux.com/?id=201
https://blog.csdn.net/qq_21383435/article/details/79367821
http://www.cnblogs.com/yincheng/p/logstash.html
https://blog.csdn.net/weixin_41047933/article/details/82699823
然後依次啓動elasticsearch、kibana、logstash
/usr/local/elasticsearch/bin/elasticserch -d
/usr/local/kibana/bin/kibana &
/usr/local/logstash/bin/lostash -f /usr/local/logstash/conf/logstash.conf &
3、Elasticsearch安裝Head插件
Elasticsearch-head是一個界面化的集羣操作和管理工具,可以對集羣進行傻瓜式操作。你可以通過插件把它集成到es(首選方式),也可以安裝成一個獨立webapp。
ES-head主要有四個方面的操作:
顯示集羣的拓撲,並且能夠執行索引和節點級別操作
搜索接口能夠查詢集羣中原始json或表格格式的檢索數據
能夠快速訪問並顯示集羣的狀態
有一個輸入窗口,允許任意調用RESTful API。這個接口包含幾個選項,可以組合在一起以產生有趣的結果;
- 請求方法(get、put、post、delete),查詢json數據,節點和路徑
- 支持JSON驗證器
- 支持重複請求計時器
- 支持使用javascript表達式變換結果
- 收集結果的能力隨着時間的推移(使用定時器),或比較的結果
- 能力圖表轉換後的結果在一個簡單的條形圖(包括時間序列)
(1)安裝git
yum install git
(2)Nodejs安裝
[root@localhost local]#tar -xvf node-v8.9.0-linux-x64.tar.xz
[root@localhost node-v8.9.0]# pwd
/usr/local/node-v8.9.0
配置NODE_HOME,進入profile編輯環境變量
vim /etc/profile
設置nodejs環境變量
#set for nodejs
export NODE_HOME=/usr/local/node-v8.9.0
3export PATH=$NODE_HOME/bin:$PATH
source /etc/profile
驗證是否安裝配置成功
node -v
(3)Grunt安裝
npm install -g grunt-cli
grunt -version
– 安裝後 ,查看 grunt版本。
(4)下載 head 插件的源碼並安裝
git clone git://github.com/mobz/elasticsearch-head.git
第一步:elasticsearch-head/Gruntfile.js,增加hostname屬性
connect: {
server: {
options: {
port: 9100,
hostname: '0.0.0.0',
base: '.',
keepalive: true
}
}
}
第二步:
elasticsearch-head/_site/app.js
。修改head的連接地址
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://localhost:9200";
把localhost修改成你es的服務器地址,如:
this.base_uri = this.config.base_uri || this.prefs.get("app-base_uri") || "http://192.168.100.200:9200";
第三步:然後在elasticsearch-head源碼目錄中,執行npm install:
npm install -g
npm install grunt --save-dev
執行 npm run start
(需要下面這些依賴):
npm install grunt-contrib-clean --registry=https://registry.npm.taobao.org
npm install grunt-contrib-concat --registry=https://registry.npm.taobao.org
npm install grunt-contrib-watch --registry=https://registry.npm.taobao.org
npm install grunt-contrib-connect --registry=https://registry.npm.taobao.org
npm install grunt-contrib-copy --registry=https://registry.npm.taobao.org
npm install grunt-contrib-jasmine --registry=https://registry.npm.taobao.org
原文:https://blog.csdn.net/laotoumo/article/details/53890279
第四步:在elasticsearch-head源代碼目錄下啓動nodejs,
運行grunt server
。
運行成功後,訪問 http://localhost:9100 網站,即可看到elasticsearch的相關信息
4、Linux安裝Kibana
Kibana是一個針對Elasticsearch的開源分析及可視化平臺,用來搜索、查看交互存儲在Elasticsearch索引中的數據。使用Kibana,可以通過各種圖表進行高級數據分析及展示。
Kibana讓海量數據更容易理解。它操作簡單,基於瀏覽器的用戶界面可以快速創建儀表板(dashboard)實時顯示Elasticsearch查詢動態。
一、安裝kibana6.0
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.0.0-linux-x86_64.tar.gz
tar -zxvf kibana-6.0.0-linux-x86_64.tar.gz -C /opt/modules/
mv /opt/modules/kibana-6.0.0-linux-x86_64 /opt/modules/kibana
cd /opt/modules/kibana
二、配製文件
mkdir -p /opt/data/logs/kibana
chmod 777 /opt/data/logs/kibana
vi /opt/modules/kibana/config/kibana.yml
kibana.yml
內容
server.name: "MyKibana"
server.host: "192.168.46.132"
server.port: 5601
#可通過 http://192.168.46.132:5601 在瀏覽器訪問
server.name: "MyKibana"
server.host: "192.168.100.200"
server.port: 5601
#指定elasticsearch節點
elasticsearch.url: "http://192.168.46.132:9200"
pid.file: /var/run/kibana.pid
# 日誌目錄
logging.dest: /opt/data/logs/kibana/kibana.log
# 間隔多少毫秒,最小是100ms,默認是5000ms即5秒
ops.interval: 5000
修改好配置文件後,就可以啓動Kibana服務了。
/opt/modules/kibana/bin/kibana
在瀏覽器訪問:http://192.168.46.132:5601
初次進入需要至少創建一個索引模板,這個是對應elasticsearch中的索引;
默認給的是logstash-*,由於在es中我已經有test索引了,所以我直接在這裏輸入test然後點創建就可以了。
創建好索引模板後,在Discover(發現),左邊選擇test,右上角選擇時間,就可以看到es中的數據了,左邊可以選擇要顯示的
5、安裝Logstash
https://www.cnblogs.com/blogjun/articles/8064646.html
一、什麼是Logstash
Logstash是一個開源的、接受來自多種數據源(input)、過濾你想要的數據(filter)、存儲到其他設備的日誌管理程序。Logstash包含三個基本插件input\filter\output,一個基本的logstash服務必須包含input和output.
Logstash如何工作:
Logstash數據處理有三個階段,input–>filter–>output.input生產數據,filter根據定義的規則修改數據,output將數據輸出到你定義的存儲位置。
Inputs:
數據生產商,包含以下幾個常用輸出:
file: 從文件系統中讀取文件,類似使用tail -0F
syslog: syslog服務,監聽在514端口使用RFC3164格式
redis: 從redis服務讀取,使用redis管道和列表。
beats: 一種代理,自己負責收集好數據然後轉發給Logstash,常用的如filebeat.
Filters:
filters相當一個加工管道,它會一條一條過濾數據根據你定義的規則,常用的filters如下:
grok: 解析無規則的文字並轉化爲有結構的格式。
mutate: 豐富的基礎類型處理,包括類型轉換、字符串處理、字段處理等。
drop: 丟棄一部分events不進行處理,例如: debug events
clone: 負責一個event,這個過程中可以添加或刪除字段。
geoip: 添加地理信息(爲前臺kibana圖形化展示使用)
Outputs:
elasticserache elasticserache接收並保存數據,並將數據給kibana前端展示。
output 標準輸出,直接打印在屏幕上。
二、Logstash的安裝配置
Logstash運行僅僅依賴java運行環境(jre),JDK版本1.8以上即可。直接從ELK官網下載Logstash:https://www.elastic.co/cn/products
1 # tar -zxvf logstash-6.1.0.tar.gz
2 # cd logstash-6.1.0
現在我們來運行一下一個簡單的例子:
1 # bin/logstash -e 'input { stdin { } } output { stdout {} }'
我們現在可以在命令行下輸入一些字符,然後我們將看到logstash的輸出內容:
1 hello world
2 2017-11-21T01:22:14.405+0000 0.0.0.0 hello world
Ok,還挺有意思的吧… 以上例子我們在運行logstash中,定義了一個叫”stdin”的input還有一個”stdout”的output,無論我們輸入什麼字符,Logstash都會按照某種格式來返回我們輸入的字符。這裏注意我們在命令行中使用了-e參數,該參數允許Logstash直接通過命令行接受設置。這點尤其快速的幫助我們反覆的測試配置是否正確而不用寫配置文件。
讓我們再試個更有意思的例子。首先我們在命令行下使用CTRL-C命令退出之前運行的Logstash。現在我們重新運行Logstash使用下面的命令:
1 # bin/logstash -e 'input { stdin { } } output { stdout { codec => rubydebug } }'
我們再輸入一些字符,這次我們輸入”hello world ”:
1 hello world2 {
3 "message" => "hello world",
4 "@timestamp" => "2017-11-20T23:48:05.335Z",
5 "@version" => "1",
6 "host" => "node1"
7 }
以上示例通過重新設置了叫”stdout”的output(添加了”codec”參數),我們就可以改變Logstash的輸出表現。類似的我們可以通過在你的配置文件中添加或者修改inputs、outputs、filters,就可以使隨意的格式化日誌數據成爲可能,從而訂製更合理的存儲格式爲查詢提供便利。
前面已經說過Logstash必須有一個輸入和一個輸出,上面的例子表示從終端上輸入並輸出到終端。
數據在線程之間以事件的形式流傳。不要叫行,因爲Logstash可以處理多行事件。
input {
# 輸入域,可以使用上面提到的幾種輸入方式。stdin{} 表示標準輸入,file{} 表示從文件讀取。
input的各種插件: https://www.elastic.co/guide/en/logstash/current/input-plugins.html
}
output {
#Logstash的功能就是對數據進行加工,上述例子就是Logstash的格式化輸出,當然這是最簡單的。
output的各種插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
}
Logstash配置文件和命令:
Logstash的默認配置已經夠我們使用了,從5.0後使用logstash.yml文件,可以將一些命令行參數直接寫到YAML文件即可。
–configtest 或 -t 用於測試Logstash的配置語法是否正確,非常好的一個參數。
–log 或 -l Logstash默認輸出日誌到標準輸出,指定Logstash的日誌存放位置
–pipeline-workers 或 -w 指定運行filter和output的pipeline線程數量,使用默認就好。
-f 指定規則文件,可以將自己的文件放在同一個路徑下,使用-f 即可運行。
一個簡單的Logstash從文件中讀取配置
1 vim file.conf #file.conf可以放在任意位置
2 input {
3 stdin {
4 }
5 }
6 output {
7 stdout {
8 codec=>rubydebug
9 }
10 }
12 bin/logstash -f /root/conf/file.conf #啓動即可
三、一些常用的插件
1、grok插件
Grok是Logstash最重要的插件,你可以在grok裏自定義好命名規則,然後在grok參數或者其他正則表達式中引用它。
官方給出了120個左右默認的模式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
1 USERNAME [a-zA-Z0-9._-]+
2 USER %{USERNAME}
第一行,用普通的正則表達式來定義一個grok表達式;第二行,通過打印賦值格式,用前面定義好的grok表達式來定義裏一個grok表達式。
正則表達式引格式:
1 %{SYNTAX:SEMANTIC}
SYNTAX:表示你的規則是如何被匹配的,比如3.14將會被NUMBER模式匹配,55.1.1.2將會被IP模式匹配。
SEMANTIC:表示被匹配到的唯一標識符,比如3.14被匹配到了後,SEMANTIC就當是3.14。
匹配到的數據默認是strings類型,當然你也可以裝換你匹配到的數據,類似這樣:
%{NUMBER:num:int}
當前只支持裝換爲int和float。
例如:
1 filter {
2 grok {
3 match => {
4 "message" => "%{WORD} %{NUMBER:request_time:float} %{WORD}"
5 }
6 }
7 }
1 jasi 12.12 asioa
2 {
3 "@timestamp" => 2017-02-08T05:55:18.460Z,
4 "request_time" => 12.12,
5 "@version" => "1",
6 "host" => "0.0.0.0",
7 "message" => "jasi 12.12 asioa"
8 }
這個我們就匹配到我們想要的值了,並將名字命名爲:request_time
在實際生產中爲了方便我們不可能在配置文件中一行一行的寫表達式,建議把所有的grok表達式統一寫到一個地方,使用patterns_dir選項來引用。
1 grok {
2 patterns_dir => "/root/conf/nginx" #這是你定義的grok表達式文件
3 match => { "message" => "%{CDN_FORMAT}" }
4 add_tag => ["CDN"]
5 }
事實上,我們收集的日誌也有很多不需要的地方,我們可以刪除一部分field信息,保留我們想要的那一部分。
1 grok {
2 match => {
3 "message" => "%{WORD} %{NUMBER:request_time:float} %{WORD}"
4 }
5 remove_field => [ "request_time" ]
6 overwrite => [ "message" ]
7 }
8 as 12 as
9 {
10 "@timestamp" => 2017-02-08T06:39:07.921Z,
11 "@version" => "1",
12 "host" => "0.0.0.0",
13 "message" => "as 12 as"
14 }
已經沒有request_time這個field啦~
更多關於grok的用戶看官方文檔:https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html
最重要的一點:我強烈建議每個人都要使用 Grok Debugger 來調試自己的 grok 表達式。
2、kv插件
在很多的情況下,日誌類容本身就是類似於key-value的格式,kv插件就是自動處理類似於key=value樣式的數據。
kv {
source => "request" #數據來源,默認是message
field_split => "&" # 用於分割鍵值對
value_split => "=" # 識別鍵值對的關係,如 k1:v1 k2:v2 ":"即爲鍵值對關係連接符
}
3、geoip插件
geoip主要是查詢IP地址歸屬地,用來判斷訪問網站的來源地。
1 geoip {
2 source => "clientip"
3 fields => [ "ip","city_name","country_name","location" ] #fields包含信息太多,可以自定義
4 }
Logstash還有許多比較常用的插件,如json\multiline等,可以到官方文檔查看。