簡介
- ELK生態之Logstash導入數據到Elasticsearch;
- 數據源:csv格式文件;
- Elasticsearch和Logstash版本:5.6.1;
- 前提環境:Elasticsearch單機或集羣;Logstash客戶端;
實踐
- csv文件內容:
"sixmonth","23","男","1998/6/3 18:31:46"
"xiaoming","23","男","1999/6/3 18:31:46"
"xiaodong","23","男","1997/6/3 18:31:46"
- logstash.conf配置:
#1.讀取數據csv文件,數據輸入階段
input {
file{
#設置csv文件路徑,多個文件路徑可設置成數組[],模糊匹配用*
#指定單一文件
path => "/data/es/logstash-5.6.1/files/test.csv"
#指定數組文件
#path => ["/data/es/logstash-5.6.1/files/test-1.csv","/data/es/logstash-5.6.1/files/test-2.csv"]
#指定同級目錄模糊匹配
#path => "/data/es/logstash-5.6.1/files/test*.csv"
#指定多級目錄模糊匹配
#path => "/data/es/logstash-5.6.1/files/**/test*.csv"
#可設置成begining或end,begining表示從頭開始讀取文件,end表示讀取最新數據,可和ignore_older一起使用
#begining只針對首次啓動是否需要讀取所有的歷史數據,而當csv文件修改了之後,同樣會自動增量更新新數據
start_position => beginning
#表示針對多久的文件進行監控,默認一天內的文件,單位爲秒,0表示不忽略任何過期日誌
#ignore_older => 86400
#表示多久檢查一次被監聽文件的變化,默認1s
#stat_interval => 1
#當存在多個文件的時候可使用type指定輸入輸出路徑
type => "csv_index"
}
}
#2.過濾格式化數據階段
filter {
#讀取csv文件
csv {
#設置拆分符爲逗號
separator => ","
#指定csv文件的字段,必須要和csv文件中的字段順序一致
columns => ["name","age","sex","updatetime"]
#指定字段的數據格式,也可在mutate轉換:integer, float, date, date_time, boolean
convert => {"age" => "float"}
}
#轉換其他數據格式
mutate {
convert => {
"name" => "string"
"sex" => "string"
}
}
mutate{
#將lat和lng兩字段數據合併成mergestr字段
add_field => ["mergestr", "%{age}, %{sex}"]
#刪除無效的字段,可自定義
remove_field => ["@version","message","host","path"]
}
#獲取日誌中的時間字符串,轉換成時間格式,或者替換成其他的字段
date {
match => ["updatetime", "yyyy/MM/dd HH:mm:ss"]
#直接將updatetime轉換時間格式
target => "updatetime"
#使用updatetime轉換後的時間格式替換掉@timestamp時間
#target => "@timestamp"
}
#新增timestamp字段,將@timestamp時間增加8小時
ruby { code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" }
}
#3.數據輸出到ES階段
output {
#日誌輸出格式,json_lines;rubydebug等
stdout {
codec => rubydebug
}
#輸出到es
if[type] == "csv_index"{
#無法解析的json不記錄到elasticsearch中
if "_csvparsefailure" not in [tags] {
elasticsearch {
#es地址ip端口
hosts => "127.0.0.1:9200"
#索引
index => "csv_index"
#類型
document_type => "csv_index"
#覆蓋模板,不需要可註釋掉,通用模板下載:https://download.csdn.net/download/alan_liuyue/11241484
template_overwrite=>true
template=>"/data/es/logstash-5.6.1/template/logstash.json"
}
}
}
}
- 補充file-input字段說明:
codec => #可選項,默認是plain,可設置其他編碼方式;
discover_interval => #可選項,logstash多久檢查一下path下有新文件,默認15s;
exclude => #可選項,排除path下不想監聽的文件;
sincedb_path => #可選項,記錄文件以及文件讀取信息位置的數據文件;
sincedb_write_interval => #可選項,logstash多久寫一次sincedb文件,默認15s;
stat_interval => #可選項,logstash多久檢查一次被監聽文件的變化,默認1s;
start_position => #可選項,表示從哪個位置讀取文件數據,初次導入爲:beginning,最新數據爲:end
path => #必選項,配置文件路徑,可定義多個,也可模糊匹配;
tags => #可選項,在數據處理過程中,由具體的插件來添加或者刪除的標記;
type => #可選項,當有多個file的時候,可用於一對一匹配輸入或者輸出;
注意事項
- logstash啓動之後,進程會一直處於運行狀態,若csv文件被修改,程序會自動監聽,導入新數據;
- 若需要重新導入數據,則需要刪除logstash安裝目錄下\plugins\inputs\file下的文件(該文件屬於隱藏文件),所以直接刪除該目錄即可,之後目錄會重新生成;
總結
- Logstash讀取csv文件內容導入Elasticsearch,在數據源採集方面特別普遍,採集配置方式也特別簡潔,程序猿有興趣可繼續深入挖掘;
- 實踐是檢驗認識真理性的唯一標準,自己動手豐衣足食~