Ansible TowerをPrometheus(+Grafana)から監視する

この記事は、『[Ansible 2 Advent Calendar]』(https://qiita.com/advent-calendar/2019/ansible2)18日目の記事です。 qiita.com

こんにちは、Red HatでAnsibleのテクニカルサポートエンジニアをしている八木澤(ひよこ大佐)です。

今回は、Ansible Towerの最新版であるAnsible Tower 3.6.2のノードを、人気の監視ツール「Prometheus」から監視する手順をご紹介します。

※下記手順は、基本的に公式ドキュメントの以下のページの手順に基づきます。

docs.ansible.com

Prometheusとは?

OSSとして公開されている監視ソフトウェアです。詳細については、以下の公式サイトを確認してください。

prometheus.io

検証環境

さっそく、検証用に以下のような環境を構築します。今回はどちらの仮想マシンもCentOS 7を利用しています。

f:id:hiyokotaisa:20191219162549p:plain
図1: 検証環境の概要
Vagrantを利用し2台の仮想マシンを生成します、1台はAnsible Towerをセットアップ、もう1台にPrometheusを構築します。

Ansible Towerノードでの操作

本記事では、Ansible Towerのセットアップ作業については割愛させていただきます。Ansible Towerのインストレーションについては、公式ドキュメントを参照してください。

docs.ansible.com

Tokenの取得

Prometheusが情報を取得するためには、Prometheusが情報取得に利用するユーザーのTokenを取得する必要があります。以下のAPIエンドポイントにアクセスし、「POST」をクリックすることで新しいTokenが発行されます。

https://<TOWERのURL>/api/v2/users/<ユーザーのID>/tokens

f:id:hiyokotaisa:20191219152922p:plain
図2: Tokenの取得

Prometheusノードでの操作

Prometheusのセットアップは、Dockerなどのコンテナ上に構築する場合と、通常のアプリケーションとして構築する2通りの方法があります。 今回は、通常のアプリケーションとしてセットアップします。

Prometheusのダウンロード

以下のコマンドを実行し、PrometheusのパッケージをGitHubからダウンロードします。

# wget https://github.com/prometheus/prometheus/releases/download/v2.14.0/prometheus-2.14.0.linux-amd64.tar.gz

ダウンロードしたら、tarコマンドでアーカイブを展開します。

# tar xvf prometheus-2.14.0.linux-amd64.tar.gz 

prometheus-2.14.0.linux-amd64/
prometheus-2.14.0.linux-amd64/NOTICE
prometheus-2.14.0.linux-amd64/prometheus
prometheus-2.14.0.linux-amd64/LICENSE
prometheus-2.14.0.linux-amd64/prometheus.yml
prometheus-2.14.0.linux-amd64/console_libraries/
prometheus-2.14.0.linux-amd64/console_libraries/prom.lib
prometheus-2.14.0.linux-amd64/console_libraries/menu.lib
prometheus-2.14.0.linux-amd64/consoles/
prometheus-2.14.0.linux-amd64/consoles/prometheus.html
prometheus-2.14.0.linux-amd64/consoles/node-overview.html
prometheus-2.14.0.linux-amd64/consoles/node-cpu.html
prometheus-2.14.0.linux-amd64/consoles/prometheus-overview.html
prometheus-2.14.0.linux-amd64/consoles/node.html
prometheus-2.14.0.linux-amd64/consoles/index.html.example
prometheus-2.14.0.linux-amd64/consoles/node-disk.html
prometheus-2.14.0.linux-amd64/tsdb
prometheus-2.14.0.linux-amd64/promtool

prometheus.ymlの作成

展開したPrometheusのディレクトリに移動すると、prometheus.ymlという設定ファイルがあります。ここに、PrometheusがどのようにAnsible Towerの情報を取得するかを定義します。 Ansible Towerには「/api/v2/metrics」というAPIエンドポイントがあり、ここに出力される情報をPrometheusによる監視に利用することができます。

Prometheusディレクトリ内のprometheus.ymlを開き、「scrape_configs」のセクションを検索し、以下の記述を追記します。

  - job_name: 'tower'
    tls_config:
        insecure_skip_verify: True
    metrics_path: /api/v2/metrics
    scrape_interval: 5s
    scheme: https
    bearer_token: <確認したトークンの文字列>
    # basic_auth:
    #   username: admin
    #   password: password
    static_configs:
        - targets:
            - 192.168.100.10

Prometheusの起動

上記を追記したら、以下のコマンドを実行して、Prometheusを起動します。「nohup」を利用してバックグラウンドで起動し、出力をすべて「prometheus.log」に出力させるようにしています。

# nohup ./prometheus --config.file=prometheus.yml > prometheus.log 2>&1 &

起動したら、早速アクセスできるか確認してみましょう。この検証環境では、以下のURLにアクセスすることでPrometheusのダッシュボードを開くことができます。

http://192.168.100.20:9090

以下の画面が表示されれば成功です、おめでとうございます!

f:id:hiyokotaisa:20191219153525p:plain
図3: Prometheusの画面

「- insert metric at cursor」をクリックすると、様々な情報を表示させることができます。Tower関連の情報は、「awx_*」のアイテムを選択し、「Execute」をクリックすることで表示できます。

f:id:hiyokotaisa:20191219153753p:plain
図4: Towerの情報を表示

(オプション) Grafanaもセットアップしてみる

Prometheusのダッシュボードはかなりシンプルな作りなので、本格的な監視を検討するうえでは、もっと高機能なダッシュボードが欲しくなると思います。 Prometheusとあわせてよく使われるのが「Grafana」というツールです。こちらのツールと組み合わせることで、よりかっこよく高機能なダッシュボードを使って、取得した情報を整理することができます。

Grafanaのインストール

では、早速インストールしてみましょう。 Prometheusを実行しているツールで以下のコマンドを実行し、rpmファイルをインストールします。

wget https://dl.grafana.com/oss/release/grafana-6.5.2-1.x86_64.rpm 
sudo yum localinstall grafana-6.5.2-1.x86_64.rpm 

リポジトリを登録してインストールすることもできます。詳細な手順についてはGrafanaの公式ドキュメントを参照してください。

grafana.com

Grafanaの起動

インストールが完了したら、systemctlコマンドでGrafanaのサービスを起動します。

# systemctl start grafana-server

ではGrafanaのWeb UIにアクセスしてみましょう。以下のURLから接続することができます。

http://192.168.100.20:3000

アクセスすると、以下のようなログイン画面が表示されるので、ID/パスワードともに「admin」と入力し、ログインします。

f:id:hiyokotaisa:20191219160316p:plain
図5: Grafanaのログイン画面

初回ログイン時は、パスワードの変更を求められます。新しいパスワードを入力し、「Save」をクリックします。

f:id:hiyokotaisa:20191219160412p:plain
図6: パスワードの変更

Grafanaの設定

まず、GrafanaとPrometheusを連携させる必要があります。「Add data source」から、Prometheusをデータソースとして選択し、「Select」をクリックします。

f:id:hiyokotaisa:20191219160655p:plain
図7: Data Sourcesの設定

次に、詳細な設定を入力します。「HTTP」セクションのURLにPrometheusのURLを記述し、「Save & Test」をクリックします。これで、Prometheusから情報を取得することができるようになります。

f:id:hiyokotaisa:20191219160805p:plain
図8: Prometheusの詳細設定

最後に、実際に取得した情報を確認するDashboardを設定します。「New dashboard」をクリックし、新しくDashboardを作成します。

f:id:hiyokotaisa:20191219160945p:plain
図9: Dashboardの作成

「New Panel」の設定で、「Add Query」をクリックします。ここでさきほどPrometheusで確認していたようなmetricsの情報をDashboardに表示させることができます。

f:id:hiyokotaisa:20191219161104p:plain
図10: Panelの作成

では、サンプルとしてAnsible Towerで実行しているジョブと、Pendingになっているジョブの数を監視するパネルを作成してみましょう。

「Metrics」を選択し、Prometheusの時と同様に確認したい情報を選択します。ここでは、「awx_running_jobs_total」と「awx_pending_jobs_total」をグラフ形式で表示させます。

f:id:hiyokotaisa:20191219161305p:plain
図11: パネルに表示させるMetricsの設定

この設定を保存すると、以下のように新たにDashboardが確認され、作成したパネルの内容を確認することができます。これ以外にも監視できる情報は数多くあり、Prometheus側のexporterを追加することでPostgreSQLの状態などを監視することもできますので、いろいろと試してみてください。

f:id:hiyokotaisa:20191219161440p:plain
図12: 作成したDashboard

Automation Analytics

ここではPrometheus + Grafanaによる監視の一例をご紹介しましたが、Red Hatでは「Automation Analytics」という機能を提供しています。こちらを利用することでより詳細なAnsible Towerの監視が可能になります。

www.ansible.com

Automation Analyticsについては別の機会にまた改めて記事として取り上げたいと思いますので、ぜひ利用をご検討いただければと思います。

Happy Automation & Monitoring!

* 各記事は著者の見解によるものでありその所属組織を代表する公式なものではありません。その内容については非公式見解を含みます。