今下午一同事反饋說在 kibana 中沒看到日誌,但是在對應的日誌檔案中是能查到的。一開始以為是 kibana 跨時間的問題,但開啟日誌檔案看那條記錄,時間是沒啥問題的,距離上一條記錄前後也只相差10 min左右,而上一條記錄在 kibana 中是能找到的。
# 上一條,kibana 中存在
...}
# 問題日誌,kibana 中沒有
...}
開始懷疑資料應該是沒有寫入 es 中,於是開始比對 es 和日誌檔案中日誌條數:
# es 中條數
[root@localhost online]# curl
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
green open test-index wwxfwmijqhm0gfnfjuloug 5 1 75 0 1.2mb 648.5kb
# 日誌檔案中條數
[root@localhost online]# cat test-index.txt | wc -l
79
看查詢結果顯然有4條記錄沒寫到 es 中。一開始想法是將該條記錄通過調 api 直接寫入 es 中,看看 es 會報什麼錯。但是經多次嘗試,試了各種 content-type,始終報如下錯誤:
這條路看來走不通了,然後又想到既然寫入 es 失敗,何不看看 es 那是不是有相關日誌可以看看呢?日誌確實有,但可惜看不到具體的某個 index 每條記錄寫入情況。最後能想到的就是 logstash 了,因為日誌檔案是通過 logstash 同時寫入 es 和日誌檔案的。
output
file
}}
檢視 logstash 日誌,果然找到了寫入 es 失敗報錯情況,並且恰好4條,輸出其中一行:
[root@localhost logstash]# cat nohup.out | grep 2021-02-01 | grep test-index | grep error | wc -l
4[root@localhost logstash]# cat nohup.out | grep 2021-02-01 | grep test-index | grep error | tail -n 1
[warn ] 2021-02-01 14:26:00.918 [[main]>worker11] elasticsearch - could not index event to elasticsearch. , #], :response=>}}}}
可以看到 response 字段原先是 text 型別,而待寫入的日誌中 response 字段型別被識別為 object 型別。而在字段已經存在的情況下, es 是不允許修改字段型別的。因為 es 是根據 lucene 實現的倒排索引,一旦生成後就不允許修改,除非使用 reindex api 重建索引。
至此,寫入 es 失敗的原因已經找到,只需在業務**中修改對應處的**,統一日誌格式即可。
記一次LINUX CRONTAB失敗的排查案例
在crontab 設定計畫任務,每天凌晨3點執行指令碼 conrtab 3點 tomcat使用者 執行指令碼 推送備檔案 目標伺服器 同時將過程寫入log記錄 然而在第二天例常檢查後,發現計畫任務沒有達到預期效果 var log cron如下 jan 30 03 00 01 z00w00 host ...
記一次線上問題排查
這次線上問題來的比較突然,影響也大,用部落格記錄下整個過程,也當作是對這次事故的一次總結歸納。day1 2018年06月21號上午10點,收到運營同事通知,http com api 訪問量劇增,日誌量達到80g 天,而且有上公升趨勢。運營同事讓我們排查,這種訪問是否正常。運營統計訪問量 收到通知後立...
一次快取效能問題排查
以下分享的都跳過了很多坑,包括redis tomcat環境配置 機器硬體配置等等問題 與線上保持一致,或者硬體效能減配係數,例如線上 8c16g,壓測 4c8g,係數簡單相差2倍 直接把挖掘瓶頸的主要思路搬出檯面。全域性圖預覽 通過對某直播 頁面進行高併發壓測,在apm pinpoint 監控中發現...