filebeat+logstash日誌收集中出現的亂碼問題

寫在前面

在ELK日誌收集的使用中,filebeat上傳的日誌出現了亂碼問題,這裏記錄一下解決問題的過程,由於我的bug原因比較特殊但是亂碼現象網上還是很普遍的,多半是一些字符集編碼的問題,我也嘗試了進行字符集編碼的更改,但是讓然沒有解決,最終通過修改日誌打印格式解決了亂碼的問題.

bug描述

日誌在kibana中展示出現了亂碼(亂碼截圖已丟)

排查路線

首先檢查對應服務器上的日誌文件是否出現亂碼

tail -100f /app/logs/base-search/base-search-info.log

查詢之後沒有發現亂碼

開始懷疑是filebeat或者是logstash在解析日誌的時候出現了亂碼的問題,分別針對logstash和filebeat進行調試

logstash-開啓控制態輸出

由於是測試環境,再加上logstash進行重啓或者停機並不會影響日誌的保存(停機時間filebeat會檢測到logstash已經down,之後停止發送日誌).

對logstash的config文件進行重新編輯添加控制檯輸出

output {
   stdout { 
    codec => json
   }
}

觀察控制檯打印直接輸出亂碼日誌,懷疑logstash在解析日誌時字符集出現不匹配,但是其他的輸入源(filebeat)並沒有出現亂碼的情況,但是在config中也沒有指定字符集編碼.

選擇查看上級數據源->filebeat

filebeat-debug模式

正常情況下filebeat不會吧傳輸的內容打印到日誌中或者是控制帶,但是filebeat給我們提供了debug模式,直接通過命令開啓就行

filebeat -d -c config/filebeat-cocustom.yml

通過觀察filebeat的日誌輸出存在亂碼,這個時候人爲基本找不到bug了,因爲通過之前查看系統日誌發現控制檯輸出並沒有亂碼,但是filebeat中的內容出現了亂碼,肯定是filebeat沒有設置字符集編碼

添加filebeat字符集編碼

這個時候人爲找到了bug的所在,開始進行百度,找到了解決方法開始修改編碼.

但是經過各種嘗試發現網上的修改字符集編碼都不行,依然出現亂碼的問題,這個時候懷疑是springboot在對日誌文件輸出的時候沒有控制文件的輸出格式,但是經過檢查發現日誌格式同樣指定了utf-8的字符集編碼.

檢查base-search-info.log文件編碼情況

到這種情況就開始各種懷疑了,玄學找bug,通過file 命令查看文件編碼格式發現,文件的編碼格式也有問題
下圖是有問題的編碼格式
文件編碼格式

下圖是正常的編碼格式
正常的編碼格式

但是通過百度發現,修改文件編碼格式依然解決不了上傳時出現亂碼的情況.

解決bug

再次查看日誌發現,我的日誌時帶有顏色輸出的,所以懷疑有可能是帶有顏色輸出導致filebeat在解析的時候出現了亂碼

%d{yyyy-MM-dd HH:mm:ss} %clr{${LOG_LEVEL_PATTERN}} %clr{[%t]}{blue} %clr{%C.%M(%L)}{cyan} --> %m%n${sys:LOG_EXCEPTION_CONVERSION_WORD}

上面的命令爲log4j2中設置日誌輸出顏色用的,最終將控制顏色的命令去除–>成功解決亂碼問題.

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