搜索引擎(ELK)

學習目標

瞭解ELK是什麼,用途。
掌握beats的用途、種類、使用。
掌握logstash的用途、工做原理、安裝、配置。
掌握logstash的使用
掌握kibana的使用html

ELK簡介

ELK是什麼?node

Elasticsearch    Logstash   Kibana 原來稱爲 ELK Stack ,如今稱爲Elastic Stack,加入了 beats 來優化Logstash。mysql

從官網介紹瞭解它們:https://www.elastic.co/cn/productslinux

ELK的主要用途是什麼?nginx

大型分佈式系統的日誌集中分析。git

爲何要用ELK來作日誌集中分析?github

問1:在生產系統中出現問題,你該如何來定位問題?正則表達式

問2:在大型的分佈式系統中如出現問題,你該如何定位問題?redis

一個完整的集中式日誌系統,須要包含如下幾個主要特色sql

    收集-可以採集多種來源的日誌數據
    傳輸-可以穩定的把日誌數據傳輸到中央系統
    轉換— 可以對收集的日誌數據進行轉換處理
    存儲-如何存儲日誌數據
    分析-能夠支持 UI 分析
    告警-可以提供錯誤報告,監控機制
ELK提供了一整套解決方案,而且都是開源軟件,之間互相配合使用,完美銜接,高效的知足了不少場合的應用。目前主流的一種日誌系統。

ELK架構(一)   老的架構

ELK架構(二)    用beats來進行採集的架構

Beats

Beats是什麼?

輕量型數據採集器。負責從目標源上採集數據。

官網介紹:https://www.elastic.co/cn/products/beats

Beats 的已有種類

 

FileBeat  日誌文件採集器   工做原理

Prospector 勘測者

負責管理Harvester並找到全部讀取源。 6.3開始叫 input 了。

Harvestor 收割機

負責讀取單個文件內容,發送到輸出

獲取 FileBeat

6.2.4 版本下載地址: https://www.elastic.co/downloads/past-releases/filebeat-6-2-4

最新版下載地址:https://www.elastic.co/cn/downloads/beats/filebeat

使用步驟     https://www.elastic.co/guide/en/beats/filebeat/6.2/filebeat-getting-started.html

一、安裝
       windows:解壓到安裝目錄便可
       linux: rpm -ivh filebeat-6.2.4-x86_64.rpm

安裝後的目錄結構:

https://www.elastic.co/guide/en/beats/filebeat/6.2/directory-layout.html

使用步驟

二、配置:在 filebeat.yml 中配置從哪些文件讀取數據,送到哪裏去
一、配置勘測採集源

filebeat.prospectors:
- type: log
  enabled: true
  paths:
    - /var/log/*.log
    #- c:\programdata\elasticsearch\logs\*

二、配置輸出送到es中去

output.elasticsearch:
  hosts: ["192.168.1.42:9200"]

若ES有認證,配置用戶密碼

output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "elastic"
  password: "elastic"

三、啓動filebeat

linux rpm :  sudo service filebeat start
       windows:
            安裝了服務:PS C:\Program Files\Filebeat> Start-Service filebeat

      若是沒有安裝服務,在安裝目錄直接運行啓動程序 filebeat
            sudo ./filebeat

      可加啓動選項:-e 輸入日誌到標準輸出, -c 指定配置文件
            如:sudo ./filebeat -e -c filebeat.yml
GET /_cat/indices?v                 查看建立的索引
GET /filebeat*/_search?q=*   查看索引的數據格式

四、配置索引模板    https://www.elastic.co/guide/en/beats/filebeat/6.2/filebeat-template.html
         默認狀況下,若是輸出是elasticsearch,filebeat自動建立推薦的索引模板(定義在fields.yml中)。

若是你想使用自定義的模板,可在 filebeat.yml中配置指定你的模板

setup.template.name: "your_template_name"
setup.template.fields: "path/to/fields.yml"

覆蓋已存在的模板

setup.template.overwrite: true

改變索引的名字。默認爲filebeat-6.2.4-yyyy.MM.dd

output.elasticsearch.index: "customname-%{[beat.version]}-%{+yyyy.MM.dd}"
setup.template.name: "customname"
setup.template.pattern: "customname-*"   名字中應包含版本和日期部分
#setup.dashboards.index: "customname-*"  使用kibana的dashboard時須要

重啓filebeat後纔會建立

手動載入模板。當輸出是logstash時,需手動執行命令來向es建立模板

filebeat setup --template -E output.logstash.enabled=false -E 'output.elasticsearch.hosts=["localhost:9200"]'

