日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當(dāng)前位置:首頁 > 科技  > 軟件

Nginx map 實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換

來源: 責(zé)編: 時(shí)間:2023-09-18 21:42:26 314觀看
導(dǎo)讀哈嘍大家好,我是咸魚最近我們需要把 Nginx 的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式例如下面這樣的效果剛開始在主配置文件 nginx.conf 中定義了一個(gè)名

哈嘍大家好,我是咸魚fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

最近我們需要把 Nginx 的日志接入到自研的日志采集平臺(tái)上,但是這個(gè)平臺(tái)只支持 JSON 格式,所以需要把 Nginx 日志格式改成 JSON 格式fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

例如下面這樣的效果fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

剛開始在主配置文件 nginx.conf 中定義了一個(gè)名叫 json 的日志格式字段fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

驗(yàn)證的時(shí)候其他內(nèi)容沒啥問題,但是時(shí)間是2023-09-12T13:54:22+08:00 這樣子的,不太符合預(yù)期fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

咸魚想著把 $time_iso8601 變量中的年月日時(shí)分秒分別提取出來然后用變量去接受它,如下所示:fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

我自定義了一個(gè)時(shí)間格式 $year-$month-$day $hour:$minutes:$seconds:000,然后接著用了一個(gè) if 語句用于檢查請(qǐng)求的時(shí)間是否匹配 ISO8601 時(shí)間格式(例如:2023-09-12T13:54:22+08:00)fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

如果匹配,它將執(zhí)行其中的代碼塊。在代碼塊中,使用正則表達(dá)式提取時(shí)間的年、月、日、小時(shí)、分鐘和秒,并將它們賦值給變量 $year、$month、$day、$hour、$minutes 和 $secondsfV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

但是 nginx -t 檢測的時(shí)候我發(fā)現(xiàn) if 語句不能夠放在 http 塊內(nèi),否則會(huì)報(bào)錯(cuò)fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

在 Nginx 中,if 語句主要用于在 server 或 location 塊內(nèi)設(shè)置條件,以便根據(jù)請(qǐng)求的屬性來執(zhí)行不同的配置。if 語句通常應(yīng)該包含在 server 或 location 塊內(nèi),而不是直接放在 http 塊中fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

如果將 if 語句放在一個(gè)一個(gè) server 塊中,這不得累死我(有很多個(gè) server 塊),而且后期維護(hù)也不方便fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

所以如何將自定義變量在全局配置中生效則成為了一個(gè)問題fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

map

fV828資訊網(wǎng)——每日最新資訊28at.com

map 指令是由 ngx_http_map_module 模塊提供的,是 Nginx 配置文件中的一種用于創(chuàng)建變量映射的指令fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

模塊鏈接:https://nginx.org/en/docs/http/ngx_http_map_module.htmlfV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

它允許我們將一個(gè)或多個(gè)輸入值映射到一個(gè)輸出值,類似于字典或哈希表的概念。map 指令通常用于根據(jù)特定條件為請(qǐng)求設(shè)置自定義變量,或者執(zhí)行基于請(qǐng)求屬性的條件控制fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

比較常見的 map 用法是通過 map 來實(shí)現(xiàn)允許多個(gè)域名跨域訪問的問題fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

語法如下:fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

其中:fV828資訊網(wǎng)——每日最新資訊28at.com

  • $variable 輸入變量,通常是 nginx 的內(nèi)置變量。
  • $new_variable 輸出變量,它將根據(jù)輸入值的映射設(shè)置為特定的結(jié)果。
  • value1, value2, ... 輸入值,可以列出多個(gè)值。
  • result1, result2, ... 與相應(yīng)輸入值相關(guān)聯(lián)的輸出結(jié)果。
  • default 一個(gè)可選項(xiàng),表示如果沒有匹配的輸入值,將使用默認(rèn)結(jié)果

fV828資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,map 只能放在 http 塊中fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

有了 map,我們就可以輕易的把 $time_iso8601 變量中的 ISO 8601 格式的時(shí)間戳轉(zhuǎn)換為指定的時(shí)間格式,然后存儲(chǔ)到自定義變量 $log_time 中fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

我們可以看到:fV828資訊網(wǎng)——每日最新資訊28at.com

  • 輸入變量為 $time_iso8601,輸出變量為 $log_time;
  • default "":如果沒有匹配任何條件,將使用空字符串作為 $log_time 的值
  • "~^(?<year>/d{4})-(?<month>/d{2})-(?<day>/d{2})T(?<hour>/d{2}):(?<minutes>/d{2}):(?<seconds>/d{2})":這是一個(gè)正則表達(dá)式條件,它用于匹配 ISO 8601 格式的時(shí)間戳。該正則表達(dá)式包含了多個(gè)捕獲組(使用 ?<name> 語法),用于從時(shí)間戳中提取年、月、日、小時(shí)、分鐘和秒的值
  • "${year}-${month}-${day} ${hour}:${minutes}:${seconds}":這是與正則表達(dá)式條件匹配時(shí)設(shè)置的輸出值。當(dāng)正則表達(dá)式條件匹配時(shí),它會(huì)將捕獲組中提取的年、月、日、小時(shí)、分鐘和秒的值組合成一個(gè)自定義的時(shí)間格式,然后將該值設(shè)置為 $log_time 變量的值

fV828資訊網(wǎng)——每日最新資訊28at.com

例如,如果 $time_iso8601 的值是 "2023-09-09T14:30:00",則 $log_time 將被設(shè)置為 "2023-09-09 14:30:00"fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

然后我們?cè)侔?$log_time 放進(jìn)我們自定義的日志格式里面,完整配置如下fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

最后我們驗(yàn)證一下fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

fV828資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-10492-0.htmlNginx map 實(shí)現(xiàn)時(shí)間格式轉(zhuǎn)換

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 反駁來了!放棄TypeScript?說明你無知!

下一篇: 19個(gè)JavaScript數(shù)組常用方法總結(jié)! 趕快收藏吧!

標(biāo)簽:
  • 熱門焦點(diǎn)
Top 主站蜘蛛池模板: 锡林郭勒盟| 墨脱县| 新密市| 重庆市| 宁蒗| 沙雅县| 黄骅市| 斗六市| 佛冈县| 徐汇区| 库车县| 新巴尔虎左旗| 通州市| 金阳县| 东乌珠穆沁旗| 府谷县| 溧阳市| 湘潭县| 芦山县| 鸡泽县| 宁海县| 株洲市| 陆丰市| 乃东县| 略阳县| 金秀| 成安县| 甘肃省| 林甸县| 文水县| 泰来县| 阜城县| 延川县| 西安市| 雅江县| 青岛市| 吉木乃县| 荃湾区| 杭锦后旗| 会昌县| 冀州市|