grasys blog

Google Cloud Managed Service for Prometheusがパブリックプレビューになったので試してみた

文●泉水/grasys 編集● ASCII

  • この記事をはてなブックマークに追加
  • 本文印刷

本記事はgrasys が提供する「grasys blog」に掲載されたGoogle Cloud Managed Service for Prometheusがパブリックプレビューになったので試してみた」を再編集したものです。

 どうも泉水です。

 1ヵ月ほど経ってしましいましたが、11月15日にGoogle Cloud Managed Service for Prometheusがパブリックプレビューになったので試してみました。

 Google Cloud Managed Service for Prometheus(GMP)はPrometheusの指標の収集、保存、クエリに対応するフルマネージドなサービスです。これまでセルフマネージドで行なってきた構築・運用からの代替に期待大です!

 今回の試してみたのは、基本的には公式ドキュメント通りですが、サンプルアプリケーションだと面白くないのでnginxコンテナにnginx-exporterサイドカーを配置してnginxの指標を取得してみました。

 webコンソールからGMPを確認する場合はナビゲーションメニューからMonitoringを選択しメニュー「マネージド Prometheus」を開くことができます。

1. GKEクラスタの構築

 GMPはGKEクラスタへデプロイする必要があるので、まずはGKEクラスタを作成します。


gcloud container clusters create gmp --machine-type n1-standard-2 --num-nodes=1 --region asia-northeast1  --project=プロジェクト名

2. マネージドコレクションのインストール

 マネージドコレクションはアプリケーションをモニタリングし、収集された指標を保存するモジュールです。


$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/setup.yaml
customresourcedefinition.apiextensions.k8s.io/podmonitorings.monitoring.googleapis.com created
customresourcedefinition.apiextensions.k8s.io/rules.monitoring.googleapis.com created
customresourcedefinition.apiextensions.k8s.io/clusterrules.monitoring.googleapis.com created
customresourcedefinition.apiextensions.k8s.io/operatorconfigs.monitoring.googleapis.com created

$ kubectl apply -f https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/operator.yaml
namespace/gmp-system created
namespace/gmp-public created
priorityclass.scheduling.k8s.io/gmp-critical created
serviceaccount/operator created
serviceaccount/collector created
clusterrole.rbac.authorization.k8s.io/gmp-system:collector created
clusterrole.rbac.authorization.k8s.io/gmp-system:operator created
clusterrole.rbac.authorization.k8s.io/gmp-system:csr-approver created
clusterrolebinding.rbac.authorization.k8s.io/gmp-system:operator created
clusterrolebinding.rbac.authorization.k8s.io/gmp-system:operator-csr created
clusterrolebinding.rbac.authorization.k8s.io/gmp-system:collector created
deployment.apps/gmp-operator created
service/gmp-operator created
operatorconfig.monitoring.googleapis.com/config created


 マネージドコレクションをapplyするとgmp-systemというネームスペースにDeploymentが作成されます。


$ kubectl get deployment -n gmp-system
NAME             READY   UP-TO-DATE   AVAILABLE   AGE
gmp-operator     1/1     1            1           137m
rule-evaluator   1/1     1            1           137m

3. サンプルアプリケーションのデプロイ

 モニタリング対象のサンプルアプリケーションをデプロイします。 最初にも書いた通り今回はnginxをnginx-exporterを使ってモニタリングしてみたいと思います。

 まずは、アプリケーションをデプロイするネームスペースを作成します。


$ kubectl create namespace nginx


 次に、以下のnginxの設定ファイル、Deployment作成用のマニフェストを利用してサンプルアプリケーションをデプロイします。

・default.conf


server {
    listen       80;
    listen  [::]:80;
    server_name  localhost;

    #access_log  /var/log/nginx/host.access.log  main;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    location /metrics {
      stub_status on;
      access_log off;
    }
}

・nginx.yaml


apiVersion: apps/v1
kind: Deployment
metadata:
  namespace: nginx
  labels:
    app: nginx
  name: nginx
spec:
  replicas: 3
  selector:
    matchLabels:
      app: nginx
  strategy: {}
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - image: nginx:latest
        name: nginx
        volumeMounts:
        - mountPath: /etc/nginx/conf.d/
          name: nginx-default-conf
      - name: nginx-exporter
        image: nginx/nginx-prometheus-exporter:0.9.0
        ports:
        - name: metrics
          containerPort: 9113
          protocol: TCP
        args:
          - -nginx.scrape-uri=http://localhost:80/metrics
      volumes:
      - name: nginx-default-conf
        configMap:
          name: default.conf
          items:
          - key: default.conf
            path: default.conf


$ kubectl create configmap default.conf --from-file=/path/to/default.conf --namespace nginx

$ kubectl apply -f nginx.yaml

$ kubectl get pod -n nginx
NAME                    READY   STATUS    RESTARTS   AGE
nginx-cbc9ff44c-q8nht   2/2     Running   0          108m
nginx-cbc9ff44c-qwq2x   2/2     Running   0          108m
nginx-cbc9ff44c-rns8n   2/2     Running   0          108m

4. PodMonitoringリソースの作成

 3でモニタリング対象のアプリケーションをデプロイしたので、次はそのサンプルアプリケーションの指標をスクレイピングし取得するリソースを作成します。matchLabelsに先ほどデプロイしたnginxのDeploymentと同じ「app:nginx」を設定します。また、PodMonitoringはサンプルアプリケーションと同じネームスペースに作成する必要があります。

・pod-monitoring-nginx.yaml


apiVersion: monitoring.googleapis.com/v1alpha1
kind: PodMonitoring
metadata:
  name: prom-nginx
spec:
  selector:
    matchLabels:
      app: nginx
  endpoints:
  - port: metrics
    interval: 30s


$ kubectl apply -f pod-monitoring-nginx.yaml --namespace nginx

$ kubectl get podmonitoring --namespace nginx
NAME         STATUS
prom-nginx   ConfigurationCreateSuccess


 PodMonitoringをデプロイして数分待っているとコンソールから指標を確認することができます。

5. Prometheus UIを作成する

 4で取集できるようになった指標をUIで表示できるようにしたいと思います。 Prometheus UIやgrafanaを利用することが想定されますが今回はPrometheus UIを使って表示したいと思います。

 公式ドキュメント通りにデプロイしていきます。


curl https://raw.githubusercontent.com/GoogleCloudPlatform/prometheus-engine/v0.1.1/examples/frontend.yaml |
sed 's/\$PROJECT_ID/プロジェクトID/' |
kubectl apply -f -


 正式に運用する場合は、Ingressなどの設定を行ないブラウザーからアクセスを行ないますが、今回はサンプル同様port forwardを行なってローカルPCからアクセスしてみます。


kubectl port-forward svc/frontend 9090
 

 ローカルからhttp://localhost:9090/へアクセスすると…

 Prometheus UIでメトリクスが表示されました!!

6. 終わり

 今回はパブリックプレビューになったManaged Service for Prometheusを試してみましたが結構簡単でしたね! セルフマネージドなPrometheusとの使い勝手を比較したりこれから色々使ってみようと思うので進展があったらまた続きを投稿したいと思います。

 では、みなさん良いお年をお迎えください!

izumi
grasys唯一の南の島出身  

■関連サイト

過去記事アーカイブ

2022年
01月
02月
03月
04月
05月
2021年
03月
04月
05月
06月
07月
08月
09月
10月
11月
12月
2020年
04月
05月
08月
09月
10月
11月
12月
2018年
09月
2017年
06月
2014年
07月