日誌收集-Elk6

一:前言

ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日誌收集處理工具(Agent),Filebeat佔用資源少,適合於在各個服務器上搜集日誌後傳輸給Logstash,官方也推薦此工具。html

Elasticsearch是個開源分佈式搜索引擎,提供蒐集、分析、存儲數據三大功能。它的特色有:分佈式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。java

Logstash 主要是用來日誌的蒐集、分析、過濾日誌的工具,支持大量的數據獲取方式。通常工做方式爲c/s架構,client端安裝在須要收集日誌的主機上,server端負責將收到的各節點日誌進行過濾、修改等操做在一併發往elasticsearch上去。node

Kibana 也是一個開源和免費的工具,Kibana能夠爲 Logstash 和 ElasticSearch 提供的日誌分析友好的 Web 界面,能夠幫助彙總、分析和搜索重要數據日誌。linux

Filebeat隸屬於Beats。目前Beats包含四種工具:json

    1. Packetbeat(蒐集網絡流量數據)
    2. Topbeat(蒐集系統、進程和文件系統級別的 CPU 和內存使用狀況等數據)
    3. Filebeat(蒐集文件數據)
    4. Winlogbeat(蒐集 Windows 事件日誌數據)

 二:elasticSearch

2.1:主要特色

  一、特色:全文檢索,結構化檢索,數據統計、分析,接近實時處理,分佈式搜索(可部署數百臺服務器),處理PB級別的數據搜索糾錯,自動完成
  二、使用場景:日誌搜索,數據聚合,數據監控,報表統計分析
  三、國內外使用者:維基百科,Stack Overflow,GitHubbootstrap

2.2:ES6.1新特性講解

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

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

    在6.1中,咱們添加了一個稱爲自適應副本選擇的實驗性功能。每一個節點跟蹤並比較搜索請求到其餘節點的時間,並使用這些信息來調整向特定節點發送請求的頻率。在咱們的基準測試中,這樣能夠大大提升搜索吞吐量,下降99%的延遲。
這個選項在默認狀況下是禁用的性能優化

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

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

2.3:安裝ES

  1.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

2.4:配置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

2.5:ES目錄和配置文件介紹

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

2.6:ES核心配置文件講解,性能優化配置

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

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

注意事項
本地啓動多個節點,複製es安裝包的時候,須要刪除裏面data目錄裏面的資料,否則沒法加入集羣

2.7:ES基礎概念講解

簡介: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個分片。

2.8:search搜索語句

簡介:講解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/yaohong/article/2?pretty' -d '
{
"title": "myblog",
"content":"1234567"
}'

  

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/yaohong/article/3?pretty' -d '
{
"title": "test",
"content":"testsfsdfdsfdsf",
"PV":23
}'

 

ID查詢記錄

curl -XGET 'localhost:9200/yaohong/article/1'
curl -XGET 'localhost:9200/yaohong/article/1?pretty'(美化推薦)

搜索

curl -XGET 'http://localhost:9201/yaohong/article/_search?q=title:小A'

  

2.9:search搜索語句

簡介:講解結構化查詢語句DSL的使用,bool,filter查詢等

新增數據集

curl -XPUT -H "Content-Type: application/json" 'localhost:9201/yaohong/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查詢
參考地址: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

3.1: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 {
  ...
  }

3.2:Logstash插件介紹

簡單的配置 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等

3.2安裝LogStash6.1.2

下載安裝包

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爲相同,通常是系統內存三份之二

相關文章
相關標籤/搜索