1. 程式人生 > >2018年ElasticSearch6.2.2教程ELK搭建日誌采集分析系統(教程詳情)

2018年ElasticSearch6.2.2教程ELK搭建日誌采集分析系統(教程詳情)

domain 服務器日誌 環境 解決 對比 修改 tst 阿裏雲服務 們的

章節一 2018年 ELK課程計劃和效果演示
1、課程安排和效果演示
簡介:課程介紹和主要知識點說明,ES搜索接口演示,部署的ELK項目演示
es: localhost:9200
kibana http://localhost:5601/

章節二 elasticSearch 6.2版本基礎講解到阿裏雲部署實戰

2、搜索引擎知識介紹和相關框架
簡介:介紹搜索的基本概念,市面上主流的搜索框架elasticSearch和solr等對比
什麽是搜索:在海量信息中獲取我們想要的信息
傳統做法:
1、文檔中使用系統的Find查找
2、mysql中使用like模糊查詢
問題:
1、海量數據中不能及時響應,少量數據可以通過傳統的MySql建立索引解決

2、一些無用詞不能進行過濾,沒法分詞
3、數據量大的話難以拓展
4、相同的數據難以進行相似度最高的進行排序
搜索引擎:
1、存儲非結構化的數據
2、快速檢索和響應我們需要的信息,快-準
3、進行相關性的排序,過濾等
4、可以去掉停用詞(沒有特殊含義的詞,比如英文的a,is等,中文: 這,的,是等),框架一般支持可以自定義停用詞

常用框架:
    1、Lucene
        Apache下面的一個開源項目,高性能的、可擴展的工具庫,提供搜索的基本架構;
        如果開發人員需用使用的話,需用自己進行開發,成本比較大,但是性能高

    2、solr
        Solr基於Lucene的全文搜索框架,提供了比Lucene更為豐富的功能,
        同時實現了可配置、可擴展並對查詢性能進行了優化
        建立索引時,搜索效率下降,實時索引搜索效率不高
        數據量的增加,Solr的搜索效率會變得更低,適合小的搜索應用,對應java客戶端的是solrj

    3、elasticSearch
        基於Lucene的搜索框架, 它提供了一個分布式多用戶能力的全文搜索引擎,基於RESTful web接口
        上手容易,拓展節點方便,可用於存儲和檢索海量數據,接近實時搜索,海量數據量增加,搜索響應性能幾乎不受影響;
        分布式搜索框架,自動發現節點,副本機制,保障可用性

3、新版本 elasticSearch 6.1.2介紹
簡介:介紹ES的主要特點和使用場景,新特性講解

elasticSearch主要特點

    1、特點:全文檢索,結構化檢索,數據統計、分析,接近實時處理,分布式搜索(可部署數百臺服務器),處理PB級別的數據
        搜索糾錯,自動完成
    2、使用場景:日誌搜索,數據聚合,數據監控,報表統計分析

    3、國內外使用者:維基百科,Stack Overflow,GitHub

新特性講解

    1、6.1.x版本基於Lucene 7.1.0,更快,性能進一步提升,對應的序列化組件,升級到Jackson 2.8

    2、自適應副本選擇
    今天在Elasticsearch中,對同一分片的一系列搜索請求將以循環方式轉發到主要和每個副本。如果一個節點啟動了長時間的垃圾收集,這可能會出現問題 - 搜索請求仍將被轉發到緩慢的節點,並且會影響搜索延遲。

    在6.1中,我們添加了一個稱為自適應副本選擇的實驗×××。每個節點跟蹤並比較搜索請求到其他節點的時間,並使用這些信息來調整向特定節點發送請求的頻率。在我們的基準測試中,這樣可以大大提高搜索吞吐量,降低99%的延遲。
    這個選項在默認情況下是禁用的

    3、推薦使用5.0版本推出的Java REST/HTTP客戶端,依賴少,比Transport使用更方便,在基準測試中,性能並不輸於Transport客戶端,

    在5.0到6.0版本中,每次有對應的API更新, 文檔中也說明,推薦使用這種方式進行開發使用,所有可用節點間的負載均衡
    在節點故障和特定響應代碼的情況下進行故障轉移,失敗的連接處罰(失敗的節點是否重試取決於失敗的連續次數;失敗的失敗次數越多,客戶端在再次嘗試同一節點之前等待的時間越長)

    官方文檔:
    1、6.0更新特性
     https://www.elastic.co/guide/en/elasticsearch/reference/6.0/release-notes-6.0.0.html#breaking-java-6.0.0
    2、6.1更新特性 
    https://www.elastic.co/guide/en/elasticsearch/reference/6.1/release-notes-6.1.0.html

4、windows安裝啟動ElasticSearch
簡介:windows環境下安裝JDK8和 ElasticSearch

