ARMS Prometheus MonitoringでACKクラスターを監視する
本記事では、Application Real-Time Monitoring Service (ARMS) で、Container Service for Kubernetes (ACK) のモニタリングをする方法をご紹介します。
※ 以降は Application Real-Time Monitoring Service Prometheus Monitoring を ARMS Prometheus 、Container Service for Kubernetes を ACK と表記しますApplication Real-Time Monitoring Service (ARMS)について
まず初めにARMS についてですが、ARMS はアプリケーションパフォーマンスマネージメント(APM)を提供しているプロダクトで、主に以下の機能を提供しています。
- アプリケーションモニタリング
- ブラウザモニタリング
- Prometheus モニタリング
この ARMS の機能の1つとして、Prometheus をマネージドで利用する事ができるようになっています。
Prometheusについて
Prometheus はメトリクスの収集に特化したオープンソースのモニタリングツールです。
スケーラブルな環境下で、ターゲットを検知するサービスディスカバリ機能や、Pull型のアーキテクチャを採用しており、ターゲットへ配置されたエクスポーターへスクレイピングする事で、メトリクスを収集します。エクスポーターには、公式・サードパーティを含め、システムやデータベースなど、多くのエクスポーターが利用できようになっています。
ARMS Prometheus Monitoring について
オープンソースの Prometheus をセルフホストした場合、Prometheus の環境構築や各コンポーネント等、ユーザ自身で管理する必要があります。ARMS Prometheus ではこれらのコンポーネントを、Alibaba Cloud がマネージする事で、即座に利用でき運用負荷を軽減する事ができるようになっています。
ARMS Prometheus は、オープンソースの Prometheus と互換性があり、エージェント (PromAgent) をインストールするだけですぐに利用可能です。また、収集したメトリクスをビジュアライズする為のダッシュボードやアラート機能などが、Alibaba Cloud のコンソールと連携され、シームレスに統合された環境での利用が可能となっています。
モニタリング設定
では、実際にセットアップから操作するまでを試していきたいと思います。
大まかな流れとしては、 ACK クラスタへ監視エージェント (PromAgent) をセットアップし、検証用に作成した Redis コンテナに対してモニタリング設定を行いコンソールから操作してみます。
エージェントインストール
ACK クラスタへエージェントをインストールする方法としては、ACK クラスタ作成時にエージェントを有効にする方法と、ACK クラスタ作成後にエージェントをインストールする方法があります。 今回は、ACK クラスタ作成時にエージェントをインストールしたいと思います。
ACK クラスタ作成画面を進んでいくと、後半の各種コンポーネント設定画面から [Monitoring Agents] 項目の [Enable Prometheus Monitoring] にチェックを入れて作成する事で、エージェントがインストールされたクラスタが作成されます。
作成した ACK クラスタを確認してみると、[arms-prom] ネームスペースへ Pod や Service がデプロイされます。
$ kubectl get pod -n arms-promNAMESPACE NAME READY STATUS RESTARTS AGEarms-prom arms-prometheus-ack-arms-prometheus-68cb5d578-mn79q 1/1 Running 0 42marms-prom kube-state-metrics-749c9978d7-jjkg4 1/1 Running 0 42marms-prom node-exporter-g55jv 2/2 Running 0 42marms-prom node-exporter-t648g 2/2 Running 0 42marms-prom node-exporter-wwm84 2/2 Running 0 42m
$ kubectl get svc -n arms-promNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGEarms-prom-admin ClusterIP 172.16.191.207 <none> 9335/TCP 43marms-prom-server ClusterIP 172.16.56.118 <none> 9090/TCP 43mkube-state-metrics ClusterIP 172.16.78.11 <none> 8080/TCP,8081/TCP 43mnode-exporter ClusterIP None <none> 9100/TCP 43mnode-gpu-exporter ClusterIP 172.16.100.9 <none> 9445/TCP 43m
コンソール
エージェントがインストールされた状態で、対象の ACK クラスタをコンソールから確認してみます。
コンソールの [Operations] - [Prometheus Monitoring] を選択するとダッシュボードが表示されます。
デフォルトでいくつかのダッシュボードがすでに作成されています。
右上のリンクからは、 ARMS Prometheus のコンソールやアラート設定、Grafana のダッシュボードへ接続する事ができるようになっています。
[Open in New Window] から Grafana のダッシュボードを操作する事ができます。
[Go to ARMS] から ARMS Prometheus のコンソールへ移動します。 Prometheus の各種設定を行う場合は、こちらのコンソールから設定を行います。
ただし、まだベータ機能が多い状態なので、利用する際は提供されている機能の確認が必要です。こちらについては、今後のリリースに期待したいところです。
Redis セットアップ
では、ドキュメントへ記載されている手順を参考に、Redis エクスポーター使用して、ARMS Prometheus で Redis をモニタリングしてみます。
今回は検証が目的の為、設定内容は簡易的な形で進めたいと思います。
詳しい手順は以下のドキュメントへ記載されていますので、参考までにリンクを記載しておきます。
モニタリング対象となる Redis コンテナを準備する為、以下のマニフェストを実行し、Pod, Service をデプロイしておきます。
apiVersion: apps/v1kind: Deploymentmetadata:name: redisspec:replicas: 1selector:matchLabels:app: redistemplate:metadata:labels:app: redisspec:containers:- name: redisimage: redisimagePullPolicy: Alwaysresources:requests:cpu: 100mmemory: 100Miports:- containerPort: 6379---apiVersion: v1kind: Servicemetadata:name: redislabels:app: redisspec:ports:- port: 6379targetPort: 6379selector:app: redis
エクスポーターセットアップ
次にエクスポーターの設定です。以下のマニフェストで、エクスポーターの Deploymen, Service, ServiceMonitor をデプロイしていきます。
ARMS Prometheus では、Prometheus Operator と同様に ServiceMonitor を設定する事で、対象のエクスポーターをスクレイプし、メトリクスを収集する事ができるようになっています。
apiVersion: apps/v1kind: Deploymentmetadata:name: redis-exporterspec:replicas: 1selector:matchLabels:app: redis-exportertemplate:metadata:labels:app: redis-exporterspec:containers:- name: redis-exporterimagePullPolicy: Alwaysenv:- name: REDIS_ADDRvalue: "redis://redis:6379"- name: REDIS_PASSWORDvalue: ""- name: REDIS_EXPORTER_DEBUGvalue: "1"image: oliver006/redis_exporterports:- containerPort: 9121name: redis-exporter---apiVersion: monitoring.coreos.com/v1kind: ServiceMonitormetadata:name: redis-exporternamespace: defaultspec:endpoints:- interval: 30sport: redis-exporterpath: /metricsnamespaceSelector:any: trueselector:matchLabels:app: redis-exporter---apiVersion: v1kind: Servicemetadata:labels:app: redis-exportername: redis-exporterspec:ports:- name: redis-exporterport: 9121protocol: TCPtargetPort: 9121type: NodePortselector:app: redis-exporter
メトリクス確認
デプロイが完了したらコンソールを確認してみましょう。
ARMS Prometheus の [Settings] - [Targets (beta)] - [default/redis-exporter/0 (1/1 up)] を選択すると、Redis エクスポーター から取得されたメトリクスを確認する事ができます。
ダッシュボード作成
Grafana へ接続し、Redis のダッシュボードを作成していきます。
Redis のテンプレートをインポートする為、[import] から Redis のテンプレートをロードます。
Redis のテンプレート [763] を入力し [Load] します。
[Folder][prom] を今回の環境に合わせて選択し [import] します。
以上で Grafana へ Redis のダッシュボードが作成されました。
Grafana へ作成した Redis のダッシュボードは、ACK のコンソールからも確認する事ができるようになっています。
まとめ
今回はARMS Prometheus を使用し、ACK へデプロイした Redis コンテナへのモニタリング設定を行ってみました。
ARMS Prometheus では、Prometheus のコンポーネントをマネージドで利用でき、コンソールから簡単に設定する事が出来るなど、 Alibaba Cloud で Prometheus を使用する選択枠の1つとして検討できるプロダクトになっているのではないでしょうか。