天天看點

使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志

  • Logstash的通用配置
  • 1 使用Elasticsearch作為輸入,File作為輸出
    • 1.1 input為Elasticsearch
      • 1.1.1 概述
      • 1.1.2 定時任務
      • 1.1.3 可選的配置
    • 1.2 output為日志檔案
    • 1.3 執行資料導出
    • 1.4 檢視導出的日志
  • 2 從日志檔案導入到Elasticsearch中
    • 2.1 input為日志檔案
      • 2.1.1 概述
      • 2.1.2 跟蹤監視檔案中的目前位置
      • 2.1.3 檔案導入的配置
    • 2.2 output 為Elasticsearch
    • 2.3 建立配置檔案并執行
    • 2.4 檢視導入情況
    • 2.5 注意事項
    • 2.6 索引的生命周期管理 Index Lifecycle Management
    • 2.7 批量大小 Batch Size
    • 2.8 可選的配置

Logstash的通用配置

  • add_field 值類型為哈希 預設值為 {} 向事件添加字段
  • codec 值類型為編解碼器 預設值為 “json” 用于輸入資料的編解碼器。

    輸入編解碼器是一種在資料輸入之前解碼資料的便捷方法,而無需在Logstash管道中使用單獨的過濾器。

    備注: 嘗試不加codec => "json“ 時,并未按照 json 格式進行編碼,詳情見下文

  • enable_metric 值類型為布爾值 預設值為 true

    預設情況下,為此特定插件執行個體禁用或啟用度量标準日志記錄,我們會記錄所有可以度量的資料,但是您可以禁用特定插件的度量标準收集。

  • id 值類型為字元串 此設定沒有預設值。

    ID向插件配置添加唯一。如果未指定ID,Logstash将生成一個。強烈建議在您的配置中設定此ID。當您有兩個或多個相同類型的插件時(例如,如果您有2個Elasticsearch輸入),這特别有用。在這種情況下,添加命名ID将有助于在使用監視API時監視Logstash。

input {
  elasticsearch {
    id => "my_plugin_id"
  }
}
           
  • tags 值類型為數組 此設定沒有預設值。将任意數量的任意标簽添加到您的事件中。這可以幫助以後進行處理。
  • type 值類型為字元串 此設定沒有預設值。向此輸入處理的所有事件添加一個字段。主要用于過濾器激活。

    該類型存儲為事件本身的一部分,是以您也可以使用該類型在Kibana中進行搜尋。

    如果您嘗試為已經具有一個類型的事件設定類型(例如,當您将事件從shipper 發送到indexer),那麼新的輸入将不會覆寫現有的類型。即使被發送到另一台Logstash伺服器,在托運人處設定的類型在該事件中仍然存在。

1 使用Elasticsearch作為輸入,File作為輸出

1.1 input為Elasticsearch

1.1.1 概述

根據查詢條件從Elasticsearch叢集進行資料的讀取,對于測試日志、重新編排索引有很大的作用。運用logstash可以使用cron文法定期安排接收時間,或者運作一次查詢将資料加載到logstash中

input {
      # Read all documents from Elasticsearch matching the given query
      elasticsearch {
        hosts => "localhost"
        query => '{ "query": { "match": { "statuscode": 200 } }, "sort": [ "_doc" ] }'
      }
    }
           

這将建立具有以下格式的Elasticsearch查詢:

curl 'http://localhost:9200/logstash-*/_search?&scroll=1m&size=1000' -d '{
      "query": {
        "match": {
          "statuscode": 200
        }
      },
      "sort": [ "_doc" ]
    }'
           

1.1.2 定時任務

可以将來自此插件的輸入安排為根據特定計劃定期運作。此排程文法由rufus-scheduler支援。該文法類似于cron,具有一些特定于Rufus的擴充(例如時區支援)。

例子: * 5 * 1-3 * 從一月到三月的每天淩晨5點每分鐘執行一次。

* 5 * 1-3 *        				從一月到三月的每天淩晨5點每分鐘執行一次。
0 * * * * 						将在每天每小時的第0分鐘執行。
0 6 * * * America/Chicago		每天早上6:00(UTC / GMT -5)執行。
* * * * *						每分鐘執行一次
           

備注: 與通常的cron表達式不同,順序為:分鐘 小時 日期 月 星期

1.1.3 可選的配置

  • ca_file 值為路徑 沒有預設值 PEM編碼格式的SSL證書檔案,必須包含證書鍊
  • docinfo 值為布爾值,預設值為 false

    如果設定,則查詢到的資訊包含Elasticsearch的document資訊,例如index,type,id。

    關于metadata需要特别注意 : 如果要提取documents以對其重新編制index(或隻是對其進行更新),output選項可以動态的根據metadata進行配置設定需要的字段。

