Logstash——安裝Logstash並完成一個簡單的日誌收集功能

下載和安裝

下載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相同的超級管理員權限後此異常消失。(需要注意的此解決方案可能不是最合理的解決方式)

在這裏插入圖片描述


個人水平有限,上面的內容可能存在沒有描述清楚或者錯誤的地方,假如開發同學發現了,請及時告知,我會第一時間修改相關內容。假如我的這篇內容對你有任何幫助的話,麻煩給我點一個贊。你的點贊就是我前進的動力。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章