{"id":43289,"date":"2023-03-09T13:45:00","date_gmt":"2023-04-17T22:32:25","guid":{"rendered":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/"},"modified":"2024-04-29T18:05:05","modified_gmt":"2024-04-29T10:05:05","slug":"%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82","status":"publish","type":"post","link":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/","title":{"rendered":"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883"},"content":{"rendered":"<p>\u9019\u7bc7\u6587\u7ae0\u662f Amazon EKS Advent Calendar 2019 \u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002<\/p>\n<p>\u6211\u5728OPENREC.tv\u62c5\u4efbSRE\u56e2\u961f\u7684\u4e00\u5458\u3002\u5728\u9879\u76ee\u4e2d\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u6784\u5efa\u4e86\u76d1\u63a7\u73af\u5883\uff0c\u56e0\u6b64\u6211\u603b\u7ed3\u4e86\u642d\u5efa\u65b9\u6cd5\u3002<\/p>\n<h1>kube-promethus\u662f\u4ec0\u4e48\uff1f<\/h1>\n<p>kube-prometheus\u662f\u7531CoreOS\u5f00\u53d1\u7684\u9879\u76ee\uff0c\u5b83\u53ef\u4ee5\u5e2e\u52a9\u60a8\u5728Kubernetes\u96c6\u7fa4\u4e2d\u4f7f\u7528Prometheus\u8fdb\u884c\u76d1\u63a7\uff0c\u5e76\u63d0\u4f9b\u4e86\u4e00\u5957\u7528\u4e8e\u5fc5\u8981\u7ec4\u4ef6\u7684\u6e05\u5355\u6587\u4ef6\uff0c\u4ee5\u4fbf\u60a8\u80fd\u591f\u66f4\u8f7b\u677e\u5730\u51c6\u5907\u3002<br \/>\n\u4f7f\u7528kube-prometheus\uff0c\u60a8\u53ef\u4ee5\u521b\u5efa\u4ee5\u4e0b\u7ec4\u4ef6\u7684\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Prometheus Operator<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5197\u9577\u69cb\u6210\u306ePrometheus<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">\u5197\u9577\u69cb\u6210\u306eAleertmanager<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">node-exporter<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">Prometheus Adaptor<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">\n<li style=\"list-style-type: none;\">\n<ul class=\"post-ul\">kube-state-metrics<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<ul class=\"post-ul\">Grafana<\/ul>\n<p>\u9664\u4e86\u4e0a\u8ff0\u7684\u5185\u5bb9\u4e4b\u5916\uff0c\u6211\u4eec\u8fd8\u63d0\u4f9b\u4e86Kubernetes\u96c6\u7fa4\u76d1\u63a7\u6240\u9700\u7684Grafana\u4eea\u8868\u677f\u548cPrometheus\u8b66\u62a5\u8bbe\u7f6e\u3002\u8fd9\u4e9bGrafana\u4eea\u8868\u677f\u548cPrometheus\u8b66\u62a5\u7684\u5f88\u591a\u914d\u7f6e\u90fd\u662f\u4f7f\u7528kubernetes-mixin\u9879\u76ee\u4e2d\u7684\u5185\u5bb9\u8fdb\u884c\u6784\u5efa\u7684\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/6-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2019-12-20 15.56.13.png\" \/><\/div>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/7-0.png\" alt=\"\u30b9\u30af\u30ea\u30fc\u30f3\u30b7\u30e7\u30c3\u30c8 2019-12-20 15.57.02.png\" \/><\/div>\n<p>\u4f7f\u7528kube-prometheus\u53ef\u4ee5\u7701\u53bb\u521b\u5efaKubernetes\u96c6\u7fa4\u6240\u9700\u7684Grafana\u4eea\u8868\u677f\u548cPrometheus\u8b66\u62a5\u89c4\u5219\u7684\u9ebb\u70e6\uff0c\u8fd9\u4e5f\u662fkube-prometheus\u7684\u4e00\u5927\u9b45\u529b\u6240\u5728\u3002<\/p>\n<h1>kube-prometheus\u7684\u81ea\u5b9a\u4e49\u9879\u76ee\u914d\u7f6e\uff0c\u7528\u4e8eEKS\u3002<\/h1>\n<p>\u901a\u8fc7\u521b\u5efa\u81ea\u5b9a\u4e49\u9879\u76ee\u5e76\u6269\u5c55kube-prometheus\u7684jsonnet\u6765\u8fdb\u884c\u64cd\u4f5c\uff0c\u4ee5\u4fbf\u5411EKS\u6dfb\u52a0\u6240\u9700\u7684Kubernetes\u8d44\u6e90\u7b49\uff0c\u4f7f\u5176\u80fd\u591f\u8fd0\u884c\u3002<\/p>\n<p>\u8fd9\u4e2a\u5b9a\u5236\u9879\u76ee\u521b\u5efa\u7684\u76d1\u63a7\u73af\u5883\u5927\u81f4\u7ed3\u6784\u5982\u4e0b\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/12-0.png\" alt=\"monitoring.png\" \/><\/div>\n<p>Alertmanager\u548cPrometheus\u4ee53\u4e2a\u526f\u672c\u7684\u5197\u4f59\u914d\u7f6e\u8fdb\u884c\u90e8\u7f72\u3002<br \/>\nPrometheus\u6536\u96c6\u7684\u6307\u6807\u6570\u636e\u5b58\u50a8\u5728Amazon EBS\u4e2d\u3002\u7531\u4e8eEBS\u65e0\u6cd5\u8de8\u8d8a\u53ef\u7528\u533a\u8bbf\u95ee\uff0c\u56e0\u6b64\u5728\u4f7f\u7528\u591a\u533a\u57df\u53ef\u7528\u533a\u914d\u7f6e\u65f6\uff0c\u5fc5\u987b\u81f3\u5c11\u4e3aPrometheus\u63d0\u4f9b\u4e0e\u53ef\u7528\u533a\u6570\u91cf\u76f8\u7b49\u7684\u526f\u672c\u6570\uff0c\u6216\u8005\u5982\u679c\u4f7f\u7528\u5c11\u4e8e\u53ef\u7528\u533a\u6570\u91cf\u7684\u526f\u672c\u6570\u6765\u8fd0\u884cPrometheus\uff0c\u5219\u9700\u8981\u6ce8\u610f\u901a\u8fc7Affinity\u7b49\u65b9\u5f0f\u6307\u5b9aPrometheus\u6240\u5728\u7684\u53ef\u7528\u533a\u3002<\/p>\n<p>\u5728\u8fd9\u4e2a\u81ea\u5b9a\u4e49\u9879\u76ee\u4e2d\uff0cALB Ingress Controller\u8d1f\u8d23\u521b\u5efa\u7528\u4e8eGrafana\u3001Prometheus\u548cAlertmanager\u7684ALB\uff0c\u800cExternalDNS\u8d1f\u8d23\u521b\u5efa\u6bcf\u4e2aALB\u7684DNS A\u8bb0\u5f55\u3002\u524d\u63d0\u662fALB Ingress Controller\u548cExternalDNS\u5728\u540c\u4e00\u4e2aKubernetes\u96c6\u7fa4\u4e2d\u8fd0\u884c\u3002<\/p>\n<h2>\u6587\u4ef6\u7ec4\u7ec7\u7ed3\u6784<\/h2>\n<p>\u5b9a\u5236\u9879\u76ee\u7684\u6587\u4ef6\u7ed3\u6784\u5982\u4e0b\u6240\u793a\u3002<\/p>\n<pre class=\"post-pre\"><code>.\r\n\u251c\u2500\u2500 base.libsonnet\r\n\u251c\u2500\u2500 build.sh\r\n\u251c\u2500\u2500 dev.jsonnet\r\n\u251c\u2500\u2500 stg.jsonnet\r\n\u251c\u2500\u2500 prd.jsonnet\r\n\u251c\u2500\u2500 jsonnetfile.json\r\n\u251c\u2500\u2500 jsonnetfile.lock.json\r\n\u251c\u2500\u2500 custom-dashboards\r\n\u2502   \u2514\u2500\u2500 cluster-autoscaler-stats.json\r\n\u251c\u2500\u2500 vendor\r\n\u2502   \u251c\u2500\u2500 \u7701\u7565(kube-prometheus\u3068\u4f9d\u5b58\u3059\u308b\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u306ejsonnet\u30d5\u30a1\u30a4\u30eb\u7fa4)\r\n\u2514\u2500\u2500 manifests\r\n \u00a0\u00a0 \u251c\u2500\u2500 dev\r\n \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \u7701\u7565(dev\u74b0\u5883\u306e\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb)\r\n \u00a0\u00a0 \u251c\u2500\u2500 stg\r\n \u00a0\u00a0 \u2502\u00a0\u00a0 \u251c\u2500\u2500 \u7701\u7565(stg\u74b0\u5883\u306e\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb)\r\n \u00a0\u00a0 \u2514\u2500\u2500 prd\r\n \u00a0\u00a0  \u00a0\u00a0 \u251c\u2500\u2500 \u7701\u7565(prd\u74b0\u5883\u306e\u30de\u30cb\u30d5\u30a7\u30b9\u30c8\u30d5\u30a1\u30a4\u30eb)\r\n<\/code><\/pre>\n<p>jsonnetfile.json\u548cjsonnetfile.lock.json\u662f\u5728\u4e0b\u9762\u6240\u793a\u7684\u81ea\u5b9a\u4e49\u9879\u76ee\u521d\u59cb\u5316\u8fc7\u7a0b\u4e2d\u751f\u6210\u7684\u6587\u4ef6\u3002\u5b83\u4eec\u7531jsonnet-bundler\u8f6f\u4ef6\u5305\u7ba1\u7406\u5668\u7ba1\u7406\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>jb init\r\n<span class=\"nv\">$ <\/span>jb <span class=\"nb\">install <\/span>github.com\/coreos\/kube-prometheus\/jsonnet\/kube-prometheus@release-0.3\r\n<\/code><\/pre>\n<p>\u8981\u66f4\u65b0\u4f9d\u8d56\u4e8ejsonnet\u9879\u76ee\u7684\u7248\u672c\uff0c\u8bf7\u6267\u884c\u4ee5\u4e0b\u547d\u4ee4\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nv\">$ <\/span>jb update\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4f1a\u4f9d\u6b21\u4ecb\u7ecd\u81ea\u5b9a\u4e49\u9879\u76ee\u4e2d\u7684\u6587\u4ef6\u3002<\/p>\n<p>\u9996\u5148\uff0ckube-prometheus\u7684\u7248\u672c\u88ab\u6307\u5b9a\u4e3a0.3\u3002kube-prometheus\u7684\u7248\u672c\u5728jsonnetfile.json\u6587\u4ef6\u4e2d\u6307\u5b9a\uff08release-0.3\u6307\u5b9a\u4e86\u7248\u672c\uff09\u3002<br \/>\n\u987a\u4fbf\u8bf4\u4e00\u4e0b\uff0c\u6211\u4eec\u4e4b\u524d\u4e00\u76f4\u4f7f\u7528kube-prometheus\u76840.1\u7248\u672c\u6765\u8fdb\u884c\u8fd0\u8425\uff0c\u4f46\u662f\u5347\u7ea7\u5230\u4e860.3\u7248\u672c\u540e\uff0c\u53ef\u4ee5\u751f\u6210\u7528\u4e8e\u76d1\u89c6CoreDNS\u7684Service\u7684\u6e05\u5355\u6587\u4ef6\uff0c\u5e76\u4e14Grafana\u7684\u4eea\u8868\u76d8\u4e5f\u589e\u52a0\u4e86\u8bb8\u591a\uff0c\u8ba9\u4eba\u611f\u5230\u975e\u5e38\u6fc0\u52a8\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">{<\/span>\r\n    <span class=\"nl\">\"dependencies\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n        <span class=\"p\">{<\/span>\r\n            <span class=\"nl\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"kube-prometheus\"<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nl\">\"source\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nl\">\"git\"<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                    <span class=\"nl\">\"remote\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"https:\/\/github.com\/coreos\/kube-prometheus\"<\/span><span class=\"p\">,<\/span>\r\n                    <span class=\"nl\">\"subdir\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"jsonnet\/kube-prometheus\"<\/span>\r\n                <span class=\"p\">}<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"nl\">\"version\"<\/span><span class=\"p\">:<\/span> <span class=\"s2\">\"release-0.3\"<\/span>\r\n        <span class=\"p\">}<\/span>\r\n    <span class=\"p\">]<\/span>\r\n<span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<h4>\u9644\u52a0\u8bf4\u660e\uff1a\u5173\u4e8ekube-prometheus\u7684\u4f9d\u8d56\u9879\u76ee\u7684\u5305\u7ba1\u7406<\/h4>\n<p>kube-prometheus\u9879\u76ee\u4f7f\u7528jsonnet\u8fdb\u884c\u914d\u7f6e\uff0c\u540c\u65f6\u4f9d\u8d56\u591a\u4e2agithub\u9879\u76ee\u4e2d\u7684jsonnet\u6587\u4ef6\uff0c\u901a\u8fc7\u7ec4\u5408\u8fd9\u4e9bjsonnet\u6587\u4ef6\u6765\u6784\u5efa\u6e05\u5355\u6587\u4ef6\u3002jsonnet\u7684\u5305\u7ba1\u7406\u5668\u4f7f\u7528jsonnet-bundler\uff0c\u5e76\u901a\u8fc7\u6267\u884c\u4e0a\u8ff0\u5b9a\u5236\u9879\u76ee\u7684\u521d\u59cb\u5316\u6b65\u9aa4\u4e2d\u7684jb install\u547d\u4ee4\uff0c\u5c06kube-prometheus\u53ca\u5176\u4f9d\u8d56\u9879\u76ee\u7684jsonnet\u6587\u4ef6\u96c6\u4e0b\u8f7d\u5230vendor\u76ee\u5f55\u4e0b\u3002<\/p>\n<h2>\u81ea\u5b9a\u4e49\u9879\u76ee\u7684jsonnet\u6587\u4ef6\u7ed3\u6784<\/h2>\n<p>\u4e3a\u4e86\u6269\u5c55kube-prometheus\u7684\u6e05\u5355\u6587\u4ef6\uff0c\u6211\u4eec\u521b\u5efa\u4e86\u4e00\u4e2a\u540d\u4e3abase.libsonnet\u7684\u6587\u4ef6\uff0c\u5e76\u6dfb\u52a0\u4e86\u6240\u9700\u7684\u5143\u7d20\u3002<\/p>\n<details>base.libsonnet<br \/>\nlocal k = import &#8216;ksonnet\/ksonnet.beta.3\/k.libsonnet&#8217;;<br \/>\nlocal secret = k\u6838\u5fc3.v1.\u79c1\u5bc6;<br \/>\nlocal ingress = k\u6269\u5c55.v1beta1.\u8fdb\u5165;<br \/>\nlocal ingressRule = ingress.mixin.spec.rulesType;<br \/>\nlocal httpIngressPath = ingressRule.mixin.http.pathsType;<br \/>\nlocal limitRange = k\u6838\u5fc3.v1\u9650\u5236\u8303\u56f4;<br \/>\nlocal limitRangeItem = limitRange.mixin.spec.limitsType;<br \/>\nlocal pvc = k\u6838\u5fc3.v1\u6301\u4e45\u5377\u7d22\u8d54;<br \/>\nlocal sc = k\u5b58\u50a8.v1.\u5b58\u50a8\u7c7b;(import &#8216;kube-prometheus\/kube-prometheus.libsonnet&#8217;) +<br \/>\n(import &#8216;kube-prometheus\/kube-prometheus-eks.libsonnet&#8217;) +<br \/>\n(import &#8216;kube-prometheus\/kube-prometheus-node-ports.libsonnet&#8217;) +<br \/>\n(import &#8216;kube-prometheus\/kube-prometheus-managed-cluster.libsonnet&#8217;) +<br \/>\n{<br \/>\n\u914d\u7f6e:: {<br \/>\nenv: &#8221;,<br \/>\nnamespace: &#8216;monitoring&#8217;,<br \/>\nurlProtocol: &#8221;,<br \/>\ndomain: &#8221;,<br \/>\nsubnets: &#8221;,<br \/>\ngrafana: {<br \/>\n\u5b89\u5168\u7ec4: &#8221;,<br \/>\n\u8ba4\u8bc1: {<br \/>\n\u7ba1\u7406\u5458\u5bc6\u7801: &#8221;,<br \/>\n\u5ba2\u6237\u7aefID: &#8221;,<br \/>\n\u5ba2\u6237\u7aef\u5bc6\u94a5: &#8221;<br \/>\n}<br \/>\n},<br \/>\nalertmanager: {<br \/>\n\u5b89\u5168\u7ec4: &#8221;,<br \/>\n\u542f\u53d1: {<br \/>\n\u4e25\u91cd: {<br \/>\n\u9891\u9053: &#8221;,<br \/>\napi\u7f51\u5740: &#8221;<br \/>\n},<br \/>\n\u8b66\u544a: {<br \/>\n\u9891\u9053: &#8221;,<br \/>\napi\u7f51\u5740: &#8221;<br \/>\n},<br \/>\n\u770b\u95e8\u72d7: {<br \/>\n\u9891\u9053: &#8221;,<br \/>\napi\u7f51\u5740: &#8221;<br \/>\n}<br \/>\n},<br \/>\n},<br \/>\nprometheus: {<br \/>\n\u5b89\u5168\u7ec4: &#8221;,<br \/>\n\u5b58\u50a8: {<br \/>\n\u4fdd\u7559\u65f6\u95f4: &#8221;,<br \/>\n\u5927\u5c0f: &#8221;,<br \/>\n\u56de\u6536\u7b56\u7565: &#8216;Delete&#8217;,<br \/>\n\u5141\u8bb8\u5377\u6269\u5c55: true<br \/>\n},<br \/>\n},<br \/>\n\u57df\u524d\u7f00: if $.config.env == &#8216;prd&#8217; then &#8221; else $.config.env + &#8216;-&#8216;,<br \/>\ncognito: &#8221;,<br \/>\n},<br \/>\n} + {<br \/>\n_config +:: {<br \/>\njobs: {<br \/>\nKubelet: $._config.kubelet\u9009\u62e9\u5668,<br \/>\nKubeAPI: $._config.kubeApi\u670d\u52a1\u5668<\/p>\n<\/details>\n<p>\u4ee5\u4e0b\u662fdev\u73af\u5883\u7528\u7684dev.jsonnet\u6587\u4ef6\u3002\u7531\u4e8e\u5b89\u5168\u7ec4\u548c\u5b50\u7f51\u7b49\u4fe1\u606f\u5728\u6bcf\u4e2a\u73af\u5883\u4e2d\u53ef\u80fd\u4e0d\u540c\uff0c\u56e0\u6b64\u6211\u4eec\u5c06\u8fd9\u4e9b\u914d\u7f6e\u503c\u7684\u53d8\u91cf\u51c6\u5907\u5728base.libsonnet\u6587\u4ef6\u7684config\u5143\u7d20\u4e2d\u3002\u6211\u4eec\u901a\u8fc7\u5c06\u5e26\u6709\u73af\u5883\u6807\u8bc6\u7b26\u7684jsonnet\u6587\u4ef6\uff08\u5982dev.jsonnet\uff09\u5bfc\u5165base.libsonnet\uff0c\u5e76\u901a\u8fc7\u8986\u76d6config\u5143\u7d20\u7684\u53d8\u91cf\u6765\u53cd\u6620\u6bcf\u4e2a\u73af\u5883\u7684\u914d\u7f6e\u503c\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">((<\/span><span class=\"k\">import<\/span> <span class=\"s\">\"base.libsonnet\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n<span class=\"p\">{<\/span>\r\n  <span class=\"nx\">config<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">env<\/span><span class=\"p\">:<\/span> <span class=\"s\">'dev'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">urlProtocol<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">domain<\/span><span class=\"p\">:<\/span> <span class=\"s\">'hoge.com'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">subnets<\/span><span class=\"p\">:<\/span> <span class=\"s\">'subnet-xxxx,subnet-yyyy,subnet-zzzz'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">acmArn<\/span><span class=\"p\">:<\/span> <span class=\"s\">'arn:aws:acm:ap-northeast-1:xxxx:certificate\/xxxx'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">cognito<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{\"UserPoolArn\":\"arn:aws:cognito-idp:ap-northeast-1:xxxx:userpool\/ap-northeast-1_xxxx\",\"UserPoolClientId\":\"xxxx\",\"UserPoolDomain\":\"developer\"}'<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">securityGroup<\/span><span class=\"p\">:<\/span> <span class=\"s\">'sg-xxxx'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">auth<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">adminPassword<\/span><span class=\"p\">:<\/span> <span class=\"s\">'hoge'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"nx\">clientId<\/span><span class=\"p\">:<\/span> <span class=\"s\">'xxxx'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"nx\">clientSecret<\/span><span class=\"p\">:<\/span> <span class=\"s\">'yyyy'<\/span>\r\n      <span class=\"p\">}<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">alertmanager<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">securityGroup<\/span><span class=\"p\">:<\/span> <span class=\"s\">'sg-yyyy'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">slack<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">critical<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"s\">'#prom-alert-dev'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/hooks.slack.com\/services\/xxxx\/yyyy\/zzzz'<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">warning<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"s\">'#prom-alert-dev'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/hooks.slack.com\/services\/xxxx\/yyyy\/zzzz'<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">watchdog<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"s\">'#prom-alert-watchdog'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/hooks.slack.com\/services\/xxxx\/yyyy\/zzzz'<\/span>\r\n        <span class=\"p\">}<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">securityGroup<\/span><span class=\"p\">:<\/span> <span class=\"s\">'sg-zzzz'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">storage<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">retention<\/span><span class=\"p\">:<\/span> <span class=\"s\">'30d'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"nx\">size<\/span><span class=\"p\">:<\/span> <span class=\"s\">'30Gi'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<span class=\"p\">}).<\/span><span class=\"nx\">build<\/span><span class=\"p\">()<\/span>\r\n<\/code><\/pre>\n<h3>\u5982\u4f55\u8f93\u51fa\u6e05\u5355\u6587\u4ef6<\/h3>\n<p>\u6211\u4eec\u51c6\u5907\u4e86\u4e00\u4e2a\u811a\u672cbuild.sh\u6765\u8f93\u51fa\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"c\">#!\/bin\/sh<\/span>\r\n\r\n<span class=\"nb\">set<\/span> <span class=\"nt\">-exo<\/span> pipefail\r\n\r\n<span class=\"nv\">environment<\/span><span class=\"o\">=<\/span><span class=\"nv\">$1<\/span>\r\n<span class=\"nv\">target_dir<\/span><span class=\"o\">=<\/span>manifests\/<span class=\"k\">${<\/span><span class=\"nv\">environment<\/span><span class=\"k\">}<\/span>\r\n<span class=\"nv\">temp_dir<\/span><span class=\"o\">=<\/span>temp\r\n\r\n<span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> <span class=\"k\">${<\/span><span class=\"nv\">temp_dir<\/span><span class=\"k\">}<\/span>\r\n<span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> <span class=\"k\">${<\/span><span class=\"nv\">temp_dir<\/span><span class=\"k\">}<\/span>\r\n\r\njsonnet <span class=\"nt\">-J<\/span> vendor <span class=\"nt\">-m<\/span> <span class=\"k\">${<\/span><span class=\"nv\">temp_dir<\/span><span class=\"k\">}<\/span> <span class=\"s2\">\"<\/span><span class=\"k\">${<\/span><span class=\"nv\">environment<\/span><span class=\"k\">}<\/span><span class=\"s2\">.jsonnet\"<\/span> | xargs <span class=\"nt\">-I<\/span><span class=\"o\">{}<\/span> sh <span class=\"nt\">-c<\/span> <span class=\"s1\">'cat {} | gojsontoyaml &gt; {}.yaml; rm -f {}'<\/span> <span class=\"nt\">--<\/span> <span class=\"o\">{}<\/span>\r\n\r\n<span class=\"nb\">rm<\/span> <span class=\"nt\">-rf<\/span> <span class=\"k\">${<\/span><span class=\"nv\">target_dir<\/span><span class=\"k\">}<\/span>\r\n<span class=\"nb\">mkdir<\/span> <span class=\"nt\">-p<\/span> <span class=\"k\">${<\/span><span class=\"nv\">target_dir<\/span><span class=\"k\">}<\/span>\r\n<span class=\"nb\">mv<\/span> <span class=\"nt\">-f<\/span> <span class=\"k\">${<\/span><span class=\"nv\">temp_dir<\/span><span class=\"k\">}<\/span>\/<span class=\"k\">*<\/span>.yaml <span class=\"k\">${<\/span><span class=\"nv\">target_dir<\/span><span class=\"k\">}<\/span>\/\r\n<\/code><\/pre>\n<p>\u901a\u8fc7\u5728build.sh\u7684\u53c2\u6570\u4e2d\u6307\u5b9a\u73af\u5883\u6807\u8bc6\u7b26\uff08dev|stg|prd\uff09\u6765\u6267\u884cbuild.sh\uff0c\u4ece\u800c\u5c06\u540d\u4e3a\u73af\u5883\u6807\u8bc6\u7b26\u7684\u76ee\u5f55\uff08\u4f8b\u5982manifests\/dev\uff09\u4e0b\u7684manifests\u76ee\u5f55\u4e2d\u7684\u6587\u4ef6\u8f93\u51fa\u4e3a\u4e00\u4e2a\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<h2>\u4e3a\u4e86\u5728EKS\u4e0a\u8fd0\u884c\uff0c\u6240\u6dfb\u52a0\u7684\u5143\u7d20<\/h2>\n<p>\u6211\u5c06\u89e3\u91ca\u5982\u4f55\u901a\u8fc7\u6269\u5c55kube-prometheus\u7684\u6e05\u5355\u6587\u4ef6\u6765\u5728EKS\u73af\u5883\u4e2d\u8fd0\u884c\u5b83\u6240\u9700\u7684\u6dfb\u52a0\u7ec4\u4ef6\u3002<\/p>\n<h3>\u5bfc\u5165 kube-prometheus-eks.libsonnet<\/h3>\n<p>\u81ea kube-prometheus \u7684 0.3 \u7248\u672c\u5f00\u59cb\uff0c\u65b0\u589e\u4e86 kube-prometheus-eks.libsonnet\u3002\u901a\u8fc7\u5bfc\u5165\u8be5\u6587\u4ef6\uff0c\u5c06\u8f93\u51fa\u8bbf\u95ee CNI \u63d2\u4ef6\u7684\u6307\u6807\u7ec8\u7aef\u70b9\u6240\u9700\u7684 Service \u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws-node<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws-node<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kube-system<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">clusterIP<\/span><span class=\"pi\">:<\/span> <span class=\"s\">None<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">cni-metrics-port<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">61678<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">61678<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">k8s-app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">aws-node<\/span>\r\n<\/code><\/pre>\n<p>\u53e6\u5916\uff0c\u8fd8\u65b0\u589e\u4e86\u68c0\u6d4bIP\u5730\u5740\u67af\u7aed\u7684\u8b66\u62a5\u89c4\u5219\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/44-0.png\" alt=\"alertrule-cni.png\" \/><\/div>\n<p>\u53c2\u8003\uff1aCNI\u76d1\u63a7EKS\u7279\u5b9a\u914d\u7f6e\u7684\u66f4\u65b0<\/p>\n<h3>ALB Ingress Controller\u4e3aNodePort\u548cIngress\u7684\u5b9a\u4e49<\/h3>\n<p>\u5c31\u50cf\u8fd9\u7bc7\u6587\u7ae0\u7684\u5f00\u5934\u6240\u63d0\u5230\u7684\u90a3\u6837\uff0c\u6211\u4eec\u53ef\u4ee5\u901a\u8fc7Application Load Balancer\uff08ALB\uff09\u8bbf\u95eeGrafana\u3001Prometheus\u548cAlertmanager\u3002\u800c\u4e14\u8fd9\u4e9bALB\u662f\u901a\u8fc7ALB Ingress Controller\u521b\u5efa\u7684\u3002\u56e0\u6b64\uff0c\u6211\u4eec\u9700\u8981\u914d\u7f6e\u6e05\u5355\u6587\u4ef6\uff0c\u4ee5\u4fbfALB Ingress Controller\u53ef\u4ee5\u521b\u5efaALB\u3002<\/p>\n<p>\u9996\u5148\uff0c\u4e3a\u4e86\u5c06Grafana\u3001Prometheus\u548cAlertmanager\u7684Service\u7c7b\u578b\u66f4\u6539\u4e3aNodePort\uff0c\u5728base.libsonnet\u4e2d\u5bfc\u5165&#8217;kube-prometheus\/kube-prometheus-node-ports.libsonnet&#8217;\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"p\">(<\/span><span class=\"k\">import<\/span> <span class=\"s\">'kube-prometheus\/kube-prometheus-node-ports.libsonnet'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n<\/code><\/pre>\n<p>\u53ea\u9700\u8981\u4e00\u4e2a\u5019\u9009\u9879\uff1a<br \/>\n\u901a\u8fc7\u8fd9\u4e00\u64cd\u4f5c\uff0cService\u7684spec.type\u5c06\u88ab\u66f4\u6539\u4e3aNodePort\uff0c\u5e76\u4e14PortnodePort\u4e5f\u5c06\u88ab\u5b9a\u4e49\u5728manifest\u6587\u4ef6\u4e2d\uff0c\u4f5c\u4e3aNodePort Service\u7684\u5165\u53e3\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Service<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">prometheus<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus-k8s<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">ports<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n    <span class=\"na\">nodePort<\/span><span class=\"pi\">:<\/span> <span class=\"m\">30900<\/span>\r\n    <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"m\">9090<\/span>\r\n    <span class=\"na\">targetPort<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n  <span class=\"na\">selector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">app<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n    <span class=\"na\">prometheus<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s<\/span>\r\n  <span class=\"na\">sessionAffinity<\/span><span class=\"pi\">:<\/span> <span class=\"s\">ClientIP<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">NodePort<\/span>\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u5c06\u4e3aGrafana\u3001Prometheus\u548cAlertmanager\u6dfb\u52a0Ingress\u8d44\u6e90\u7684\u5b9a\u4e49\u5230base.libsonnet\u6587\u4ef6\u4e2d\u3002<\/p>\n<p>\u4e3a\u4e86\u5b9a\u4e49Ingress\u8d44\u6e90\uff0c\u53ef\u4ee5\u4f7f\u7528jsonnet\u6765\u5b9a\u4e49Kubernetes\u8d44\u6e90\u7684ksonnet\u3002\u5728base.libsonnet\u7684\u5f00\u5934\u5b9a\u4e49\u5982\u4e0b\uff0c\u5e76\u5728ksonnet\u4e2d\u5b9a\u4e49\u5fc5\u9700\u7684\u53d8\u91cf\u4ee5\u5b9a\u4e49Ingress\u8d44\u6e90\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"k\">local<\/span> <span class=\"nx\">k<\/span> <span class=\"p\">=<\/span> <span class=\"k\">import<\/span> <span class=\"s\">'ksonnet\/ksonnet.beta.3\/k.libsonnet'<\/span><span class=\"p\">;<\/span>\r\n\r\n<span class=\"k\">local<\/span> <span class=\"nx\">ingress<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">k<\/span><span class=\"p\">.<\/span><span class=\"nx\">extensions<\/span><span class=\"p\">.<\/span><span class=\"nx\">v1beta1<\/span><span class=\"p\">.<\/span><span class=\"nx\">ingress<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">local<\/span> <span class=\"nx\">ingressRule<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">spec<\/span><span class=\"p\">.<\/span><span class=\"nx\">rulesType<\/span><span class=\"p\">;<\/span>\r\n<span class=\"k\">local<\/span> <span class=\"nx\">httpIngressPath<\/span> <span class=\"p\">=<\/span> <span class=\"nx\">ingressRule<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">pathsType<\/span><span class=\"p\">;<\/span>\r\n<\/code><\/pre>\n<p>\u4e0b\u4e00\u6b65\u662f\u5b9a\u4e49 Ingress \u8d44\u6e90\u3002\u4e0b\u9762\u662f\u4ece base.libsonnet \u6587\u4ef6\u4e2d\u63d0\u53d6\u51fa\u6765\u7684\u7528\u4e8e Alertmanager \u7684 Ingress \u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nx\">ingress<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"s\">'alertmanager-main'<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">new<\/span><span class=\"p\">()<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">withName<\/span><span class=\"p\">(<\/span><span class=\"s\">'alertmanager-main'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">withNamespace<\/span><span class=\"p\">(<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">namespace<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">withAnnotations<\/span><span class=\"p\">({<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-idp-cognito'<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">cognito<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-on-unauthenticated-request'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'authenticate'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-scope'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'openid'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-session-cookie'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'AWSELBAuthSessionCookie'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-session-timeout'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'604800'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/auth-type'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'cognito'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/healthcheck-path'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'\/-\/healthy'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/scheme'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'internet-facing'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/security-groups'<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">securityGroup<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/subnets'<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">subnets<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/tags'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'env=%s,app=alertmanager-main'<\/span> <span class=\"p\">%<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">env<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/target-group-attributes'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'stickiness.enabled=true,stickiness.lb_cookie.duration_seconds=60'<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'alb.ingress.kubernetes.io\/certificate-arn'<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">acmArn<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"s\">'kubernetes.io\/ingress.class'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'alb'<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"p\">})<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">ingress<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">spec<\/span><span class=\"p\">.<\/span><span class=\"nx\">withRules<\/span><span class=\"p\">(<\/span>\r\n        <span class=\"nx\">ingressRule<\/span><span class=\"p\">.<\/span><span class=\"nx\">new<\/span><span class=\"p\">()<\/span> <span class=\"p\">+<\/span>\r\n        <span class=\"nx\">ingressRule<\/span><span class=\"p\">.<\/span><span class=\"nx\">withHost<\/span><span class=\"p\">(<\/span><span class=\"s\">'%salertmanager.%s'<\/span> <span class=\"p\">%<\/span> <span class=\"p\">[<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domainPrefix<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domain<\/span><span class=\"p\">])<\/span> <span class=\"p\">+<\/span>\r\n        <span class=\"nx\">ingressRule<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">http<\/span><span class=\"p\">.<\/span><span class=\"nx\">withPaths<\/span><span class=\"p\">(<\/span>\r\n          <span class=\"nx\">httpIngressPath<\/span><span class=\"p\">.<\/span><span class=\"nx\">new<\/span><span class=\"p\">()<\/span> <span class=\"p\">+<\/span>\r\n          <span class=\"nx\">httpIngressPath<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">backend<\/span><span class=\"p\">.<\/span><span class=\"nx\">withServiceName<\/span><span class=\"p\">(<\/span><span class=\"s\">'alertmanager-main'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n          <span class=\"nx\">httpIngressPath<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">backend<\/span><span class=\"p\">.<\/span><span class=\"nx\">withServicePort<\/span><span class=\"p\">(<\/span><span class=\"s\">'web'<\/span><span class=\"p\">)<\/span>\r\n        <span class=\"p\">),<\/span>\r\n      <span class=\"p\">),<\/span>\r\n<\/code><\/pre>\n<p>\u7531\u4e8e\u6211\u4eec\u60f3\u8981\u4f7f\u7528Cognito\u8fdb\u884c\u8eab\u4efd\u9a8c\u8bc1\uff0c\u56e0\u6b64\u6807\u6ce8\u7684\u5b9a\u4e49\u53d8\u5f97\u5197\u957f\u3002<br \/>\n\u6211\u4eec\u5c06\u5404\u4e2a\u73af\u5883\u4e2d\u5b58\u5728\u5dee\u5f02\u7684\u4fe1\u606f\u5438\u6536\u5230\u5148\u524d\u63d0\u5230\u7684config\u5b57\u6bb5\u4e2d\u7684\u53d8\u91cf\u4e2d\uff0c\u5e76\u8fdb\u884c\u5f15\u7528\u3002<\/p>\n<p>\u6700\u7ec8\uff0c\u5728base.libsonnet\u7684build()\u51fd\u6570\u5185\u589e\u52a0\u4e00\u4e2a\u8f93\u51faIngress\u4f7f\u7528\u7684\u6e05\u5355\u6587\u4ef6\u7684\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">{<\/span>\r\n  build()::\r\n    { ['00namespace-' + name]: $.kubePrometheus[name] for name in std.objectFields($.kubePrometheus) } +\r\n    { ['0prometheus-operator-' + name]: $.prometheusOperator[name] for name in std.objectFields($.prometheusOperator) } +\r\n    { ['node-exporter-' + name]: $.nodeExporter[name] for name in std.objectFields($.nodeExporter) } +\r\n    { ['kube-state-metrics-' + name]: $.kubeStateMetrics[name] for name in std.objectFields($.kubeStateMetrics) } +\r\n    { ['alertmanager-' + name]: $.alertmanager[name] for name in std.objectFields($.alertmanager) } +\r\n    { ['prometheus-' + name]: $.prometheus[name] for name in std.objectFields($.prometheus) } +\r\n    { ['prometheus-adapter-' + name]: $.prometheusAdapter[name] for name in std.objectFields($.prometheusAdapter) } +\r\n    { ['grafana-' + name]: $.grafana[name] for name in std.objectFields($.grafana) } +\r\n<span class=\"gi\">+    { ['ingress-' + name]: $.ingress[name] for name in std.objectFields($.ingress) } +\r\n<\/span>    { ['storage-class-' + name]: $.storageClass[name] for name in std.objectFields($.storageClass) } +\r\n    { ['common-' + name]: $.common[name] for name in std.objectFields($.common) }\r\n<span class=\"err\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5c06\u4f1a\u8f93\u51fa\u540d\u4e3a ingress-alertmanager-main.yaml\u3001ingress-grafana.yaml \u548c ingress-prometheus-k8s.yaml \u7684\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<h3>\u5b9a\u4e49\u7528\u4e8eEBS\u7684StorageClass\u548cvolumeClaimTemplate\u3002<\/h3>\n<p>\u6b63\u5982\u524d\u9762\u6240\u8ff0\uff0cPrometheus\u6536\u96c6\u7684\u6307\u6807\u6570\u636e\u88ab\u4fdd\u5b58\u5728EBS\u4e0a\u3002Prometheus\u7684Pod\u662f\u4f7f\u7528StatefulSet\u6765\u90e8\u7f72\u7684\uff0c\u6211\u4eec\u4f1a\u6dfb\u52a0\u5b9a\u4e49\uff0c\u4ee5\u786e\u4fddPrometheus\u7684Pod\u53ef\u4ee5\u8bbf\u95eeEBS\u3002<\/p>\n<p>\u9996\u5148\uff0c\u6211\u4eec\u9700\u8981\u6dfb\u52a0 StorageClass \u7684\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nx\">storageClass<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">:<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">new<\/span><span class=\"p\">()<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">withProvisioner<\/span><span class=\"p\">(<\/span><span class=\"s\">'kubernetes.io\/aws-ebs'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">metadata<\/span><span class=\"p\">.<\/span><span class=\"nx\">withName<\/span><span class=\"p\">(<\/span><span class=\"s\">'prometheus'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">withParameters<\/span><span class=\"p\">({<\/span>\r\n        <span class=\"s\">'type'<\/span><span class=\"p\">:<\/span> <span class=\"s\">'gp2'<\/span>\r\n      <span class=\"p\">})<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">withReclaimPolicy<\/span><span class=\"p\">(<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheus<\/span><span class=\"p\">.<\/span><span class=\"nx\">storage<\/span><span class=\"p\">.<\/span><span class=\"nx\">reclaimPolicy<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n      <span class=\"nx\">sc<\/span><span class=\"p\">.<\/span><span class=\"nx\">withAllowVolumeExpansion<\/span><span class=\"p\">(<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheus<\/span><span class=\"p\">.<\/span><span class=\"nx\">storage<\/span><span class=\"p\">.<\/span><span class=\"nx\">allowVolumeExpansion<\/span><span class=\"p\">),<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u6dfb\u52a0\u4ee5\u4e0b\u5b9a\u4e49\uff0c\u4ee5\u4fbf\u80fd\u591f\u8f93\u51fa\u4e0a\u8ff0\u5b9a\u4e49\u7684StorageClass\u7684\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"err\">{<\/span>\r\n  build()::\r\n    { ['00namespace-' + name]: $.kubePrometheus[name] for name in std.objectFields($.kubePrometheus) } +\r\n    { ['0prometheus-operator-' + name]: $.prometheusOperator[name] for name in std.objectFields($.prometheusOperator) } +\r\n    { ['node-exporter-' + name]: $.nodeExporter[name] for name in std.objectFields($.nodeExporter) } +\r\n    { ['kube-state-metrics-' + name]: $.kubeStateMetrics[name] for name in std.objectFields($.kubeStateMetrics) } +\r\n    { ['alertmanager-' + name]: $.alertmanager[name] for name in std.objectFields($.alertmanager) } +\r\n    { ['prometheus-' + name]: $.prometheus[name] for name in std.objectFields($.prometheus) } +\r\n    { ['prometheus-adapter-' + name]: $.prometheusAdapter[name] for name in std.objectFields($.prometheusAdapter) } +\r\n    { ['grafana-' + name]: $.grafana[name] for name in std.objectFields($.grafana) } +\r\n    { ['ingress-' + name]: $.ingress[name] for name in std.objectFields($.ingress) } +\r\n<span class=\"gi\">+    { ['storage-class-' + name]: $.storageClass[name] for name in std.objectFields($.storageClass) } +\r\n<\/span>    { ['common-' + name]: $.common[name] for name in std.objectFields($.common) }\r\n<span class=\"err\">}<\/span>\r\n<\/code><\/pre>\n<p>\u6839\u636e\u4ee5\u4e0a\u7684\u5b9a\u4e49\uff0c\u5c06\u4f1a\u751f\u6210\u4e0b\u9762\u7684StorageClass\u8d44\u6e90\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">allowVolumeExpansion<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n<span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">storage.k8s.io\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">StorageClass<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n<span class=\"na\">parameters<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">type<\/span><span class=\"pi\">:<\/span> <span class=\"s\">gp2<\/span>\r\n<span class=\"na\">provisioner<\/span><span class=\"pi\">:<\/span> <span class=\"s\">kubernetes.io\/aws-ebs<\/span>\r\n<span class=\"na\">reclaimPolicy<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Delete<\/span>\r\n<\/code><\/pre>\n<p>\u6700\u540e\u6dfb\u52a0 Prometheus CRD \u4e2d\u7684 spec.storage.volumeClaimTemplate\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nx\">prometheus<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">spec<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">externalUrl<\/span><span class=\"p\">:<\/span> <span class=\"s\">'%s:\/\/%sprometheus.%s'<\/span> <span class=\"p\">%<\/span> <span class=\"p\">[<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">urlProtocol<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domainPrefix<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domain<\/span><span class=\"p\">],<\/span>\r\n        <span class=\"nx\">retention<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheus<\/span><span class=\"p\">.<\/span><span class=\"nx\">storage<\/span><span class=\"p\">.<\/span><span class=\"nx\">retention<\/span><span class=\"p\">,<\/span>\r\n        <span class=\"nx\">storage<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">volumeClaimTemplate<\/span><span class=\"p\">:<\/span>\r\n            <span class=\"nx\">pvc<\/span><span class=\"p\">.<\/span><span class=\"nx\">new<\/span><span class=\"p\">()<\/span> <span class=\"p\">+<\/span>\r\n            <span class=\"nx\">pvc<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">spec<\/span><span class=\"p\">.<\/span><span class=\"nx\">withAccessModes<\/span><span class=\"p\">(<\/span><span class=\"s\">'ReadWriteOnce'<\/span><span class=\"p\">)<\/span> <span class=\"p\">+<\/span>\r\n            <span class=\"nx\">pvc<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">spec<\/span><span class=\"p\">.<\/span><span class=\"nx\">resources<\/span><span class=\"p\">.<\/span><span class=\"nx\">withRequests<\/span><span class=\"p\">({<\/span> <span class=\"nx\">storage<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheus<\/span><span class=\"p\">.<\/span><span class=\"nx\">storage<\/span><span class=\"p\">.<\/span><span class=\"nx\">size<\/span> <span class=\"p\">})<\/span> <span class=\"p\">+<\/span>\r\n            <span class=\"nx\">pvc<\/span><span class=\"p\">.<\/span><span class=\"nx\">mixin<\/span><span class=\"p\">.<\/span><span class=\"nx\">spec<\/span><span class=\"p\">.<\/span><span class=\"nx\">withStorageClassName<\/span><span class=\"p\">(<\/span><span class=\"s\">'prometheus'<\/span><span class=\"p\">),<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u4f7f\u7528\u4e0a\u8ff0\u5b9a\u4e49\uff0c\u5c06\u5728\u8f93\u51fa\u7684Prometheus\u8d44\u6e90\u6e05\u5355\u6587\u4ef6\u4e2d\u6dfb\u52a0spec.storage.volumeClaimTemplate\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring.coreos.com\/v1<\/span>\r\n<span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Prometheus<\/span>\r\n<span class=\"na\">metadata<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">prometheus<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s<\/span>\r\n  <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s<\/span>\r\n  <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring<\/span>\r\n<span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n  <span class=\"na\">alerting<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">alertmanagers<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">name<\/span><span class=\"pi\">:<\/span> <span class=\"s\">alertmanager-main<\/span>\r\n      <span class=\"na\">namespace<\/span><span class=\"pi\">:<\/span> <span class=\"s\">monitoring<\/span>\r\n      <span class=\"na\">port<\/span><span class=\"pi\">:<\/span> <span class=\"s\">web<\/span>\r\n  <span class=\"na\">baseImage<\/span><span class=\"pi\">:<\/span> <span class=\"s\">quay.io\/prometheus\/prometheus<\/span>\r\n  <span class=\"na\">externalUrl<\/span><span class=\"pi\">:<\/span> <span class=\"s\">https:\/\/dev-hoge.com<\/span>\r\n  <span class=\"na\">nodeSelector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"s\">beta.kubernetes.io\/os<\/span><span class=\"pi\">:<\/span> <span class=\"s\">linux<\/span>\r\n  <span class=\"na\">replicas<\/span><span class=\"pi\">:<\/span> <span class=\"m\">3<\/span>\r\n  <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">memory<\/span><span class=\"pi\">:<\/span> <span class=\"s\">400Mi<\/span>\r\n  <span class=\"na\">retention<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30d<\/span>\r\n  <span class=\"na\">ruleSelector<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">matchLabels<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">prometheus<\/span><span class=\"pi\">:<\/span> <span class=\"s\">k8s<\/span>\r\n      <span class=\"na\">role<\/span><span class=\"pi\">:<\/span> <span class=\"s\">alert-rules<\/span>\r\n  <span class=\"na\">securityContext<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">fsGroup<\/span><span class=\"pi\">:<\/span> <span class=\"m\">2000<\/span>\r\n    <span class=\"na\">runAsNonRoot<\/span><span class=\"pi\">:<\/span> <span class=\"no\">true<\/span>\r\n    <span class=\"na\">runAsUser<\/span><span class=\"pi\">:<\/span> <span class=\"m\">1000<\/span>\r\n  <span class=\"na\">serviceAccountName<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus-k8s<\/span>\r\n  <span class=\"na\">serviceMonitorNamespaceSelector<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">{}<\/span>\r\n  <span class=\"na\">serviceMonitorSelector<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">{}<\/span>\r\n  <span class=\"na\">storage<\/span><span class=\"pi\">:<\/span>\r\n    <span class=\"na\">volumeClaimTemplate<\/span><span class=\"pi\">:<\/span>\r\n      <span class=\"na\">apiVersion<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v1<\/span>\r\n      <span class=\"na\">kind<\/span><span class=\"pi\">:<\/span> <span class=\"s\">PersistentVolumeClaim<\/span>\r\n      <span class=\"na\">spec<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">accessModes<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"pi\">-<\/span> <span class=\"s\">ReadWriteOnce<\/span>\r\n        <span class=\"na\">resources<\/span><span class=\"pi\">:<\/span>\r\n          <span class=\"na\">requests<\/span><span class=\"pi\">:<\/span>\r\n            <span class=\"na\">storage<\/span><span class=\"pi\">:<\/span> <span class=\"s\">30Gi<\/span>\r\n        <span class=\"na\">storageClassName<\/span><span class=\"pi\">:<\/span> <span class=\"s\">prometheus<\/span>\r\n  <span class=\"na\">version<\/span><span class=\"pi\">:<\/span> <span class=\"s\">v2.7.2<\/span>\r\n<\/code><\/pre>\n<p>\u73b0\u5728\uff0cPrometheus\u53ef\u4ee5\u5c06\u6570\u636e\u4fdd\u5b58\u5230EBS\u4e0a\u4e86\u3002<\/p>\n<h2>\u5176\u4ed6\u5173\u4e8ebase.libsonnet\u7684\u5b9a\u4e49<\/h2>\n<p>\u867d\u7136\u4e0e\u5728EKS\u4e0a\u8fd0\u884c\u76f8\u5173\u6027\u4e0d\u5927\uff0c\u4f46\u5728\u8fd9\u91cc\u6211\u4eec\u5c06\u7ed9\u51fa\u5173\u4e8ebase.libsonnet\u6587\u4ef6\u4e2d\u5176\u4ed6\u5b9a\u4e49\u7684\u89e3\u91ca\u4f5c\u4e3a\u8865\u5145\u3002<br \/>\n\u9996\u5148\uff0c\u6211\u4eec\u8981\u8bb2\u7684\u662f\u4f4d\u4e8ebase.libsonnet\u9876\u5c42\u7684_config\u5b57\u6bb5\u3002<br \/>\n_config\u5b57\u6bb5\u4e5f\u88ab\u5b9a\u4e49\u5728\u901a\u8fc7\u524d\u9762\u63d0\u5230\u7684jb\u547d\u4ee4\u4e0b\u8f7d\u7684kube-prometheus\u53ca\u5176\u4f9d\u8d56\u7684jsonnet\u6587\u4ef6\u4e2d\uff0c\u5e76\u4e14\u5728\u5404\u4e2a\u5730\u65b9\u5f15\u7528_config\u5b57\u6bb5\u7684\u503c\u6765\u751f\u6210\u6e05\u5355\u6587\u4ef6\u3002\u56e0\u6b64\uff0c\u901a\u8fc7\u8986\u76d6_config\u5b57\u6bb5\u4e0b\u7684\u503c\uff0c\u6211\u4eec\u53ef\u4ee5\u4fee\u6539\u751f\u6210\u7684\u6e05\u5355\u6587\u4ef6\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>  <span class=\"nx\">_config<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n    <span class=\"nx\">jobs<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">Kubelet<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeletSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">KubeAPI<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeApiserverSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">KubeStateMetrics<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeStateMetricsSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">NodeExporter<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">nodeExporterSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">Alertmanager<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanagerSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">Prometheus<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheusSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">PrometheusOperator<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheusOperatorSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">CoreDNS<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">coreDNSSelector<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">namespace<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"nx\">grafana<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">plugins<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span><span class=\"s\">'grafana-piechart-panel'<\/span><span class=\"p\">],<\/span>\r\n      <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">sections<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">server<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">root_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'%s:\/\/%sgrafana.%s'<\/span> <span class=\"p\">%<\/span> <span class=\"p\">[<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">urlProtocol<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domainPrefix<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domain<\/span><span class=\"p\">],<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"nx\">security<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">admin_password<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">adminPassword<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"s\">'auth.github'<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">enabled<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">allow_sign_up<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">client_id<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientId<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">client_secret<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">scopes<\/span><span class=\"p\">:<\/span> <span class=\"s\">'user:email,read:org'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">auth_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/github.com\/login\/oauth\/authorize'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">token_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/github.com\/login\/oauth\/access_token'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/api.github.com\/user'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">team_ids<\/span><span class=\"p\">:<\/span> <span class=\"s\">''<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">allowed_organizations<\/span><span class=\"p\">:<\/span> <span class=\"s\">'hoge'<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">alertmanager<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">config<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">global<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">resolve_timeout<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">slack_api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">route<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">group_interval<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">repeat_interval<\/span><span class=\"p\">:<\/span> <span class=\"s\">'30m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">routes<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'silent-receiver'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">alertname<\/span><span class=\"p\">:<\/span> <span class=\"s\">'KubeCPUOvercommit'<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'silent-receiver'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">alertname<\/span><span class=\"p\">:<\/span> <span class=\"s\">'CPUThrottlingHigh'<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'silent-receiver'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">alertname<\/span><span class=\"p\">:<\/span> <span class=\"s\">'KubeVersionMismatch'<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">severity<\/span><span class=\"p\">:<\/span> <span class=\"s\">'error'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-warning'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">severity<\/span><span class=\"p\">:<\/span> <span class=\"s\">'warning'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-watchdog'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">alertname<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Watchdog'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n          <span class=\"p\">],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">receivers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-warning'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">warning<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">warning<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-watchdog'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">watchdog<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">watchdog<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'silent-receiver'<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">],<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n    <span class=\"nx\">prometheus<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">replicas<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">}<\/span>\r\n  <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u4f1a\u9010\u4e00\u89e3\u91ca\u4e0a\u8ff0_config\u6587\u4ef6\u4e2d\u7684\u6bcf\u4e2a\u8bbe\u7f6e\u9009\u9879\u3002<\/p>\n<p>\u4e0b\u8ff0\u5b57\u6bb5\u662f\u5411Prometheus\u89c4\u5219\u6e05\u5355\u6587\u4ef6prometheus-rules.yaml\u6dfb\u52a0\u7528\u4e8e\u68c0\u6d4b\u670d\u52a1\u662f\u5426\u5df2\u505c\u6b62\u7684\u8b66\u62a5\u89c4\u5219\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nx\">jobs<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">Kubelet<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeletSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">KubeAPI<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeApiserverSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">KubeStateMetrics<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeStateMetricsSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">NodeExporter<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">nodeExporterSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">Alertmanager<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanagerSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">Prometheus<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheusSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">PrometheusOperator<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">prometheusOperatorSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">CoreDNS<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">coreDNSSelector<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u5c06Kubelet\u7684\u5b57\u6bb5\u5b9a\u4e49\u5982\u4e0a\u6240\u793a\uff0c\u5c06\u5728prometheus-rules.yaml\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code>\r\n    <span class=\"pi\">-<\/span> <span class=\"na\">alert<\/span><span class=\"pi\">:<\/span> <span class=\"s\">KubeletDown<\/span>\r\n      <span class=\"na\">annotations<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">message<\/span><span class=\"pi\">:<\/span> <span class=\"s\">Kubelet has disappeared from Prometheus target discovery.<\/span>\r\n        <span class=\"na\">runbook_url<\/span><span class=\"pi\">:<\/span> <span class=\"s\">https:\/\/github.com\/kubernetes-monitoring\/kubernetes-mixin\/tree\/master\/runbook.md#alert-name-kubeletdown<\/span>\r\n      <span class=\"na\">expr<\/span><span class=\"pi\">:<\/span> <span class=\"pi\">|<\/span>\r\n        <span class=\"s\">absent(up{job=\"kubelet\"} == 1)<\/span>\r\n      <span class=\"na\">for<\/span><span class=\"pi\">:<\/span> <span class=\"s\">15m<\/span>\r\n      <span class=\"na\">labels<\/span><span class=\"pi\">:<\/span>\r\n        <span class=\"na\">severity<\/span><span class=\"pi\">:<\/span> <span class=\"s\">critical<\/span>\r\n<\/code><\/pre>\n<p>\u53ea\u9700\u63d0\u4f9b\u4e00\u4e2a\u9009\u9879\uff1a<br \/>\n\u6b64\u5916\uff0c\u60a8\u8fd8\u53ef\u4ee5\u5728\u4f5c\u4e1a\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u5b9a\u4e49\uff0c\u4ee5\u6dfb\u52a0kube-scheduler\u548ckube-controller-manager\u7684\u8b66\u62a5\u89c4\u5219\u3002\u4f46\u662f\uff0c\u5728EKS\u96c6\u7fa4\u4e2d\u65e0\u6cd5\u5c06\u8fd9\u4e9b\u7ec4\u4ef6\u8bbe\u7f6e\u4e3aPrometheus\u76d1\u89c6\u7684\u76ee\u6807\uff08\u5982\u679c\u6709\u53ef\u884c\u7684\u65b9\u6cd5\uff0c\u8bf7\u89c1\u8c05\uff09\uff0c\u56e0\u6b64\u672a\u6dfb\u52a0\u6b64\u8bbe\u7f6e\u3002<\/p>\n<pre class=\"post-pre\"><code>      <span class=\"nx\">KubeScheduler<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeSchedulerSelector<\/span><span class=\"p\">,<\/span>\r\n      <span class=\"nx\">KubeControllerManager<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">_config<\/span><span class=\"p\">.<\/span><span class=\"nx\">kubeControllerManagerSelector<\/span><span class=\"p\">,<\/span>\r\n<\/code><\/pre>\n<p>\u6211\u4eec\u5c06\u67e5\u770b_config\u540e\u9762\u7684\u5b57\u6bb5\u3002<br \/>\n\u5728namespace\u5b57\u6bb5\u4e2d\uff0c\u5b9a\u4e49\u76ee\u6807\u547d\u540d\u7a7a\u95f4\u3002\u5c06\u521b\u5efa\u6307\u5b9a\u547d\u540d\u7a7a\u95f4\u540d\u79f0\u7684\u547d\u540d\u7a7a\u95f4\u8d44\u6e90\u6e05\u5355\u6587\u4ef6\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nx\">namespace<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">namespace<\/span><span class=\"p\">,<\/span>\r\n<\/code><\/pre>\n<p>\u63a5\u4e0b\u6765\uff0c\u6211\u4eec\u5c06\u770b\u4e00\u4e0b _config \u4e2d\u7684 Grafana \u5b57\u6bb5\u3002<br \/>\nGrafana.config \u5b57\u6bb5\u7684\u503c\u5c06\u5b9a\u4e49\u4e3a grafana.ini \u8fd9\u4e2a Grafana \u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nx\">grafana<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">plugins<\/span><span class=\"p\">+:<\/span> <span class=\"p\">[<\/span><span class=\"s\">'grafana-piechart-panel'<\/span><span class=\"p\">],<\/span>\r\n      <span class=\"nx\">config<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">sections<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">server<\/span><span class=\"p\">+:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">root_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'%s:\/\/%sgrafana.%s'<\/span> <span class=\"p\">%<\/span> <span class=\"p\">[<\/span><span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">urlProtocol<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domainPrefix<\/span><span class=\"p\">,<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">domain<\/span><span class=\"p\">],<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"nx\">security<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">admin_password<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">adminPassword<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"s\">'auth.github'<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">enabled<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">allow_sign_up<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">client_id<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientId<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">client_secret<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">grafana<\/span><span class=\"p\">.<\/span><span class=\"nx\">auth<\/span><span class=\"p\">.<\/span><span class=\"nx\">clientSecret<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">scopes<\/span><span class=\"p\">:<\/span> <span class=\"s\">'user:email,read:org'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">auth_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/github.com\/login\/oauth\/authorize'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">token_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/github.com\/login\/oauth\/access_token'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"s\">'https:\/\/api.github.com\/user'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">team_ids<\/span><span class=\"p\">:<\/span> <span class=\"s\">''<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">allowed_organizations<\/span><span class=\"p\">:<\/span> <span class=\"s\">'hoge'<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">},<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6309\u7167\u4e0a\u8ff0\u5b9a\u4e49\uff0c\u5c06\u751f\u6210\u4e0b\u8ff0\u5185\u5bb9\u7684grafana.ini\u3002\u5b9e\u9645\u4e0a\uff0c\u5b83\u4f1a\u4ee5Base64\u7f16\u7801\u7684\u5f62\u5f0f\u5728Secret\u8d44\u6e90\u4e2d\u5b9a\u4e49\uff0c\u5e76\u4ee5grafana-config.yaml\u4f5c\u4e3a\u6587\u4ef6\u540d\u3002<\/p>\n<pre class=\"post-pre\"><code><span class=\"nn\">[auth.github]<\/span>\r\n<span class=\"py\">allow_sign_up<\/span> <span class=\"p\">=<\/span> <span class=\"s\">true<\/span>\r\n<span class=\"py\">allowed_organizations<\/span> <span class=\"p\">=<\/span> <span class=\"s\">hoge<\/span>\r\n<span class=\"py\">api_url<\/span> <span class=\"p\">=<\/span> <span class=\"s\">https:\/\/api.github.com\/user<\/span>\r\n<span class=\"py\">auth_url<\/span> <span class=\"p\">=<\/span> <span class=\"s\">https:\/\/github.com\/login\/oauth\/authorize<\/span>\r\n<span class=\"py\">client_id<\/span> <span class=\"p\">=<\/span> <span class=\"s\">hoge<\/span>\r\n<span class=\"py\">client_secret<\/span> <span class=\"p\">=<\/span> <span class=\"s\">fuga<\/span>\r\n<span class=\"py\">enabled<\/span> <span class=\"p\">=<\/span> <span class=\"s\">true<\/span>\r\n<span class=\"py\">scopes<\/span> <span class=\"p\">=<\/span> <span class=\"s\">user:email,read:org<\/span>\r\n<span class=\"py\">team_ids<\/span> <span class=\"p\">=<\/span>\r\n<span class=\"py\">token_url<\/span> <span class=\"p\">=<\/span> <span class=\"s\">https:\/\/github.com\/login\/oauth\/access_token<\/span>\r\n<span class=\"nn\">[security]<\/span>\r\n<span class=\"py\">admin_password<\/span> <span class=\"p\">=<\/span> <span class=\"s\">xxxxx<\/span>\r\n<span class=\"nn\">[server]<\/span>\r\n<span class=\"py\">root_url<\/span> <span class=\"p\">=<\/span> <span class=\"s\">https:\/\/dev-grafana.hoge.com<\/span>\r\n<\/code><\/pre>\n<p>\u4e0d\u8be6\u7ec6\u8bf4\u660egrafana.ini\u7684\u8bbe\u7f6e\u5185\u5bb9\uff0c\u4f46\u901a\u8fc7[auth.github]\u90e8\u5206\u8fdb\u884c\u4e86Grafana\u7684Github\u767b\u5f55\u8bbe\u7f6e\uff0c\u5e76\u901a\u8fc7[security]\u90e8\u5206\u7684admin_password\u8bbe\u7f6e\u4e86Grafana\u7684\u7ba1\u7406\u5458\u5bc6\u7801\u3002<\/p>\n<p>\u7136\u540e\u6211\u4eec\u6765\u770b\u4e00\u4e0b_config\u5b57\u6bb5\u7684alertmanager\u3002<br \/>\nalertmanager.config\u5b57\u6bb5\u7684\u503c\u5b9a\u4e49\u4e86Alertmanager\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\u3002<br \/>\n\u914d\u7f6e\u6587\u4ef6\u7684\u5185\u5bb9\u7ecf\u8fc7Base64\u7f16\u7801\uff0c\u5e76\u5728\u540d\u4e3aalertmanager-secret.yaml\u7684Secret\u8d44\u6e90\u4e2d\u8fdb\u884c\u5b9a\u4e49\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nx\">alertmanager<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">config<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n        <span class=\"nx\">global<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">resolve_timeout<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">slack_api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">route<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n          <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">group_interval<\/span><span class=\"p\">:<\/span> <span class=\"s\">'5m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">repeat_interval<\/span><span class=\"p\">:<\/span> <span class=\"s\">'30m'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n          <span class=\"nx\">routes<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">severity<\/span><span class=\"p\">:<\/span> <span class=\"s\">'error'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-warning'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">severity<\/span><span class=\"p\">:<\/span> <span class=\"s\">'warning'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n            <span class=\"p\">{<\/span>\r\n              <span class=\"nx\">receiver<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-watchdog'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">group_wait<\/span><span class=\"p\">:<\/span> <span class=\"s\">'10s'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"nx\">match<\/span><span class=\"p\">:<\/span> <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">alertname<\/span><span class=\"p\">:<\/span> <span class=\"s\">'Watchdog'<\/span><span class=\"p\">,<\/span>\r\n              <span class=\"p\">},<\/span>\r\n              <span class=\"nx\">continue<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n            <span class=\"p\">},<\/span>\r\n          <span class=\"p\">],<\/span>\r\n        <span class=\"p\">},<\/span>\r\n        <span class=\"nx\">receivers<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-critical'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">critical<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-warning'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">warning<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">warning<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'slack-watchdog'<\/span><span class=\"p\">,<\/span>\r\n            <span class=\"nx\">slack_configs<\/span><span class=\"p\">:<\/span> <span class=\"p\">[<\/span>\r\n              <span class=\"p\">{<\/span>\r\n                <span class=\"nx\">api_url<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">watchdog<\/span><span class=\"p\">.<\/span><span class=\"nx\">api_url<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">channel<\/span><span class=\"p\">:<\/span> <span class=\"k\">$<\/span><span class=\"p\">.<\/span><span class=\"nx\">config<\/span><span class=\"p\">.<\/span><span class=\"nx\">alertmanager<\/span><span class=\"p\">.<\/span><span class=\"nx\">slack<\/span><span class=\"p\">.<\/span><span class=\"nx\">watchdog<\/span><span class=\"p\">.<\/span><span class=\"nx\">channel<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">title<\/span><span class=\"p\">:<\/span> <span class=\"s\">'[{{ .Status | toUpper }}{{ if eq .Status \"firing\" }}:{{ .Alerts.Firing | len }}{{ end }}] Monitoring Event Notification'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">text<\/span><span class=\"p\">:<\/span> <span class=\"s\">'{{ range .Alerts }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Description:* {{ .Annotations.message }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Graph:* &lt;{{ .GeneratorURL }}|:chart_with_upwards_trend:&gt; *Runbook:* &lt;{{ .Annotations.runbook_url }}|:spiral_note_pad:&gt;<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  *Details:*<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ range .Labels.SortedPairs }}  *{{ .Name }}:* `{{ .Value }}`<\/span><span class=\"se\">\\n<\/span><span class=\"s\">  {{ end }}<\/span><span class=\"se\">\\n<\/span><span class=\"s\">{{ end }}'<\/span><span class=\"p\">,<\/span>\r\n                <span class=\"nx\">send_resolved<\/span><span class=\"p\">:<\/span> <span class=\"kc\">true<\/span>\r\n              <span class=\"p\">}<\/span>\r\n            <span class=\"p\">]<\/span>\r\n          <span class=\"p\">},<\/span>\r\n          <span class=\"p\">{<\/span>\r\n            <span class=\"nx\">name<\/span><span class=\"p\">:<\/span> <span class=\"s\">'silent-receiver'<\/span>\r\n          <span class=\"p\">}<\/span>\r\n        <span class=\"p\">],<\/span>\r\n      <span class=\"p\">},<\/span>\r\n    <span class=\"p\">},<\/span>\r\n<\/code><\/pre>\n<p>\u5982\u679c\u6309\u7167\u4e0a\u9762\u7684slack_configs\u914d\u7f6e\uff0c\u5c06\u4ee5\u4ee5\u4e0b\u65b9\u5f0f\u901a\u77e5\u5230slack\u3002\u5355\u51fbGraph:\u53f3\u4fa7\u7684\u56fe\u50cf\uff0c\u4f1a\u8df3\u8f6c\u5230Prometheus\u5e76\u663e\u793a\u56fe\u8868\u3002<\/p>\n<div><img decoding=\"async\" class=\"post-images\" title=\"\" src=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/94-0.png\" alt=\"slack-alert.png\" \/><\/div>\n<p>\u63a5\u4e0b\u6765\u662f\u5173\u4e8e_config\u5b57\u6bb5\u4e2d\u7684prometheus\u5b57\u6bb5\u3002<br \/>\nreplicas\u5b57\u6bb5\u7528\u4e8e\u5b9a\u4e49Prometheus Pod\u7684\u526f\u672c\u6570\u91cf\u3002\u8be5\u503c\u5c06\u53cd\u6620\u5728Prometheus\u8d44\u6e90\u7684\u5b9a\u4e49\u5185\uff0c\u7528\u4e8ePrometheus Operator\u7684\u81ea\u5b9a\u4e49\u8d44\u6e90\uff08CD\uff09\uff0c\u5e76\u4ee5prometheus-prometheus.yaml\u6587\u4ef6\u540d\u8fdb\u884c\u8f93\u51fa\u3002<\/p>\n<pre class=\"post-pre\"><code>    <span class=\"nx\">prometheus<\/span><span class=\"p\">+::<\/span> <span class=\"p\">{<\/span>\r\n      <span class=\"nx\">replicas<\/span><span class=\"p\">:<\/span> <span class=\"mi\">3<\/span><span class=\"p\">,<\/span>\r\n    <span class=\"p\">}<\/span>\r\n<\/code><\/pre>\n<p>\u5c3d\u7ba1\u6211\u60f3\u89e3\u91ca\u5176\u4ed6\u8981\u7d20\uff0c\u4f46\u7531\u4e8e\u4f53\u529b\u4e0d\u652f\uff0c\u8fd9\u4e00\u6b21\u5c31\u5230\u6b64\u4e3a\u6b62\u5427\u3002<\/p>\n<h2>\u6700\u540e\u3010\u3011<\/h2>\n<p>\u901a\u8fc7\u4ee5\u4e0a\u4ecb\u7ecd\u7684\u65b9\u6cd5\u5df2\u7ecf\u642d\u5efa\u4e86\u76d1\u63a7\u73af\u5883\uff0c\u4ece12\u6708\u4e2d\u65ec\u5f00\u59cb\u6b63\u5f0f\u8fd0\u8425\uff0c\u6240\u4ee5\u53ef\u80fd\u4f1a\u5728\u672a\u6765\u53d1\u73b0\u5404\u79cd\u6539\u8fdb\u70b9\uff0c\u4f46\u76ee\u524d\u5148\u5c06\u73b0\u6709\u914d\u7f6e\u603b\u7ed3\u6210\u6587\u7ae0\u3002<\/p>\n<p>\u7531\u4e8ebase.libsonnet\u7684\u5185\u5bb9\u53d8\u5f97\u76f8\u5f53\u5e9e\u5927\u4e14\u5197\u957f\uff0c\u53ef\u4ee5\u8003\u8651\u5c06\u6587\u4ef6\u8fdb\u884c\u5206\u5272\u6216\u5171\u4eab\u5197\u957f\u63cf\u8ff0\u3002\u6211\u4eec\u5c06\u52aa\u529b\u8fdb\u884c\u91cd\u6784\u3002<\/p>\n<p>Prometheus\u7684\u6570\u636e\u76ee\u524d\u5b58\u50a8\u5728EBS\u4e0a\uff0c\u4f46\u6b63\u5728\u8003\u8651\u4f7f\u7528Thanos\u8fdb\u884c\u8fc1\u79fb\u5e76\u6c38\u4e45\u5b58\u50a8\u5728S3\u4e0a\u7684\u65b9\u6cd5\u3002<\/p>\n<p>Kube-prometheus\u5728\u5f00\u59cb\u65f6\u611f\u89c9\u6709\u4e9b\u56f0\u96be\uff0c\u4f46\u73b0\u5728\u5df2\u7ecf\u53ef\u4ee5\u76f8\u5bf9\u5bb9\u6613\u5730\u8fdb\u884c\u6269\u5c55\u3002\u867d\u7136\u6211\u6ca1\u6709\u5c1d\u8bd5\u8fc7\uff0c\u4f46\u6216\u8bb8\u4f7f\u7528prometheus-operator\u7684Helm\u56fe\u8868\u53ef\u4ee5\u66f4\u8f7b\u677e\u5730\u521b\u5efa\u76f8\u4f3c\u7684\u914d\u7f6e(\u7b11)\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u9019\u7bc7\u6587\u7ae0\u662f Amazon EKS Advent Calendar 2019 \u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u6211\u5728OPENR [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-43289","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v21.5 (Yoast SEO v21.5) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883 - Blog - Silicon Cloud<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u4f7f\u7528kube-prometheus\u5728eks\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:locale\" content=\"zh_CN\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\" \/>\n<meta property=\"og:description\" content=\"\u9019\u7bc7\u6587\u7ae0\u662f Amazon EKS Advent Calendar 2019 \u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u6211\u5728OPENR [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u4f7f\u7528kube-prometheus\u5728eks\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\u3002\/\" \/>\n<meta property=\"og:site_name\" content=\"Blog - Silicon Cloud\" \/>\n<meta property=\"article:published_time\" content=\"2023-04-17T22:32:25+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-04-29T10:05:05+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/6-0.png\" \/>\n<meta name=\"author\" content=\"\u6e05, \u5b87\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u4f5c\u8005\" \/>\n\t<meta name=\"twitter:data1\" content=\"\u6e05, \u5b87\" \/>\n\t<meta name=\"twitter:label2\" content=\"\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 \u5206\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/\",\"name\":\"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883 - Blog - Silicon Cloud\",\"isPartOf\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\"},\"datePublished\":\"2023-04-17T22:32:25+00:00\",\"dateModified\":\"2024-04-29T10:05:05+00:00\",\"author\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\"},\"breadcrumb\":{\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\"},\"inLanguage\":\"zh-Hans\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"\u9996\u9875\",\"item\":\"https:\/\/www.silicloud.com\/zh\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#website\",\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/\",\"name\":\"Blog - Silicon Cloud\",\"description\":\"\",\"inLanguage\":\"zh-Hans\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e\",\"name\":\"\u6e05, \u5b87\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g\",\"caption\":\"\u6e05, \u5b87\"},\"url\":\"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/\"},{\"@type\":\"ImageObject\",\"inLanguage\":\"zh-Hans\",\"@id\":\"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo\",\"url\":\"\",\"contentUrl\":\"\",\"caption\":\"Blog - Silicon Cloud\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883 - Blog - Silicon Cloud","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u4f7f\u7528kube-prometheus\u5728eks\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\u3002\/","og_locale":"zh_CN","og_type":"article","og_title":"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883","og_description":"\u9019\u7bc7\u6587\u7ae0\u662f Amazon EKS Advent Calendar 2019 \u7684\u7b2c23\u5929\u7684\u6587\u7ae0\u3002 \u6211\u5728OPENR [&hellip;]","og_url":"https:\/\/www.silicloud.com\/zh\/blog\/\u6211\u4f7f\u7528kube-prometheus\u5728eks\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883\u3002\/","og_site_name":"Blog - Silicon Cloud","article_published_time":"2023-04-17T22:32:25+00:00","article_modified_time":"2024-04-29T10:05:05+00:00","og_image":[{"url":"https:\/\/cdn.silicloud.com\/blog-img\/blog\/img\/657d518e37434c4406cca4fa\/6-0.png"}],"author":"\u6e05, \u5b87","twitter_card":"summary_large_image","twitter_misc":{"\u4f5c\u8005":"\u6e05, \u5b87","\u9884\u8ba1\u9605\u8bfb\u65f6\u95f4":"11 \u5206"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/","url":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/","name":"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883 - Blog - Silicon Cloud","isPartOf":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website"},"datePublished":"2023-04-17T22:32:25+00:00","dateModified":"2024-04-29T10:05:05+00:00","author":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e"},"breadcrumb":{"@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb"},"inLanguage":"zh-Hans","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"\u9996\u9875","item":"https:\/\/www.silicloud.com\/zh\/blog\/"},{"@type":"ListItem","position":2,"name":"\u6211\u4f7f\u7528kube-prometheus\u5728EKS\u4e0a\u5efa\u7acb\u4e86\u4e00\u4e2a\u76d1\u63a7\u73af\u5883"}]},{"@type":"WebSite","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#website","url":"https:\/\/www.silicloud.com\/zh\/blog\/","name":"Blog - Silicon Cloud","description":"","inLanguage":"zh-Hans"},{"@type":"Person","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/1a6ecd3d914d22a5ac32791ffc1fbd8e","name":"\u6e05, \u5b87","image":{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/4b2016c18459a605fc469c7566608f5686491baa112d0871ee613f61b7210565?s=96&d=mm&r=g","caption":"\u6e05, \u5b87"},"url":"https:\/\/www.silicloud.com\/zh\/blog\/author\/qingyu\/"},{"@type":"ImageObject","inLanguage":"zh-Hans","@id":"https:\/\/www.silicloud.com\/zh\/blog\/%e6%88%91%e4%bd%bf%e7%94%a8kube-prometheus%e5%9c%a8eks%e4%b8%8a%e5%bb%ba%e7%ab%8b%e4%ba%86%e4%b8%80%e4%b8%aa%e7%9b%91%e6%8e%a7%e7%8e%af%e5%a2%83%e3%80%82\/#local-main-organization-logo","url":"","contentUrl":"","caption":"Blog - Silicon Cloud"}]}},"_links":{"self":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43289","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/comments?post=43289"}],"version-history":[{"count":2,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43289\/revisions"}],"predecessor-version":[{"id":86802,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/posts\/43289\/revisions\/86802"}],"wp:attachment":[{"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/media?parent=43289"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/categories?post=43289"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.silicloud.com\/zh\/blog\/wp-json\/wp\/v2\/tags?post=43289"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}