五、配置使用kibana的dashboards。在 filebeat.yml 中:

setup.dashboards.enabled: true

setup.kibana:
  host: "mykibanahost:5601"

有認證的配置

setup.kibana:
  host: "mykibanahost:5601"
  username: "elastic"  
  password: "elastic"

重啓filebeat,在kibana中瀏覽 Discover   Visualize  DashBoard

配置輸出到logstash

output.logstash:
  hosts: ["127.0.0.1:5044"]

請記得,須要手動載入索引模板。

Filebeat的各類配置的詳細說明請參考:

https://www.elastic.co/guide/en/beats/filebeat/6.2/configuring-howto-filebeat.html

FileBeat 的運行命令說明

https://www.elastic.co/guide/en/beats/filebeat/6.2/command-line-options.html

FileBeat modules 模塊

思考:

一、日誌信息只是做爲一個文本字段放入ES中,仍是應該將其解析爲多個特定意義的字段,方便統計分析?
二、各類應用(如 nginx  tomcat  mysql  redis )輸出的日誌格式同樣嗎?包含的信息域同樣嗎?

fileBeat中提供了不少常見應用日誌格式的讀取解析模塊,來簡化咱們的使用。 官網參考:

https://www.elastic.co/guide/en/beats/filebeat/6.2/filebeat-modules-quickstart.html

https://www.elastic.co/guide/en/beats/filebeat/6.2/filebeat-modules-overview.html

https://www.elastic.co/guide/en/beats/filebeat/6.2/configuration-filebeat-modules.html
安裝對應插件

sudo bin/elasticsearch-plugin install ingest-geoip  
sudo bin/elasticsearch-plugin install ingest-user-agent

查看、啓用模塊

filebeat modules list
filebeat modules enable apache2 auditd mysql

Prospector (input) 配置詳細介紹

https://www.elastic.co/guide/en/beats/filebeat/current/configuration-filebeat-options.html

搞清楚如何作下面的配置:

1.如何指定查找哪些文件?如何指定多個路徑?以及排除哪些文件?paths    exclude_files
2.如何過濾文件中行?      exclude_lines    include_lines
3.如何指定以何種編碼來讀取文件?   encoding
4.如何爲讀取的數據加額外的標識字段?    tags    fields    fields_under_root
5.如何對讀取的數據進行處理?   processors   詳細瞭解見下面的連接

https://www.elastic.co/guide/en/beats/filebeat/current/filtering-and-enhancing-data.html https://www.elastic.co/guide/en/beats/filebeat/current/defining-processors.html

6.如何設置多行的信息如何讀取?

https://www.elastic.co/guide/en/beats/filebeat/current/multiline-examples.html https://www.elastic.co/guide/en/beats/filebeat/current/_examples_of_multiline_configuration.html

7.如何對不一樣的文件設置不一樣的讀取處理?
可配置多個prospector,定義不一樣的行爲。

output 配置詳細介紹

https://www.elastic.co/guide/en/beats/filebeat/current/configuring-output.html

可輸出到:Elasticsearch  Logstash  Kafka  Redis  File  Console

Elasticsearch output

https://www.elastic.co/guide/en/beats/filebeat/current/elasticsearch-output.html

重點搞清楚:

如何指定索引?       index
如何爲不一樣的數據指定不一樣的索引?    Indices
如何指定管道?    pipeline   pipelines  
https://www.elastic.co/guide/en/beats/filebeat/current/configuring-ingest-node.html

Logstash output

https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html

重點搞清楚: 注意:必定要記得須要手動建立索引模板

如何設置負載均衡?   loadbalance
如何指定索引?       index  + @metadata

一、指定索引前綴名,默認值爲 filebeat

二、配置logstash的管道輸出的索引(使用@metadata)

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" 
  }
}

@metadata字段在最終的輸出中是沒有的,如想看可配置logstash的out以下:

output {
    stdout { codec => rubydebug { metadata => true } }
}

Logstash

Logstash的角色

https://www.elastic.co/cn/products/logstash

Logstash 介紹

https://www.elastic.co/guide/en/logstash/current/introduction.html

獲取 Logstash

https://www.elastic.co/cn/downloads/logstash

6.2.4 版本:https://www.elastic.co/downloads/past-releases/logstash-6-2-4

安裝

開箱即用:
壓縮包:解壓到安裝目錄
rpm包:rpm -ivh logstash-6.2.4.rpm

logstash Pipeline 管道   工做原理

啓動logstash實例時需爲其指定管道定義。

https://www.elastic.co/guide/en/logstash/6.2/pipeline.html
https://www.elastic.co/guide/en/logstash/6.2/execution-model.html

