使用 Greptime Cloud 监控AWS CloudWatch

使用 Greptime Cloud 监控AWS CloudWatch

· json · rss

使用 Greptime Cloud 监控AWS CloudWatch

  • 引言
  • CloudWach 是 AWS 上进行监控的一个服务,如果你想把这些监控数据自行保存或进行分析,可以通过 API 接口将其导出并存储。
  • 目前主流的监控平台是 Prometheus ,其易用性收到广泛的应用。但是由于其在 HA 和高基数的问题,而维护 Thanos 集群又提升了复杂度。近年来,GreptimeDB 作为个新的时序数据库,其原生支持高可用,并且兼容 Prometheus 协议。
  • 本文将通过 Grafana Alloy 将 AWS CloudWatch 的数据抓取,并转化为 Prometheus 格式发送到 GreptimeCloud。
  • 核心工具简介
  • AWS CloudWatch:用于收集和监控 AWS 服务指标。
  • Alloy:专注于数据抓取、转换与传输的工具。
  • Greptime Cloud:高效的时序数据存储与分析平台。

  1. 在 AWS 上创建 IAM 用户并绑定 Alloy 所需 Policy


{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "Stmt1674249227793",
      "Action": [
        "tag:GetResources",
        "cloudwatch:GetMetricData",
        "cloudwatch:GetMetricStatistics",
        "cloudwatch:ListMetrics",
        "ec2:DescribeTags",
        "ec2:DescribeInstances",
        "ec2:DescribeRegions",
        "iam:ListAccountAliases",
        "ec2:DescribeTransitGateway*",
        "apigateway:GET",
        "dms:DescribeReplicationInstances",
        "dms:DescribeReplicationTasks"
      ],
      "Effect": "Allow",
      "Resource": "*"
    }
  ]
}


并将该 Policy 绑从对应的 AWS IAM User 上,将该用户的 Credential 保存到 ~/.aws/crendetails​

根据官方 安装文档 下载并安装到本地

新建一个 config.alloy ​文件,该文件将会有以下内容

prometheus.exporter.cloudwatch "aws_ec2_metrics" {
    ......
}

prometheus.scrape "awsmonitoring" {
    ......
}

prometheus.remote_write "greptimedb" {
    ......
}

prometheus.exporter.cloudwatch​ 将会配置从 CloudWatch 拉取指标

prometheus.exporter.cloudwatch "aws_ec2_metrics" {

    sts_region = "ap-east-1"

    discovery {
        type    = "AWS/EC2"
        regions = ["ap-east-1"]

        metric {
            name       = "CPUUtilization"
            statistics = ["Average"]
            period     = "5m"
        }

        metric {
            name       = "NetworkPacketsIn"
            statistics = ["Average"]
            period     = "5m"
        }
    }
}

该文件配置了从 ap-east-1 区域拉取 EC2 的两个指标:

  • CPUUtilization,统计方式采用均值,统计周期 5 分钟
  • NetworkPacketsIn,统计方式采用均值,统计周期 5 分钟

​prometheus.scrape "awsmonitoring"​ 配置

prometheus.scrape "awsmonitoring" {
  targets    = prometheus.exporter.cloudwatch.aws_ec2_metrics.targets
  forward_to = [prometheus.remote_write.greptimedb.receiver]
}

对于prometheus.remote_write "greptimedb"​的配置请登录 GreptimeCloud 的控制台进行配置

选择Alloy,并将配置内容复制到config.alloy中

运行命令启动Alloy

alloy-linux-amd64 run config.alloy

回到Greptime Cloud 检查,如果出现了以下内容,说明配置成功。

Greptime

使用以下 JSON 文件作为 Dashboard 的配置

{
  "kind": "Dashboard",
  "metadata": {
    "name": "aws_ec2",
    "project": "default",
    "version": 0
  },
  "spec": {
    "display": {
      "name": "aws_ec2"
    },
    "panels": {
      "CPUUtilization": {
        "kind": "Panel",
        "spec": {
          "display": {
            "name": "CPUUtilization"
          },
          "plugin": {
            "kind": "TimeSeriesChart",
            "spec": {
              "yAxis": {
                "show": true,
                "label": "",
                "format": {
                  "unit": "percent"
                }
              },
              "legend": {
                "position": "bottom"
              }
            }
          },
          "queries": [
            {
              "kind": "TimeSeriesQuery",
              "spec": {
                "plugin": {
                  "kind": "PrometheusTimeSeriesQuery",
                  "spec": {
                    "query": "aws_ec2_cpuutilization_average",
                    "seriesNameFormat": "{{ dimension_InstanceId}}"
                  }
                }
              }
            }
          ]
        }
      },
      "CPUUtilization-1": {
        "kind": "Panel",
        "spec": {
          "display": {
            "name": "NetworkPacketsIn"
          },
          "plugin": {
            "kind": "TimeSeriesChart",
            "spec": {
              "yAxis": {
                "show": true,
                "label": "",
                "format": {
                  "unit": "bytes"
                }
              },
              "legend": {
                "position": "bottom"
              }
            }
          },
          "queries": [
            {
              "kind": "TimeSeriesQuery",
              "spec": {
                "plugin": {
                  "kind": "PrometheusTimeSeriesQuery",
                  "spec": {
                    "query": "aws_ec2_network_packets_in_average",
                    "seriesNameFormat": "{{ dimension_InstanceId}}"
                  }
                }
              }
            }
          ]
        }
      }
    },
    "layouts": [
      {
        "kind": "Grid",
        "spec": {
          "display": {
            "title": "Panel Group",
            "collapse": {
              "open": true
            }
          },
          "items": [
            {
              "x": 0,
              "y": 0,
              "width": 13,
              "height": 7,
              "content": {
                "$ref": "#/spec/panels/CPUUtilization"
              }
            },
            {
              "x": 0,
              "y": 7,
              "width": 13,
              "height": 7,
              "content": {
                "$ref": "#/spec/panels/CPUUtilization-1"
              }
            }
          ]
        }
      }
    ],
    "variables": [],
    "duration": "1h",
    "refreshInterval": "0s"
  }
}

Subscribe: