{"id":403783,"date":"2024-06-29T17:19:42","date_gmt":"2024-06-29T17:19:42","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=403783"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=403783","title":{"rendered":"<span>Grafana as code, \u0438\u043b\u0438 \u043a\u0430\u043a \u044f \u043f\u0435\u0440\u0435\u0441\u0442\u0430\u043b \u043a\u043b\u0438\u043a\u0430\u0442\u044c \u043c\u044b\u0448\u043a\u043e\u0439 \u0432 UI \u0438 \u043f\u043e\u043b\u044e\u0431\u0438\u043b grafonnet<\/span>"},"content":{"rendered":"<div><!--[--><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=981564558927545&amp;ev=Habr\" style=\"display:none;\" width=\"1\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/top-fwz1.mail.ru\/counter?id=3200881;js=na\" style=\"display:none;\" width=\"1\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=1220899431627792&amp;ev=PageView&amp;noscript=1\" style=\"display:none;\" width=\"1\"><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432 Tarantool \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0434\u043b\u044f \u0441\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0443, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e grafonnet. \u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 Grafana \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 jsonnet, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u043b\u0430 \u043d\u0430\u043c \u0436\u0438\u0437\u043d\u044c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u043e\u0434\u0435\u043b\u0451\u043d \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f \u0434\u0435\u043b\u044e\u0441\u044c \u043d\u0430\u0448\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 grafonnet, \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f Prometheus. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c\u0438, \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/pp\/js\/a-\/ppjsa-gyd6at_y5hmdwypk77aea.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/pp\/js\/a-\/ppjsa-gyd6at_y5hmdwypk77aea.jpeg\" data-blurred=\"true\"\/><\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h1 id=\"1-chast-pervaya-liricheskaya\">1. \u0427\u0430\u0441\u0442\u044c \u043f\u0435\u0440\u0432\u0430\u044f, \u043b\u0438\u0440\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/h1>\n<p>  <\/p>\n<h2 id=\"11-kak-ya-vstretil-grafonnet\">1.1. \u041a\u0430\u043a \u044f \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u043b grafonnet<\/h2>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u043e\u0434\u0438\u0442\u0441\u044f, \u0432\u0441\u0451 \u043d\u0430\u0447\u0430\u043b\u043e\u0441\u044c \u0441 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u043e\u043d\u0446\u0435 2019 \u0433\u043e\u0434\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u0430, \u0447\u0430\u0441\u0442\u044c\u044e \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u044f\u0432\u043b\u044f\u044e\u0441\u044c, \u0441\u0434\u0430\u0432\u0430\u043b\u0430 \u0432 \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u044e \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0443 \u0434\u0432\u0430 \u043c\u0438\u043a\u0440\u043e\u0441\u0435\u0440\u0432\u0438\u0441\u0430-\u043a\u044d\u0448\u0430 (\u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u043f\u0440\u043e \u043d\u0438\u0445 \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/habr.com\/ru\/article\/470842\/\">\u0437\u0434\u0435\u0441\u044c<\/a> \u0438 <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/513710\/\">\u0437\u0434\u0435\u0441\u044c<\/a>). \u041e\u0434\u043d\u043e\u0439 \u0438\u0437 &#171;\u0433\u0430\u043b\u043e\u0447\u0435\u043a&#187; \u0432 \u0447\u0435\u043a-\u043b\u0438\u0441\u0442\u0435 \u0431\u044b\u043b \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043d\u043d\u044b\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u043c\u0438 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438 \u043e\u0431 \u0430\u0432\u0430\u0440\u0438\u044f\u0445. \u0412 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0430 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u043f\u043e\u043b\u043d\u044b\u0439 \u0441\u0442\u0435\u043a: Telegraf, InfluxDB \u0438 Grafana. \u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0445 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u0438\u043d\u0442\u0440\u0435\u0433\u0440\u0430\u0446\u0438\u0438 \u0441 \u043c\u0435\u0441\u0442\u043d\u044b\u043c\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u0430\u043c\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u0435\u0441\u044f\u0442\u043a\u0438 \u0442\u044b\u0441\u044f\u0447 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043b\u0443\u0430\u0442\u0430\u0446\u0438\u0438. \u0418 \u0434\u043e\u0441\u0442\u0430\u043b\u0430\u0441\u044c \u043e\u043d\u0430 \u043c\u043d\u0435.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0447\u0430\u0441\u0442\u0438 \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043b\u0430 \u0438\u0437 \u043b\u044e\u0434\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0447\u0430\u043b\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441 Tarantool \u043e\u043a\u043e\u043b\u043e \u0433\u043e\u0434\u0430 \u043d\u0430\u0437\u0430\u0434. \u041c\u044b \u0443\u0436\u0435 \u043d\u0430\u0431\u0438\u043b\u0438 \u0440\u0443\u043a\u0443 \u0432 \u0432\u043e\u043f\u0440\u043e\u0441\u0435 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043d\u043e \u0437\u0430\u0434\u0430\u0447\u0430 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0431\u044b\u043b\u0430 \u043d\u0435\u0438\u0437\u0432\u0435\u0434\u0430\u043d\u043d\u043e\u0439 \u0437\u0435\u043c\u043b\u0451\u0439. \u041d\u043e\u0432\u044b\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u043b\u0438 \u043f\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437 \u0432 \u043d\u0435\u0434\u0435\u043b\u044e. \u0420\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 Grafana \u0432\u0435\u043b\u0430\u0441\u044c \u0438\u0442\u0435\u0440\u0430\u0442\u0438\u0432\u043d\u043e: \u043f\u0430\u043d\u0435\u043b\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u043b\u0438\u0441\u044c, \u0443\u0434\u0430\u043b\u044f\u043b\u0438\u0441\u044c \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u043b\u0438\u0441\u044c \u043d\u0430 \u043d\u043e\u0432\u044b\u0435. \u041d\u0430\u0447\u0430\u043b\u043e \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0442\u0435\u0440\u0430\u0446\u0438\u0438 \u0431\u044b\u043b\u043e \u0442\u0432\u043e\u0440\u0447\u0435\u0441\u043a\u0438\u043c \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0432\u043e\u0434\u0438\u043b\u0441\u044f \u043a \u0440\u0443\u0442\u0438\u043d\u0435: \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u043d\u0435 \u043e\u0434\u043d\u0443 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0443, \u0430 \u0446\u0435\u043b\u044b\u0445 \u0447\u0435\u0442\u044b\u0440\u0435.<\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0434\u0430\u0447\u0430 \u0438\u043c\u0435\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0441\u043b\u0435\u0434\u0438\u0442\u044c \u0437\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438 \u043d\u0430 \u0434\u0432\u0443\u0445 \u0440\u0430\u0437\u043d\u044b\u0445 \u0437\u043e\u043d\u0430\u0445 \u0441\u0442\u043e\u044f\u043b\u0430 \u0441 \u0441\u0430\u043c\u043e\u0433\u043e \u043d\u0430\u0447\u0430\u043b\u0430, \u0438 \u0443 \u043d\u0435\u0451 \u0431\u044b\u043b\u043e \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c \u0434\u0432\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f. \u0412 \u0437\u0430\u043f\u0440\u043e\u0441\u044b Grafana \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/variables\/\">\u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/a>: \u043d\u0430\u0431\u043e\u0440\u044b \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442 \u0438\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0438\u0437 \u0431\u0430\u0437\u044b \u0441 \u043c\u0435\u0442\u0440\u0438\u043a\u0430\u043c\u0438. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043b\u0451\u0433\u043a\u0438\u043c \u0434\u0432\u0438\u0436\u0435\u043d\u0438\u0435\u043c \u0440\u0443\u043a\u0438 \u043f\u0440\u0435\u0432\u0440\u0430\u0442\u0438\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0437\u043e\u043d\u044b \u0410 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0437\u043e\u043d\u044b \u0411. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439, \u043a \u0441\u043e\u0436\u0430\u043b\u0435\u043d\u0438\u044e, \u0432\u0441\u0442\u0443\u043f\u0430\u0435\u0442 \u0432 \u043f\u0440\u043e\u0442\u0438\u0432\u043e\u0440\u0435\u0447\u0438\u0435 \u0441 \u043d\u0435 \u043c\u0435\u043d\u0435\u0435 \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c\u0438 <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/alerting\/\">\u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u044f\u043c\u0438<\/a>. \u0415\u0441\u043b\u0438 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435 \u043f\u0430\u043d\u0435\u043b\u0438 \u0435\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f, \u043d\u0430 \u043d\u0435\u0451 \u043d\u0435\u043b\u044c\u0437\u044f \u043f\u043e\u0432\u0435\u0441\u0438\u0442\u044c \u0430\u043b\u0451\u0440\u0442. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u043f\u0440\u0438\u043d\u044f\u043b\u0438 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0442\u044c \u043f\u043e \u0434\u0432\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/tc\/1j\/vc\/tc1jvcgq7ouz2egn-z6a3mx53rc.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/tc\/1j\/vc\/tc1jvcgq7ouz2egn-z6a3mx53rc.jpeg\" data-blurred=\"true\"\/><\/p>\n<p>  <\/p>\n<p>\u0420\u0443\u0442\u0438\u043d\u0443 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c. \u041d\u0430 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u043e\u0442\u043b\u0438\u0447\u0430\u043b\u0438\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u044f\u0445 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0440\u0435\u0448\u0430\u043b\u0430\u0441\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Ctrl+H.<\/p>\n<p>  <\/p>\n<p>Grafana \u0443\u043c\u0435\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442 json. \u041c\u044b \u0434\u0435\u043b\u0430\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 \u043e\u0434\u043d\u043e\u043c \u0438\u0437 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432, \u0441\u043a\u0430\u0447\u0438\u0432\u0430\u043b\u0438 \u0435\u0433\u043e \u0438 \u0437\u0430\u043c\u0435\u043d\u044f\u043b\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0432 \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435. \u041a\u043e\u0433\u0434\u0430 \u0437\u0430\u043c\u0435\u043d\u044b \u0441\u0442\u0430\u043b\u0438 \u0441\u043b\u043e\u0436\u043d\u0435\u0435, \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d Python-\u0441\u043a\u0440\u0438\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0447\u0438\u0442\u0430\u043b \u043f\u0440\u0430\u0432\u0438\u043b\u0430 \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0438\u0437 yml-\u0444\u0430\u0439\u043b\u0430. \u041a\u044d\u0448\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0440\u0435\u043f\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0438\u0437 Oracle \u0438 \u0445\u043e\u043b\u043e\u0434\u043d\u043e\u0439 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u0438 \u0432 \u043e\u0434\u0438\u043d \u043c\u043e\u043c\u0435\u043d\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u044b \u0440\u0430\u0437\u043e\u0448\u043b\u0438\u0441\u044c \u0432 \u043d\u0430\u0431\u043e\u0440\u0435 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u0432. \u0423\u0434\u0430\u043b\u044f\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u043a\u0440\u0438\u043f\u0442\u043e\u043c \u043b\u0435\u0433\u043a\u043e, \u043d\u043e \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u2014 \u043d\u0430 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u0430\u044f \u0437\u0430\u0434\u0430\u0447\u0430. \u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u043f\u043e\u043d\u044f\u043b\u0438, \u0447\u0442\u043e \u0441\u043a\u0440\u0438\u043f\u0442 \u0434\u043b\u044f \u0442\u0440\u0430\u043d\u0441\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u043f\u0440\u0435\u0432\u0440\u0430\u0449\u0430\u0435\u0442\u0441\u044f \u0432 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0438\u0445 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0441\u0442\u0430\u043b\u043e \u044f\u0441\u043d\u043e, \u0447\u0442\u043e \u044d\u0442\u0443 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0443 \u0440\u0435\u0448\u0430\u043b \u043a\u0442\u043e-\u0442\u043e \u0434\u043e \u043d\u0430\u0441.<\/p>\n<p>  <\/p>\n<p>\u0412 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u043c \u0434\u043e\u0441\u0442\u0443\u043f\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u043a\u0430\u043a <a href=\"https:\/\/github.com\/weaveworks\/grafanalib\">Weaveworks grafanalib<\/a>, <a href=\"https:\/\/github.com\/uber\/grafana-dash-gen\">Uber Grafana dashboard generator<\/a>, <a href=\"https:\/\/github.com\/Showmax\/grafana-dashboards-generator\">Showmax Grafana dashboard generator<\/a>, <a href=\"https:\/\/docs.openstack.org\/infra\/grafyaml\/\">grafyaml<\/a> \u0438 <a href=\"https:\/\/github.com\/grafana\/grafonnet-lib\">grafonnet<\/a>. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, Grafana \u0438\u0437 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 <a href=\"https:\/\/grafana.com\/docs\/grafana\/latest\/reference\/scripting\/\">\u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e JavaScript<\/a>. \u0420\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u043b\u0441\u044f \u0438 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440\u0430. \u0421\u0443\u0437\u0438\u0442\u044c \u0432\u044b\u0431\u043e\u0440 \u043f\u043e\u043c\u043e\u0433\u043b\u0438 \u043d\u0430\u0448\u0438 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430: \u0442\u043e\u043b\u044c\u043a\u043e grafonnet \u0443\u043c\u0435\u043b \u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a InfluxDB.<\/p>\n<p>  <\/p>\n<h2 id=\"12-konfetno-buketnyy-period\">1.2. \u041a\u043e\u043d\u0444\u0435\u0442\u043d\u043e-\u0431\u0443\u043a\u0435\u0442\u043d\u044b\u0439 \u043f\u0435\u0440\u0438\u043e\u0434<\/h2>\n<p>  <\/p>\n<p>Grafonnet \u2014 opensource-\u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u043e\u0434 \u044d\u0433\u0438\u0434\u043e\u0439 Grafana \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 (<a href=\"https:\/\/github.com\/grafana\/grafonnet-lib\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0430 GitHub<\/a>). \u041e\u043d \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043d\u0430\u0431\u043e\u0440 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0438\u0442\u0438\u0432\u043e\u0432 Grafana: \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432, \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u2014 \u0441 \u043c\u0435\u0442\u043e\u0434\u0430\u043c\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0435\u043d\u0438\u044f \u0438\u0445 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434.<\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e\u043c grafonnet \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u0432 \u043d\u0451\u043c \u044f\u0437\u044b\u043a jsonnet. \u041e\u043d \u043f\u0440\u043e\u0441\u0442 \u0438 \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u0438\u0441\u0442\u0438\u0447\u0435\u043d. \u0420\u0430\u0431\u043e\u0442\u0430 \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043d\u0430\u0434 json-\u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 (\u0442\u043e\u0447\u043d\u0435\u0435, \u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u044f-\u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0438 \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u043b\u044f), \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043d\u0430 \u043b\u044e\u0431\u043e\u043c \u044d\u0442\u0430\u043f\u0435 \u0440\u0430\u0431\u043e\u0442\u044b \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e &#171;\u0434\u043e\u043f\u0438\u043b\u0438\u0442\u044c&#187; \u043f\u043e\u0434 \u0441\u0435\u0431\u044f, \u043d\u0435 \u0432\u043d\u043e\u0441\u044f \u043f\u0440\u0438 \u044d\u0442\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439 \u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0439 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rt\/2m\/yp\/rt2myplf-juxeyt6evpuymyvir4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rt\/2m\/yp\/rt2myplf-juxeyt6evpuymyvir4.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041d\u043e \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 grafonnet \u0432 \u0438\u0442\u043e\u0433\u0435 \u043d\u0430\u0447\u0430\u043b\u0430\u0441\u044c \u0438\u043c\u0435\u043d\u043d\u043e \u0441 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430. \u0412 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u0442\u0438\u043f\u0430 table \u0438 stat \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u043b\u043e \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432, \u043f\u043e\u044f\u0432\u0438\u0432\u0448\u0438\u0445\u0441\u044f \u0432 Grafana v6, \u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f <a href=\"https:\/\/grafana.com\/grafana\/plugins\/vonage-status-panel\/\">Status panel<\/a> \u043d\u0435 \u0431\u044b\u043b\u043e \u0432\u043e\u0432\u0441\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0445\u043e\u0442\u044c grafonnet \u0438 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u043b \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 InfluxDB, \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 &#171;\u0431\u043b\u043e\u0447\u043d\u044b\u0445&#187; \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u043e\u0432\u0430\u043b\u0430: \u043f\u0438\u0441\u0430\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u044b\u0440\u043e\u0439 InfluxQL. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043b\u044e\u0431\u043e\u0439 \u043d\u043e\u0432\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u0440\u0438\u0432\u043e\u0434\u0438\u043b\u043e \u043a \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u0440\u0443\u0447\u043d\u0443\u044e \u043f\u0435\u0440\u0435\u0441\u0447\u0438\u0442\u044b\u0432\u0430\u0442\u044c \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442\u044b \u0432\u0441\u0435\u0445 \u043d\u0438\u0436\u0435\u0441\u0442\u043e\u044f\u0449\u0438\u0445 \u043f\u0430\u043d\u0435\u043b\u0435\u0439. \u042d\u0442\u043e\u0442 \u043c\u043e\u043c\u0435\u043d\u0442 \u0442\u0430\u043a\u0436\u0435 \u0431\u044b\u043b \u0440\u0435\u0448\u0451\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043a\u0440\u0438\u043f\u0442\u0430 \u043d\u0430 jsonnet, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u043b\u0441\u044f \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438 \u0440\u0430\u0441\u0441\u0442\u0430\u0432\u043b\u044f\u043b \u0438\u0445, \u0438\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043c\u0435\u0440\u0430. \u041a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438 PR&#8217;\u0430\u043c\u0438 \u0431\u044b\u043b\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u043d\u044b \u0432 grafonnet \u0438 \u0441\u0435\u0439\u0447\u0430\u0441 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432\u0441\u0435\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0442\u043e\u0433\u043e, \u043a\u0430\u043a \u043c\u044b \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u043b\u0438 \u043d\u0430 grafonnet \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u044b, \u0432\u043e\u0437\u043d\u0438\u043a \u043d\u043e\u0432\u044b\u0439 \u0437\u0430\u043a\u0430\u0437 \u2014 \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 \u043d\u0430 \u0431\u0430\u0437\u0435 Tarantool \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0447\u0442\u043e \u043d\u0430\u043c \u0443\u0434\u0430\u043b\u043e\u0441\u044c \u0431\u044b\u0441\u0442\u0440\u043e \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u0442\u044c \u0443\u043d\u0438\u0432\u0435\u0440\u0441\u0430\u043b\u044c\u043d\u044b\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432 \u043a\u043e\u0434 \u0438\u0437 \u043f\u0435\u0440\u0432\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438, \u043e\u043d \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0434\u043e\u043f\u043e\u043b\u043d\u044f\u0435\u043c\u044b\u043c. \u041b\u044e\u0431\u043e\u0439 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0439 \u043c\u043e\u0433 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u0435\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0438\u0445 \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u0440\u0438 \u0441\u0431\u043e\u0440\u043a\u0435. \u0410\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u043d\u0430\u044f \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0441\u044b\u0440\u044b\u043c json \u0431\u044b\u043b\u0430 \u0431\u044b \u043a\u0443\u0434\u0430 \u0431\u043e\u043b\u0435\u0435 \u0442\u0440\u0443\u0434\u043d\u043e\u0439.<\/p>\n<p>  <\/p>\n<h2 id=\"13-vyhod-v-svet\">1.3. \u0412\u044b\u0445\u043e\u0434 \u0432 \u0441\u0432\u0435\u0442<\/h2>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0435\u043a\u0442 \u043f\u0440\u0438\u0448\u0451\u043b \u043a \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0433\u043e\u0442\u043e\u0432\u043d\u043e\u0441\u0442\u0438, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043d\u0430 \u0435\u0433\u043e \u043e\u0441\u043d\u043e\u0432\u0435 opensource-\u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0434\u043b\u044f \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f Tarantool Cartridge. \u041d\u0430\u0439\u0442\u0438 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043c\u043e\u0436\u043d\u043e \u0432 \u043a\u0430\u0442\u0430\u043b\u043e\u0433\u0435 Grafana Official and Community dashboards: <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/12567\">\u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f InfluxDB<\/a>, <a href=\"https:\/\/grafana.com\/grafana\/dashboards\/13054\">\u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043b\u044f Prometheus<\/a>. \u0418\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0432 <a href=\"https:\/\/github.com\/tarantool\/grafana-dashboard\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 GitHub<\/a>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/k7\/vh\/fx\/k7vhfx8drcad1pqyshkaerfvgjm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/k7\/vh\/fx\/k7vhfx8drcad1pqyshkaerfvgjm.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0418\u0437\u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u0431\u044b\u043b \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u043b\u044f InfluxDB (\u0442\u0430\u043a \u043a\u0430\u043a \u0438\u043c\u0435\u043b\u0438\u0441\u044c \u0438 \u043d\u0430\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u0438 \u043e\u043f\u044b\u0442 \u0440\u0430\u0431\u043e\u0442\u044b). \u041f\u0430\u043a\u0435\u0442 <a href=\"https:\/\/github.com\/tarantool\/metrics\">metrics<\/a> \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0432\u044b\u0432\u043e\u0434 \u043c\u0435\u0442\u0440\u0438\u043a \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Prometheus, \u0438 \u044d\u0442\u043e \u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0441\u043f\u0440\u043e\u0441\u043e\u043c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u043a\u043e\u0440\u0435 \u043f\u043e\u044f\u0432\u0438\u043b\u0430\u0441\u044c \u0432\u0435\u0440\u0441\u0438\u044f \u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e. \u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0432 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u043e\u0440\u0433\u0430\u043d\u0438\u0437\u0443\u0435\u0442\u0441\u044f \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u043e\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u0434. \u0410 \u0440\u0430\u0431\u043e\u0442\u0430 \u0441 \u0433\u043e\u0442\u043e\u0432\u044b\u043c\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u043c\u0438 \u0441\u0438\u043b\u044c\u043d\u043e \u0443\u043f\u0440\u043e\u0449\u0430\u0435\u0442 \u0436\u0438\u0437\u043d\u044c \u043f\u0440\u0438 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u043d\u043e\u0442\u0438\u043f\u043d\u044b\u0445 \u043f\u0430\u043d\u0435\u043b\u0435\u0439.<\/p>\n<p>  <\/p>\n<h1 id=\"2-chast-vtoraya-prakticheskaya\">2. \u0427\u0430\u0441\u0442\u044c \u0432\u0442\u043e\u0440\u0430\u044f, \u043f\u0440\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0430\u044f<\/h1>\n<p>  <\/p>\n<h2 id=\"21-vvedenie-v-jsonnet\">2.1. \u0412\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 jsonnet<\/h2>\n<p>  <\/p>\n<p>\u041d\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f jsonnet \u0432\u0435\u0440\u0441\u0438\u0438 v0.16.0. \u0412 \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0438\u043c\u043f\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e \u043d\u0430 Go: <a href=\"https:\/\/github.com\/google\/go-jsonnet\">\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043d\u0430 GitHub<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043e\u0431\u0441\u0443\u0434\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u043c\u043e\u043c\u0435\u043d\u0442\u044b \u0440\u0430\u0431\u043e\u0442\u044b \u0441 jsonnet. \u041d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 <a href=\"https:\/\/jsonnet.org\/learning\/tutorial.html\">\u0440\u0430\u0437\u0432\u0451\u0440\u043d\u0443\u0442\u044b\u0439 \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b<\/a> \u0438 <a href=\"https:\/\/jsonnet.org\/ref\/stdlib.html\">\u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/a>.<\/p>\n<p>  <\/p>\n<p>Jsonnet-\u0441\u043a\u0440\u0438\u043f\u0442 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0439 json: \u0441\u0442\u0440\u043e\u043a\u0443, \u0431\u0443\u043b\u0435\u0432\u0443 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e, \u0447\u0438\u0441\u043b\u043e, null, \u043c\u0430\u0441\u0441\u0438\u0432 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442 (\u0441\u043b\u043e\u0432\u0430\u0440\u044c). \u041d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u0441\u043a\u0440\u0438\u043f\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># script1.jsonnet {     field: 1 + 2 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0435\u0433\u043e, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u043e\u0439:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet script1.jsonnet<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0432\u0435\u0434\u0435\u043d \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"json\">{    \"field\": 3 }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u044b\u0432\u043e\u0434 \u0432 \u0444\u0430\u0439\u043b, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0444\u043b\u0430\u0433\u043e\u043c <code>-o<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet script1.jsonnet -o result.json<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u0443\u0434\u043e\u0431\u043d\u043e \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432 \u0431\u0443\u0444\u0435\u0440 \u043e\u0431\u043c\u0435\u043d\u0430. \u0412 \u044d\u0442\u043e\u043c \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0443\u0442\u0438\u043b\u0438\u0442\u0430 <code>xclip<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet script1.jsonnet | xclip -selection clipboard<\/code><\/pre>\n<p>  <\/p>\n<p>Jsonnet-\u0441\u043a\u0440\u0438\u043f\u0442\u044b \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u044e\u0442 \u043d\u0430 \u0434\u0432\u0430 \u0442\u0438\u043f\u0430: <code>.libsonnet<\/code> \u0438 <code>.jsonnet<\/code>. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0435\u0440\u0432\u044b\u0445 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043f\u0440\u043e\u043c\u0435\u0436\u0443\u0442\u043e\u0447\u043d\u044b\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0432\u0442\u043e\u0440\u044b\u0435 \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d\u044b \u0434\u043b\u044f \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0442\u0438\u043f\u043e\u0432 json, jsonnet \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u0438, \u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0442\u044c \u0441\u043a\u0440\u044b\u0442\u044b\u0435 \u043f\u043e\u043b\u044f (\u043d\u0430\u0437\u043d\u0430\u0447\u0430\u044e\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 <code>::<\/code>). \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0443 \u043c\u0430\u0442\u0435\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0445 \u0443\u0442\u0438\u043b\u0438\u0442.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># math.libsonnet {     sum(a, b): a + b }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0444\u0430\u0439\u043b\u043e\u0432 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>import<\/code>. \u0412\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u0441\u044f \u043d\u0430\u0448\u0435\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u043e\u0439 \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># script2.jsonnet local math = import 'math.libsonnet';  {     field: math.sum(1, 2) }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0431\u0443\u0434\u0435\u0442 \u0443\u0436\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u0439 \u043d\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442.<\/p>\n<p>  <\/p>\n<p>\u041a\u0440\u043e\u043c\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u043e\u0439 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0432 \u0441\u043a\u0440\u0438\u043f\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u043b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># script3.jsonnet local math = import 'math.libsonnet'; local value = math.sum(1, 2);  {     field: value }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041b\u043e\u043a\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u0442\u044c \u0438 \u0432\u043d\u0443\u0442\u0440\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># script4.jsonnet local math = import 'math.libsonnet';  {     local value = math.sum(1, 2),     field: value }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u043d\u0438 \u0438\u0433\u043d\u043e\u0440\u0438\u0440\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0438 \u043a\u043e\u043d\u0435\u0447\u043d\u043e\u0433\u043e \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet script4.jsonnet<\/code><\/pre>\n<p>  <\/p>\n<pre><code class=\"json\">{    \"field\": 3 }<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"22-ustanovka-grafonnet\">2.2. \u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 grafonnet<\/h2>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0435\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c <a href=\"https:\/\/github.com\/jsonnet-bundler\/jsonnet-bundler\">jsonnet-bundler<\/a>.<\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0438\u043d\u0438\u0446\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jb init<\/code><\/pre>\n<p>  <\/p>\n<p>\u0412 \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043f\u043e\u044f\u0432\u0438\u0442\u0441\u044f \u0444\u0430\u0439\u043b <code>jsonnetfile.json<\/code>. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0432 \u043d\u0435\u0433\u043e \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0439 grafonnet:<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">jsonnetfile.json<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"json\">{   \"version\": 1,   \"dependencies\": [     {       \"source\": {         \"git\": {           \"remote\": \"https:\/\/github.com\/grafana\/grafonnet-lib\",           \"subdir\": \"grafonnet\"         }       },       \"version\": \"master\"     }   ],   \"legacyImports\": true }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u043e\u043c\u0430\u043d\u0434\u044b<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jb install<\/code><\/pre>\n<p>  <\/p>\n<p>jsonnet-bundler \u0441\u043a\u0430\u0447\u0430\u0435\u0442 \u043d\u0443\u0436\u043d\u044b\u0435 \u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438, \u0430 \u0442\u0430\u043a\u0436\u0435 \u0437\u0430\u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u043a\u043e\u043c\u043c\u0438\u0442\u044b \u0432 lock-\u0444\u0430\u0439\u043b\u0435. \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u0435\u0441\u043b\u0438 \u0432\u044b \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043e\u0442 \u0432\u0435\u0442\u043a\u0438.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">jsonnetfile.lock.json<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"json\">{   \"version\": 1,   \"dependencies\": [     {       \"source\": {         \"git\": {           \"remote\": \"https:\/\/github.com\/grafana\/grafonnet-lib.git\",           \"subdir\": \"grafonnet\"         }       },       \"version\": \"3082bfca110166cd69533fa3c0875fdb1b68c329\",       \"sum\": \"4\/sUV0Kk+o8I+wlYxL9R6EPhL\/NiLfYHk+NXlU64RUk=\"     }   ],   \"legacyImports\": false }<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0434\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0445 \u0432\u044b\u0437\u043e\u0432\u0430\u0445 <code>jb install<\/code> \u0431\u0443\u0434\u0435\u0442 \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u0438\u043c\u0435\u043d\u043d\u043e \u043a lock-\u0444\u0430\u0439\u043b\u0443. \u0412\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u043d\u0438\u0435 \u0440\u0430\u0441\u0445\u043e\u0436\u0434\u0435\u043d\u0438\u0439 \u0440\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u0443\u044e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0442\u0443 \u0436\u0435 \u0432\u0435\u0440\u0441\u0438\u044e, \u0447\u0442\u043e \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u0432 \u0444\u0430\u0439\u043b\u0435 \u0432\u044b\u0448\u0435.<\/p>\n<p>  <\/p>\n<h2 id=\"23-sozdanie-dashborda\">2.3. \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430<\/h2>\n<p>  <\/p>\n<p>\u0415\u0441\u043b\u0438 \u043e\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438, \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0443\u0441\u0442\u0440\u043e\u0435\u043d \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/rl\/pz\/fi\/rlpzfiv_ya7nu4wrcfy7wwwttt0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/rl\/pz\/fi\/rlpzfiv_ya7nu4wrcfy7wwwttt0.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u044f \u0431\u0443\u0434\u0443 \u0432\u0435\u0441\u0442\u0438 \u0440\u0430\u0431\u043e\u0442\u0443 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 Grafana v6. \u0414\u0430\u0448\u0431\u043e\u0440\u0434 \u043f\u043e\u0434\u043e\u0439\u0434\u0451\u0442 \u0438 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u0437\u0434\u043d\u0438\u0445 \u0432\u0435\u0440\u0441\u0438\u0439 Grafana, \u043d\u043e \u043c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u0445 \u043d\u043e\u0432\u043e\u0432\u0432\u0435\u0434\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<h3 id=\"231-pustoy-dashbord\">2.3.1. \u041f\u0443\u0441\u0442\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u0443\u0441\u0442\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"plaintext\"># dashboard.jsonnet local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard' )<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u043a\u043e\u043c\u043f\u0438\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet -J .\/vendor dashboard.jsonnet -o dashboard.json<\/code><\/pre>\n<p>  <\/p>\n<p>\u0424\u043b\u0430\u0433 <code>-J<\/code> \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u044d\u0442\u043e \u043f\u0430\u043f\u043a\u0430 <code>.\/vendor<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u0443\u044e jsonnet-bundler \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438.<\/p>\n<p>  <\/p>\n<h3 id=\"232-testovyy-docker-klaster\">2.3.2. \u0422\u0435\u0441\u0442\u043e\u0432\u044b\u0439 docker-\u043a\u043b\u0430\u0441\u0442\u0435\u0440<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043e\u0442\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0443\u043f\u0440\u0430\u0436\u043d\u0435\u043d\u0438\u0439 \u044f \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043b docker-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0441 \u043f\u0440\u043e\u0441\u0442\u044b\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435\u043c \u043d\u0430 Tarantool, Prometheus \u0438 Grafana. \u041e\u043d \u0434\u043e\u0441\u0442\u0443\u043f\u0435\u043d \u0432 <a href=\"https:\/\/github.com\/DifferentialOrange\/basic-metrics-app\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 \u043d\u0430 GitHub<\/a>. \u0421\u043a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0435\u0433\u043e \u0438 \u0437\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0443\u044e \u043a\u043e\u043c\u0430\u043d\u0434\u0443 (\u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u0441\u044f <a href=\"https:\/\/docs.docker.com\/compose\/install\/\">docker-compose<\/a>).<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">docker-compose up<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u0443\u0441\u043a\u0430 Grafana \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443 <a href=\"http:\/\/localhost:3000\">localhost:3000<\/a>.<\/p>\n<p>  <\/p>\n<h3 id=\"233-import-dashborda\">2.3.3. \u0418\u043c\u043f\u043e\u0440\u0442 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430<\/h3>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e \u0447\u0442\u043e\u0431\u044b \u0437\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u044c \u0432\u0430\u0448 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438\u0437 json, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0439\u0442\u0435\u0441\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u0435\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0432 \u043b\u0435\u0432\u043e\u043c \u043c\u0435\u043d\u044e Grafana.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/vt\/u6\/l9\/vtu6l9krsvcmoc5vkpqv_qqhe40.png\" data-src=\"https:\/\/habrastorage.org\/webt\/vt\/u6\/l9\/vtu6l9krsvcmoc5vkpqv_qqhe40.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u0430\u0439\u043b \u0438\u043b\u0438 \u0432\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0438\u0437 \u0431\u0443\u0444\u0435\u0440\u0430 \u043e\u0431\u043c\u0435\u043d\u0430. \u041d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0438\u043c\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043f\u0430\u043f\u043a\u0443 \u0434\u043b\u044f \u0435\u0433\u043e \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/8q\/j3\/rf\/8qj3rfaf7q2eh3vmiodmtnoqpdu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/8q\/j3\/rf\/8qj3rfaf7q2eh3vmiodmtnoqpdu.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u043c \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u0431\u0443\u0434\u0435\u0442 \u043f\u0443\u0441\u0442\u043e\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/zm\/97\/n_\/zm97n_divddtabev6ge94s-yis0.png\" data-src=\"https:\/\/habrastorage.org\/webt\/zm\/97\/n_\/zm97n_divddtabev6ge94s-yis0.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"234-dobavlenie-paneley\">2.3.4. \u0414\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0430\u043d\u0435\u043b\u0435\u0439<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u043f\u0430\u043d\u0435\u043b\u044c \u0442\u0438\u043f\u0430 graph (\u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u0433\u0440\u0430\u0444\u0438\u043a).<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     # \u0440\u0430\u0437\u0440\u0435\u0448\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e \u0434\u0435\u043b\u0430\u0442\u044c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0432 Grafana     editable=true,     # \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043f\u0440\u043e\u0431\u043b\u0435\u043c \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0432 Grafana \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0432\u0435\u0440\u0441\u0438\u0439     schemaVersion=21, ).addPanel(     grafana.graphPanel.new(         title='My first graph',         # \u043d\u0430\u0431\u043e\u0440 \u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u044b\u0445 \u0434\u0430\u043d\u043d\u044b\u0445         datasource='-- Grafana --'     ),     # \u0437\u0430\u0434\u0430\u0451\u0442 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u0440\u0430\u0437\u043c\u0435\u0440\u044b \u043f\u0430\u043d\u0435\u043b\u0438     gridPos = { h: 8, w: 8, x: 0, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0421\u043e\u0431\u0435\u0440\u0451\u043c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0443\u0436\u0435 \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u043e\u0439 \u043a\u043e\u043c\u0430\u043d\u0434\u044b.<\/p>\n<p>  <\/p>\n<pre><code class=\"bash\">jsonnet -J .\/vendor dashboard.jsonnet -o dashboard.json<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0438\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0435 \u0438\u043c\u044f.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/tv\/am\/1a\/tvam1achonokr88aewfkfvnjynu.png\" data-src=\"https:\/\/habrastorage.org\/webt\/tv\/am\/1a\/tvam1achonokr88aewfkfvnjynu.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043d\u0430 <code>gridPos<\/code>. \u0420\u0430\u0437\u043c\u0435\u0440\u044b \u0438 \u043f\u043e\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043a\u0430\u0436\u0434\u043e\u0439 \u043f\u0430\u043d\u0435\u043b\u0438 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0442 \u043d\u0430 \u043f\u0440\u044f\u043c\u043e\u0443\u0433\u043e\u043b\u044c\u043d\u043e\u0439 \u0441\u0435\u0442\u043a\u0435. \u0428\u0438\u0440\u0438\u043d\u0430 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u2014 24 \u0435\u0434\u0438\u043d\u0438\u0446\u044b. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043f\u0430\u043d\u0435\u043b\u044c \u0442\u0438\u043f\u0430 <em>row<\/em> \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b 24 x 1, \u0430 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0430\u043d\u0435\u043b\u0438, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 <code>Add panel<\/code>, \u0438\u043c\u0435\u0435\u0442 \u0440\u0430\u0437\u043c\u0435\u0440\u044b 12 x 9.<\/p>\n<p>  <\/p>\n<h3 id=\"235-nastroyka-vizualizacii\">2.3.5. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438<\/h3>\n<p>  <\/p>\n<p>\u041f\u0430\u043d\u0435\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0432\u044b\u0437\u043e\u0432\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439. \u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0432\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0432 \u043f\u0430\u043d\u0435\u043b\u044f\u0445 \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u044d\u0442\u0438\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21, ).addPanel(     grafana.graphPanel.new(         title='Pending requests',         datasource='-- Grafana --',         # \u043c\u0438\u043d\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u043c\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435         min=0,         # \u043f\u043e\u0434\u043f\u0438\u0441\u044c \u043b\u0435\u0432\u043e\u0439 \u043e\u0441\u0438 \u043e\u0440\u0434\u0438\u043d\u0430\u0442         labelY1='pending',         # \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u0441\u0442\u044c \u0446\u0432\u0435\u0442\u0430, \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u043b\u0430\u0441\u0442\u044c \u043f\u043e\u0434 \u0433\u0440\u0430\u0444\u0438\u043a\u043e\u043c         fill=0,         # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445         decimals=2,         # \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0437\u043d\u0430\u043a\u043e\u0432 \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043f\u044f\u0442\u043e\u0439 \u0432 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f\u0445 \u043d\u0430 \u043b\u0435\u0432\u043e\u0439 \u043e\u0441\u0438 \u043e\u0440\u0434\u0438\u043d\u0430\u0442         decimalsY1=0,         # \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0432 \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044f         sort='decreasing',         # \u043b\u0435\u0433\u0435\u043d\u0434\u0430 \u0432 \u0444\u043e\u0440\u043c\u0435 \u0442\u0430\u0431\u043b\u0438\u0446\u044b         legend_alignAsTable=true,         # \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0435         legend_values=true,         # \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u0441\u0440\u0435\u0434\u043d\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435         legend_avg=true,         # \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435         legend_current=true,         # \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043d\u0430 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u043c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435         legend_max=true,         # \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u043f\u043e \u0442\u0435\u043a\u0443\u0449\u0435\u043c\u0443 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044e         legend_sort='current',         # \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0432 \u043b\u0435\u0433\u0435\u043d\u0434\u0435 \u043f\u043e \u0443\u0431\u044b\u0432\u0430\u043d\u0438\u044e         legend_sortDesc=true,     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/qj\/cv\/y7\/qjcvy7mvsacoerpqxo_wazun6xe.png\" data-src=\"https:\/\/habrastorage.org\/webt\/qj\/cv\/y7\/qjcvy7mvsacoerpqxo_wazun6xe.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u043e\u043f\u0438\u0441\u0430\u043d\u044b \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u0438\u043a\u0430\u0445 grafonnet. \u0412 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043e\u043f\u0446\u0438\u0438 graph \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 <em>vendor\/grafonnet\/graph_panel.libsonnet<\/em>.<\/p>\n<p>  <\/p>\n<h3 id=\"236-sostavlenie-zaprosa-v-prometheus\">2.3.6. \u0421\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u0432 Prometheus<\/h3>\n<p>  <\/p>\n<p>\u0412\u0438\u0437\u0443\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0443 <code>server_pending_requests<\/code> \u0438\u0437 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21,     # \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0437\u0430 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u043f\u043e\u043b\u0447\u0430\u0441\u0430     time_from='now-30m' ).addPanel(     grafana.graphPanel.new(         title='Pending requests',         # \u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u0432 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c `Prometheus`         datasource='Prometheus',         min=0,         labelY1='pending',         fill=0,         decimals=2,         decimalsY1=0,         sort='decreasing',         legend_alignAsTable=true,         legend_values=true,         legend_avg=true,         legend_current=true,         legend_max=true,         legend_sort='current',         legend_sortDesc=true,     ).addTarget(         grafana.prometheus.target(             # \u0437\u0430\u043f\u0440\u043e\u0441 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 'server_pending_requests' \u0438\u0437 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 datasource             expr='server_pending_requests',             # \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043b\u0435\u0439\u0431\u043b\u043e\u043c 'alias'             # (\u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0442 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u0430\u043c \u0432 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f)             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/sc\/px\/q4\/scpxq4mkliroatzbkqfjglcb878.png\" data-src=\"https:\/\/habrastorage.org\/webt\/sc\/px\/q4\/scpxq4mkliroatzbkqfjglcb878.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041c\u0435\u0442\u043e\u0434 <code>_addTarget()_<\/code> \u043c\u043e\u0436\u043d\u043e \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437.<\/p>\n<p>  <\/p>\n<h3 id=\"237-peremennye-importa\">2.3.7. \u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430<\/h3>\n<p>  <\/p>\n<p>Json-\u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u043c\u043e\u0436\u0435\u0442 \u0432\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0432 \u0441\u0435\u0431\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c \u0443\u0434\u043e\u0431\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c <code>datasource<\/code> \u2014 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u043c\u0435\u0442\u0440\u0438\u043a \u0434\u043b\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21,     time_from='now-30m' ).addInput( # \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0438\u043c\u043f\u043e\u0440\u0442\u0430     # \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430     name='DS_PROMETHEUS',     # \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430     label='Prometheus',     # \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0437\u0430\u0434\u0430\u043d\u0438\u044f \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430 \u0434\u0430\u043d\u043d\u044b\u0445     type='datasource',     # \u043f\u043b\u0430\u0433\u0438\u043d \u0434\u043b\u044f Prometheus     pluginId='prometheus',     pluginName='Prometheus',     # \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0438\u043c\u043f\u043e\u0440\u0442\u0430     description='Prometheus metrics bank' ).addPanel(     grafana.graphPanel.new(         title='Pending requests',         # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0430         datasource='${DS_PROMETHEUS}',         min=0,         labelY1='pending',         fill=0,         decimals=2,         decimalsY1=0,         sort='decreasing',         legend_alignAsTable=true,         legend_values=true,         legend_avg=true,         legend_current=true,         legend_max=true,         legend_sort='current',         legend_sortDesc=true,     ).addTarget(         grafana.prometheus.target(             expr='server_pending_requests',             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/ua\/sn\/10\/uasn10iesa-o0hpief5h5icwj18.png\" data-src=\"https:\/\/habrastorage.org\/webt\/ua\/sn\/10\/uasn10iesa-o0hpief5h5icwj18.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b\u0431\u0440\u0430\u0442\u044c \u043d\u0443\u0436\u043d\u044b\u0439 \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a \u0434\u0430\u043d\u043d\u044b\u0445 \u043c\u043e\u0436\u043d\u043e \u0438\u0437 \u0432\u044b\u043f\u0430\u0434\u0430\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0438\u0441\u043a\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d Grafana.<\/p>\n<p>  <\/p>\n<h3 id=\"238-dinamicheskie-peremennye\">2.3.8. \u0414\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435<\/h3>\n<p>  <\/p>\n<p>\u0412 Grafana \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0442\u0438\u043f\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445: <code>__inputs<\/code> \u0438 <code>templating<\/code>. \u041f\u0435\u0440\u0432\u044b\u0435 \u0437\u0430\u0434\u0430\u044e\u0442\u0441\u044f \u043e\u0434\u0438\u043d \u0440\u0430\u0437 \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0438 &#171;\u0432\u043c\u043e\u0440\u0430\u0436\u0438\u0432\u0430\u044e\u0442\u0441\u044f&#187; \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434. \u0412\u0442\u043e\u0440\u044b\u0435 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0440\u0430\u0431\u043e\u0442\u044b.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0431\u043e\u0442\u0430 \u0441 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>__inputs<\/code> \u2014 \u044d\u0442\u043e \u0442\u0435\u043a\u0441\u0442\u043e\u0432\u0430\u044f \u0437\u0430\u043c\u0435\u043d\u0430 \u0441\u0442\u0440\u043e\u043a <code>${VAR_NAME}<\/code> \u043d\u0430 \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435. \u0422\u0430\u043a\u0443\u044e \u0437\u0430\u043c\u0435\u043d\u0443 \u043d\u0435\u043b\u044c\u0437\u044f \u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043d\u0443\u0442\u0440\u0438 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0443 \u0434\u0430\u043d\u043d\u044b\u0445. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 <code>templating<\/code>.<\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u044f\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u043e\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0438\u0445 \u0440\u0430\u0437\u043d\u044b\u043c\u0438 job-\u0430\u043c\u0438 Prometheus. \u0418\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0444\u0438\u043a\u0441\u0438\u0440\u043e\u0432\u0430\u0442\u044c <code>job<\/code> \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0430\u0445 \u0438 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21,     time_from='now-30m' ).addInput(     name='DS_PROMETHEUS',     label='Prometheus',     type='datasource',     pluginId='prometheus',     pluginName='Prometheus',     description='Prometheus metrics bank' ).addInput( # \u0441\u0442\u0440\u043e\u043a\u043e\u0432\u0430\u044f \u043a\u043e\u043d\u0441\u0442\u0430\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043d\u0430 \u0438\u043c\u043f\u043e\u0440\u0442\u0435     name='PROMETHEUS_JOB',     label='Job',     type='constant',     pluginId=null,     pluginName=null,     description='Prometheus Tarantool metrics job' ).addTemplate(     grafana.template.custom( # \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f         # \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043a\u043e\u0434\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430         name='job',         # \u0437\u0430\u0434\u0430\u0451\u0442 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0430         query='${PROMETHEUS_JOB}',         current='${PROMETHEUS_JOB}',         # \u043d\u0435 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u043d\u0430 \u044d\u043a\u0440\u0430\u043d\u0435 \u0441 \u043f\u0430\u043d\u0435\u043b\u044f\u043c\u0438         hide='variable',         # \u0438\u043c\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0432 UI         label='Prometheus job',     ) ).addPanel(     grafana.graphPanel.new(         title='Pending requests',         datasource='${DS_PROMETHEUS}',         min=0,         labelY1='pending',         fill=0,         decimals=2,         decimalsY1=0,         sort='decreasing',         legend_alignAsTable=true,         legend_values=true,         legend_avg=true,         legend_current=true,         legend_max=true,         legend_sort='current',         legend_sortDesc=true,     ).addTarget(         grafana.prometheus.target(             # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435             expr='server_pending_requests{job=~\"$job\"}',             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0417\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>job<\/code> \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e docker-\u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 \u2014 <em>tarantool_app<\/em>.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/-t\/um\/rd\/-tumrdhi0tve1-yazyesgr2ks2k.png\" data-src=\"https:\/\/habrastorage.org\/webt\/-t\/um\/rd\/-tumrdhi0tve1-yazyesgr2ks2k.png\"\/><\/p>\n<p>  <\/p>\n<p>\u041c\u044b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u043b\u0438 \u0434\u0432\u0443\u0445\u0443\u0440\u043e\u0432\u043d\u0435\u0432\u0443\u044e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0438\u0437\u0430\u0446\u0438\u044e, <code>job<\/code> \u0432 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0435 \u0440\u0435\u0433\u0443\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 <code>templating<\/code>, \u0430 \u0435\u0451 \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043c\u044b \u0437\u0430\u0434\u0430\u0451\u043c \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 \u0447\u0435\u0440\u0435\u0437 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e <code>__inputs<\/code>. \u0415\u0441\u043b\u0438 \u043f\u0440\u0438 \u0438\u043c\u043f\u043e\u0440\u0442\u0435 <code>job<\/code> \u0431\u044b\u043b\u0430 \u0443\u043a\u0430\u0437\u0430\u043d\u0430 \u043d\u0435\u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e, \u0435\u0451 \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0447\u0435\u0440\u0435\u0437 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/_o\/qi\/0_\/_oqi0_o_ximofwwatu0y7g81oho.png\" data-src=\"https:\/\/habrastorage.org\/webt\/_o\/qi\/0_\/_oqi0_o_ximofwwatu0y7g81oho.png\"\/><\/p>\n<p>  <\/p>\n<h3 id=\"239-ispolzovanie-funkciy\">2.3.9. \u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u0439<\/h3>\n<p>  <\/p>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u0435\u0449\u0451 \u043e\u0434\u043d\u0443 \u043f\u0430\u043d\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 rps.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21,     time_from='now-30m' ).addInput(     name='DS_PROMETHEUS',     label='Prometheus',     type='datasource',     pluginId='prometheus',     pluginName='Prometheus',     description='Prometheus metrics bank' ).addInput(     name='PROMETHEUS_JOB',     label='Job',     type='constant',     pluginId=null,     pluginName=null,     description='Prometheus Tarantool metrics job' ).addInput( # \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 rate_time_range     name='PROMETHEUS_RATE_TIME_RANGE',     label='Rate time range',     type='constant',     value='2m',     description='Time range for computing rps graphs with rate(). At the very minimum it should be two times the scrape interval.' ).addTemplate(     grafana.template.custom(         name='job',         query='${PROMETHEUS_JOB}',         current='${PROMETHEUS_JOB}',         hide='variable',         label='Prometheus job',     ) ).addTemplate( # \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0430\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u0437\u0430\u043f\u0440\u043e\u0441\u0435     grafana.template.custom(         name='rate_time_range',         query='${PROMETHEUS_RATE_TIME_RANGE}',         current='${PROMETHEUS_RATE_TIME_RANGE}',         hide='variable',         label='rate() time range',     ) ).addPanel(     grafana.graphPanel.new(         title='Pending requests',         datasource='${DS_PROMETHEUS}',         min=0,         labelY1='pending',         fill=0,         decimals=2,         decimalsY1=0,         sort='decreasing',         legend_alignAsTable=true,         legend_values=true,         legend_avg=true,         legend_current=true,         legend_max=true,         legend_sort='current',         legend_sortDesc=true,     ).addTarget(         grafana.prometheus.target(             expr='server_pending_requests{job=~\"$job\"}',             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } ).addPanel( # \u0433\u0440\u0430\u0444\u0438\u043a \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440     grafana.graphPanel.new(         title='Server load',         datasource='${DS_PROMETHEUS}',          min=0,         labelY1='rps',         fill=0,         decimals=2,         decimalsY1=0,         sort='decreasing',         legend_alignAsTable=true,         legend_avg=true,         legend_current=true,         legend_max=true,         legend_values=true,         legend_sort='current',         legend_sortDesc=true,         legend_rightSide=true,     ).addTarget(         grafana.prometheus.target(             # \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0434\u0430\u043d\u043d\u044b\u0435 \u0437\u0430 \u043f\u0435\u0440\u0438\u043e\u0434 rate_time_range \u0434\u043b\u044f \u0432\u044b\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0439             expr='rate(server_requests_process_count{job=~\"$job\"}[$rate_time_range])',             legendFormat='{{alias}}',         )     ),     # \u0440\u0430\u0437\u043c\u0435\u0441\u0442\u0438\u0442\u044c \u043f\u0430\u043d\u0435\u043b\u044c \u0441\u043f\u0440\u0430\u0432\u0430 \u043e\u0442 \u043f\u0435\u0440\u0432\u043e\u0439 \u043d\u0430 \u0442\u043e\u043c \u0436\u0435 \u0443\u0440\u043e\u0432\u043d\u0435     gridPos = { h: 8, w: 16, x: 9, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u041f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0439 \u0438\u043c\u043f\u043e\u0440\u0442\u0430 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u043d\u0430\u0447\u0430\u043b\u044c\u043d\u043e\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u0432 \u043a\u043e\u0434\u0435.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/w4\/kx\/vw\/w4kxvwefmbptypht0lhjrmbp0gm.png\" data-src=\"https:\/\/habrastorage.org\/webt\/w4\/kx\/vw\/w4kxvwefmbptypht0lhjrmbp0gm.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u0434\u0430\u0448\u0431\u043e\u0440\u0434 \u0441 \u0434\u0432\u0443\u043c\u044f \u043f\u0430\u043d\u0435\u043b\u044f\u043c\u0438.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/webt\/lz\/kg\/qh\/lzkgqhjcqwj4d6g1rmvle0nlmi4.png\" data-src=\"https:\/\/habrastorage.org\/webt\/lz\/kg\/qh\/lzkgqhjcqwj4d6g1rmvle0nlmi4.png\"\/><\/p>\n<p>  <\/p>\n<p>\u0412\u044b\u043d\u0435\u0441\u0435\u043c \u043e\u0431\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u0433\u0440\u0430\u0444\u0438\u043a\u0430 \u0432 \u0444\u0443\u043d\u043a\u0446\u0438\u044e, \u0447\u0442\u043e\u0431\u044b \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u0434\u0443\u0431\u043b\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<p>  <\/p>\n<div class=\"spoiler\" role=\"button\" tabindex=\"0\">                         <b class=\"spoiler_title\">dashboard.jsonnet<\/b>                         <\/p>\n<div class=\"spoiler_text\">\n<pre><code class=\"plaintext\">local grafana = import 'grafonnet\/grafana.libsonnet';  local myGraphPanel(   title=null,   labelY1=null,   legend_rightSide=false # \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 \u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e ) = grafana.graphPanel.new(     title=title,     datasource='${DS_PROMETHEUS}',     min=0,     labelY1=labelY1,     fill=0,     decimals=2,     decimalsY1=0,     sort='decreasing',     legend_alignAsTable=true,     legend_values=true,     legend_avg=true,     legend_current=true,     legend_max=true,     legend_sort='current',     legend_sortDesc=true,     legend_rightSide=legend_rightSide );  grafana.dashboard.new(     title='My dashboard',     editable=true,     schemaVersion=21,     time_from='now-30m' ).addInput(     name='DS_PROMETHEUS',     label='Prometheus',     type='datasource',     pluginId='prometheus',     pluginName='Prometheus',     description='Prometheus metrics bank' ).addInput(     name='PROMETHEUS_JOB',     label='Job',     type='constant',     pluginId=null,     pluginName=null,     description='Prometheus Tarantool metrics job' ).addInput(     name='PROMETHEUS_RATE_TIME_RANGE',     label='Rate time range',     type='constant',     value='2m',     description='Time range for computing rps graphs with rate(). At the very minimum it should be two times the scrape interval.' ).addTemplate(     grafana.template.custom(         name='job',         query='${PROMETHEUS_JOB}',         current='${PROMETHEUS_JOB}',         hide='variable',         label='Prometheus job',     ) ).addTemplate(     grafana.template.custom(         name='rate_time_range',         query='${PROMETHEUS_RATE_TIME_RANGE}',         current='${PROMETHEUS_RATE_TIME_RANGE}',         hide='variable',         label='rate() time range',     ) ).addPanel(     myGraphPanel(         title='Pending requests',         labelY1='pending'     ).addTarget(         grafana.prometheus.target(             expr='server_pending_requests{job=~\"$job\"}',             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 8, x: 0, y: 0 } ).addPanel(     myGraphPanel(         title='Server load',         labelY1='rps',         legend_rightSide=true,     ).addTarget(         grafana.prometheus.target(             expr='rate(server_requests_process_count{job=~\"$job\"}[$rate_time_range])',             legendFormat='{{alias}}',         )     ),     gridPos = { h: 8, w: 16, x: 9, y: 0 } )<\/code><\/pre>\n<\/div><\/div>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u0443\u0434\u043e\u0431\u043d\u043e \u0432\u044b\u043d\u0435\u0441\u0442\u0438 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0439 \u0444\u0430\u0439\u043b. \u041f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u044e \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u0442\u0440\u0435\u043d\u0438\u0440\u043e\u0432\u043a\u0438. \u041f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0432\u043d\u0435\u0448\u043d\u0438\u0445 \u0444\u0430\u0439\u043b\u043e\u0432 \u043e\u0431\u0441\u0443\u0436\u0434\u0430\u043b\u043e\u0441\u044c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u043f\u0440\u043e jsonnet.<\/p>\n<p>  <\/p>\n<h1 id=\"3-epilog\">3. \u042d\u043f\u0438\u043b\u043e\u0433<\/h1>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0434\u043b\u044f Grafana \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430 \u2014 \u043d\u0435 \u043b\u0435\u043a\u0430\u0440\u0441\u0442\u0432\u043e \u043e\u0442 \u0432\u0441\u0435\u0445 \u0431\u043e\u043b\u0435\u0437\u043d\u0435\u0439. \u041d\u043e \u0435\u0441\u0442\u044c \u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0432 \u0440\u0435\u0448\u0435\u043d\u0438\u0438 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0442\u0430\u043a\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434 \u043f\u043e\u043a\u0430\u0437\u0430\u043b \u0441\u0432\u043e\u044e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u044c. \u0412\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u043e\u0432 \u043c\u0435\u0436\u0434\u0443 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u043c\u0438, \u0448\u0438\u0440\u043e\u043a\u0438\u0439 \u043f\u043e\u0442\u0435\u043d\u0446\u0438\u0430\u043b \u0434\u043b\u044f \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u043e\u0439 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u0438 \u0443\u0434\u043e\u0431\u043d\u043e\u0435 \u0432\u0435\u0440\u0441\u0438\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0441\u0434\u0435\u043b\u0430\u043b\u043e \u0434\u043b\u044f \u043c\u0435\u043d\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e grafonnet \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u044f \u0445\u043e\u0447\u0443 \u043f\u043e\u0434\u0435\u043b\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0438 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043e\u043a\u043e\u043d\u0447\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0432\u0435\u0440\u0441\u0438\u0438 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u044f \u0432 \u043d\u0435\u0433\u043e \u043d\u0435 \u043f\u043e\u043f\u0430\u043b\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0443\u043d\u043a\u0442\u043e\u0432. \u041c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u0434\u043e\u043b\u0436\u043d\u043e \u0445\u0432\u0430\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u0442\u043e\u0440\u0443\u044e \u0447\u0430\u0441\u0442\u044c, \u043d\u043e \u0435\u0451 \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0435 \u0437\u0430\u0432\u0438\u0441\u0438\u0442 \u043e\u0442 \u0432\u0430\u0448\u0435\u0439 \u043e\u0431\u0440\u0430\u0442\u043d\u043e\u0439 \u0441\u0432\u044f\u0437\u0438.<\/p>\n<p>  <\/p>\n<p>\u041d\u0430\u043a\u043e\u043d\u0435\u0446, \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0445 \u0441\u0441\u044b\u043b\u043e\u043a.<\/p>\n<p>  <\/p>\n<p>\u0412 <a href=\"https:\/\/github.com\/grafana\/grafonnet-lib\">\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438 grafonnet<\/a> \u0432\u044b \u043d\u0430\u0439\u0434\u0451\u0442\u0435 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e, \u0430 \u0442\u0430\u043a\u0436\u0435 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432. \u041a\u0441\u0442\u0430\u0442\u0438, \u0447\u0430\u0441\u0442\u044c \u043c\u043e\u0438\u0445 PR-\u043e\u0432 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043e\u0436\u0438\u0434\u0430\u0435\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u0438\u044f, \u0442\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u043e\u043d\u0438 \u043f\u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0430\u043c \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u044b\u043c\u0438 \u2014 \u043f\u0440\u043e\u0448\u0443 \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0430\u0442\u044c!<\/p>\n<p>  <\/p>\n<p><a href=\"https:\/\/github.com\/tarantool\/grafana-dashboard\">\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 Tarantool<\/a> \u043d\u0430\u043f\u0438\u0441\u0430\u043d \u043d\u0430 grafonnet. \u0421\u043d\u0438\u043f\u043f\u0435\u0442\u044b \u043a\u043e\u0434\u0430 \u0432 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0438 \u0438 docker-\u043a\u043b\u0430\u0441\u0442\u0435\u0440 \u0432\u043e\u0437\u043d\u0438\u043a\u043b\u0438 \u043a\u0430\u043a \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0440\u0430\u0431\u043e\u0442\u044b, \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u044f \u0438 \u043c\u043e\u0438 \u043a\u043e\u043b\u043b\u0435\u0433\u0438 \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u043b\u0438 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u043e\u0435\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u0443 \u0432\u0430\u0441 \u0432\u043e\u0437\u043d\u0438\u043a\u043d\u0443\u0442 \u0432\u043e\u043f\u0440\u043e\u0441\u044b, \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u0441 \u044d\u0442\u0438\u043c \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u043c \u0438\u043b\u0438 \u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c, \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u0434\u0430\u0442\u044c \u0432 <a href=\"https:\/\/github.com\/tarantool\/grafana-dashboard\/issues\">Issues<\/a> \u0438\u043b\u0438 \u0432 <a href=\"https:\/\/t.me\/tarantoolru?utm_source=habr&amp;utm_medium=articles&amp;utm_campaign=2021\">Telegram-\u0447\u0430\u0442\u0435<\/a>. \u0423\u0437\u043d\u0430\u0442\u044c \u043e\u0431 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0430\u0441\u043f\u0435\u043a\u0442\u0430\u0445 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 Tarantool \u043c\u043e\u0436\u043d\u043e \u0432 <a href=\"https:\/\/habr.com\/ru\/company\/mailru\/blog\/534826\/\">\u0441\u0442\u0430\u0442\u044c\u0435 \u043d\u0430 \u0425\u0430\u0431\u0440\u0435<\/a>. \u0421\u043a\u0430\u0447\u0430\u0442\u044c Tarantool \u043c\u043e\u0436\u043d\u043e <a href=\"https:\/\/www.tarantool.io\/ru\/download?utm_source=habr&amp;utm_medium=articles&amp;utm_campaign=2021\">\u043d\u0430 \u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u043c \u0441\u0430\u0439\u0442\u0435<\/a>.<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/577230\/\"> https:\/\/habr.com\/ru\/articles\/577230\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=981564558927545&amp;ev=Habr\" style=\"display:none;\" width=\"1\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/top-fwz1.mail.ru\/counter?id=3200881;js=na\" style=\"display:none;\" width=\"1\"><img loading=\"lazy\" decoding=\"async\" height=\"1\" src=\"https:\/\/www.facebook.com\/tr?id=1220899431627792&amp;ev=PageView&amp;noscript=1\" style=\"display:none;\" width=\"1\"><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-1\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041a\u043e\u0433\u0434\u0430 \u043c\u044b \u0432 Tarantool \u0441\u0442\u043e\u043b\u043a\u043d\u0443\u043b\u0438\u0441\u044c \u0441 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0434\u043b\u044f \u0441\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0430 \u0437\u0430\u043a\u0430\u0437\u0447\u0438\u043a\u0443, \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e grafonnet. \u042d\u0442\u043e \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430 \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u043e\u0432 Grafana \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u0434\u0430 \u043d\u0430 \u044f\u0437\u044b\u043a\u0435 jsonnet, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0437\u0430\u043c\u0435\u0442\u043d\u043e \u043e\u0431\u043b\u0435\u0433\u0447\u0438\u043b\u0430 \u043d\u0430\u043c \u0436\u0438\u0437\u043d\u044c.<\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0441\u0441\u043a\u0430\u0437 \u043f\u043e\u0434\u0435\u043b\u0451\u043d \u043d\u0430 \u0434\u0432\u0435 \u0447\u0430\u0441\u0442\u0438. \u0412 \u043f\u0435\u0440\u0432\u043e\u0439 \u044f \u0434\u0435\u043b\u044e\u0441\u044c \u043d\u0430\u0448\u0435\u0439 \u0438\u0441\u0442\u043e\u0440\u0438\u0435\u0439 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u0430 \u0441 grafonnet, \u043f\u0440\u0438\u0447\u0438\u043d\u0430\u043c\u0438, \u043f\u043e \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u043c\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u044d\u0442\u043e\u0442 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u0438 \u0437\u0430\u0434\u0430\u0447\u0430\u043c\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043c\u044b \u0440\u0435\u0448\u0438\u043b\u0438 \u0441 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e. \u0412\u0442\u043e\u0440\u0430\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0441\u043e\u0431\u043e\u0439 \u043f\u043e\u0448\u0430\u0433\u043e\u0432\u043e\u0435 \u043e\u0431\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044e \u043f\u0440\u043e\u0441\u0442\u043e\u0433\u043e \u0434\u0430\u0448\u0431\u043e\u0440\u0434\u0430 \u0434\u043b\u044f Prometheus. \u0422\u0430\u043a \u0447\u0442\u043e \u0435\u0441\u043b\u0438 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438, \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0435 \u043c\u043d\u043e\u0439 \u0432 \u043f\u0435\u0440\u0432\u043e\u0439 \u043f\u043e\u043b\u043e\u0432\u0438\u043d\u0435 \u0441\u0442\u0430\u0442\u044c\u0438, \u043f\u043e\u043a\u0430\u0436\u0443\u0442\u0441\u044f \u0432\u0430\u043c \u0437\u043d\u0430\u043a\u043e\u043c\u044b\u043c\u0438, \u0432\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0432\u0430\u043c \u0441\u043e\u0432\u0435\u0440\u0448\u0438\u0442\u044c \u043f\u0435\u0440\u0432\u044b\u0439 \u0448\u0430\u0433 \u043d\u0430 \u043f\u0443\u0442\u0438 \u043a \u0438\u0445 \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/webt\/pp\/js\/a-\/ppjsa-gyd6at_y5hmdwypk77aea.jpeg\" data-src=\"https:\/\/habrastorage.org\/webt\/pp\/js\/a-\/ppjsa-gyd6at_y5hmdwypk77aea.jpeg\" data-blurred=\"true\"\/><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-403783","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/403783","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=403783"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/403783\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=403783"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=403783"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=403783"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}