試用

用最簡單的管道定義來啓動logstash實例

cd logstash-6.2.4
bin/logstash -e 'input { stdin { } } output { stdout {} }'

用logstash來解析日誌

一、配置 Filebeat 將日誌發送給logstash

filebeat.prospectors:
- type: log
  paths:
    - /path/to/file/logstash-tutorial.log 
output.logstash:
  hosts: ["localhost:5044"]

二、配置Logstash的管道輸入爲 Filebeat

管道定義模板

# The # character at the beginning of a line indicates a comment. Use
# comments to describe your configuration.
input {
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
}

在logstash home目中建立文件管道配置文件 first-pipeline.conf,配置以下:

input {
    beats {                  //定義 beats 輸入
        port => "5044"
    }
}
# The filter part of this file is commented out to indicate that it is
# optional.
# filter {
#
# }
output {
    stdout { codec => rubydebug }   //定義 輸出到標準輸出
}

測試管道配置是否正確

bin/logstash -f first-pipeline.conf --config.test_and_exit

啓動logstash實例

bin/logstash -f first-pipeline.conf --config.reload.automatic

三、配置filter 來解析日誌

input {
    beats {
        port => "5044"
    }
}
filter {              //配置使用 grok 過進行濾轉換
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
}
output {
    stdout { codec => rubydebug }
}

四、再加入一個過濾器

geoip {
        source => "clientip"   //實現ip轉地理座標
    }

關閉filebeat實例,執行 sudo rm data/registry 刪除filebeat記錄,再啓動filebeat

五、配置輸出到elasticsearch

output {
    elasticsearch {
        hosts => [ "localhost:9200" ]
    }
}

關閉filebeat實例,執行 sudo rm data/registry 刪除filebeat記錄,再啓動filebeat

瞭解 input

Logstash中實現了不少input 插件,可知足咱們各類來源數據的接收:

https://www.elastic.co/guide/en/logstash/current/input-plugins.html

配置從多個input獲取數據

input {
    stdin { }
    file {
        path => "/tmp/*_log"
    }
    beats {
        port => "5044"
    }
}

 

瞭解 filter

Logstash中實現了不少filter 插件:

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

可多重過濾處理

filter {
    grok {
        match => { "message" => "%{COMBINEDAPACHELOG}"}
    }
    geoip {
        source => "clientip"
    }
}

如何解析日誌文本爲字段

用 grok 過濾器 https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html

掌握 Grok match 表達式語法

%{SYNTAX:SEMANTIC}

瞭解從哪裏去查看預約義的正則表達式

https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns

知道如何定義本身的正則表達式
      直接定義正則表達式
      若是要重用就定義一各模式文件,用patterns_dir => [「./patterns」] 指定模式目錄

55.3.244.1 GET /index.html 15824 0.043
%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}

如何加入、替換、刪除字段

瞭解filter通用屬性 add_field   add_tag   remove_field   remove_tag

瞭解alter、date、range filter的用法

如何篩選數據

瞭解drop  filter的用法。

如何進行條件過濾或條件輸出

瞭解: https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html

 

瞭解 output

Logstash中實現了不少output 插件:

https://www.elastic.co/guide/en/logstash/current/output-plugins.html

輸出到多個地方

output {
    elasticsearch {
        hosts => ["IP Address 1:port1", "IP Address 2:port2", "IP Address 3"]
    }
    file {
        path => "/path/to/target/file"
    }
    stdout { codec => rubydebug }
}

如何設置輸出的索引?

https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-template

Filebeat中 logstash output 配置的介紹(p28頁)
https://www.elastic.co/guide/en/beats/filebeat/current/logstash-output.html

如何配置將不一樣的數據發送給不一樣的輸出目標

條件選擇輸出: https://www.elastic.co/guide/en/logstash/current/event-dependent-configuration.html

輸出索引名稱上帶動態字段引用。

 

瞭解 codec

Logstash中實現了不少codec插件,能夠在input 中指定用什麼codec來讀取輸入內容;能夠在output中指定輸出爲何格式。

https://www.elastic.co/guide/en/logstash/current/codec-plugins.html

 

logstash的詳細配置說明

請參考官網: https://www.elastic.co/guide/en/logstash/current/configuration.html

logstash插件擴展

請參考官網: https://www.elastic.co/guide/en/logstash/current/contributing-to-logstash.html

 

Kibana

kibana須要學會使用的點

kibana的學習資源

Kibana 用戶手冊:
https://www.elastic.co/guide/cn/kibana/current/index.html

kibana使用的基本流程

相關文章
相關標籤/搜索