Monitoring the image renderer

Rendering images requires a lot of memory, mainly because Grafana creates browser instances in the background for the actual rendering. Monitoring your service can help you allocate the right amount of resources to your rendering service and set the right rendering mode.

Enable Prometheus metrics endpoint

Configure this service to expose a Prometheus metrics endpoint. For information on how to configure and monitor this service using Prometheus as a data source, refer to Grafana Image Rendering Service dashboard.

Metrics endpoint output example:

  1. # HELP process_cpu_user_seconds_total Total user CPU time spent in seconds.
  2. # TYPE process_cpu_user_seconds_total counter
  3. process_cpu_user_seconds_total 0.536 1579444523566
  4. # HELP process_cpu_system_seconds_total Total system CPU time spent in seconds.
  5. # TYPE process_cpu_system_seconds_total counter
  6. process_cpu_system_seconds_total 0.064 1579444523566
  7. # HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
  8. # TYPE process_cpu_seconds_total counter
  9. process_cpu_seconds_total 0.6000000000000001 1579444523566
  10. # HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
  11. # TYPE process_start_time_seconds gauge
  12. process_start_time_seconds 1579444433
  13. # HELP process_resident_memory_bytes Resident memory size in bytes.
  14. # TYPE process_resident_memory_bytes gauge
  15. process_resident_memory_bytes 52686848 1579444523568
  16. # HELP process_virtual_memory_bytes Virtual memory size in bytes.
  17. # TYPE process_virtual_memory_bytes gauge
  18. process_virtual_memory_bytes 2055344128 1579444523568
  19. # HELP process_heap_bytes Process heap size in bytes.
  20. # TYPE process_heap_bytes gauge
  21. process_heap_bytes 1996390400 1579444523568
  22. # HELP process_open_fds Number of open file descriptors.
  23. # TYPE process_open_fds gauge
  24. process_open_fds 31 1579444523567
  25. # HELP process_max_fds Maximum number of open file descriptors.
  26. # TYPE process_max_fds gauge
  27. process_max_fds 1573877
  28. # HELP nodejs_eventloop_lag_seconds Lag of event loop in seconds.
  29. # TYPE nodejs_eventloop_lag_seconds gauge
  30. nodejs_eventloop_lag_seconds 0.000915922 1579444523567
  31. # HELP nodejs_active_handles Number of active libuv handles grouped by handle type. Every handle type is C++ class name.
  32. # TYPE nodejs_active_handles gauge
  33. nodejs_active_handles{type="WriteStream"} 2 1579444523566
  34. nodejs_active_handles{type="Server"} 1 1579444523566
  35. nodejs_active_handles{type="Socket"} 9 1579444523566
  36. nodejs_active_handles{type="ChildProcess"} 2 1579444523566
  37. # HELP nodejs_active_handles_total Total number of active handles.
  38. # TYPE nodejs_active_handles_total gauge
  39. nodejs_active_handles_total 14 1579444523567
  40. # HELP nodejs_active_requests Number of active libuv requests grouped by request type. Every request type is C++ class name.
  41. # TYPE nodejs_active_requests gauge
  42. nodejs_active_requests{type="FSReqCallback"} 2
  43. # HELP nodejs_active_requests_total Total number of active requests.
  44. # TYPE nodejs_active_requests_total gauge
  45. nodejs_active_requests_total 2 1579444523567
  46. # HELP nodejs_heap_size_total_bytes Process heap size from node.js in bytes.
  47. # TYPE nodejs_heap_size_total_bytes gauge
  48. nodejs_heap_size_total_bytes 13725696 1579444523567
  49. # HELP nodejs_heap_size_used_bytes Process heap size used from node.js in bytes.
  50. # TYPE nodejs_heap_size_used_bytes gauge
  51. nodejs_heap_size_used_bytes 12068008 1579444523567
  52. # HELP nodejs_external_memory_bytes Nodejs external memory size in bytes.
  53. # TYPE nodejs_external_memory_bytes gauge
  54. nodejs_external_memory_bytes 1728962 1579444523567
  55. # HELP nodejs_heap_space_size_total_bytes Process heap space size total from node.js in bytes.
  56. # TYPE nodejs_heap_space_size_total_bytes gauge
  57. nodejs_heap_space_size_total_bytes{space="read_only"} 262144 1579444523567
  58. nodejs_heap_space_size_total_bytes{space="new"} 1048576 1579444523567
  59. nodejs_heap_space_size_total_bytes{space="old"} 9809920 1579444523567
  60. nodejs_heap_space_size_total_bytes{space="code"} 425984 1579444523567
  61. nodejs_heap_space_size_total_bytes{space="map"} 1052672 1579444523567
  62. nodejs_heap_space_size_total_bytes{space="large_object"} 1077248 1579444523567
  63. nodejs_heap_space_size_total_bytes{space="code_large_object"} 49152 1579444523567
  64. nodejs_heap_space_size_total_bytes{space="new_large_object"} 0 1579444523567
  65. # HELP nodejs_heap_space_size_used_bytes Process heap space size used from node.js in bytes.
  66. # TYPE nodejs_heap_space_size_used_bytes gauge
  67. nodejs_heap_space_size_used_bytes{space="read_only"} 32296 1579444523567
  68. nodejs_heap_space_size_used_bytes{space="new"} 601696 1579444523567
  69. nodejs_heap_space_size_used_bytes{space="old"} 9376600 1579444523567
  70. nodejs_heap_space_size_used_bytes{space="code"} 286688 1579444523567
  71. nodejs_heap_space_size_used_bytes{space="map"} 704320 1579444523567
  72. nodejs_heap_space_size_used_bytes{space="large_object"} 1064872 1579444523567
  73. nodejs_heap_space_size_used_bytes{space="code_large_object"} 3552 1579444523567
  74. nodejs_heap_space_size_used_bytes{space="new_large_object"} 0 1579444523567
  75. # HELP nodejs_heap_space_size_available_bytes Process heap space size available from node.js in bytes.
  76. # TYPE nodejs_heap_space_size_available_bytes gauge
  77. nodejs_heap_space_size_available_bytes{space="read_only"} 229576 1579444523567
  78. nodejs_heap_space_size_available_bytes{space="new"} 445792 1579444523567
  79. nodejs_heap_space_size_available_bytes{space="old"} 417712 1579444523567
  80. nodejs_heap_space_size_available_bytes{space="code"} 20576 1579444523567
  81. nodejs_heap_space_size_available_bytes{space="map"} 343632 1579444523567
  82. nodejs_heap_space_size_available_bytes{space="large_object"} 0 1579444523567
  83. nodejs_heap_space_size_available_bytes{space="code_large_object"} 0 1579444523567
  84. nodejs_heap_space_size_available_bytes{space="new_large_object"} 1047488 1579444523567
  85. # HELP nodejs_version_info Node.js version info.
  86. # TYPE nodejs_version_info gauge
  87. nodejs_version_info{version="v14.16.1",major="14",minor="16",patch="1"} 1
  88. # HELP grafana_image_renderer_service_http_request_duration_seconds duration histogram of http responses labeled with: status_code
  89. # TYPE grafana_image_renderer_service_http_request_duration_seconds histogram
  90. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="1",status_code="200"} 0
  91. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="5",status_code="200"} 4
  92. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="7",status_code="200"} 4
  93. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="9",status_code="200"} 4
  94. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="11",status_code="200"} 4
  95. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="13",status_code="200"} 4
  96. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="15",status_code="200"} 4
  97. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="20",status_code="200"} 4
  98. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="30",status_code="200"} 4
  99. grafana_image_renderer_service_http_request_duration_seconds_bucket{le="+Inf",status_code="200"} 4
  100. grafana_image_renderer_service_http_request_duration_seconds_sum{status_code="200"} 10.492873834
  101. grafana_image_renderer_service_http_request_duration_seconds_count{status_code="200"} 4
  102. # HELP up 1 = up, 0 = not up
  103. # TYPE up gauge
  104. up 1
  105. # HELP grafana_image_renderer_http_request_in_flight A gauge of requests currently being served by the image renderer.
  106. # TYPE grafana_image_renderer_http_request_in_flight gauge
  107. grafana_image_renderer_http_request_in_flight 1
  108. # HELP grafana_image_renderer_step_duration_seconds duration histogram of browser steps for rendering an image labeled with: step
  109. # TYPE grafana_image_renderer_step_duration_seconds histogram
  110. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="launch"} 0
  111. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="launch"} 0
  112. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="launch"} 1
  113. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="launch"} 1
  114. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="launch"} 1
  115. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="launch"} 1
  116. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="launch"} 1
  117. grafana_image_renderer_step_duration_seconds_sum{step="launch"} 0.7914972
  118. grafana_image_renderer_step_duration_seconds_count{step="launch"} 1
  119. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="newPage"} 1
  120. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="newPage"} 1
  121. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="newPage"} 1
  122. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="newPage"} 1
  123. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="newPage"} 1
  124. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="newPage"} 1
  125. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="newPage"} 1
  126. grafana_image_renderer_step_duration_seconds_sum{step="newPage"} 0.2217868
  127. grafana_image_renderer_step_duration_seconds_count{step="newPage"} 1
  128. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="prepare"} 1
  129. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="prepare"} 1
  130. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="prepare"} 1
  131. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="prepare"} 1
  132. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="prepare"} 1
  133. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="prepare"} 1
  134. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="prepare"} 1
  135. grafana_image_renderer_step_duration_seconds_sum{step="prepare"} 0.0819274
  136. grafana_image_renderer_step_duration_seconds_count{step="prepare"} 1
  137. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="navigate"} 0
  138. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="navigate"} 0
  139. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="navigate"} 0
  140. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="navigate"} 0
  141. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="navigate"} 0
  142. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="navigate"} 0
  143. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="navigate"} 1
  144. grafana_image_renderer_step_duration_seconds_sum{step="navigate"} 15.3311258
  145. grafana_image_renderer_step_duration_seconds_count{step="navigate"} 1
  146. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="panelsRendered"} 1
  147. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="panelsRendered"} 1
  148. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="panelsRendered"} 1
  149. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="panelsRendered"} 1
  150. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="panelsRendered"} 1
  151. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="panelsRendered"} 1
  152. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="panelsRendered"} 1
  153. grafana_image_renderer_step_duration_seconds_sum{step="panelsRendered"} 0.0205577
  154. grafana_image_renderer_step_duration_seconds_count{step="panelsRendered"} 1
  155. grafana_image_renderer_step_duration_seconds_bucket{le="0.3",step="screenshot"} 1
  156. grafana_image_renderer_step_duration_seconds_bucket{le="0.5",step="screenshot"} 1
  157. grafana_image_renderer_step_duration_seconds_bucket{le="1",step="screenshot"} 1
  158. grafana_image_renderer_step_duration_seconds_bucket{le="2",step="screenshot"} 1
  159. grafana_image_renderer_step_duration_seconds_bucket{le="3",step="screenshot"} 1
  160. grafana_image_renderer_step_duration_seconds_bucket{le="5",step="screenshot"} 1
  161. grafana_image_renderer_step_duration_seconds_bucket{le="+Inf",step="screenshot"} 1
  162. grafana_image_renderer_step_duration_seconds_sum{step="screenshot"} 0.2866623
  163. grafana_image_renderer_step_duration_seconds_count{step="screenshot"} 1
  164. # HELP grafana_image_renderer_browser_info A metric with a constant '1 value labeled by version of the browser in use
  165. # TYPE grafana_image_renderer_browser_info gauge
  166. grafana_image_renderer_browser_info{version="HeadlessChrome/79.0.3945.0"} 1