作者GALINE (天真可愛CQD)
看板PHP
標題Re: [請益] 解析container stats與log
時間Tue Aug 16 16:27:33 2022
※ 引述《isolatorAY (Isolator_AY)》之銘言:
: 最近在嘗試透過php curl抓取docker remote api傳出的JSON顯示在自己的網頁上,但是遇
: 上一些問題
: 我是利用docker composer同時啟動兩個container,分別是nginx 1.23與php 7.4-fpm
: 第一個問題是
: ip/containers/$containerID/logs?stdout=true
: 在抓nginx的log可以看到一些資訊,但是從php容器得到的卻是空字串
加上 stderr=true,php-fpm 的 log 往 stderr 塞的樣子
不過實際試了下,每一行 log 前面都有多放 8 byte 的 header
在 PHP 裡面還要另外做處理
```
[16:41:23] $ curl -s localhost:2375/containers/my-container/logs?stderr=true --output - | xxd -c 20
00000000:
0200 0000 0000 0035 5b30 352d 4175 672d 3230 3232
.......5[05-Aug-2022
00000014: 2031 373a 3536 3a32 315d 204e 4f54 4943 453a 2066 17:56:21] NOTICE: f
00000028: 706d 2069 7320 7275 6e6e 696e 672c 2070 6964 2031 pm is running, pid 1
0000003c: 0a
02 0000 0000 0000 3b5b 3035 2d41 7567 2d32 3032 .
.......;[05-Aug-202
00000050: 3220 3137 3a35 363a 3231 5d20 4e4f 5449 4345 3a20 2 17:56:21] NOTICE:
00000064: 7265 6164 7920 746f 2068 616e 646c 6520 636f 6e6e ready to handle conn
[以下略]
```
: 第二個問題是
: ip/containers/$containerID/stats
: 直接丟瀏覽器網址欄是持續進行每秒更新一次的..呃..是叫streaming嗎?
: 利用跟前面取得log、容器列表等等同樣的curl處裡方式卻會直接得到一個空值字串,請問
: 這種要如何正常的解析呢?
: 另外就是有嘗試利用網路上的JSON parser先解析直接丟瀏覽器得到的JSON 資料,發現除了
: 最開始的第一筆資料外,後續更新的都會在"precpu_stats"中包含了前一次的percpu_usage
: ,而網路上的JSON parser會將這裡標記為語法錯誤
: 請問這種是不是用php json_decode()就會無法轉換成陣列?
這邊他的做法是維持 HTTP connection,然後每一秒寫一行 json 進去
對於瀏覽器/PHP 來說,等於是一個永遠下載不完的的文字檔案,檔案內容每一行是一個 json
PHP 會怎麼處理要看你的 code 怎麼寫,然後對這種「一直讀一直讀讀不完」的東西
還要考慮到 PHP 內部 IO buffer 的行為,可能會囉唆一點
這會連動到 JSON 語法問題
因為...這個字串是合法的 JSON
```
{"key":{"key2":"val1"}}
```
但這個字串不是
```
{"key":{"key2":"val1"}}
{"key":{"key2":"val2"}}
```
如果你讀 response 的方法會一次讀進多行
送去 json_decode() 會拿到 null,可以用 json_last_error() 拿到錯誤代碼
如果一次只讀一行的話就能夠正常處理
--
起來,不願做光棍的人們,把女孩的清純築成我們新的長城
蘿莉控們到了最危險的時候。每個人被迫著發出最後的吼聲。
起來!起來!起來!
我們萬眾一心,往著女孩的裙底,前進!
往著女孩的裙底,前進!前進!前進!進!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.125.137.182 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/PHP/M.1660638456.A.DAC.html
1F:→ isolatorAY: 感謝! 我來看看 08/17 13:59
2F:推 bakedgrass: 推 08/18 02:01
※ 編輯: GALINE (218.166.58.169 臺灣), 08/22/2022 11:31:02
3F:推 gpmm: 推一個(跪 08/22 17:48