5、阿裏雲服務器 快速安裝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出現相關問題處理:
    1、問題一
        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
    解決:內存不夠,購買阿裏雲的機器可以動態增加內存

    2、問題二
        [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 用戶名

    3、問題三
        ./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

6、ElasticSearch目錄和配置文件介紹
簡介:介紹ES目錄結構,配置文件基本說明
bin: 啟動文件
log: 日誌文件,包括運行日誌,慢查詢日誌
config: 核心配置文件
lib: 依賴包
plugins :插件

7、ElasticSearch核心配置文件講解,性能優化配置
簡介:講解核心配置文件,JVM參數配置,性能優化
健康狀態檢查:http://localhost:9200/_cluster/health
jvm.options 虛擬機參數配置文件
配置heap內存一樣

    elasticsearch.yml   主配置文件
        cluster.name  集群名稱,同一個網段自動加入
        node.name     節點名稱
        http.port     http端口

    註意事項
         本地啟動多個節點,復制es安裝包的時候,需要刪除裏面data目錄裏面的資料,不然無法加入集群

8、ElasticSearch基礎概念講解
簡介:es的index索引,document文檔對象,副本,多節點集群等基礎知識

    1、通俗的解釋:
        在Elasticsearch中,文檔歸屬於一種類型(type),而這些類型存在於索引(index)中, 索引名稱必須是小寫
        Relational DB -> Database -> Table -> Row -> Column
        Elasticsearch -> Indice   -> Type  -> Document -> Field

    2、分片shards:
        數據量特大,沒有足夠大的硬盤空間來一次性存儲,且一次性搜索那麽多的數據,響應跟不上es提供把數據進行分片存儲,這樣方便進行拓展和提高吞吐

    3、副本replicas:
        分片的拷貝,當主分片不可用的時候,副本就充當主分片進行使用

    4、Elasticsearch中的每個索引分配5個主分片和1個副本
    如果你的集群中至少有兩個節點,你的索引將會有5個主分片和另外5個復制分片(1個完全拷貝),這樣每個索引總共就有10個分片。

9、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‘

10、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
    1、Domain Specific Language 領域特定語言
    2、Elasticsearch提供了完整的查詢DSL,基於JSON定義查詢
    3、用於構造復雜的查詢語句

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)

    1、大部分filter的速度快於query的速度 
    2、filter不會計算相關度得分,且結果會有緩存,效率高
    3、全文搜索、評分排序,使用query
    4、是非過濾,精確匹配,使用filter

章節三 Logstash零基礎入門到采集日誌實戰

11、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 {
      ...
    }

12、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等

13、阿裏雲服務器部署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為相同,一般是系統內存三份之二

14、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 }
    }

========================================

15、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版本基礎入門到實戰

16、阿裏雲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  &

17、kibana基本介紹、和elasticSearch版本兼容問題
簡介:講解什麽是kibana,目錄文件講解,配置等
官網文檔地址:https://www.elastic.co/guide/en/kibana/current/setup.html
ELK
註意事項
1、kibana和elsticserch版本不能差別大,否則無法正常使用 比如 Kibana 6.x 和 Elasticsearch 2.x不能正常使用

    2、運行比Kibana更高版本的Elasticsearch通常可以工作 例如Kibana 5.0和Elasticsearch 5.1

    3、小版本差異會有一些警告出現,除非兩者升級到相同的版本

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鑒權的密碼

18、kibana面板講解和功能使用說明
簡介:講解kibana的web界面,各個模塊劃分,功能的基本使用

kibana狀態及服務器資源使用率
    http://120.79.160.143:5601/status

基礎操作文檔:https://www.elastic.co/guide/en/kibana/current/getting-started.html

1、創建索引表達式
    使用*統配符,去匹配ES中的一個或多個索引(如果沒有匹配,無法點擊下一步)

2、discover面板發現數據
    可以指定時間進行查詢
    可以使顯示的字段
    查詢索引的數據,可以使用lucence語法進行查詢

章節五 項目實戰系列之阿裏雲服務器部署ELK,采集業務日誌和分析

19、項目實戰系列之《采集業務應用日誌》配置
簡介:選擇日誌源,配置logstash采集並輸送到elasticSeach

常見問題解決
    1、JVM內存溢出導致的 ES或者Logstash服務啟不來,報錯 insufficient memory
        解決:升級機器的內存和CPU;
        或者改elasticSeach和logstash的JVM.option,最大堆內存xmx和初始堆內存xms

    2、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  

    3、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管理界面,建立簡單的日誌分析功能

21、項目實戰系列之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
http://edu.51cto.com/course/13198.html?source=so

2018年ElasticSearch6.2.2教程ELK搭建日誌采集分析系統(教程詳情)