下載和安裝
下載logstash
Logstash可以在以下地址下載
https://www.elastic.co/cn/downloads/logstash
需要注意在安裝ELK環境的時候需要保證三者系統版本一致。假如需要下載歷史版本可以在此下載
https://www.elastic.co/cn/downloads/past-releases#logstash
ps.此網站訪問可能會非常慢,需要配合梯子。
解壓
這裏在之前的博客中: Elasticsearch基礎02——Elasticsearch的安裝使用的7.2.0版本的Elasticsearch所需我下載的是對應版本的logstash
tar -xzvf logstash-7.2.0.tar.gz
配置文件
因爲我們可能需要配置不同的日誌規則所以需要我們編寫logstatsh的配置文件,然後指定配置進行啓動
這是一個簡單的logstash配置
input {
file {
path => "/usr/local/log/exception/*"
start_position => "beginning"
sincedb_path => "/dev/null" }
}
output {
elasticsearch {
hosts => "http://localhost:9200"
index => "exception_demo"
user => exception_user
password => exception
}
stdout {}
}
配置的簡單介紹
- input
input {
file {
# 日誌文件地址
path => "/usr/local/log/exception/*"
# 監聽文件的起始位置,beginning或者end
start_position => "beginning"
# 監聽文件讀取信息記錄的位置
sincedb_path => "/dev/null"
}
}
- sincedb_path
簡單的介紹一下這個配置,第一次配置時,運行logstash對日誌文件進行的讀取操作,這個過程logstash會記錄自己讀取完日誌文件的位置,然後將自己讀取內容的偏移量保存到一個隱藏文件中。當再次啓動的時候logstash從隱藏文件中的讀取完成的日誌文件位置。假如我們希望再次啓動的時候依舊讀取所有文件信息,可以設置sincedb_path => "/dev/null"
。/dev/null”這個 Linux 系統上特殊的空洞文件,那麼 logstash 每次重啓進程的時候,嘗試讀取 sincedb 內容,都只會讀到空白內容。
數據來源的配置
- output
數據輸出的配置
output {
# 將數據保存到elasticsearch
elasticsearch {
# elasticsearch服務端口
hosts => "http://localhost:9200"
# 數據推送的索引
index => "exception_demo"
# 假如設置了elasticsearch密碼賬號登錄則需要配置此內容
# 賬號
user => exception_user
# 密碼
password => exception
}
stdout {}
}
ps.此處配置中關於密碼賬號的配置可能存在一些問題,這一塊我會在下面啓動logstash時出現的異常裏面介紹
啓動
在設置完logstash配置後就可以指定配置啓動logstash
# 此時需要處在logstash目錄下
bin/logstash -f ./config/logstash.conf
啓動成功
當出現下面內容則證明logstash啓動成功
[2020-04-05T20:44:04,754][INFO ][logstash.javapipeline ] Pipeline started {"pipeline.id"=>"main"}
[2020-04-05T20:44:04,884][INFO ][logstash.agent ] Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
[2020-04-05T20:44:04,889][INFO ][filewatch.observingtail ] START, creating Discoverer, Watch with file and sincedb collections
[2020-04-05T20:44:05,638][INFO ][logstash.agent ] Successfully started Logstash API endpoint {:port=>9600}
啓動成功後logstash會從指定的log文件下讀取數據寫入elasticsearch中。
kibana中查看數據
在kibana中management
頁面配置相關索引的查詢
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-ICHshd3b-1586685616311)(9751671D03504CFB97A29228F6E88433)]
在discover
頁面就可以進行日誌內容的查詢
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-MSePoD00-1586685616312)(EBEB280C2AD04BD9A76907E25EE4D83E)]
持續性的日誌寫入
在項目中配置log的寫入地址爲配置中path
的地址就能實現日誌的持續監控
<!--一個spring項目的日誌配置demo-->
<!--定義日誌文件的存儲地址 勿在 LogBack 的配置中使用相對路徑-->
<property name="ERROR_HOME" value="/usr/local/log/exception" />
logstash時出現的異常
1. Got response code ‘401’ contact Elasticsearch
[2016-12-28T17:49:08,367][WARN ][logstash.outputs.elasticsearch] Attempted to resurrect connection to dead ES instance, but got an error. {:url=>#<URI::HTTP:0x1deb02b URL:http://10.129.28.149:9200>, :error_type=>LogStash::Outputs::ElasticSearch::HttpClient::Pool::BadResponseCodeError, :error=>"Got response code '401' contact Elasticsearch at URL 'http://10.129.28.149:9200/'"}
如果Elasticsearch設置了密碼訪問的時候,此時logstash配置也需要配置相關信息
output {
# 將數據保存到elasticsearch
elasticsearch {
...
# 假如設置了elasticsearch密碼賬號登錄則需要配置此內容
# 賬號
user => exception_user
# 密碼
password => exception
}
...
}
2. undefined method `encoding’
[2020-04-05T12:06:11,361][INFO ][logstash.runner ] Starting Logstash {"logstash.version"=>"7.2.0"}
[2020-04-05T12:06:14,721][ERROR][logstash.javapipeline ] Pipeline aborted due to error
{:pipeline_id=>"main", :exception=>#<NoMethodError: undefined method `encoding' for 123456:Integer>, :
backtrace=>["uri:classloader:/META-INF/jruby.home/lib/ruby/stdlib/cgi/util.rb:13:in `escape'",
這個異常是在設置賬號信息的時候密碼使用了純數字的時候,目前不知道爲什麼純數字的密碼解析會出問題,但是將密碼設置爲非數字密碼就可以避免此異常。
3. Encountered a retryable error. Will Retry with exponential backoff {:code=>403, :url=>“http://localhost:9200/_bulk”}
此異常出現在成功啓動logstash,但是在讀取log日誌寫入elasticsearch時出現的異常,logstash會不停的嘗試將數據刷入elasticsearch但是不停失敗。在 Elasticsearch安全策略-開啓密碼賬號訪問 中logstash_system
被描述爲將信息存儲到Elasticsearch中時使用的。但是最開始配置此賬號會出現403的問題,後來創建了一個新的角色並設置了和elastic相同的超級管理員權限後此異常消失。(需要注意的此解決方案可能不是最合理的解決方式)
個人水平有限,上面的內容可能存在沒有描述清楚或者錯誤的地方,假如開發同學發現了,請及時告知,我會第一時間修改相關內容。假如我的這篇內容對你有任何幫助的話,麻煩給我點一個贊。你的點贊就是我前進的動力。