{"id":317933,"date":"2021-02-12T15:02:44","date_gmt":"2021-02-12T15:02:44","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=317933"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=317933","title":{"rendered":"\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0435 \u0441\u0435\u0440\u0432\u0438\u0441\u044b \u0432 AWS \u0441 Prometheus \u0438 exporter\u2019\u0430\u043c\u0438 \u0434\u043b\u044f CloudWatch"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/088\/010\/0b0\/0880100b06e5753cd2949d7c3455ea75.png\" width=\"780\" height=\"450\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u0445 managed-\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 \u0432\u0440\u043e\u0434\u0435 RDS \u0438\u043b\u0438 ElastiCache \u043e\u0442 AWS, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043c\u043e\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u043c \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430\u043c. \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 endpoint\u2019\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430?<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Prometheus, \u0442\u043e \u043a\u0430\u043a\u0438\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0433\u0434\u0435 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0430\u0432\u0430\u0440\u0438\u0439\/\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438?<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432: \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Prometheus \u0438 CloudWatch \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<a href=\"https:\/\/github.com\/prometheus\/cloudwatch_exporter\"> <u>cloudwatch_exporter<\/u><\/a> \u0438<a href=\"https:\/\/github.com\/nachomillangarcia\/prometheus_aws_cost_exporter\"> <u>prometheus_aws_cost_exporter<\/u><\/a> \u0432 AWS, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u043b\u044f \u043d\u0438\u0445 Helm-\u0447\u0430\u0440\u0442 \u0438 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043c \u0435\u0433\u043e \u0432 Kubernetes. <em>(K8s \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432.)<\/em> \u0410 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0441\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<hr>\n<p><a href=\"https:\/\/aws.amazon.com\/cloudwatch\/\"><u>CloudWatch<\/u><\/a> \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430\u0445 \u043f\u043e \u043f\u043e\u0447\u0442\u0435, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Prometheus, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0430\u043b\u0435\u0440\u0442\u044b.<\/p>\n<p>\u0423 AWS \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0441 \u0431\u044e\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u043f\u043e CPU \u0438 \u0434\u0438\u0441\u043a\u043e\u0432 \u0441 \u043a\u0440\u0435\u0434\u0438\u0442\u0430\u043c\u0438 \u043f\u043e IO. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0440\u0435\u0437\u043a\u043e \u0432\u044b\u0440\u043e\u0441\u043b\u0430. \u041d\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0443\u0439\u0442\u0438, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u0440\u0435\u0434\u0438\u0442\u044b CPU\/IO, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u0430\u043a\u043e\u0432\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0445 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0435.&nbsp;<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c: prometheus_aws_cost_exporter \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a cloudwatch_exporter \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0434\u0435\u043d\u044c. \u0417\u0430\u0442\u043e cloudwatch_exporter \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0442\u0440\u0438\u043a.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438!<\/p>\n<h3>1. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c IAM<\/h3>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0432\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0432 IAM (AWS Identity and Access Management). \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043e\u0431\u043e\u0438\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c:<\/p>\n<ul>\n<li>\n<p><code>cloudwatch:ListMetrics<\/code><\/p>\n<\/li>\n<li>\n<p><code>cloudwatch:GetMetricStatistics<\/code><\/p>\n<\/li>\n<li>\n<p><code>tag:GetResources<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>&nbsp;<\/strong>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b<strong> <\/strong>prometheus_aws_cost_exporter \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431<em>\u043e<\/em>\u043b\u044c\u0448\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0437 JSON:<\/p>\n<pre><code class=\"json\">{   \"Effect\": \"Allow\",   \"Action\": [     \"cloudwatch:PutMetricData\",     \"ec2:DescribeVolumes\",     \"ec2:DescribeTags\",     \"logs:PutLogEvents\",     \"logs:DescribeLogStreams\",     \"logs:DescribeLogGroups\",     \"logs:CreateLogStream\",     \"logs:CreateLogGroup\",     \"ce:GetCostAndUsage\"   ],   \"Resource\": \"*\" }, {   \"Effect\": \"Allow\",   \"Action\": [     \"ssm:GetParameter\"   ],   \"Resource\": [     \"arn:aws:ssm:*:*:parameter\/AmazonCloudWatch-*\",     \"arn:aws:ce:*:*:\/GetCostAndUsage\"   ] }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c access key ID \u0438 secret access key, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (<code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>).&nbsp;<\/p>\n<h3>2. \u0421\u043e\u0437\u0434\u0430\u0435\u043c IAM-\u0440\u043e\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h3>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f AWS \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b IAM, \u0433\u0434\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>cloudwatch_users<\/code>.<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/6ab\/a51\/729\/6aba51729035b45d9782f5e283f7fdf4\" alt=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IAM\" title=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IAM\" width=\"416\" height=\"196\"><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IAM<\/figcaption><\/figure>\n<p>\u0412 \u043f\u043e\u043b\u0435 <em>Access Type<\/em> \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043e\u043f\u0446\u0438\u044e <em>Programmatic access<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 <em>access key ID<\/em> \u0438 <em>secret access key<\/em> (\u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0438\u0445 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435). \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u2013 <em>Attach existing policies directly<\/em>, \u0433\u0434\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443. \u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 IAM-\u0440\u043e\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 <code>ListMetrics<\/code> \u0438 <code>GetMetricStatistics<\/code><strong>.<\/strong><\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a2e\/6f8\/7b7\/a2e6f87b7c1155a5655c57d44058c049\" alt=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e policy\" title=\"\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e policy\" width=\"398\" height=\"250\"><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e policy<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 API, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f JSON-\u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u043c:<\/p>\n<pre><code class=\"json\">{   \"Version\": \"2012-10-17\",   \"Statement\": [     {       \"Sid\": \"VisualEditor0\",       \"Effect\": \"Allow\",       \"Action\": [         \"cloudwatch:GetMetricStatistics\",         \"cloudwatch:ListMetrics\"       ],       \"Resource\": \"*\"     }   ] }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 <em>Review policy<\/em> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f <em>Policy<\/em> \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0451 (<em>Create policy<\/em>)<strong>. <\/strong>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u043e\u043b\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IAM-\u0440\u043e\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 Policy. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 values.yaml \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e Helm-\u0447\u0430\u0440\u0442\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Terraform, \u0442\u043e \u043f\u043e <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/terraform_user_policy.tf\"><u>\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/u><\/a> \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Terraform receipt \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IAM-\u0440\u043e\u043b\u0438 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041a\u043b\u044e\u0447\u0438 API \u0438\u0437 <code>terraform.tfstate<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>jq<\/code>:<\/p>\n<p><code>jq '.resources[].instances[].attributes | {(.id): .secret}'<\/code><\/p>\n<p><strong><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/em><\/strong><em> \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a CloudWatch \u0442\u0430\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f; \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0435\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c <\/em><a href=\"https:\/\/aws.amazon.com\/ru\/cloudwatch\/pricing\/\"><em><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/em><\/a><em>. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432 \u0447\u0430\u0441 \u0438\u043b\u0438 \u0432 \u0441\u0443\u0442\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438.<\/em><\/p>\n<h3>3. Helm-\u0447\u0430\u0440\u0442 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0434\u0435\u043f\u043b\u043e\u044e cloudwatch-exporter \u0438 cost-exporter \u0432 Kubernetes. \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 Helm-\u0447\u0430\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 <code>values.yaml<\/code>:<\/p>\n<pre><code class=\"json\">--- aws_access_key_id: &lt;AWS_ACCESS_KEY_ID&gt; aws_secret_access_key: &lt;AWS_SECRET_ACCESS_KEY&gt; region: eu-central-1 replicas:  1 resources:   requests:     cpu: 1m     memory: 512Mi env:   metric_today_daily_costs: \"yes\"   metric_yesterday_daily_costs: \"yes\"   query_period: \"1800\"   metric_today_daily_usage: \"yes\"   metric_today_daily_usage_norm: \"yes\" <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>aws_access_key_id<\/code> \u0438 <code>aws_secret_access_key<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 IAM-\u0440\u043e\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p><code>region<\/code> \u2014 \u0440\u0435\u0433\u0438\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432;&nbsp;<\/p>\n<\/li>\n<li>\n<p><code>query_period<\/code> \u2014 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 AWS (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445);<\/p>\n<\/li>\n<li>\n<p><code>metric_today_daily_costs<\/code>, <code>metric_yesterday_daily_costs<\/code>, <code>metric_today_daily_usage<\/code>, <code>metric_today_daily_usage_norm<\/code> \u2014 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u0437\u0430\u0442\u0440\u0430\u0442 (costs) \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f (usage) \u0437\u0430 \u0432\u0447\u0435\u0440\u0430 \u0438 \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>no<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 <code>env<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f cost-exporter\u2019\u043e\u043c (\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 cloudwatch-exporter \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0441 Deployment \u0434\u043b\u044f cloudwatch-exporter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u043e\u0441\u0438\u0442 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043d\u0438\u044f). \u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/20-cloudwatch-exporter.yaml\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>.&nbsp;<\/p>\n<pre><code class=\"json\">apiVersion: apps\/v1 kind: Deployment metadata:   name: cloudwatch-exporter spec:   selector:     matchLabels:       app: cloudwatch-exporter   template:     metadata:       labels:         app: cloudwatch-exporter     spec:       containers:       - name: cloudwatch-exporter         image: prom\/cloudwatch-exporter:cloudwatch_exporter-0.9.0         env:         - name: AWS_ACCESS_KEY_ID           value: \"{{ .Values.aws_access_key_id }}\"         - name: AWS_SECRET_ACCESS_KEY           value: \"{{ .Values.aws_secret_access_key }}\"         volumeMounts:         - name: config           subPath: config.yml           mountPath: \/config\/config.yml       volumes:       - name: config         configMap:           name: config<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 Deployment (\u0442\u043e\u0447\u043d\u0435\u0435, \u0441\u043d\u043e\u0432\u0430 \u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442) \u2014 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/21-cost_exporter.yaml\"><u>cost-exporter<\/u><\/a>:<\/p>\n<pre><code class=\"json\">apiVersion: apps\/v1 kind: Deployment metadata:   name: cost-exporter spec:   selector:     matchLabels:       app: cost-exporter   template:     metadata:       labels:         app: cost-exporter     spec:       containers:       - name: cost-exporter         image: nachomillangarcia\/prometheus_aws_cost_exporter:latest         args:         - --host         - 0.0.0.0         env:         - name: AWS_ACCESS_KEY_ID           value: \"{{ .Values.aws_access_key_id }}\"         - name: AWS_SECRET_ACCESS_KEY           value: \"{{ .Values.aws_secret_access_key }}\"         - name: METRIC_TODAY_DAILY_COSTS           value: \"{{ .Values.env.metric_today_daily_costs }}\"         - name: METRIC_YESTERDAY_DAILY_COSTS           value: \"{{ .Values.env.metric_yesterday_daily_costs }}\"         - name: QUERY_PERIOD           value: \"{{ .Values.env.query_period }}\"         - name: METRIC_TODAY_DAILY_USAGE           value: \"{{ .Values.env.metric_today_daily_usage }}\"         - name: METRIC_TODAY_DAILY_USAGE_NORM           value: \"{{ .Values.env.metric_today_daily_usage_norm }}\"<\/code><\/pre>\n<h3>4. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430<\/h3>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 Prometheus \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043b\u0435\u0440\u0442\u044b.<\/p>\n<p><a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/01-config.yaml\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f cloudwatch_exporter \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0440\u0438\u043a.\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f EC2 \u2014 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b aws:<\/p>\n<p><code>aws cloudwatch list-metrics --namespace EC2<\/code><\/p>\n<p>\u0412\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>aws<\/code>. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430:<\/p>\n<pre><code class=\"json\">  - aws_namespace: AWS\/NetworkELB     aws_metric_name: HealthyHostCount     aws_dimensions:     - LoadBalancer     - TargetGroup     aws_statistics:     - Sum     period_seconds: 60<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0443 \u0431\u0440\u0430\u0442\u044c \u0438\u0437 AWS\/NetworkELB \u043c\u0435\u0442\u0440\u0438\u043a\u0443 <code>HealthyHostCount<\/code> \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043f\u043e <code>LoadBalancer<\/code> \u0438 <code>TargetGroup<\/code>, \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Sum<\/code>.<\/p>\n<h4>\u0411\u043e\u043d\u0443\u0441! \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0430\u043b\u0435\u0440\u0442\u043e\u0432<\/h4>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043b\u0435\u0440\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CPU \u0432 Redis \u0443 ElastiCache:<\/p>\n<pre><code class=\"json\">  - alert: RedisCPUUsage     annotations:     description: |       Redis CPU utilization on {{`{{$labels.cache_cluster_id}}`}} in cluster is over than 60%     summary: Redis CPU utilization on {{`{{$labels.cache_cluster_id}}`}} in cluster is over than 60%     expr: |       aws_elasticache_cpuutilization_average &gt;= 60     for: 5m<\/code><\/pre>\n<p>\u0410\u043b\u0435\u0440\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e target \u0443 LoadBalancer:<\/p>\n<pre><code class=\"json\">  - alert: LBTargetGroupIsUnhealthy     annotations:     description: Some hosts are target group {{`{{$labels.target_group}}`}} in cluster is unhealthy!     summary: Some hosts are target group {{`{{$labels.target_group}}`}} in cluster is unhealthy!     expr: |       aws_networkelb_healthy_host_count_sum{load_balancer=~\".*someservice.*\",target_group=~\".*someservice.*\"} &lt; 3     for: 1m<\/code><\/pre>\n<p>\u0410\u043b\u0435\u0440\u0442 \u043d\u0430 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0435 EBS Burst balance:<\/p>\n<pre><code class=\"json\">  - alert: EBSBurst_balance     annotations:          description: EBS Burst balance in cluster is less than 60%                      summary: EBS Burst balance in cluster is less than 60%     expr: |       aws_ebs_burst_balance_average &lt;= 60              for: 5m<\/code><\/pre>\n<p>\u0412 <a href=\"https:\/\/github.com\/flant\/examples\/tree\/master\/2021\/01-cloudwatch-exporter\"><u>\u0440\u0435\u043f\u043e\u0437\u0438\u0442\u043e\u0440\u0438\u0438<\/u><\/a> \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0448\u0438\u0440\u043d\u044b\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0434\u043b\u044f \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u0438 \u043c\u0435\u0442\u0440\u0438\u043a \u0438 \u0430\u043b\u0435\u0440\u0442\u043e\u0432.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440\u044b, \u043a\u0430\u043a \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0433\u043b\u044f\u0434\u0435\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0432 Prometheus:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/3d7\/5a7\/baf\/3d75a7baf1b60007702d4ea84151eda4\" alt=\"AWS EC2 EBS IO balance (average)\" title=\"AWS EC2 EBS IO balance (average)\" width=\"1600\" height=\"905\"><figcaption>AWS EC2 EBS IO balance (average)<\/figcaption><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/f30\/d35\/ba9\/f30d35ba983cf15facfc8dff428e4eba\" alt=\"AWS ElastiCache CPU utilization (average)\" title=\"AWS ElastiCache CPU utilization (average)\" width=\"1581\" height=\"467\"><figcaption>AWS ElastiCache CPU utilization (average)<\/figcaption><\/figure>\n<h3>\u0417\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435<\/h3>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u043d \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0441\u0435\u0440\u0432\u0438\u0441\u043e\u0432 AWS \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0437\u0432\u0435\u0441\u0442\u043d\u044b\u0445 Prometheus exporter\u2019\u043e\u0432. \u041d\u0430\u0441\u0442\u0440\u043e\u0438\u0432 \u0435\u0433\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u0434\u043b\u044f \u0430\u043d\u0430\u043b\u0438\u0437\u0430 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f managed-\u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0438 \u0435\u0435 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438, \u0447\u0442\u043e \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u0441\u043a\u043e\u0440\u0440\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0441\u0445\u043e\u0434\u044b \u0438 \u0432\u043e\u0432\u0440\u0435\u043c\u044f \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u044f\u0435\u043c\u044b\u0445 \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432\u044b\u0445 \u0440\u0435\u0441\u0443\u0440\u0441\u0430\u0445.&nbsp;<\/p>\n<p>\u0417\u0430 \u0440\u0430\u043c\u043a\u0430\u043c\u0438 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430 \u043e\u0441\u0442\u0430\u043b\u0438\u0441\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0441 Prometheus (\u043a\u0430\u043a \u0435\u043c\u0443 \u0441\u043e\u043e\u0431\u0449\u0430\u0442\u044c, \u043e\u0442\u043a\u0443\u0434\u0430 \u0438 \u043a\u0443\u0434\u0430 scrape\u2019\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0430\u043d\u0435\u043b\u0435\u0439 \u0432 Grafana. <em>(\u041a\u0441\u0442\u0430\u0442\u0438, \u0434\u043b\u044f prometheus_aws_cost_exporter \u0435\u0441\u0442\u044c <\/em><a href=\"https:\/\/github.com\/nachomillangarcia\/prometheus_aws_cost_exporter\/blob\/master\/grafana\/grafana-dashboard.json\"><em><u>dashboard<\/u><\/em><\/a><em> \u043e\u0442 \u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044f.)<\/em> \u0420\u0430\u0437\u043e\u0431\u0440\u0430\u0432\u0448\u0438\u0441\u044c \u0438 \u0441 \u043d\u0438\u043c\u0438 \u0434\u043b\u044f \u0441\u0432\u043e\u0435\u0433\u043e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0441\u043b\u0443\u0447\u0430\u044f, \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0431\u043e\u043b\u0435\u0435 \u043f\u043e\u043b\u043d\u043e\u0435, \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435.<\/p>\n<h2>P.S.<\/h2>\n<p>\u0427\u0438\u0442\u0430\u0439\u0442\u0435 \u0442\u0430\u043a\u0436\u0435 \u0432 \u043d\u0430\u0448\u0435\u043c \u0431\u043b\u043e\u0433\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/412901\/\">\u00ab\u041c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0438 Kubernetes\u00bb (\u043e\u0431\u0437\u043e\u0440 \u0438 \u0432\u0438\u0434\u0435\u043e \u0434\u043e\u043a\u043b\u0430\u0434\u0430)<\/a>;<\/p>\n<\/li>\n<li>\n<p> \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/513574\/\">\u0411\u0443\u0434\u0443\u0449\u0435\u0435 Prometheus \u0438 \u044d\u043a\u043e\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0430 (2020)<\/a>\u00bb;<\/p>\n<\/li>\n<li>\n<p> \u00ab<a href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/412901\/\">\u0423\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u0438 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c \u0440\u0430\u0431\u043e\u0442\u044b Prometheus Operator \u0432 Kubernetes<\/a>\u00bb.<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<p> \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\/company\/flant\/blog\/542082\/\"> https:\/\/habr.com\/ru\/company\/flant\/blog\/542082\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u0432 \u043e\u0431\u043b\u0430\u0447\u043d\u044b\u0445 \u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u0430\u0445 managed-\u0438\u043d\u0441\u0442\u0430\u043b\u043b\u044f\u0446\u0438\u0438 \u0441\u0435\u0440\u0432\u0435\u0440\u043d\u044b\u0445 \u0441\u043b\u0443\u0436\u0431 \u0432\u0440\u043e\u0434\u0435 RDS \u0438\u043b\u0438 ElastiCache \u043e\u0442 AWS, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0443\u0436\u0435 \u0437\u0430\u0434\u0430\u0432\u0430\u043b\u0438\u0441\u044c \u0442\u0435\u043c\u043e\u0439 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b, \u0430 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u043e\u043f\u043e\u0432\u0435\u0449\u0435\u043d\u0438\u0439 \u043f\u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u043c \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430\u043c. \u041f\u0440\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0442 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u044b:<\/p>\n<ol>\n<li>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0431\u043e\u0440 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441 endpoint\u2019\u043e\u0432 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430?<\/p>\n<\/li>\n<li>\n<p>\u0415\u0441\u043b\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Prometheus, \u0442\u043e \u043a\u0430\u043a\u0438\u0435 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0433\u0434\u0435 \u0438\u0445 \u043c\u043e\u0436\u043d\u043e \u0437\u0430\u043f\u0443\u0441\u043a\u0430\u0442\u044c?<\/p>\n<\/li>\n<li>\n<p>\u041a\u0430\u043a\u0438\u0435 \u0435\u0441\u0442\u044c \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b \u0433\u043e\u0442\u043e\u0432\u044b\u0445 \u0430\u043b\u0435\u0440\u0442\u043e\u0432 \u0434\u043b\u044f \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u044f \u043e\u0441\u043d\u043e\u0432\u043d\u044b\u0445 \u043f\u0440\u0438\u0447\u0438\u043d \u0430\u0432\u0430\u0440\u0438\u0439\/\u0447\u0430\u0441\u0442\u0438\u0447\u043d\u043e\u0439 \u043d\u0435\u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e\u0441\u0442\u0438?<\/p>\n<\/li>\n<\/ol>\n<p>\u042d\u0442\u0430 \u0441\u0442\u0430\u0442\u044c\u044f \u0432 \u0431\u043e\u043b\u044c\u0448\u0435\u0439 \u0441\u0442\u0435\u043f\u0435\u043d\u0438 \u0440\u0430\u0441\u0441\u0447\u0438\u0442\u0430\u043d\u0430 \u043d\u0430 \u043d\u0430\u0447\u0438\u043d\u0430\u044e\u0449\u0438\u0445 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u043e\u0432: \u043d\u0430 \u043f\u0440\u0438\u043c\u0435\u0440\u0435 Prometheus \u0438 CloudWatch \u043c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u043e\u0434\u043d\u043e \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u0438 \u043f\u043e\u043d\u044f\u0442\u043d\u044b\u0445 \u0440\u0435\u0448\u0435\u043d\u0438\u0439 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e<a href=\"https:\/\/github.com\/prometheus\/cloudwatch_exporter\"> <u>cloudwatch_exporter<\/u><\/a> \u0438<a href=\"https:\/\/github.com\/nachomillangarcia\/prometheus_aws_cost_exporter\"> <u>prometheus_aws_cost_exporter<\/u><\/a> \u0432 AWS, \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0434\u043b\u044f \u043d\u0438\u0445 Helm-\u0447\u0430\u0440\u0442 \u0438 \u0437\u0430\u0434\u0435\u043f\u043b\u043e\u0438\u043c \u0435\u0433\u043e \u0432 Kubernetes. <em>(K8s \u0431\u0443\u0434\u0435\u0442 \u0432\u044b\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u0443\u0434\u043e\u0431\u043d\u043e\u0439 \u043f\u043b\u043e\u0449\u0430\u0434\u043a\u043e\u0439 \u0434\u043b\u044f \u0440\u0430\u0437\u0432\u043e\u0440\u0430\u0447\u0438\u0432\u0430\u043d\u0438\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432.)<\/em> \u0410 \u0442\u0430\u043a\u0436\u0435 \u043f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0438\u0435 \u0438 \u0435\u0436\u0435\u0434\u043d\u0435\u0432\u043d\u044b\u0435 \u0437\u0430\u0442\u0440\u0430\u0442\u044b \u0432\u0441\u0435\u0439 \u0432\u0430\u0448\u0435\u0439 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b.<\/p>\n<hr>\n<p><a href=\"https:\/\/aws.amazon.com\/cloudwatch\/\"><u>CloudWatch<\/u><\/a> \u2014 \u0441\u0435\u0440\u0432\u0438\u0441 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u0438\u043d\u0444\u0440\u0430\u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b. \u0421 \u0435\u0433\u043e \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f \u043e \u043f\u0440\u043e\u0438\u0437\u043e\u0448\u0435\u0434\u0448\u0438\u0445 \u0438\u043d\u0446\u0438\u0434\u0435\u043d\u0442\u0430\u0445 \u043f\u043e \u043f\u043e\u0447\u0442\u0435, \u0447\u0442\u043e \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u043e \u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0430\u0445, \u0433\u0434\u0435 \u0435\u0449\u0435 \u043d\u0435\u0442 \u0446\u0435\u043d\u0442\u0440\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430. \u041e\u0434\u043d\u0430\u043a\u043e \u043c\u044b \u043f\u043e\u0439\u0434\u0435\u043c \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u0443\u0442\u0438 \u0438 \u0431\u0443\u0434\u0435\u043c \u0432\u044b\u0432\u043e\u0434\u0438\u0442\u044c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0432 \u0444\u043e\u0440\u043c\u0430\u0442\u0435 Prometheus, \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0433\u0440\u0430\u0444\u0438\u043a\u0438 \u0438 \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0442\u044c \u0430\u043b\u0435\u0440\u0442\u044b.<\/p>\n<p>\u0423 AWS \u0435\u0441\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0438\u043d\u0441\u0442\u0430\u043d\u0441\u043e\u0432 \u0441 \u0431\u044e\u0434\u0436\u0435\u0442\u0430\u043c\u0438 \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u043f\u043e CPU \u0438 \u0434\u0438\u0441\u043a\u043e\u0432 \u0441 \u043a\u0440\u0435\u0434\u0438\u0442\u0430\u043c\u0438 \u043f\u043e IO. \u041e\u043d\u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043d\u0430\u043a\u0430\u043f\u043b\u0438\u0432\u0430\u0442\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0441\u043d\u0438\u0436\u0435\u043d\u043d\u043e\u0439 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0438 \u0442\u0440\u0430\u0442\u0438\u0442\u044c \u0435\u0433\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u043e\u043d\u0430 \u0440\u0435\u0437\u043a\u043e \u0432\u044b\u0440\u043e\u0441\u043b\u0430. \u041d\u043e \u043f\u0440\u043e\u0433\u043d\u043e\u0437\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u043d\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u043c\u043e\u0436\u0435\u0442 \u0443\u0439\u0442\u0438, \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u0442\u0438\u0447\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0435\u0441\u0442\u044c \u0440\u0438\u0441\u043a \u0432\u044b\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0432\u0435\u0441\u044c \u0431\u044e\u0434\u0436\u0435\u0442 \u0438 \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u043d\u0430 \u0440\u0435\u0436\u0438\u043c \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432. \u0414\u0430\u043d\u043d\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0440\u0430\u0437\u0432\u0438\u0442\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u0439 \u0441\u043b\u043e\u0436\u043d\u043e \u0434\u0438\u0430\u0433\u043d\u043e\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0442\u0430\u043a \u043a\u0430\u043a \u0432 \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0435 \u0441\u0435\u0440\u0432\u0435\u0440\u0430 \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u0440\u0430\u0436\u0435\u043d\u043e. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u043e \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u0442\u044c \u043a\u0440\u0435\u0434\u0438\u0442\u044b CPU\/IO, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043a\u0440\u0435\u0434\u0438\u0442\u043e\u0432 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u043e \u0432 \u0434\u0430\u043d\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442, \u043a\u0430\u043a\u043e\u0432\u0430 \u0434\u0438\u043d\u0430\u043c\u0438\u043a\u0430 \u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0438 \u043f\u0440\u0435\u0434\u0432\u0438\u0434\u0435\u0442\u044c \u0438\u0445 \u0438\u0441\u0447\u0435\u0440\u043f\u0430\u043d\u0438\u0435.&nbsp;<\/p>\n<p>\u0418\u0442\u0430\u043a, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044f\u0441\u044c \u043a \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u044b\u043c \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c: prometheus_aws_cost_exporter \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f \u0444\u0438\u043d\u0430\u043d\u0441\u043e\u0432, \u0442\u0430\u043a \u043a\u0430\u043a cloudwatch_exporter \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u0442\u043e\u043b\u044c\u043a\u043e \u0437\u0430 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0438\u0439 \u0434\u0435\u043d\u044c. \u0417\u0430\u0442\u043e cloudwatch_exporter \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043d\u0438\u043c\u0430\u0442\u044c \u0433\u043e\u0440\u0430\u0437\u0434\u043e \u0431\u043e\u043b\u044c\u0448\u0435 \u043c\u0435\u0442\u0440\u0438\u043a.<\/p>\n<p>\u041f\u0440\u0438\u0441\u0442\u0443\u043f\u0438\u043c \u043a \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438!<\/p>\n<h3>1. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c IAM<\/h3>\n<p>\u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0434\u0432\u0430 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0430 \u0441 \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u043e\u043c, \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u0432\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430 \u0432 IAM (AWS Identity and Access Management). \u041d\u0438\u0436\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d \u0441\u043f\u0438\u0441\u043e\u043a \u0440\u043e\u043b\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0443\u0436\u043d\u044b \u043e\u0431\u043e\u0438\u043c \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430\u043c:<\/p>\n<ul>\n<li>\n<p><code>cloudwatch:ListMetrics<\/code><\/p>\n<\/li>\n<li>\n<p><code>cloudwatch:GetMetricStatistics<\/code><\/p>\n<\/li>\n<li>\n<p><code>tag:GetResources<\/code><\/p>\n<\/li>\n<\/ul>\n<p><strong>&nbsp;<\/strong>\u0414\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b<strong> <\/strong>prometheus_aws_cost_exporter \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0431<em>\u043e<\/em>\u043b\u044c\u0448\u0438\u0439 \u043d\u0430\u0431\u043e\u0440 \u043f\u0440\u0430\u0432: \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u0443\u044e \u0440\u043e\u043b\u044c \u0438 \u043d\u0430\u0437\u043d\u0430\u0447\u0438\u0442\u044c \u0435\u0451 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e. \u0414\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0440\u043e\u043b\u044c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0438\u0437 JSON:<\/p>\n<pre><code class=\"json\">{   \"Effect\": \"Allow\",   \"Action\": [     \"cloudwatch:PutMetricData\",     \"ec2:DescribeVolumes\",     \"ec2:DescribeTags\",     \"logs:PutLogEvents\",     \"logs:DescribeLogStreams\",     \"logs:DescribeLogGroups\",     \"logs:CreateLogStream\",     \"logs:CreateLogGroup\",     \"ce:GetCostAndUsage\"   ],   \"Resource\": \"*\" }, {   \"Effect\": \"Allow\",   \"Action\": [     \"ssm:GetParameter\"   ],   \"Resource\": [     \"arn:aws:ssm:*:*:parameter\/AmazonCloudWatch-*\",     \"arn:aws:ce:*:*:\/GetCostAndUsage\"   ] }<\/code><\/pre>\n<p>\u0414\u043b\u044f \u0443\u0447\u0451\u0442\u043d\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432 \u0442\u0430\u043a\u0436\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u0442\u044c access key ID \u0438 secret access key, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u043f\u0435\u0440\u0435\u0434\u0430\u0432\u0430\u0442\u044c\u0441\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 (<code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>).&nbsp;<\/p>\n<h3>2. \u0421\u043e\u0437\u0434\u0430\u0435\u043c IAM-\u0440\u043e\u043b\u0438 \u0447\u0435\u0440\u0435\u0437 \u0432\u0435\u0431-\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441<\/h3>\n<p>\u0410\u0432\u0442\u043e\u0440\u0438\u0437\u0443\u0435\u043c\u0441\u044f \u0432 \u043a\u043e\u043d\u0441\u043e\u043b\u0438 \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f AWS \u0438 \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u0432 \u0440\u0430\u0437\u0434\u0435\u043b IAM, \u0433\u0434\u0435 \u0434\u043b\u044f \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u043e\u0434 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435\u043c <code>cloudwatch_users<\/code>.<\/p>\n<figure class=\"\"><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0432 IAM<\/figcaption><\/figure>\n<p>\u0412 \u043f\u043e\u043b\u0435 <em>Access Type<\/em> \u0432\u043a\u043b\u044e\u0447\u0438\u043c \u043e\u043f\u0446\u0438\u044e <em>Programmatic access<\/em>, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0443\u043f\u043e\u043c\u044f\u043d\u0443\u0442\u044b\u0435 <em>access key ID<\/em> \u0438 <em>secret access key<\/em> (\u043e\u043d\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 API, \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u0435 \u0438\u0445 \u043a\u0443\u0434\u0430-\u043d\u0438\u0431\u0443\u0434\u044c \u0432 \u043d\u0430\u0434\u0451\u0436\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0438\u043b\u0438\u0449\u0435). \u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0430\u044f \u0432\u043a\u043b\u0430\u0434\u043a\u0430 \u2013 <em>Attach existing policies directly<\/em>, \u0433\u0434\u0435 \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043d\u043e\u0432\u0443\u044e \u043f\u043e\u043b\u0438\u0442\u0438\u043a\u0443. \u0414\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 IAM-\u0440\u043e\u043b\u0438 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u043f\u0440\u0430\u0432\u0430 <code>ListMetrics<\/code> \u0438 <code>GetMetricStatistics<\/code><strong>.<\/strong><\/p>\n<figure class=\"\"><figcaption>\u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0433\u043e policy<\/figcaption><\/figure>\n<p>\u0415\u0441\u043b\u0438 \u0443\u0434\u043e\u0431\u043d\u0435\u0435 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u043e\u043b\u044c \u0447\u0435\u0440\u0435\u0437 API, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c\u0441\u044f JSON-\u0441\u043d\u0438\u043f\u043f\u0435\u0442\u043e\u043c:<\/p>\n<pre><code class=\"json\">{   \"Version\": \"2012-10-17\",   \"Statement\": [     {       \"Sid\": \"VisualEditor0\",       \"Effect\": \"Allow\",       \"Action\": [         \"cloudwatch:GetMetricStatistics\",         \"cloudwatch:ListMetrics\"       ],       \"Resource\": \"*\"     }   ] }<\/code><\/pre>\n<p>\u041f\u043e\u0441\u043b\u0435 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 <em>Review policy<\/em> \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u0434\u043b\u044f <em>Policy<\/em> \u0438 \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0435\u0451 (<em>Create policy<\/em>)<strong>. <\/strong>\u0414\u0430\u043b\u044c\u043d\u0435\u0439\u0448\u0438\u0435 \u043f\u0443\u043d\u043a\u0442\u044b \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442 \u043d\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u043e\u0439 \u0440\u043e\u043b\u0438. \u041e\u0434\u043d\u0430\u043a\u043e \u043f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u0435\u0440\u043d\u0443\u0442\u044c\u0441\u044f \u043d\u0430 \u044d\u0442\u0430\u043f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IAM-\u0440\u043e\u043b\u0438, \u0447\u0442\u043e\u0431\u044b \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0439 \u043d\u0430\u043c\u0438 Policy. \u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u043c \u044d\u0442\u0430\u043f\u0435 \u0441\u0442\u0430\u043d\u0443\u0442 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>AWS_ACCESS_KEY_ID<\/code> \u0438 <code>AWS_SECRET_ACCESS_KEY<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043d\u0430\u0434\u043e \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0432 values.yaml \u043d\u0430\u0448\u0435\u0433\u043e \u0431\u0443\u0434\u0443\u0449\u0435\u0433\u043e Helm-\u0447\u0430\u0440\u0442\u0430.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 Terraform, \u0442\u043e \u043f\u043e <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/terraform_user_policy.tf\"><u>\u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0441\u044b\u043b\u043a\u0435<\/u><\/a> \u0435\u0441\u0442\u044c \u0433\u043e\u0442\u043e\u0432\u044b\u0439 Terraform receipt \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f IAM-\u0440\u043e\u043b\u0438 \u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439. \u041a\u043b\u044e\u0447\u0438 API \u0438\u0437 <code>terraform.tfstate<\/code> \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>jq<\/code>:<\/p>\n<p><code>jq '.resources[].instances[].attributes | {(.id): .secret}'<\/code><\/p>\n<p><strong><em>\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435:<\/em><\/strong><em> \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a CloudWatch \u0442\u0430\u0440\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0442\u0441\u044f; \u0430\u043a\u0442\u0443\u0430\u043b\u044c\u043d\u044b\u0435 \u0446\u0435\u043d\u044b \u043c\u043e\u0436\u043d\u043e \u0438\u0437\u0443\u0447\u0438\u0442\u044c <\/em><a href=\"https:\/\/aws.amazon.com\/ru\/cloudwatch\/pricing\/\"><em><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/em><\/a><em>. \u0418\u0441\u0445\u043e\u0434\u044f \u0438\u0437 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u044b\u0431\u0440\u0430\u0442\u044c, \u043a\u0430\u043a \u0447\u0430\u0441\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a API \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0440\u0430\u0437 \u0432 \u0447\u0430\u0441 \u0438\u043b\u0438 \u0432 \u0441\u0443\u0442\u043a\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0437\u0430\u0434\u0430\u0447\u0438.<\/em><\/p>\n<h3>3. Helm-\u0447\u0430\u0440\u0442 \u0434\u043b\u044f \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u043e\u0432<\/h3>\n<p>\u041f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u0434\u0435\u043f\u043b\u043e\u044e cloudwatch-exporter \u0438 cost-exporter \u0432 Kubernetes. \u041f\u043e\u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 Helm-\u0447\u0430\u0440\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u0442\u044c \u0438\u0437 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u0440\u043e\u0441\u0442\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>\u0412 \u0441\u0430\u043c\u043e\u043c \u043d\u0430\u0447\u0430\u043b\u0435 \u043e\u0431\u044a\u044f\u0432\u0438\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 <code>values.yaml<\/code>:<\/p>\n<pre><code class=\"json\">--- aws_access_key_id: &lt;AWS_ACCESS_KEY_ID&gt; aws_secret_access_key: &lt;AWS_SECRET_ACCESS_KEY&gt; region: eu-central-1 replicas:  1 resources:   requests:     cpu: 1m     memory: 512Mi env:   metric_today_daily_costs: \"yes\"   metric_yesterday_daily_costs: \"yes\"   query_period: \"1800\"   metric_today_daily_usage: \"yes\"   metric_today_daily_usage_norm: \"yes\" <\/code><\/pre>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u043c \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430:<\/p>\n<ul>\n<li>\n<p>\u0412 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0445 <code>aws_access_key_id<\/code> \u0438 <code>aws_secret_access_key<\/code> \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f, \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 IAM-\u0440\u043e\u043b\u0438;<\/p>\n<\/li>\n<li>\n<p><code>region<\/code> \u2014 \u0440\u0435\u0433\u0438\u043e\u043d, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432;&nbsp;<\/p>\n<\/li>\n<li>\n<p><code>query_period<\/code> \u2014 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u0430 \u043c\u0435\u0442\u0440\u0438\u043a \u0438\u0437 AWS (\u0432 \u0441\u0435\u043a\u0443\u043d\u0434\u0430\u0445);<\/p>\n<\/li>\n<li>\n<p><code>metric_today_daily_costs<\/code>, <code>metric_yesterday_daily_costs<\/code>, <code>metric_today_daily_usage<\/code>, <code>metric_today_daily_usage_norm<\/code> \u2014 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435\/\u0432\u044b\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u043d\u0438\u044f \u043c\u0435\u0442\u0440\u0438\u043a \u0437\u0430\u0442\u0440\u0430\u0442 (costs) \u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044f (usage) \u0437\u0430 \u0432\u0447\u0435\u0440\u0430 \u0438 \u0437\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f (\u043f\u043e \u0443\u043c\u043e\u043b\u0447\u0430\u043d\u0438\u044e \u0438\u043c\u0435\u0435\u0442 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>no<\/code>);<\/p>\n<\/li>\n<li>\n<p>\u041f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0438\u0437 \u0431\u043b\u043e\u043a\u0430 <code>env<\/code> \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442\u0441\u044f cost-exporter\u2019\u043e\u043c (\u043d\u0430 \u0440\u0430\u0431\u043e\u0442\u0443 cloudwatch-exporter \u043d\u0435 \u0432\u043b\u0438\u044f\u044e\u0442).<\/p>\n<\/li>\n<\/ul>\n<p>\u041d\u0438\u0436\u0435 \u2014 \u043f\u0440\u0438\u043c\u0435\u0440 \u043b\u0438\u0441\u0442\u0438\u043d\u0433\u0430 \u0441 Deployment \u0434\u043b\u044f cloudwatch-exporter, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043d\u043e\u0441\u0438\u0442 \u0438\u043b\u043b\u044e\u0441\u0442\u0440\u0430\u0442\u0438\u0432\u043d\u044b\u0439 \u0445\u0430\u0440\u0430\u043a\u0442\u0435\u0440 (\u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0441\u043d\u043e\u0432\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u0443\u0434\u043e\u0431\u0441\u0442\u0432\u0430 \u0447\u0442\u0435\u043d\u0438\u044f). \u041f\u043e\u043b\u043d\u0430\u044f \u0432\u0435\u0440\u0441\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u0430 <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/20-cloudwatch-exporter.yaml\"><u>\u0437\u0434\u0435\u0441\u044c<\/u><\/a>.&nbsp;<\/p>\n<pre><code class=\"json\">apiVersion: apps\/v1 kind: Deployment metadata:   name: cloudwatch-exporter spec:   selector:     matchLabels:       app: cloudwatch-exporter   template:     metadata:       labels:         app: cloudwatch-exporter     spec:       containers:       - name: cloudwatch-exporter         image: prom\/cloudwatch-exporter:cloudwatch_exporter-0.9.0         env:         - name: AWS_ACCESS_KEY_ID           value: \"{{ .Values.aws_access_key_id }}\"         - name: AWS_SECRET_ACCESS_KEY           value: \"{{ .Values.aws_secret_access_key }}\"         volumeMounts:         - name: config           subPath: config.yml           mountPath: \/config\/config.yml       volumes:       - name: config         configMap:           name: config<\/code><\/pre>\n<p>\u0421\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0439 Deployment (\u0442\u043e\u0447\u043d\u0435\u0435, \u0441\u043d\u043e\u0432\u0430 \u0435\u0433\u043e \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442) \u2014 \u0434\u043b\u044f <a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/21-cost_exporter.yaml\"><u>cost-exporter<\/u><\/a>:<\/p>\n<pre><code class=\"json\">apiVersion: apps\/v1 kind: Deployment metadata:   name: cost-exporter spec:   selector:     matchLabels:       app: cost-exporter   template:     metadata:       labels:         app: cost-exporter     spec:       containers:       - name: cost-exporter         image: nachomillangarcia\/prometheus_aws_cost_exporter:latest         args:         - --host         - 0.0.0.0         env:         - name: AWS_ACCESS_KEY_ID           value: \"{{ .Values.aws_access_key_id }}\"         - name: AWS_SECRET_ACCESS_KEY           value: \"{{ .Values.aws_secret_access_key }}\"         - name: METRIC_TODAY_DAILY_COSTS           value: \"{{ .Values.env.metric_today_daily_costs }}\"         - name: METRIC_YESTERDAY_DAILY_COSTS           value: \"{{ .Values.env.metric_yesterday_daily_costs }}\"         - name: QUERY_PERIOD           value: \"{{ .Values.env.query_period }}\"         - name: METRIC_TODAY_DAILY_USAGE           value: \"{{ .Values.env.metric_today_daily_usage }}\"         - name: METRIC_TODAY_DAILY_USAGE_NORM           value: \"{{ .Values.env.metric_today_daily_usage_norm }}\"<\/code><\/pre>\n<h3>4. \u041d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430<\/h3>\n<p>\u041e\u0441\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0441\u0430\u043c\u043e\u0435 \u0433\u043b\u0430\u0432\u043d\u043e\u0435 \u2014 \u0442\u0435 \u043c\u0435\u0442\u0440\u0438\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u0443\u0434\u0443\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c\u0441\u044f \u0432 Prometheus \u0438 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u044b \u0445\u043e\u0442\u0438\u043c \u0434\u0435\u043b\u0430\u0442\u044c \u0430\u043b\u0435\u0440\u0442\u044b.<\/p>\n<p><a href=\"https:\/\/github.com\/flant\/examples\/blob\/master\/2021\/01-cloudwatch-exporter\/.helm\/templates\/01-config.yaml\"><u>\u0417\u0434\u0435\u0441\u044c<\/u><\/a> \u0435\u0441\u0442\u044c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u043d\u0444\u0438\u0433\u0443\u0440\u0430\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0434\u043b\u044f cloudwatch_exporter \u0441 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u0435\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0440\u0438\u043a.\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0434\u043b\u044f \u043c\u043e\u043d\u0438\u0442\u043e\u0440\u0438\u043d\u0433\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438 \u2014 \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0434\u043b\u044f EC2 \u2014 \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b aws:<\/p>\n<p><code>aws cloudwatch list-metrics --namespace EC2<\/code><\/p>\n<p>\u0412\u0441\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u043a\u043e\u043d\u0444\u0438\u0433\u0430 \u0431\u0435\u0440\u0443\u0442\u0441\u044f \u0438\u0437 \u0432\u044b\u0432\u043e\u0434\u0430 \u043a\u043e\u043d\u0441\u043e\u043b\u044c\u043d\u043e\u0439 \u0443\u0442\u0438\u043b\u0438\u0442\u044b <code>aws<\/code>. \u0422\u0438\u043f\u0438\u0447\u043d\u044b\u0439 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u043d\u0444\u0438\u0433\u0430:<\/p>\n<pre><code class=\"json\">  - aws_namespace: AWS\/NetworkELB     aws_metric_name: HealthyHostCount     aws_dimensions:     - LoadBalancer     - TargetGroup     aws_statistics:     - Sum     period_seconds: 60<\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u043a\u0441\u043f\u043e\u0440\u0442\u0435\u0440\u0443 \u0431\u0440\u0430\u0442\u044c \u0438\u0437 AWS\/NetworkELB \u043c\u0435\u0442\u0440\u0438\u043a\u0443 <code>HealthyHostCount<\/code> \u0441 \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u043d\u043e\u0441\u0442\u044c\u044e 60 \u0441\u0435\u043a\u0443\u043d\u0434, \u0430\u0433\u0440\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0435\u0451 \u043f\u043e <code>LoadBalancer<\/code> \u0438 <code>TargetGroup<\/code>, \u0432\u044b\u0434\u0430\u0432\u0430\u0442\u044c \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0435 <code>Sum<\/code>.<\/p>\n<h4>\u0411\u043e\u043d\u0443\u0441! \u041d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u043e\u0432 \u0430\u043b\u0435\u0440\u0442\u043e\u0432<\/h4>\n<p>\u0412\u043e\u0442 \u0442\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0430\u043b\u0435\u0440\u0442 \u043d\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 CPU \u0432 Redis \u0443 ElastiCache:<\/p>\n<pre><code class=\"json\">  - alert: RedisCPUUsage     annotations:     description: |       Redis CPU utilization on {{`{{$labels.cache_cluster_id}}`}} in cluster is over than 60%     summary: Redis CPU utilization on {{`{{$labels.cache_cluster_id}}`}} in cluster is over than 60%     expr: |       aws_elasticache_cpuutilization_average &gt;= 60     for: 5m<\/code><\/pre>\n<p>\u0410\u043b\u0435\u0440\u0442 \u043d\u0430 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e target \u0443 LoadBalancer:<\/p>\n<pre><code class=\"json\">  - alert: LBTargetGroupIsUnhealthy     annotations:     description: Some hosts are target<\/code><\/pre>\n<\/hr>\n<\/div>\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-317933","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317933","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=317933"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/317933\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=317933"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=317933"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=317933"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}