Kong日志向導

日志等級

日志級別可以在Kong配置文件中設置,以下是日志級別的嚴重程度,按遞增排序:debuginfonoticewarnerrorcrit

  • debug:提供了每個插件以及其他組件的調試信息,只在調試期間使用,內容過于繁瑣
  • info/notice:這兩個級別的日志沒有太大差別,提供了正常行為的信息,大部分可以忽略
  • warn:記錄異常,但是不會導致事務失敗的行為
  • error:記錄導致請求錯誤的日志(比如獲得了一個500報錯)
  • crit:Kong處于致命錯誤從而影響到多個客戶端,Nginx還提供了 alertemerg 的日志級別,Kong現在將 crit 定為最高日志級別
    默認情況下,日志級別為 notice,這也是推薦的日志級別,如果覺得日志內容過于繁瑣,可以提高日志級別

從Kong日志中刪除指定字段

由于保護私人數據(如GDPR等)新規定的出臺,用戶可能需要更改記錄日志的習慣,如果選用Kong作為API網關,只需在一個地方做出修改,所有的服務都會生效,這篇向導會介紹實現此目標的一個方法,另外還有其他方法可以滿足其他各種需求,請注意,這些更改只會影響 Nginx 的 access log 的輸出,對Kong的日志插件沒有任何影響
舉個例子,假設用戶需要從日志中刪除任何關于電子郵件地址的示例,電子郵件可能會以各種形式出現,比如 /servicename/v2/verify/alice@example.com 或者 /v3/verify?alice@example.com,為了防止這些被添加到日志中,用戶需要自定義 Nginx 模板
用戶可以先從這個地址獲取Nginx的模板文件:https://docs.konghq.com/latest/configuration/#custom-nginx-templates-embedding-kong,或者復制下面的文件

# ---------------------
# custom_nginx.template
# ---------------------

worker_processes $; # can be set by kong.conf
daemon $;                     # can be set by kong.conf

pid pids/nginx.pid;                      # this setting is mandatory
error_log logs/error.log $; # can be set by kong.conf

events {
    use epoll; # custom setting
    multi_accept on;
}

http {
    # include default Kong Nginx config
    include 'nginx-kong.conf';

    # custom server
    server {
        listen 8888;
        server_name custom_server;

        location / {
          ... # etc
        }
    }
}

為了控制日志中的內容,我們需要在模板文件中使用 Nginx 的 map 模塊,關于 map 模塊的詳細信息可以參考 https://nginx.org/en/docs/http/ngx_http_map_module.html,用戶需要創建一個新的變量,變量的內容取決于第一個參數加上匹配的規則,格式如下:

map $paramater_to_look_at $variable_name {
    pattern_to_look_for 0;
    second_pattern_to_look_for 0;
    
    default 1;
}

在這個例子中,我們創建一個新的變量 keeplog,這個變量依賴于 $request_uri,我們將 map 指令放在 http 塊的開頭位置,這句話必須在 include 'nginx-kong.conf'; 這句話之前,示例中我們可以這么添加:

map $request_uri $keeplog {
    ~.+\@.+\..+ 0;
    ~/servicename/v2/verify 0;
    ~/v3/verify 0;

    default 1;
}

用戶可能注意到配置文件中的每一行都是以~符號開頭的,這是 Nginx 中的正則表達式語法,這個例子中我們會查找三個內容:

  • 第一行是查找 x@y.z 格式的電子郵件地址
  • 第二行是查找包含 /servicename/v2/verify 的URI地址
  • 第三行是查找包含 /v3/verify 的URI地址

現在我們需要設置日志格式,我們使用 log_format 模塊,并將日志格式新命名為 show_everything,日志的內容可以根據用戶需要進行定制,這個例子中,我們將內容改回Kong的標準格式

log_format show_everything '$remote_addr - $remote_user [$time_local] '
    '$request_uri $status $body_bytes_sent '
    '"$http_referer" "$http_user_agent"';

現在我們自定義的 Nginx 模板可以使用了,文件如下所示:

# ---------------------
# custom_nginx.template
# ---------------------

worker_processes $; # can be set by kong.conf
daemon $;                     # can be set by kong.conf

pid pids/nginx.pid;                      # this setting is mandatory
error_log stderr $; # can be set by kong.conf

events {
    use epoll; # custom setting
    multi_accept on;
}

http {
    map $request_uri $keeplog {
        ~.+\@.+\..+ 0;
        ~/v1/invitation/ 0;
        ~/reset/v1/customer/password/token 0;
        ~/v2/verify 0;

        default 1;
    }
    log_format show_everything '$remote_addr - $remote_user [$time_local] '
        '$request_uri $status $body_bytes_sent '
        '"$http_referer" "$http_user_agent"';

    include 'nginx-kong.conf';
}

下一步我們需要告訴Kong使用新創建的日志 show_everything,為此,我們需要修改變量 proxy_access_log,此時可以編輯 etc/kong/kong.conf 配置文件,也可以直接修改環境變量 KONG_PROXY_ACCESS_LOG

proxy_access_log=logs/access.log show_everything if=$keeplog

最后一步重啟Kong,使所有更改生效,用戶可以使用 kong restart 命令
現在,日志不會記錄與電子郵件地址相關的任何請求,我們也可以用類似的邏輯從日志中刪除任何我們不想要的內容

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,182評論 6 543
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,489評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,290評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,776評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,510評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,866評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,860評論 3 447
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,036評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,585評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,331評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,536評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,058評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,754評論 3 349
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,154評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,469評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,273評論 3 399
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,505評論 2 379

推薦閱讀更多精彩內容