iT邦幫忙

2025 iThome 鐵人賽

DAY 17
0

昨天的文章中提到如何使用 Graylog 頁面查詢日誌,今天來聊聊如何使用 Graylog 的 RESTful API 來查詢。

Graylog RESTful API 支援多種驗證方式,包括帳號密碼與 Access Token。

REST API 簡介

Graylog 的所有 Web 界面操作皆可透過 RESTful API 完成,API enpoints 預設位於 http://<GRAYLOG_HOST>:9000/api,採用 JSON 格式傳輸。我們可利用它實現自動化查詢、報表匯出或與第三方系統整合。

存取方式與身份驗證

API Browser

  • 全域 API Browser:點選右上角的 Help 選單(問號圖示),選擇 Global API browser

  • 節點特定 API Browser:進入 System > Cluster Configuration,選擇特定節點後點選 Actions 選單中的 API browser

注意事項:

  • 如果直接存取 http://<GRAYLOG_HOST>:9000/api/api-browser/ 出現無法顯示的問題,這是已知的 API Browser 相容性問題。
  • 建議透過 Web 界面的選單進入,或直接使用指令列工具(如 curl)進行 API 呼叫。
  • 全域 API Browser 適合叢集環境,節點特定的 API Browser 用於單一節點操作。

身份驗證方式

Graylog 支援三種主要驗證方式:

  1. 帳號密碼驗證(最簡單):直接使用 Graylog 登入帳號
  2. Access Token:需要在 System > Users and Teams 中建立
  3. Session Token:透過 API 動態取得

使用帳號密碼進行驗證

最直接的方式是使用 Graylog 登入憑證:

curl -u admin:admin \
     -H "Accept: application/json" \
     http://<GRAYLOG_HOST>:9000/api/system/cluster/nodes

Log 查詢 API 實戰

主要查詢端點

  • /api/search/messages:搜尋訊息(推薦使用)
  • /api/search/universal/relative:相對時間範圍查詢
  • /api/search/universal/absolute:絕對時間範圍查詢

基本查詢範例

curl -u admin:admin \
     -H "Accept: application/json" \
     -G "http://<GRAYLOG_HOST>:9000/api/search/messages" \
     --data-urlencode "query=error" \
     --data-urlencode "limit=10"

常用查詢參數

  • query:搜尋條件,支援 Elasticsearch 語法,如 level:ERROR AND source:nginx
  • range:相對時間範圍(秒),如 range=3600(過去1小時)
  • from / to:絕對時間,ISO8601 格式
  • fields:指定回傳欄位,如 fields=message,timestamp,source
  • limit:限制回傳筆數

實用查詢範例

  1. 查詢過去30分鐘的 ERROR 級別日誌

    curl -u admin:admin \
         -H "Accept: application/json" \
         -G "http://<GRAYLOG_HOST>:9000/api/search/messages" \
         --data-urlencode "query=level:ERROR" \
         --data-urlencode "range=1800" \
         --data-urlencode "limit=20"
    
  2. 查詢特定來源的日誌並指定回傳欄位

    curl -u admin:admin \
         -H "Accept: application/json" \
         -G "http://<GRAYLOG_HOST>:9000/api/search/messages" \
         --data-urlencode "query=source:apache" \
         --data-urlencode "fields=timestamp,message,source" \
         --data-urlencode "range=7200" \
         --data-urlencode "limit=50"
    
  3. 使用複合查詢條件

    curl -u admin:admin \
         -H "Accept: application/json" \
         -G "http://<GRAYLOG_HOST>:9000/api/search/messages" \
         --data-urlencode "query=level:WARN AND message:timeout" \
         --data-urlencode "range=3600"
    
  4. 匯出為 CSV 格式[6]

    curl -u admin:admin \
         -H "Accept: text/csv" \
         -G "http://<GRAYLOG_HOST>:9000/api/search/universal/relative.csv" \
         --data-urlencode "query=authentication" \
         --data-urlencode "range=14400" \
         --data-urlencode "fields=timestamp,source,message"
    


上一篇
Day 16: 搜索語法與查詢優化
下一篇
Day 18: 高可用性架構部署
系列文
從零開始的 graylog 探險20
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言