作者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/cn.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