章節一 2018年 ELK課程計劃和效果演示
一、課程安排和效果演示
簡介:課程介紹和主要知識點說明,ES搜索接口演示,部署的ELK項目演示
es: localhost:9200
kibana http://localhost:5601/html
章節二 elasticSearch 6.2版本基礎講解到阿里雲部署實戰前端
二、搜索引擎知識介紹和相關框架
簡介:介紹搜索的基本概念,市面上主流的搜索框架elasticSearch和solr等對比
什麼是搜索:在海量信息中獲取咱們想要的信息
傳統作法:
一、文檔中使用系統的Find查找
二、mysql中使用like模糊查詢
問題:
一、海量數據中不能及時響應,少許數據能夠經過傳統的MySql創建索引解決
二、一些無用詞不能進行過濾,無法分詞
三、數據量大的話難以拓展
四、相同的數據難以進行類似度最高的進行排序
搜索引擎:
一、存儲非結構化的數據
二、快速檢索和響應咱們須要的信息,快-準
三、進行相關性的排序,過濾等
四、能夠去掉停用詞(沒有特殊含義的詞,好比英文的a,is等,中文: 這,的,是等),框架通常支持能夠自定義停用詞java
經常使用框架:
一、Lucene
Apache下面的一個開源項目,高性能的、可擴展的工具庫,提供搜索的基本架構;
若是開發人員需用使用的話,需用本身進行開發,成本比較大,可是性能高node
二、solr
Solr基於Lucene的全文搜索框架,提供了比Lucene更爲豐富的功能,
同時實現了可配置、可擴展並對查詢性能進行了優化
創建索引時,搜索效率降低,實時索引搜索效率不高
數據量的增長,Solr的搜索效率會變得更低,適合小的搜索應用,對應java客戶端的是solrjmysql
三、elasticSearch
基於Lucene的搜索框架, 它提供了一個分佈式多用戶能力的全文搜索引擎,基於RESTful web接口
上手容易,拓展節點方便,可用於存儲和檢索海量數據,接近實時搜索,海量數據量增長,搜索響應性能幾乎不受影響;
分佈式搜索框架,自動發現節點,副本機制,保障可用性linux
三、新版本 elasticSearch 6.1.2介紹
簡介:介紹ES的主要特色和使用場景,新特性講解web
elasticSearch主要特色sql
一、特色:全文檢索,結構化檢索,數據統計、分析,接近實時處理,分佈式搜索(可部署數百臺服務器),處理PB級別的數據
搜索糾錯,自動完成
二、使用場景:日誌搜索,數據聚合,數據監控,報表統計分析
三、國內外使用者:維基百科,Stack Overflow,GitHub
json
新特性講解
一、6.1.x版本基於Lucene 7.1.0,更快,性能進一步提高,對應的序列化組件,升級到Jackson 2.8bootstrap
二、自適應副本選擇
今天在Elasticsearch中,對同一分片的一系列搜索請求將以循環方式轉發到主要和每一個副本。若是一個節點啓動了長時間的垃圾收集,這可能會出現問題 - 搜索請求仍將被轉發到緩慢的節點,而且會影響搜索延遲。
在6.1中,咱們添加了一個稱爲自適應副本選擇的實驗性功能。每一個節點跟蹤並比較搜索請求到其餘節點的時間,並使用這些信息來調整向特定節點發送請求的頻率。在咱們的基準測試中,這樣能夠大大提升搜索吞吐量,下降99%的延遲。
這個選項在默認狀況下是禁用的
三、推薦使用5.0版本推出的Java REST/HTTP客戶端,依賴少,比Transport使用更方便,在基準測試中,性能並不輸於Transport客戶端,
在5.0到6.0版本中,每次有對應的API更新, 文檔中也說明,推薦使用這種方式進行開發使用,全部可用節點間的負載均衡
在節點故障和特定響應代碼的狀況下進行故障轉移,失敗的鏈接處罰(失敗的節點是否重試取決於失敗的連續次數;失敗的失敗次數越多,客戶端在再次嘗試同一節點以前等待的時間越長)
官方文檔:
一、6.0更新特性
https://www.elastic.co/guide/en/elasticsearch/reference/6.0/release-notes-6.0.0.html#breaking-java-6.0.0
二、6.1更新特性
https://www.elastic.co/guide/en/elasticsearch/reference/6.1/release-notes-6.1.0.html
四、windows安裝啓動ElasticSearch
簡介:windows環境下安裝JDK8和 ElasticSearch
五、阿里雲服務器 快速安裝ElasticSearch
簡介:阿里雲ecs介紹,wget命令下載安裝包,快速部署 elasticSearch節點
linux下使用wget下載jdk8:
進到目錄/usr/local/software
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u141-b15/336fa29ff2bb4ef291e347e091f7f4a7/jdk-8u141-linux-x64.tar.gz"
vim /etc/profile
加入
export JAVA_HOME=/usr/local/software/jdk8
export JAVA_BIN=/usr/local/software/jdk8
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JAVA_BIN PATH CLASSPATH
使用wget 下載elasticsearch安裝包
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.2.tar.gz
解壓
tar -zxvf elasticsearch-6.2.2.tar.gz
配置es出現相關問題處理:
一、問題一
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c5330000, 986513408, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 986513408 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/software/temp/elasticsearch-6.2.2/hs_err_pid1912.log
解決:內存不夠,購買阿里雲的機器能夠動態增長內存
二、問題二
[root@iZwz95j86y235aroi85ht0Z bin]# ./elasticsearch
[2018-02-22T20:14:04,870][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:125) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:112) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.2.2.jar:6.2.2]
at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.2.2.jar:6.2.2]
解決:用非root用戶
添加用戶:useradd -m 用戶名 而後設置密碼 passwd 用戶名
三、問題三
./elasticsearch
Exception in thread "main" java.nio.file.AccessDeniedException: /usr/local/software/temp/elasticsearch-6.2.2/config/jvm.options
解決:權限不夠 chmod 777 -R 當前es目錄
常見配置問題資料:https://www.jianshu.com/p/c5d6ec0f35e0
六、ElasticSearch目錄和配置文件介紹
簡介:介紹ES目錄結構,配置文件基本說明
bin: 啓動文件
log: 日誌文件,包括運行日誌,慢查詢日誌
config: 核心配置文件
lib: 依賴包
plugins :插件
七、ElasticSearch核心配置文件講解,性能優化配置
簡介:講解核心配置文件,JVM參數配置,性能優化
健康狀態檢查:http://localhost:9200/_cluster/health
jvm.options 虛擬機參數配置文件
配置heap內存同樣
elasticsearch.yml 主配置文件
cluster.name 集羣名稱,同一個網段自動加入
node.name 節點名稱
http.port http端口
注意事項
本地啓動多個節點,複製es安裝包的時候,須要刪除裏面data目錄裏面的資料,否則沒法加入集羣
八、ElasticSearch基礎概念講解
簡介:es的index索引,document文檔對象,副本,多節點集羣等基礎知識
一、通俗的解釋:
在Elasticsearch中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中, 索引名稱必須是小寫
Relational DB -> Database -> Table -> Row -> Column
Elasticsearch -> Indice -> Type -> Document -> Field
二、分片shards:
數據量特大,沒有足夠大的硬盤空間來一次性存儲,且一次性搜索那麼多的數據,響應跟不上es提供把數據進行分片存儲,這樣方便進行拓展和提升吞吐
三、副本replicas:
分片的拷貝,當主分片不可用的時候,副本就充當主分片進行使用
四、Elasticsearch中的每一個索引分配5個主分片和1個副本
若是你的集羣中至少有兩個節點,你的索引將會有5個主分片和另外5個複製分片(1個徹底拷貝),這樣每一個索引總共就有10個分片。
九、search搜索語句入門之URL搜索
簡介:講解URL中的_search搜索語句的基本使用,美化響應結果, 索引的基礎操做
集羣健康檢查
http://localhost:9200/_cat/health?v
http://localhost:9200/_cluster/health(推薦)
狀態說明
green:正常
yellow: 集羣正常 數據正常,部分副本不正常
red: 集羣部分正常,數據可能丟失,須要緊急修復
查詢節點列表
http://localhost:9200/_cat/nodes?v
查看全部索引
http://localhost:9200/_cat/indices?v
目前 集羣中沒有任何索引
補充:
curl
-X 指定http的請求方法 有HEAD GET POST PUT DELETE
-d 指定要傳輸的數據
-H 指定http請求頭信息
新增索引
curl -XPUT 'localhost:9201/blog_test?pretty'
curl -XPUT 'localhost:9201/blog?pretty'
刪除索引
curl -XDELETE 'localhost:9200/blog_test?pretty'
新增一條記錄,並指定爲article類型,ID爲1
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/1?pretty' -d '
{
"title": "小D課堂啦啦啦",
"content":"xdclass.net 小D課堂成立於2016年的,專一互聯網在線教育,課程範圍包括前端,後端,大數據,人工智能,微信開發等"
}'
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/2?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":10
}'
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/3?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":23
}'
空間不夠新增失敗處理 curl -XPUT -H "Content-Type: application/json" http://localhost:9200/_all/_settings -d '{"index.blocks.read_only_allow_delete": null}'
{
"error" : {
"root_cause" : [
{
"type" : "cluster_block_exception",
"reason" : "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"
}
],
"type" : "cluster_block_exception",
"reason" : "blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"
},
"status" : 403
}
ID查詢記錄
curl -XGET 'localhost:9200/blog/article/1'
curl -XGET 'localhost:9200/blog/article/1?pretty'(美化推薦)
搜索
curl -XGET 'http://localhost:9201/blog/article/_search?q=title:小A'
十、search搜索語句入門之結構化查詢語句DSL
簡介:講解結構化查詢語句DSL的使用,bool,filter查詢等
新增數據集
curl -XPUT -H "Content-Type: application/json" 'localhost:9201/blog/article/7?pretty' -d '
{
"title": "elk搭建日誌採集系統",
"content":"elk elasticsearch logstash kibana",
"PV":18
}'
什麼是query DSL
一、Domain Specific Language 領域特定語言
二、Elasticsearch提供了完整的查詢DSL,基於JSON定義查詢
三、用於構造複雜的查詢語句
curl查詢(空格處理不當,會出問題)
curl -XPOST -H "Content-Type: application/json" 'http://localhost:9201/blog/article/_search' -d '{
"query" : {
"term" : { "title" : "elk" }
}
}'
建議使用postman工具
post方式提交,增長http頭信息
body裏面選row格式,粘貼對應的dsl便可
bool查詢入門
{
"query": {
"bool": {
"must": [
{ "match": { "title": "elk" } }
],
"must_not": [
{ "match": { "title": "小D" } }
]
}
}
}
filter查詢入門(filtered語法已經在5.0版本後移除了,在2.0時候標記過時,改用filter )
參考地址:https://www.elastic.co/guide/en/elasticsearch/reference/5.0/query-dsl-filtered-query.html
{
"query": {
"bool": {
"filter": {
"range": {
"PV": {
"gt": 15
}
}
},
"must": {
"match": {
"title": "ELK"
}
}
}
}
}
總結:(官網參考 https://www.elastic.co/guide/en/elasticsearch/reference/current/query-filter-context.html)
一、大部分filter的速度快於query的速度
二、filter不會計算相關度得分,且結果會有緩存,效率高
三、全文搜索、評分排序,使用query
四、是非過濾,精確匹配,使用filter
章節三 Logstash零基礎入門到採集日誌實戰
十一、Logstash基本介紹和使用場景
簡介:講解什麼是logstash,裏面的基本工做流程input,filter,output等說明
什麼是logstash (文檔地址 https://www.elastic.co/guide/en/logstash/current/index.html)
開源的日誌收集引擎,具有實時傳輸的能力
讀取不一樣的數據源,並進行過濾,開發者自定義規範輸出到目的地
日誌來源多(如系統日誌,應用日誌,服務器日誌等)
流程講解
logstash經過管道pipeline進行傳輸,必選的兩個組件是輸入input和輸出output,還有個可選過濾器filter
logstash將數據流中等每一條數據稱之爲一個event,即讀取每一行數據的行爲叫作事件
#輸入
input {
...
}
# 過濾器
filter {
...
}
# 輸出
output {
...
}
十二、Logstash插件介紹
簡介:講解input,filter和output的插件的基本使用
簡單的配置 test.conf
#===================================
input {
# 從文件讀取日誌信息
file {
path => "/var/log/messages"
type => "system"
start_position => "beginning"
}
}
filter {
}
output {
#標準輸出
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-test-%{type}-%{host}"
}
}
#===================================
input插件:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
file,http,kafka,rabbitmq等
filter插件:https://www.elastic.co/guide/en/logstash/current/filter-plugins.html
grok(號稱將非標準化的日誌數據轉換成標準化而且可搜索數據最好的方式,經常使用於處理Niginx,sysLog等日誌)
drop(跳過某些日誌,不進入output)
geoip(獲取地理信息)
output插件:https://www.elastic.co/guide/en/logstash/current/output-plugins.html
elasticSearch,cvs,email,file等
1三、阿里雲服務器部署Logstash 6.1.2
簡介:阿里雲Centos部署Logstash,目錄文件,配置講解,基本功能測試
下載安裝包
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.2.2.tar.gz
解壓:tar -zxvf logstash-6.2.2.tar.gz
快速啓動(須要java8 jre,目前不支持java9)
./bin/logstash -e 'input {stdin {}} output {stdout {}}'
目錄文件說明
https://www.elastic.co/guide/en/logstash/6.2/dir-layout.html
配置講解
https://www.elastic.co/guide/en/logstash/6.2/logstash-settings-file.html
logstash.yml 修改 pipeline.workers,根據CPU核數增長1到2便可
jvm.options 修改 xms和xmx爲相同,通常是系統內存三份之二
1四、Logstash採集輸送日誌input filter output流程測試
簡介:講解Logstash採集日誌和輸送日誌流程測試,包括input,filter和output元素的測試
bin/logstash -f test1.conf
./logstash -f ../config/test1.conf
codec的使用( Coder/decoder 兩個單詞首字母縮寫)
Codec: 解碼編碼 數據格式
好處 更方便logstash與支持自定義數據格式的運維產品進行使用
logstash更細化的處理流程
input->decode->filter->encode->output
配置一 test1.conf
========================================
input {
# 從文件讀取日誌信息 輸送到控制檯
file {
path => "/Users/jack/Desktop/person/elk/elasticsearch-6.1.1/logs/elasticsearch.log"
#codec => "json" ## 以JSON格式讀取日誌
type => "elasticsearch"
start_position => "beginning"
}
}
# filter {
#
# }
output {
# 標準輸出
# stdout {}
# 輸出進行格式化,採用Ruby庫來解析日誌
stdout { codec => rubydebug }
}
========================================
filter使用
例子
切割插件mutate,隨意輸入一串以|分割的字符,好比 "123|000|ttter|sdfds*=123|dfwe
配置二 test2_filter.conf
========================================
input {
stdin {}
}
filter {
mutate {
split => ["message", "|"]
}
}
output {
# 標準輸出
# stdout {}
# 輸出進行格式化,採用Ruby庫來解析日誌
stdout { codec => rubydebug }
}
========================================
1五、logstash案例實戰之讀取日誌輸出到elasticsearch
簡介:從日誌文件中讀取日誌,輸出到elasticsearch集羣中
logstash配置文件
配置三 test3_es.conf
========================================
input {
file {
path => "/Users/jack/Desktop/person/elk/elasticsearch-6.1.1/logs/elasticsearch.log"
type => "elasticsearch"
start_position => "beginning" #從文件開始處讀寫
}
}
output{
elasticsearch{
hosts=>["127.0.0.1:9201"]
index => "es-message-%{+YYYY.MM.dd}"
}
stdout{codec => rubydebug}
}
========================================
驗證
查看索引列表 http://localhost:9201/_cat/indices?v
查看數據 http://localhost:9201/es-message-2018.02.26/_search
章節四 Kibana 6.2版本基礎入門到實戰
1六、阿里雲cenos服務器部署kibana6.2.2
簡介:快速部署kibana,並配置外網能夠訪問
阿里雲下載安裝kibana
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.2-linux-x86_64.tar.gz
解壓 tar -zxvf kibana-6.2.2-linux-x86_64.tar.gz
訪問地址
本機:localhost:5601
阿里雲機器:http://120.79.160.143:5601
阿里雲外網訪問
開放端口,修改配置文件 confing目錄下的kibana.yml
server.host: "0.0.0.0"
守護進程後臺啓動
nohup XXX &
1七、kibana基本介紹、和elasticSearch版本兼容問題
簡介:講解什麼是kibana,目錄文件講解,配置等
官網文檔地址:https://www.elastic.co/guide/en/kibana/current/setup.html
ELK
注意事項
一、kibana和elsticserch版本不能差異大,不然沒法正常使用 好比 Kibana 6.x 和 Elasticsearch 2.x不能正常使用
二、運行比Kibana更高版本的Elasticsearch一般能夠工做 例如Kibana 5.0和Elasticsearch 5.1
三、小版本差別會有一些警告出現,除非二者升級到相同的版本
windows下安裝啓動文檔
https://www.elastic.co/guide/en/kibana/current/windows.html
kibana.yml常見配置項
elasticsearch.pingTimeout 平常用的ping
elasticsearch.requestTimeout 讀取es的超時時間
elasticsearch.url es主機地址
elasticsearch.username es鑑權的用戶名
elasticsearch.password es鑑權的密碼
1八、kibana面板講解和功能使用說明
簡介:講解kibana的web界面,各個模塊劃分,功能的基本使用
kibana狀態及服務器資源使用率
http://120.79.160.143:5601/status
基礎操做文檔:https://www.elastic.co/guide/en/kibana/current/getting-started.html
一、建立索引表達式
使用*統配符,去匹配ES中的一個或多個索引(若是沒有匹配,沒法點擊下一步)
二、discover面板發現數據
能夠指定時間進行查詢
可使顯示的字段
查詢索引的數據,可使用lucence語法進行查詢
章節五 項目實戰系列之阿里雲服務器部署ELK,採集業務日誌和分析
1九、項目實戰系列之《採集業務應用日誌》配置
簡介:選擇日誌源,配置logstash採集並輸送到elasticSeach
常見問題解決
一、JVM內存溢出致使的 ES或者Logstash服務啓不來,報錯 insufficient memory
解決:升級機器的內存和CPU;
或者改elasticSeach和logstash的JVM.option,最大堆內存xmx和初始堆內存xms
二、ES啓動報錯
seccomp unavailable: CONFIG_SECCOMP not compiled into kernel, CONFIG_SECCOMP and CONFIG_SECCOMP_FILTER are needed
修改elasticsearch.yml 添加一下內容
bootstrap.memory_lock: false 爲了不內存和磁盤之間的swap
bootstrap.system_call_filter: false
三、ERROR: bootstrap checks failed
max virtual memory areas vm.max_map_count [65530] is too low, increase to at least
臨時設置:sudo sysctl -w vm.max_map_count=262144
永久修改:
修改/etc/sysctl.conf 文件,添加 「vm.max_map_count」設置
並執行:sysctl -p
20、項目實戰系列一之《採集業務應用日誌》應用
簡介:經過kibana的web管理界面,創建簡單的日誌分析功能
2一、項目實戰系列之Kibana圖形、報表分析
簡介:講解業務應用日誌在Kibana上的可視化分析,柱狀圖,餅狀圖等
官方文檔地址:
https://www.elastic.co/guide/en/kibana/current/tutorial-load-dataset.html
下載數據集
wget https://download.elastic.co/demos/kibana/gettingstarted/accounts.zip
解壓 unzip accounts.zip
導入數據到es中
curl -H 'Content-Type: application/x-ndjson' -XPOST 'localhost:9200/bank/account/_bulk?pretty' --data-binary @accounts.json
示例地址
https://www.elastic.co/guide/en/kibana/current/tutorial-visualizing.html
可結合參考資料觀看https://xdclass.net/html/course_catalogue.html?video_id=2