ArgoCDのメトリクスをGrafanaダッシュボードに表示する
記事の内容
以下の画像のようなArgoCDのメトリクスをGrafana上に構築します。
記事の長さ
3分で読めます
Grafana, Prometheusを準備する
ローカルクラスター上にGrafanaとPrometheusをセットアップします。
こちらの記事にPrometheusとGrafanaをローカルクラスター上に構築し、PrometheusのメトリクスをGrafanaで表示する方法を紹介しています。
上記記事を参考にして、PrometheusとGrafanaをkindクラスター上に構築してください。
今回は、上記環境を利用して作成していきます。
ArgoCDの準備
ArgoCDをKindクラスターにinstallしていきます。(公式チュートリアル通りに進めていきます)
Install ArgoCD
$ kubectl create namespace argocd
$ kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/core-install.yaml
上記コマンドでKubernetesクラスターにargocd
というnamespaceを作成し、そのnamespaceにArgoCDをInstallします。
管理画面にアクセスする
ArgoCDのInstallが完了したので、Port Forwardを利用してArgoCDの管理画面にアクセスします。
$ kubectl port-forward svc/argocd-server -n argocd 8080:443
上記を実行後、https://localhost:8080 にアクセスします。すると、ArgoCDの初期画面が表示されるため、ログインを行います。
ArgoCDの初期パスワード
- id: admin
- password: <以下のコマンドで取得可能>
$ argocd admin initial-password -n argocd
無事ArgoCDの初期画面にアクセスできました
ArgoCDでアプリケーションをDeployする
ArgoCDの準備が完了したため、ArgoCDでアプリケーションをDeployします。
Test Applicationの作成
テストアプリケーションを以下で作成します。
kustomization.yaml
apiVersion: kustomize.config.k8s.io/v1beta1
kind: Kustomization
resources:
- ./deployment.yaml
deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: demo
spec:
replicas: 1
selector:
matchLabels:
app: demo
template:
metadata:
labels:
app: demo
spec:
containers:
- name: demo
image: nginx
ports:
- containerPort: 80
nginxサーバーが起動するDeploymentを作成しました。このDeploymentをArgoCDでDeployできるようにします。
ArgoCDにGithub Repositoryを登録する
以下画像のように、Connected Repositoryを追加します。Public Repositoryの場合、すぐにコネクトできます。
ArgoCD Applicationを作成する
次に、ArgoCD Applicationを作成します。
Applicationsのページから、+ NEW APP
を選択し、以下のように入力していきます。
- Application Name:
demo
- Project Name:
default
- Repository URL:
先ほどコネクトしたGithub Repository
- Revision:
HEAD
- Path:
.
- Cluster URL:
https://kubernetes.default.svc
- Namespace:
default
上記設定後、Applicationを作成します。
すると、以下のようにdemo
アプリケーションが作成されて、先ほど作成したdeploymentがdeployされます。
$ kubectl get pod -n default
NAME READY STATUS RESTARTS AGE
demo-65c7859f64-xqpqd 1/1 Running 0 38m
...
ArgoCDのメトリクスを取得する
ArgoCDの準備が完了したので、次にArgoCDのメトリクスを取得します。
ServiceMonitorを追加する
ArgoCDのメトリクスを取得するためにServiceMonitorリソースを追加して、PrometheusにArgoCDメトリクスのありかを教えます。
prometheus_servicemonitor.yaml
...
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-metrics
labels:
app: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-metrics
namespaceSelector:
matchNames:
- argocd
endpoints:
- port: metrics
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-server-metrics
labels:
app: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-server-metrics
namespaceSelector:
matchNames:
- argocd
endpoints:
- port: metrics
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-repo-server-metrics
labels:
app: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-repo-server
namespaceSelector:
matchNames:
- argocd
endpoints:
- port: metrics
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: argocd-applicationset-controller-metrics
labels:
app: prometheus
spec:
selector:
matchLabels:
app.kubernetes.io/name: argocd-applicationset-controller
namespaceSelector:
matchNames:
- argocd
endpoints:
- port: metrics
上記ファイルをKubernetesクラスターにapplyします。
$ kubectl apply -f prometheus_servicemonitor.yaml
...
servicemonitor.monitoring.coreos.com/argocd-metrics created
servicemonitor.monitoring.coreos.com/argocd-server-metrics created
servicemonitor.monitoring.coreos.com/argocd-repo-server-metrics created
servicemonitor.monitoring.coreos.com/argocd-applicationset-controller-metrics created
Grafana DashboardでArgoCDのDashboardを作成する
PrometheusにArgoCDのメトリクス情報を蓄積できるようになったので、GrafanaでDashboardを作成します。
ArgoCDの公式がGrafanaのダッシュボード用のjsonを提供していますので、このjsonファイルをimportします。
GrafanaのDashboard新規作成画面にいき、import を選択し、上記jsonファイルをコピペしてください。
正常にimportが完了すると、以下のようなDashboardが表示されます。
まとめ
これでArgoCDのメトリクスをGrafanaダッシュボード上で作成できました!
sample source
こちらに今回作成した構成のファイルをアップロードしてあります。
note
勉強法やキャリア構築法など、エンジニアに役立つ記事をnoteで配信しています。
Discussion