はじめに
Kubernetesの監視について調べた時、cAdvisorを使う必要がありそうだと思ったのですが、cAdvisorのことをよく理解しておらず、「Kubernetesを立ち上げたら一緒に立ち上がったりするもの?」などと考えていました。このままではマズイので、cAdvisorのことを使い方から調べました。ここでは最低限cAdvisorを動かしてPrometheus(+Grafana)でメトリクスを取得できるようにします。
cAdvisorとは
cAdvisor(Container Advisor)は、稼働中のコンテナの情報を集め出力し、リソースとパフォーマンス状況を教えてくれるツールです。取得するリソースは各コンテナの稼働状況(running,stoppedなど)、CPUやメモリの使用量などです。
公式のgithubページはこちらです。
cAdvisorを起動
cAdvisorはdockerコンテナイメージで提供されているので、dockerコマンドや構成管理ファイルを用いて立ち上げます。ここではdocker runで直接起動する方法を紹介します。
実施環境
こちらの記事と同様です。PrometheusやGrafanaの使い方等もこちらのページからご覧ください。
OS: Centos7
Kubernetes version: 1.13.1
User: 以下の作業は全てrootユーザで実行しています。
docker runコマンド
公式のgithubページを参照しながら、以下のようにコマンドを入力してコンテナを立ち上げました。
[root@k8s-master ~]# docker run --publish=8080:8080 --detach=true --name=cadvisor google/cadvisor:latest
20fea528ac6bca0f2dd7b0d71a077920cdc770634af34a3da0e6f898938a9617
[root@k8s-master ~]# docker ps --filter "name=cadvisor"
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
20fea528ac6b google/cadvisor:latest "/usr/bin/cadvisor..." 17 minutes ago Up 17 minutes 0.0.0.0:8080->8080/tcp cadvisor
[root@k8s-master ~]#
GUIからhttp://<ホストのグローバルIPアドレス:8080>
にアクセスします。
デフォルトで表示されているのは、CPUやメモリ、ネットワークなどです。
メトリクスの一覧は、例えばhttp://<ホストのグローバルIPアドレス:8080/metrics>
にアクセスすると表示されます。
Prometheus(+Grafana)からメトリクスを取得する
cAdvisorが起動できたので、Prometheusからメトリクスを取得します。Prometheusの公式ページに方法が紹介されています。
コンフィグファイルの編集
Prometheusのコンフィグファイルに当たるprometheus.yml
を編集し、ターゲットにcAdvisorを追加します。
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
# ここからcAdvisorの部分に該当する
- job_name: cadvisor
scrape_interval: 5s
static_configs:
- targets: ['localhost:8080']
PrometheusにGUIからアクセス
コンフィグファイルの編集を完了したらPrometheusを起動し、GUIからhttp://<ホストのグローバルIPアドレス:9090>
にアクセスします。そして画面上部のStatus
→Targets
をクリックすると、cAdvisorが表示されるのが確認できます。
これでPrometheusでcAdvisorのメトリクスを収集できます。試しにcadvisor_version_info
というわかりやすいメトリクスを取得してみます。
取得が確認できました。
GrafanaにGUIからアクセス
Grafanaからでももちろん確認できます。Prometheus Dashboardから新しいグラフを作成し、取得メトリクスをcadvisor_version_info
と指定します。
まとめ
何も考えずにcAdvisorを起動するだけでしたら、このように簡単にできました。またPrometheus(+Grafana)からメトリクスを取得するのもそれほど難しくはなさそうです。
ただcAdvisorは長期間データを保存することができないため、InfluxDB等と組み合わせて使うことが多いようです。
また今回はdocker runコマンドで起動しましたが、yamlファイルを作成して起動することもできます。公式ページではkustomizeを利用したデプロイ方法を紹介しています。
参考リンク
【Docker】cAdvisorによるDockerコンテナの監視について
How to monitor docker containers using cAdvisor [ Part 1 ]
How to monitor docker containers using cAdvisor [ Part 2 ]