【Prometheus】使用stackdriver_exporter监控GCP实例来自AWS的实例

首先

我最近开始使用GCP,发现了一个可以从Prometheus获取GCP监控数据的stackdriver_exporter。这次我打算在AWS(EC2)上搭建这个stackdriver_exporter,然后从那里获取GCP的数据。由于不打算大规模使用,所以不使用AWS-GCP间的Workload Identity进行协作。

前提

在GCP的IAM中创建一个”查看者”服务账号和密钥。(尽管在Github中写明了使用”roles/monitoring.viewer”,但是没有起作用)

将GCP配置文件放置

暫時將已創建的密鑰文件放置並設置參考用的環境變數文件。
在這次暫定的情況下,假設我們將其放置在 /root/.gcp.json 中。

GOOGLE_APPLICATION_CREDENTIALS=/root/.gcp.json

获取二进制

wget https://github.com/prometheus-community/stackdriver_exporter/releases/download/v0.11.0/stackdriver_exporter-0.11.0.linux-amd64.tar.gz
tar -zxf stackdriver_exporter-0.11.0.linux-amd64.tar.gz
mv stackdriver_exporter-0.11.0.linux-amd64/stackdriver_exporter /usr/local

服务化和配置文件创建。

由于stackdriver_exporter在命令执行时需要指定监视项和其他选项,所以直接将其服务化会很不方便。
为了能够像其他Prometheus系列的RPM一样从/etc/default/stackdriver_exporter中引用选项,我们稍微修改了配置。
同时,我们也添加了GOOGLE_APPLICATION_CREDENTIALS的引用设置。

用于服务的配置文件

[Unit]
Description=stackdriver-exporter
After=network.target

[Service]
EnvironmentFile=-/etc/default/stackdriver_exporter
EnvironmentFile=/root/gcpenv
Type=simple
User=root
ExecStart=/usr/local/stackdriver_exporter $STACKDRIVER_EXPORTER_OPTS

[Install]
WantedBy=multi-user.target

Stackdriver_exporter配置

当需要更改监视项目时,请更改此处,因为这里将命令选项分开了。
在这个例子中,将GCP实例的CPU、内存、磁盘和网络全部获取。

STACKDRIVER_EXPORTER_OPTS='--monitoring.metrics-type-prefixes "compute.googleapis.com/instance/cpu,compute.googleapis.com/instance/disk,compute.googleapis.com/instance/memory,compute.googleapis.com/instance/network"'

服务注册和启动

systemctl enable stackdriver_exporter
systemctl start stackdriver_exporter

Prometheus添加新的配置

在Prometheus中添加引用设置并重新加载。

  - job_name: stackdriver-exporter
    static_configs:
      - targets: ['localhost:9255']
stackdriber.png

尾声

由于云服务各自具备监控功能,所以在使用多云的情况下,通常会为每个环境设置监控服务器。虽然这本身并没有什么坏处,但我仍然觉得这样做有点本末倒置,所以这次幸好能够在不增加专用实例的情况下实现对GCP的监控。感觉好像能够做到一些事情,所以下次我想写一篇关于将之前创建的Prometheus复制到GCP并在AWS-GCP之间实现冗余的文章。※考虑到最终结果可能有点不太好,所以需要重新考虑一下。另外,虽然好像所有东西都是基于AWS和Prometheus的前提,但我不是为它们做宣传的人。我还想写一些完全不同的文章。