input {
      elasticsearch {
        hosts => "es.production.mysite.org"
        index => "mydata-2018.09.*"
        query => '{ "query": { "query_string": { "query": "*" } } }'
        size => 500
        scroll => "5m"
        docinfo => true
      }
    }
    output {
      elasticsearch {
        index => "copy-of-production.%{[@metadata][_index]}"
        document_type => "%{[@metadata][_type]}"
        document_id => "%{[@metadata][_id]}"
      }
    }
           

從Logstash 6.0開始,document_type 被删除,不建議使用該選項 。它将在Logstash的下一個主要版本中将其删除。

  • docinfo_fields 值類型為數組 預設值為 ["_index", “_type”, “_id”]

    如果通過啟用該docinfo 選項來請求文檔的metadata,則此選項表示要列出中繼資料字段。有關 更多資訊,請參閱 Elasticsearch文檔中的文檔中繼資料。

  • docinfo_target 值類型為字元串 預設值為 “@metadata”

    如果通過啟用該docinfo 選項來請求文檔中繼資料存儲,則此選項将metadata字段的子字段命名。

  • hosts 值類型為數組 沒有預設值。用于查詢的一台或多台Elasticsearch主機清單。每個主機可以是IP,HOST,IP:port或HOST:port。端口預設為9200。
  • index 值類型為字元串 預設值為 “logstash-*” 要搜尋的索引或别名。
  • password 值類型為字元串 向Elasticsearch伺服器進行身份驗證,此設定沒有預設值。 如果設定為空字元串,将禁用身份驗證。
  • user 類型為字元串 向Elasticsearch伺服器進行身份驗證,如果設定為空字元串,将禁用身份驗證。
  • query 值類型為字元串 預設值為 ‘{ “sort”: [ “_doc” ] }’、
  • schedule 值類型為字元串 此設定沒有預設值。定期運作語句的時間表,例如Cron格式:“ * * * * *”(每分鐘,每分鐘執行一次查詢)預設情況下沒有時間表。如果沒有給出時間表,則該語句僅運作一次。
  • scroll 值類型為字元串 預設值為 “1m”

    此參數控制滾動請求的保持活動時間(以秒為機關),和啟動滾動過程。逾時适用于每次往返(兩個請求之間)。

  • size 值類型是數字 預設值為 1000 這使您可以設定每個滾動傳回的最大比對數。
  • ssl 值類型為布爾值 預設值為 false 如果啟用,則在與Elasticsearch伺服器通信時将使用SSL(即,将使用HTTPS代替純HTTP)。

1.2 output為日志檔案

設定從一個主機位址為 192.168.126.139 的 Elasticsearch 叢集中導出檔案,定制時間為1 分鐘,導出的索引為test1。

導出位置為 /opt/modules/logstash-6.6.0/test/filedata,導出的檔案命名方式為 test + 年月日時分秒

具體的配置檔案

input {
      elasticsearch {
        hosts => "192.168.126.139:9200"
        index => "test1"
        docinfo => false
		schedule => "* * * * *"
      }
    }
    output {
     file {
       path => "/opt/modules/logstash-6.6.0/test/filedata/test-%{+YYYY-MM-dd HH:mm:ss}.txt"
     }
    }
           

在logstash 的檔案夾中建立一個test目錄

mkdir test
vi es_file.conf
           

1.3 執行資料導出

儲存後,進入bin 目錄,并執行

./logstash -f ../test/es_file.conf

[email protected]:/opt/modules/logstash-6.6.0/bin# ./logstash -f ../test/es_file.conf
jruby: warning: unknown property jruby.regexp.interruptible
Sending Logstash logs to /opt/modules/logstash-6.6.0/logs which is now configured via log4j2.properties
[2020-06-04T14:41:38,226][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2020-06-04T14:41:38,251][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.6.0"}
[2020-06-04T14:41:46,049][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2020-06-04T14:41:46,773][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x661dd718 run>"}
[2020-06-04T14:41:46,905][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-06-04T14:41:47,618][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
[2020-06-04T14:42:01,554][INFO ][logstash.outputs.file    ] Opening file {:path=>"/opt/modules/logstash-6.6.0/test/filedata/test-2020-06-04 06:42:01.txt"}
[2020-06-04T14:43:00,278][INFO ][logstash.outputs.file    ] Opening file {:path=>"/opt/modules/logstash-6.6.0/test/filedata/test-2020-06-04 06:43:00.txt"}
^C[2020-06-04T14:43:28,172][WARN ][logstash.runner          ] SIGINT received. Shutting down.
[2020-06-04T14:43:28,525][INFO ][logstash.outputs.file    ] Closing file /opt/modules/logstash-6.6.0/test/filedata/test-2020-06-04 06:42:01.txt
[2020-06-04T14:43:30,251][INFO ][logstash.pipeline        ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x661dd718 run>"}
           

檢視指定的目錄檢視所儲存的檔案

使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

可以看到日志已經可以按照設定的規則進行儲存了。

若想将查詢到Elasticsearch的結果直接輸出在控制台則修改output就可以

output {
		stdout { codec => rubydebug }
	}
           

1.4 檢視導出的日志

[email protected]:/opt/modules/logstash-6.6.0/test/filedata# cat test-2020-06-04\ 06\:43\:00.txt 
{"id":1,"age":18,"@timestamp":"2020-06-04T06:43:00.169Z","@version":"1","name":"zhangyao"}
{"id":11,"age":25,"@timestamp":"2020-06-04T06:43:00.170Z","@version":"1","name":"蘑菇"}
{"id":123,"age":22,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"益達"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"測試增加2"}
{"age":18,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"zhangyao"}
{"age":182,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"kugua"}
{"age":182,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"kugua"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.172Z","@version":"1","name":"ccccc"}
{"id":12,"age":18,"@timestamp":"2020-06-04T06:43:00.170Z","@version":"1","name":"zhangyao"}
{"id":11,"age":"22","@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"蘑菇"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"測試增加1"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"aaaaaaaa"}
{"age":18,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"zhangyao"}
{"age":182,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"azgua"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.171Z","@version":"1","name":"bbbbbb"}
{"age":999999,"@timestamp":"2020-06-04T06:43:00.172Z","@version":"1","name":"ddddd"}
           
使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

2 從日志檔案導入到Elasticsearch中

2.1 input為日志檔案

2.1.1 概述

日志檔案作為輸入時,有兩種模式:

  1. Tail模式

    跟蹤檔案的更改和檔案内容的追加,這種模式下,檔案被視為無盡的内容流EOF将沒有特殊意義。

  2. Read模式

    每個檔案被視為完整的,EOF将會很重要,不需要到最後一個定界符,EOF表示可以關閉檔案釋放空間。此模式還可以處理壓縮檔案

2.1.2 跟蹤監視檔案中的目前位置

通過将位置記錄在名為sinceddb的單獨檔案中來跟蹤每個檔案中的目前位置,這樣停止并重新開機logstash,可以從中斷處繼續讀取。

預設情況下sincedb檔案位于Logstash的資料目錄中,檔案名基于模式(path選項),修改模式會導緻使用新的sincedb檔案,并且位置狀态會丢失,如果修改模式可以通過sinced_path選項顯式的制定sincedb路徑。

sincedb記錄在一定的時間後可以過期,意味着不會記住舊檔案的讀取位置,檔案系統對新内容需要重用索引節點,理想情況下,logstash不會重複讀取,但是沒有可靠的辦法檢測是否發生了索引節點重用,這種情況更容易在 Read模式中發生,在這種模式下,有大量的檔案在sincedb中被追蹤,如果記錄過期,将會再次讀取之前的檔案。

2.1.3 檔案導入的配置

  • close_older 值類型是number或string_duration 預設值為 “1 hour”

    檔案輸入将在最後一次持續讀取後(如果指定了數字,則為秒)多久關閉。如果Tail模式,并且傳入資料有很大的時間間隔,則可以關閉檔案(允許打開其他檔案),但是當檢測到新資料時,将排隊等待重新打開檔案。如果Read模式,則從讀取最後一個位元組起,在closed_older秒後将關閉檔案。

  • delimiter 值類型為string 預設值為 “\n”

    設定新行分隔符,預設為“ \ n”。請注意,在讀取壓縮檔案時,不會使用此設定,而是使用标準Windows或Unix行結尾。

  • discover_interval 值類型number 預設值為 15

    多長時間輪詢一次path選項中的檔案名,以發現新的檔案。該值是stat_interval的倍數,例如,如果stat_interval是“ 500 ms”,則可以每15 X 500毫秒 也就是7.5秒的間隔發現新檔案。實際上,這是最好的情況,因為需要考慮讀取新内容所花費的時間。

  • exclude 值類型為array 此設定沒有預設值。

    排除項(與檔案名比對,不是完整路徑)。檔案名模式在這裡也是有效的。例如,如果您有

path => "/var/log/*"
           

在Tail模式下,您可能要排除壓縮檔案:

exclude => "*.gz"
           
  • file_chunk_count 值類型是數字 預設值為 4611686018427387903

    與結合使用時file_chunk_size,此選項設定在移至下一個活動檔案之前從每個檔案讀取多少塊。例如,file_chunk_count32和file_chunk_size32KB的a 将處理每個活動檔案中的下一個1MB。由于預設值非常大,是以在移至下一個活動檔案之前,該檔案已讀取到EOF。

  • file_chunk_size 值類型是數字 預設值為32768(32KB)

    從磁盤上以塊或塊的形式讀取檔案内容,并從塊中提取行。

  • file_completed_action 值可以是任何的:delete,log,log_and_delete 預設值為delete。

    在read模式下,完成檔案後應執行什麼動作。如果指定了删除,則檔案将被删除。如果指定了日志,則檔案的完整路徑将記錄到file_completed_log_path設定中指定的檔案中 。如果log_and_delete指定,則以上兩個動作都會發生。

  • file_completed_log_path 值類型為字元串 此設定沒有預設值。

    完全讀取的檔案路徑應附加到哪個檔案。隻有當指定檔案這條道路file_completed_action是日志或log_and_delete。重要說明:此檔案僅附加到-可能會變得很大。您負責檔案輪換。

  • file_sort_by 值可以是任何的:last_modified,path 預設值為last_modified。

    應該使用“監視”檔案的哪個屬性對其進行排序。檔案可以按修改日期或全路徑字母排序。以前,發現并是以“監視”的檔案的處理順序取決于作業系統。

  • file_sort_direction 值可以是任何的:asc,desc 預設值為asc。

    排序“監視”的檔案時,在升序和降序之間進行選擇。如果最舊的資料優先,那麼last_modified+ 的預設值asc很好。如果首先擷取最新資料更為重要,則選擇last_modified+ desc。如果對檔案的完整路徑使用特殊的命名約定,則path+ 可能 asc會幫助控制檔案處理的順序。

  • ignore_older 值類型是數字或string_duration 此設定沒有預設值。

    當發現在指定持續時間(如果指定了數字,則為秒)之前最後修改的檔案時,将忽略該檔案。發現後,如果修改了忽略的檔案,則不再忽略它,并且讀取任何新資料。預設情況下,此選項是禁用的。請注意,該機關以秒為機關。

  • max_open_files 值類型是數字 此設定沒有預設值。

    此輸入一次一次消耗的file_handles的最大數量是多少。如果您需要處理的檔案數量超過此數目,請使用close_older關閉一些檔案。不應将其設定為OS可以執行的最大操作,因為其他LS插件和OS程序需要檔案句柄。内部預設設定為4095。

  • mode 值可以是tail或read。 預設值為tail。

    希望檔案輸入以哪種模式操作。Tail模式讀取幾個檔案或Read模式許多内容完整的檔案。Read模式現在支援gzip檔案處理。

  1. 如果指定了Read模式,則将忽略以下其他設定:

    start_position (始終從頭開始讀取檔案)

    close_older(到達EOF時檔案自動關閉)

  2. 如果指定為“ read”,則注意以下設定:

    ignore_older (舊檔案未處理)

    file_completed_action (處理檔案時應采取什麼措施)

    file_completed_log_path (完整的檔案路徑應記錄到哪個檔案)

  • path 這是必需的設定。 值類型為數組 此設定沒有預設值。

    用作輸入的檔案的路徑。您可以在此處使用檔案名模式,例如/var/log/.log。如果您使用的模式/var/log.log,/var/log則将對所有*.log檔案進行遞歸搜尋。路徑必須是絕對路徑,不能是相對路徑。也可以配置多個路徑。

  • sincedb_clean_after 值類型是數字或string_duration 此設定的預設值為“ 2 weeks”。

    如果指定了一個數字,則将其解釋為天,可以是十進制,例如0.5是12小時。

    現在,sincedb記錄具有與其關聯的最後一個活動時間戳記。如果在過去N天内未在跟蹤檔案中檢測到任何更改,則它的sincedb跟蹤記錄将過期,并且不會保留。此選項有助于防止索引節點回收問題。

  • sincedb_path 值類型為字元串 此設定沒有預設值。

    sincedb資料庫檔案的路徑(保留跟蹤的日志檔案的目前位置的路徑),該路徑将被寫入磁盤。預設情況下會将sincedb檔案寫入到<path.data>/plugins/inputs/file NOTE:它必須是檔案路徑,而不是目錄路徑

  • sincedb_write_interval 值類型是數字或string_duration 預設值為 “15 seconds”

    自監視的日志檔案的目前位置起寫入資料庫的頻率(以秒為機關)。

  • start_position 值可以是任何的:beginning,end 預設值為 “end”

    選擇Logstash最初從哪個位置開始讀取檔案:在開頭還是結尾。預設行為将檔案視為實時流,是以從結尾開始。如果您要導入的舊資料,請将其設定為Beginning。

    此選項僅修改檔案為新檔案且之前未曾檢視過的“首次聯系”情況,即Logstash讀取的sincedb檔案中未記錄目前位置的檔案。如果以前已經看過檔案,則此選項無效,并且将使用sincedb檔案中記錄的位置。

  • stat_interval 值類型是數字或string_duration 預設值為 “1 second”

    我們統計檔案的頻率(以秒為機關),以檢視它們是否已被修改。增加此間隔将減少我們進行的系統調用的數量,但會增加檢測新日志行的時間。

    發現新檔案并檢查它們是否已增長/收縮。該循環将休眠stat_interval數秒,然後再次循環。但是,如果檔案已增長,則将讀取新内容并排隊。跨所有增長的檔案進行讀取和排隊可能會花費一些時間,尤其是在管道擁塞的情況下。是以,整個循環時間是stat_interval和檔案讀取時間的組合 。

2.2 output 為Elasticsearch

配置一個導出到192.168.126.139 的Logstash 事件

elasticsearch {
        hosts => "192.168.126.139:9200"
        index => "test2"
		manage_template => false
		
      }
           

2.3 建立配置檔案并執行

同上,建立一個資料導出到Elasticsearch的配置檔案,并制定索引名稱,此處使用的是預設的tail模式

vi file_es.conf


input {
     file {
       path => "/opt/modules/logstash-6.6.0/test/fileinput/test*.txt"
	   codec => "json"
     }
    }
output {
      elasticsearch {
        hosts => "192.168.126.139:9200"
        index => "test2"
		manage_template => false
		
      }
    }
   
           

直接使用指令執行導入操作

[email protected]:/opt/modules/logstash-6.6.0/bin# ./logstash -f ../test/file_es.conf 
jruby: warning: unknown property jruby.regexp.interruptible
Sending Logstash logs to /opt/modules/logstash-6.6.0/logs which is now configured via log4j2.properties
[2020-06-04T13:59:47,556][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2020-06-04T13:59:47,573][INFO ][logstash.runner          ] Starting Logstash {"logstash.version"=>"6.6.0"}
[2020-06-04T13:59:54,447][INFO ][logstash.pipeline        ] Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>2, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2020-06-04T13:59:54,952][INFO ][logstash.outputs.elasticsearch] Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://192.168.126.139:9200/]}}
[2020-06-04T13:59:55,193][WARN ][logstash.outputs.elasticsearch] Restored connection to ES instance {:url=>"http://192.168.126.139:9200/"}
[2020-06-04T13:59:55,284][INFO ][logstash.outputs.elasticsearch] ES Output version determined {:es_version=>7}
[2020-06-04T13:59:55,292][WARN ][logstash.outputs.elasticsearch] Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7}
[2020-06-04T13:59:55,345][INFO ][logstash.outputs.elasticsearch] New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["//192.168.126.139:9200"]}
[2020-06-04T13:59:55,706][INFO ][logstash.inputs.file     ] No sincedb_path set, generating one based on the "path" setting {:sincedb_path=>"/opt/modules/logstash-6.6.0/data/plugins/inputs/file/.sincedb_98c51ecfa514abf4345136cb9a014ecd", :path=>["/opt/modules/logstash-6.6.0/test/fileinput/test*.txt"]}
[2020-06-04T13:59:55,748][INFO ][logstash.pipeline        ] Pipeline started successfully {:pipeline_id=>"main", :thread=>"#<Thread:0x31df2a64 run>"}
[2020-06-04T13:59:55,850][INFO ][logstash.agent           ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-06-04T13:59:55,925][INFO ][filewatch.observingtail  ] START, creating Discoverer, Watch with file and sincedb collections
[2020-06-04T13:59:56,396][INFO ][logstash.agent           ] Successfully started Logstash API endpoint {:port=>9600}
^C[2020-06-04T14:41:07,749][WARN ][logstash.runner          ] SIGINT received. Shutting down.
[2020-06-04T14:41:08,074][INFO ][filewatch.observingtail  ] QUIT - closing all files and shutting down.
./logstash -f ../test/es_file.conf[2020-06-04T14:41:09,280][INFO ][logstash.pipeline        ] Pipeline has terminated {:pipeline_id=>"main", :thread=>"#<Thread:0x31df2a64 run>"}
           

觀察Logstash啟動正常後,執行cp指令,複制之前導出的日志檔案到指定的目錄下。

cp test-2020-06-04\ 01\:31\:00.txt ../fileinput/
           

2.4 檢視導入情況

檢視Elasticsearch中的全部索引資訊

GET http://192.168.126.139:9200/_cat/indices?v&pretty
           
使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

可以檢視到指定的索引已經被建立

檢視該索引

GET    http://192.168.126.139:9200/test2/_search
           

資料已經被正常導入,并且與之前導出的日志檔案一緻。

使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

2.5 注意事項

需要注意,在導入Elasticsearch時,配置檔案需要增加

codec => "json"
           

否則,導入的結果,将會是如下所示

"_index": "tttt",
	"_type": "_doc",
	"_id": "zqBHfXIBu4GFRTP9x0PK",
	"_score": 1,
	"_source": {
	"path": "/opt/modules/logstash-6.6.0/test/filedata/test-2020-06-04 01:32:00.txt",
	"@timestamp": "2020-06-04T03:02:35.071Z",
	"host": "hadoop01",
	"message": "{\"@version\":\"1\",\"age\":22,\"id\":123,\"@timestamp\":\"2020-06-04T01:32:00.083Z\",\"name\":\"益達\"}",
	"@version": "1"
}
           

資料并沒有按照期望,以Json的格式自動解析并存儲在Elasticsearch中,而是以一條message的形式存儲,之前官方文檔說codec的預設格式是json,未指定時卻沒有将日志檔案以json格式進行解析,需要進行手動的指定。

不知為何,也請論壇各位大佬答疑解惑,

使用Logstash将Elasticsearch導出為日志檔案、使用Logstash向Elasticsearch中導入日志Logstash的通用配置1 使用Elasticsearch作為輸入,File作為輸出2 從日志檔案導入到Elasticsearch中

2.6 索引的生命周期管理 Index Lifecycle Management

Logstash 可以通過索引生命周期管理來自動管理索引

output {
      elasticsearch {
        ilm_enabled => true
      }
    }
           

此配置将會為要寫入的索引建立一個過渡别名,包括一個如何命名實際索引的模式,除非指定了已經存在的ILM政策,否則将建立一個預設政策,預設政策為配置一個大小為50G或是已經使用30天,以先到為準,對索引進行過渡。

預設的過渡别名為logstash,過渡索引預設模式是{now/d}-00001, 将使用日期命名索引,後面跟一個遞增的數字。

可以修改過渡别名ilm模式和政策,例如:

output {
      elasticsearch {
        ilm_enabled => true
        ilm_rollover_alias: "custom"
        ilm_pattern: "000001"
        ilm_policy: "custom_policy"
      }
    }
           

2.7 批量大小 Batch Size

插件将嘗試将批量的事件以單次請求發送,但是如果一個請求超過了20M,将分解為多個批量請求,如果單個文檔超過了20M,會被作為單個請求發送

2.8 可選的配置

  • action 值類型為字元串 預設值為 “index”

    協定不可知(即非HTTP,非Java專用)配置在此處協定不可知方法要執行的Elasticsearch動作。有效的操作是:

    • index:對文檔建立索引(Logstash中的事件)。
    • delete:按ID删除文檔(此操作需要ID)
    • create:為文檔建立索引,如果索引中已經存在具有該ID的文檔将失敗。
    • update:通過ID更新文檔。更新是一種特殊情況,您可以在其中進行更新-如果還不存在,則更新文檔。參見upsert選項。 注意:Elasticsearch 1.x不支援。請更新到ES 2.x或更高版本,以與Logstash一起使用此功能!
    • 一個sprintf樣式字元串,用于根據事件的内容更改操作。設定該值為%{[foo]} 将使用foo字段進行操作
  • bulk_path 值類型為字元串 此設定沒有預設值。

    HTTP路徑使用 path 參數和 “ _bulk” 執行_bulk請求

  • cacert 值類型是路徑 此設定沒有預設值。

    使用.cer或.pem檔案驗證伺服器的證書

  • doc_as_upsert 值類型為布爾值 預設值為 false

    啟用更新模式。如果document_id 在 Elasticsearch 中不存在,根據資料建立新文檔

  • document_id 值類型為字元串 此設定沒有預設值。

    索引的文檔ID。用于覆寫具有相同ID的Elasticsearch中的現有條目。

  • document_type 值類型為字元串 此設定沒有預設值。 不建議使用此選項

    注意:由于type 在Elasticsearch 6.0中 删除,是以不建議使用此選項。

  • failure_type_logging_whitelist 值類型為數組 預設值為 []

    不想記錄Elasticsearch錯誤日志的白名單當您要跳過所有409個錯誤的document_already_exists_exception。

  • custom_headers 值類型為哈希 此設定沒有預設值。

    将一組鍵值對作為每個請求的标頭傳遞給elasticsearch節點。标頭将用于任何類型_bulk請求(模闆安裝,運作狀況檢查和嗅探)。這些自定義标頭将被設定覆寫http_compression。

  • healthcheck_path 值類型為字元串 此設定沒有預設值。

    發送HEAD請求的HTTP路徑,該請求在背景發送,在其再次傳回前檢視是否符合服務請求資格。 如果有自定義防火牆規則,則可能需要更改此設定

  • hosts 值類型為uri 預設值為 [//127.0.0.1]

    設定遠端執行個體的主機。如果給定一個數組,它将在hosts參數中指定的主機之間負載均衡請求。注意:http協定使用http位址(例如9200,而不是9300)。 [“127.0.0.1:9200”,“127.0.0.2:9200”] )

    注意: 從清單中排除專用主節點的hosts,防止向主節點發送批量請求。是以,此參數應僅引用Elasticsearch中的資料節點或用戶端節點。

    URL中出現的任何特殊字元都必須轉義為URL!例如,這意味着#應該放入%23。

  • http_compression 值類型為布爾值 預設值為 false

    對請求啟用gzip壓縮。請注意,預設情況下,對于Elasticsearch v5.0及更高版本,響應壓縮處于打開狀态

  • ilm_enabled 值類型為布爾值 預設值為 false

    将此标志設定為,true将使索引可以由Elasticsearch中的索引生命周期管理功能進行管理。

    此功能要求Elasticsearch叢集版本為6.6.0或更高。

  • ilm_pattern 值類型為字元串 預設值為 {now/d}-000001

    用于生成由索引生命周期管理管理的索引的模式。模式中指定的值将附加到寫别名,并在ILM建立新索引時自動增加。

    指定ilm模式時可以使用Date Math,有關詳細資訊,請參見Rollover API文檔

  • ilm_policy 值類型為字元串 預設值為 logstash

    修改此設定以使用自定義的索引生命周期管理政策,而不是預設政策。如果未設定此值,則預設政策将自動安裝到Elasticsearch中

  • ilm_rollover_alias 值類型為字元串 預設值為 logstash

    過渡别名是将使用“索引生命周期管理”管理的索引寫入的别名。

    如果同時指定index和ilm_rollover_alias,ilm_rollover_alias則優先。

    更新過渡别名将需要重寫index模闆

  • index 值類型為字元串 預設值為 “logstash-%{+YYYY.MM.dd}”

    要寫入事件的索引。使用%{foo}文法可以是動态的。預設值将按天劃分索引,是以您可以更輕松地删除舊資料或僅搜尋特定日期範圍。

    注意: 索引不能包含大寫字元。對于每周索引,建議使用ISO 8601格式,例如。logstash-%{+ xxxx.ww}。LS使用Joda從事件時間戳記格式化索引模式。

  • keystore 值類型是路徑 此設定沒有預設值。

    用于向伺服器提供證書的密鑰庫。可以是.jks或.p12

  • keystore_password 值類型為密碼 此設定沒有預設值。設定密鑰庫密碼
  • manage_template 值類型為布爾值 預設值為 true

    從Logstash 1.3起,如果名稱template_name不存在的模闆将在Logstash啟動期間應用于Elasticsearch 。預設情況下,此模闆的内容是預設模闆 logstash-%{+YYYY.MM.dd}。如果需要其他index名稱的支援,或者想從總體上想更改模闆中的映射,則可以通過設定template模闆檔案的路徑來指定自定義模闆。

    設定manage_template為false将禁用此功能。如果需要對模闆建立進行更多控制(例如,基于字段名稱動态建立索引),則應設定manage_template為false并使用REST API手動應用模闆。

  • parameters 值類型為哈希 此設定沒有預設值。

    傳遞一組鍵值對作為URL查詢字元串。該查詢字元串将添加到主機配置中列出的每個主機中。如果主機清單包含已經具有查詢字元串的URL,則将在此處指定的URL追加。

  • parent 值類型為字元串 預設值為 nil

    對于子級文檔,為關聯父級的ID。使用%{foo}文法可以是動态的。

  • password 值類型為密碼 此設定沒有預設值。

    驗證安全Elasticsearch叢集的密碼

  • path 值類型為字元串 此設定沒有預設值。

    Elasticsearch伺服器所在的HTTP路徑。使用此選項必須以代理形式運作Elasticsearch,重新映射Elasticsearch HTTP API根路徑。請注意,如果您在主機字段中使用路徑作為URL的組成部分,則不要設定此字段。否則在啟動時會引發錯誤。

  • pipeline 值類型為字元串 預設值為 nil

    設定您希望為事件執行的攝取管道。您還可以在此處使用事件相關的配置,例如pipeline => “%{INGEST_PIPELINE}”

  • pool_max 值類型是數字 預設值為 1000

    當輸出嘗試有效地重用連接配接時,我們有一個最大值。這設定了輸出将建立的最大打開連接配接數。将此值設定得太低可能意味着經常關閉/打開連接配接,這是不好的。

  • pool_max_per_route 值類型是數字 預設值為 100

    當輸出嘗試有效地重用連接配接時,每個端點都有最大數量。這将設定輸出将建立的每個端點的最大打開連接配接數。将此值設定得太低可能意味着經常關閉/打開連接配接,這是不好的。

  • proxy 值類型為uri 此設定沒有預設值。

    設定轉發HTTP代理的位址。這曾經接受哈希作為參數,但現在僅接受URI類型的參數以防止憑據洩漏。

  • resurrect_delay 值類型是數字 預設值為 5

    兩次複活之間等待的頻率(以秒為機關)。複活是檢查标記為向下的後端端點是否恢複活力的過程

  • retry_initial_interval 值類型是數字 預設值為 2

    設定兩次重試之間的初始間隔(以秒為機關)。每次重試最多加倍retry_max_interval

  • retry_max_interval 值類型是數字 預設值為 64

    設定兩次重試之間的最大間隔(以秒為機關)。

  • retry_on_conflict 值類型是數字 預設值為 1

    Elasticsearch應該在内部重試更新/送出的文檔的次數。有關 更多資訊,請參閱部分更新。

  • routing 值類型為字元串 此設定沒有預設值。

    路由替代将應用于所有已處理的事件。使用%{foo}文法可以是動态的。

  • script 值類型為字元串 預設值為 “”

    為腳本更新模式設定腳本名稱

output {
      elasticsearch {
        script => "ctx._source.message = params.event.get('message')"
      }
    }
           
  • script_lang 值類型為字元串 預設值為 “painless”

    設定使用的腳本的語言。如果未設定,則在ES 5.0中預設為不痛苦。在Elasticsearch 6及更高版本上使用索引(存儲)腳本時,必須将此參數設定為""(空字元串)。

  • script_type 值可以是任何的:inline,indexed,file 預設值為 [“inline”]

    定義“腳本”變量引用的腳本類型内聯:“腳本”包含索引内聯腳本:“腳本”包含直接在Elasticsearch檔案中建立索引的腳本名稱:“腳本”包含存儲在elasticsearch的config目錄中的腳本名稱

  • script_var_name 值類型為字元串 預設值為 “event”

    設定傳遞給腳本的變量名(腳本更新)

  • scripted_upsert 值類型為布爾值 預設值為 false

    如果啟用,則腳本負責建立不存在的文檔(腳本更新)

  • sniffing 值類型為布爾值 預設值為 false

    此設定要求Elasticsearch提供所有叢集節點的清單,并将它們添加到主機清單。對于Elasticsearch 1.x和2.x,任何具有http.enabled(預設情況下處于啟用狀态)的節點都将添加到主機清單中,包括僅主節點!對于Elasticsearch 5.x和6.x,任何具有http.enabled(預設情況下處于啟用狀态)的節點都将被添加到主機清單中,僅主節點除外。

  • sniffing_delay 值類型是數字 預設值為 5

    兩次嗅探之間要等待多長時間(以秒為機關)

  • sniffing_path 值類型為字元串 此設定沒有預設值。

    用于嗅探請求的HTTP路徑,預設值是通過将路徑值連接配接起來計算得出的;如果設定了sniffing_path,則“ _nodes / http”将用作絕對路徑,此處将不使用完整URL,僅使用路徑,例如“ /嗅探/ _nodes / http“

  • ssl 值類型為布爾值 此設定沒有預設值。

    啟用與Elasticsearch叢集的SSL / TLS安全通信。不指定此名稱将使用在主機中列出的URL中指定的任何方案。如果未指定顯式協定,則将使用純HTTP。如果此處明确禁用了SSL,則在主機中提供HTTPS URL的情況下,插件将拒絕啟動

  • ssl_certificate_verification 值類型為布爾值 預設值為 true

    用于驗證伺服器證書的選項。禁用此功能會嚴重損害安全性。有關禁用證書驗證的更多資訊,請閱讀https://www.cs.utexas.edu/~shmat/shmat_ccs12.pdf

  • template 值類型是路徑 此設定沒有預設值。

    如果需要,可以在此處将路徑設定為自己的模闆。如果未設定,将使用随附的模闆。

  • template_name 值類型為字元串 預設值為 “logstash”

    此配置選項定義如何在Elasticsearch中命名模闆。請注意,如果您使用了模闆管理功能并随後進行了更改,則需要手動修剪舊模闆,例如

curl -XDELETE <http://localhost:9200/_template/OldTemplateName?pretty>
           

OldTemplateName以前的設定在哪裡。

  • template_overwrite 值類型為布爾值 預設值為 false

    template_overwrite選項将始終用模闆訓示的模闆或随附的模闆覆寫Elasticsearch中的訓示模闆。預設情況下,此選項設定為false。如果您始終想了解Logstash提供的模闆的最新資訊,則此選項對您可能非常有用。同樣,例如,如果您有自己的模闆檔案由puppet管理,并且希望能夠定期更新,則此選項也可以提供幫助。

    請注意,如果您正在使用自己的Logstash模闆的自定義版本(logstash),則将其設定為true将使Logstash覆寫“ logstash”模闆(即删除所有自定義設定)

  • timeout 值類型是數字 預設值為 60

    設定網絡操作和發送的Elasticsearch請求的逾時(以秒為機關)。如果發生逾時,将重試該請求。

  • truststore 值類型是路徑 此設定沒有預設值。

    用于驗證伺服器證書的信任庫。可以是.jks或.p12。使用:truststore或:cacert。

  • truststore_password 值類型為密碼 此設定沒有預設值。

    設定信任庫密碼

  • upsert 值類型為字元串 預設值為 “”

    為更新模式設定upsert内容。如果document_id不存在,使用此參數作為json字元串建立一個新文檔

  • user 值類型為字元串 此設定沒有預設值。

    用于驗證安全Elasticsearch叢集的使用者名

  • validate_after_inactivity 值類型是數字 預設值為 10000

    在使用keepalive對連接配接執行請求之前,檢查連接配接是否陳舊之前需要等待的時間。如果您經常遇到連接配接錯誤,則可能需要将此值設定得更低一些。引用Apache Commons文檔(此用戶端基于Apache Commmons): 定義不活動時間(以毫秒為機關),在此之後必須重新驗證持久性連接配接,然後才能租用給使用者。 。傳遞給此方法的非正值将禁用連接配接驗證。此檢查有助于檢測在池中保持不活動狀态的舊連接配接(半關閉)。 有關更多資訊,請參閱這些文檔

  • version 值類型為字元串 此設定沒有預設值。

    用于索引的版本。使用sprintf文法就像%{my_version}在此處使用字段值。

  • version_type 值可以是任何的:internal,external,external_gt,external_gte,force

    此設定沒有預設值。

    用于索引的version_type。