2小時快速搭建後端接口報警系統(基於阿里雲日誌服務分析nginx訪問日誌)

目標

  • 後端任一接口一分鐘內5xx響應超過必定的量,立刻收到報警提示
  • 報警及慢接口有詳細列表能夠查看
  • 低成本。幾年前公司的日誌報警系統是自研的,開發成本比較高,也沒有達到阿里雲日誌服務這種產品化程度

機器部署狀況

  • 阿里雲EC服務器

功能概述

  • 阿里雲日誌服務,採集並分析nginx訪問日誌;寫日誌分析SQL,每分鐘調度執行,符合條件就觸發報警;
  • 根據響應狀態碼提供:接口5xx響應報警、接口4xx響應報警;報警通知方式爲釘釘羣機器人,5xx跟4xx響應分別通知到專用的後端跟前端同窗羣;
  • 修改日誌分析SQL,在專用dashboard展現相關報警請求的詳細信息列表
  • 根據響應時間提供:慢響應請求列表,一樣放到dashboard

效果圖

釘釘羣報警【c是符合條件的個數,st是響應狀態碼】
圖片描述html

阿里雲日誌服務儀表盤-5xx報警接口詳情
圖片描述前端

操做步驟

配置日誌採集

  • 新建Project;新建Logstore;
  • 配置nginx日誌採集;nginx

    • 日誌路徑:/path_to_logs/**/access.log
    • 模式:nginx配置;從線上nginx.conf文件裏拷貝 log_format main,配置到頁面;
    • Topic生成方式:文件路徑正則;自定義正則:/path_to_logs/([^/]+)/access.log,正好把域名提取出來。可參考生成主題
    • Logtail機器組:配置nginx機器內網IP
  • nginx機器安裝Logtail採集器;
  • 參考文檔後端

配置日誌分析SQL及報警

  • 日誌庫》查詢分析》查詢,能夠寫SQL實時查詢/分析,而後另存爲告警
  • 配置告警條件
  • 配置告警通知。一個告警可配置多個通知列表,能夠同時通知到釘釘羣跟短信

5xx報警SQL服務器

  • 爲了方便查看具體的錯誤接口,基於uri分組統計並報警,報警內容裏包含uri信息
  • 爲了方便確認嚴重程度,報警內容裏包含響應狀態碼
__topic__:www.xyz.com and status in [500 600) | select count(1) as c, avg(status) as st, case when strpos(request_uri, '?') > 0 then split_part(request_uri, '?', 1) else request_uri end as uri group by uri having count(1)>=5 order by count(1) desc

分析SQL的寫法可參考函數

告警條件配置
圖片描述阿里雲

告警通知配置
圖片描述spa

上面的配置圖可能會變,這個產品一直在進化,18年12月的時候發現有一次大的改版。日誌

dashboard相關報警請求的詳細信息列表SQL:code

__topic__:www.xyz.com and status in [500 600) | select time_local, status, upstream_addr, __topic__ as vhost, case when strpos(request_uri, '?') > 0 then split_part(request_uri, '?', 1) else request_uri end as uri order by time_local desc

dashboard慢響應分析SQL:

__topic__:www.xyz.com and request_time > 0.3 | select count(1) as count, avg(request_time) as avg_request_time, min(__topic__) as vhost, case when strpos(request_uri, '?') > 0 then split_part(request_uri, '?', 1) else request_uri end as uri group by uri order by avg_request_time desc
相關文章
相關標籤/搜索