Closed megastef closed 8 years ago
Ok, woking on it and dumped wrong json to console. I can reproduce it with docker-compose scale
, when many containers are killed at once.
It looks the chunk containes multiple lines.
SyntaxError: Unexpected token { in JSON at position 671
at Object.parse (native)
at new Parse (/Users/stefan/sematext/docker-allcontainers/node_modules/fast-json-parse/parse.js:10:23)
at Parse (/Users/stefan/sematext/docker-allcontainers/node_modules/fast-json-parse/parse.js:5:12)
at DestroyableTransform._transform (/Users/stefan/sematext/docker-allcontainers/allcontainers.js:30:18)
at DestroyableTransform.Transform._read (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_transform.js:184:10)
at DestroyableTransform.Transform._write (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_transform.js:172:12)
at doWrite (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_writable.js:237:10)
at writeOrBuffer (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_writable.js:227:5)
at DestroyableTransform.Writable.write (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_writable.js:194:11)
at write (/Users/stefan/sematext/docker-allcontainers/node_modules/readable-stream/lib/_stream_readable.js:623:24)
{"status":"kill","id":"be815a03562b3d1d21aadf7cc2329e09b9025dd378d1ad69b65955560c50f62c","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"be815a03562b3d1d21aadf7cc2329e09b9025dd378d1ad69b65955560c50f62c","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"6","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_6","signal":"9"}},"time":1465921775,"timeNano":1465921775383442262}
{"status":"kill","id":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"25","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_25","signal":"9"}},"time":1465921775,"timeNano":1465921775383038990}
{"status":"kill","id":"2efb3e84d665be3f0145efee60b0386d1a6b7b45c9896b16087b8667bf47f461","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"2efb3e84d665be3f0145efee60b0386d1a6b7b45c9896b16087b8667bf47f461","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"22","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_22","signal":"9"}},"time":1465921775,"timeNano":1465921775383568550}
I've tried to split the lines, but got other JSON parse errors. I could not see what is wrong, in the node console the string got parsed. Are there any special chars in the buffer, e.g. from the Docker protocol? Actually we miss fast kill events, so it becomes a critical issue :(
What is the original string coming in?
See above. I could dump the buffer, one sec.
started { id: '924126c7f703ba33b4adf51b0145a86db2af8622d5d7672ae0d7db2e3e3463d9',
image: 'lg-nginx',
name: 'loggenerator_nginx-log-invalid_14' }
started { id: '70b8bc71d635c256655e3e360e50a451ed6cc61f1321b41c33bdafbf6f046d46',
image: 'lg-nginx',
name: 'loggenerator_nginx-log-invalid_16' }
started { id: 'be815a03562b3d1d21aadf7cc2329e09b9025dd378d1ad69b65955560c50f62c',
image: 'lg-nginx',
name: 'loggenerator_nginx-log-invalid_6' }
Parse error for this:
{"type":"Buffer","data":[123,34,115,116,97,116,117,115,34,58,34,107,105,108,108,34,44,34,105,100,34,58,34,54,98,57,50,102,49,48,48,53,102,100,97,98,50,52,99,50,50,102,52,56,102,52,49,99,98,97,57,98,57,48,100,101,50,50,48,52,53,54,54,52,101,50,56,97,98,54,99,97,100,101,49,52,52,53,55,51,55,55,50,100,48,48,55,34,44,34,102,114,111,109,34,58,34,108,103,45,110,103,105,110,120,34,44,34,84,121,112,101,34,58,34,99,111,110,116,97,105,110,101,114,34,44,34,65,99,116,105,111,110,34,58,34,107,105,108,108,34,44,34,65,99,116,111,114,34,58,123,34,73,68,34,58,34,54,98,57,50,102,49,48,48,53,102,100,97,98,50,52,99,50,50,102,52,56,102,52,49,99,98,97,57,98,57,48,100,101,50,50,48,52,53,54,54,52,101,50,56,97,98,54,99,97,100,101,49,52,52,53,55,51,55,55,50,100,48,48,55,34,44,34,65,116,116,114,105,98,117,116,101,115,34,58,123,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,99,111,110,102,105,103,45,104,97,115,104,34,58,34,51,54,98,48,55,57,51,55,100,49,101,49,100,51,102,56,50,49,98,56,51,100,99,55,101,99,97,100,55,99,99,52,50,55,98,49,101,98,98,52,49,100,53,49,56,48,48,51,97,55,55,99,50,98,54,48,101,98,98,57,101,48,55,101,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,99,111,110,116,97,105,110,101,114,45,110,117,109,98,101,114,34,58,34,49,55,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,111,110,101,111,102,102,34,58,34,70,97,108,115,101,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,112,114,111,106,101,99,116,34,58,34,108,111,103,103,101,110,101,114,97,116,111,114,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,115,101,114,118,105,99,101,34,58,34,110,103,105,110,120,45,108,111,103,45,105,110,118,97,108,105,100,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,118,101,114,115,105,111,110,34,58,34,49,46,55,46,49,34,44,34,105,109,97,103,101,34,58,34,108,103,45,110,103,105,110,120,34,44,34,110,97,109,101,34,58,34,108,111,103,103,101,110,101,114,97,116,111,114,95,110,103,105,110,120,45,108,111,103,45,105,110,118,97,108,105,100,95,49,55,34,44,34,115,105,103,110,97,108,34,58,34,49,53,34,125,125,44,34,116,105,109,101,34,58,49,52,54,53,57,50,52,54,52,57,44,34,116,105,109,101,78,97,110,111,34,58,49,52,54,53,57,50,52,54,52,57,50,57,49,51,54,53,48,50,52,125,10,123,34,115,116,97,116,117,115,34,58,34,107,105,108,108,34,44,34,105,100,34,58,34,97,52,54,50,49,53,50,50,55,56,56,51,101,48,52,102,48,55,101,54,54,102,102,98,51,56,52,51,101,48,51,53,55,51,49,54,57,98,49,53,99,101,55,102,99,101,50,97,48,54,49,54,100,56,55,51,50,55,102,102,57,102,53,102,34,44,34,102,114,111,109,34,58,34,108,103,45,110,103,105,110,120,34,44,34,84,121,112,101,34,58,34,99,111,110,116,97,105,110,101,114,34,44,34,65,99,116,105,111,110,34,58,34,107,105,108,108,34,44,34,65,99,116,111,114,34,58,123,34,73,68,34,58,34,97,52,54,50,49,53,50,50,55,56,56,51,101,48,52,102,48,55,101,54,54,102,102,98,51,56,52,51,101,48,51,53,55,51,49,54,57,98,49,53,99,101,55,102,99,101,50,97,48,54,49,54,100,56,55,51,50,55,102,102,57,102,53,102,34,44,34,65,116,116,114,105,98,117,116,101,115,34,58,123,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,99,111,110,102,105,103,45,104,97,115,104,34,58,34,51,54,98,48,55,57,51,55,100,49,101,49,100,51,102,56,50,49,98,56,51,100,99,55,101,99,97,100,55,99,99,52,50,55,98,49,101,98,98,52,49,100,53,49,56,48,48,51,97,55,55,99,50,98,54,48,101,98,98,57,101,48,55,101,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,99,111,110,116,97,105,110,101,114,45,110,117,109,98,101,114,34,58,34,50,56,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,111,110,101,111,102,102,34,58,34,70,97,108,115,101,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,112,114,111,106,101,99,116,34,58,34,108,111,103,103,101,110,101,114,97,116,111,114,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,115,101,114,118,105,99,101,34,58,34,110,103,105,110,120,45,108,111,103,45,105,110,118,97,108,105,100,34,44,34,99,111,109,46,100,111,99,107,101,114,46,99,111,109,112,111,115,101,46,118,101,114,115,105,111,110,34,58,34,49,46,55,46,49,34,44,34,105,109,97,103,101,34,58,34,108,103,45,110,103,105,110,120,34,44,34,110,97,109,101,34,58,34,108,111,103,103,101,110,101,114,97,116,111,114,95,110,103,105,110,120,45,108,111,103,45,105,110,118,97,108,105,100,95,50,56,34,44,34,115,105,103,110,97,108,34,58,34,49,53,34,125,125,44,34,116,105,109,101,34,58,49,52,54,53,57,50,52,54,52,57,44,34,116,105,109,101,78,97,110,111,34,58,49,52,54,53,57,50,52,54,52,57,50,56,57,54,48,50,55,50,50,125,10]}
{"status":"kill","id":"6b92f1005fdab24c22f48f41cba9b90de22045664e28ab6cade144573772d007","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"6b92f1005fdab24c22f48f41cba9b90de22045664e28ab6cade144573772d007","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"17","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_17","signal":"15"}},"time":1465924649,"timeNano":1465924649291365024}
{"status":"kill","id":"a46215227883e04f07e66ffb3843e03573169b15ce7fce2a0616d87327ff9f5f","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"a46215227883e04f07e66ffb3843e03573169b15ce7fce2a0616d87327ff9f5f","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"28","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_28","signal":"15"}},"time":1465924649,"timeNano":1465924649289602722}
Dumped to disk with fs.writeFileSync()
not sure, Docker json is not "proper json" sometimes.
It should be possible to parse the lines. Used the dump in node console.
> y = new Buffer (x.data)
<Buffer 7b 22 73 74 61 74 75 73 22 3a 22 6b 69 6c 6c 22 2c 22 69 64 22 3a 22 63 63 65 64 30 30 30 34 65 34 38 66 63 61 31 62 37 33 32 31 38 39 30 64 30 31 36 ... >
> y.toString()
'{"status":"kill","id":"cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"24","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_24","signal":"9"}},"time":1465925475,"timeNano":1465925475453789236}\n{"status":"kill","id":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"25","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_25","signal":"9"}},"time":1465925475,"timeNano":1465925475453938710}\n'
> y.toString().split('\n')
[ '{"status":"kill","id":"cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"24","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_24","signal":"9"}},"time":1465925475,"timeNano":1465925475453789236}',
'{"status":"kill","id":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","from":"lg-nginx","Type":"container","Action":"kill","Actor":{"ID":"fed8b769ecddb87812eb797a45eaa2210a9e5c3d174d336b9eedcbb6df3faf7b","Attributes":{"com.docker.compose.config-hash":"36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e","com.docker.compose.container-number":"25","com.docker.compose.oneoff":"False","com.docker.compose.project":"loggenerator","com.docker.compose.service":"nginx-log-invalid","com.docker.compose.version":"1.7.1","image":"lg-nginx","name":"loggenerator_nginx-log-invalid_25","signal":"9"}},"time":1465925475,"timeNano":1465925475453938710}',
'' ]
> JSON.parse(y.toString().split('\n')[0])
{ status: 'kill',
id: 'cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12',
from: 'lg-nginx',
Type: 'container',
Action: 'kill',
Actor:
{ ID: 'cced0004e48fca1b7321890d016be30a9f8f74ae41c0a54b5cb7dba392eb4f12',
Attributes:
{ 'com.docker.compose.config-hash': '36b07937d1e1d3f821b83dc7ecad7cc427b1ebb41d518003a77c2b60ebb9e07e',
'com.docker.compose.container-number': '24',
'com.docker.compose.oneoff': 'False',
'com.docker.compose.project': 'loggenerator',
'com.docker.compose.service': 'nginx-log-invalid',
'com.docker.compose.version': '1.7.1',
image: 'lg-nginx',
name: 'loggenerator_nginx-log-invalid_24',
signal: '9' } },
time: 1465925475,
timeNano: 1465925475453789200 }
>
Hi, the last PR runs stable for me. Spinning up 50 containers with Docker-Compose and then stop them all without an error and seeing all events. Feel free to adjust, I'm not the best node developer, and had to remove through2 to get this running with split().
@mcollina Do you have an idea how I could fiddle this in docker-loghose / docker-stats etc. ? As they depend on docker-allcontainers? Thought about walking to node_modules/docker-loghose and run there 'npm i megastef/docker-allcontainers' - but quite a hack. So I could test Sematext Docker Agent with this... and build new images ...
have a look at https://docs.npmjs.com/cli/link.
Thx, right npm link
👍 .... this could be merged from my point of view.
Released as 0.5.0. There was a problem with split
.
You might want to use http://npm.im/fast-json-parse.