この記事は、『[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」から監視する手順をご紹介します。
※下記手順は、基本的に公式ドキュメントの以下のページの手順に基づきます。
Prometheusとは?
OSSとして公開されている監視ソフトウェアです。詳細については、以下の公式サイトを確認してください。
検証環境
さっそく、検証用に以下のような環境を構築します。今回はどちらの仮想マシンもCentOS 7を利用しています。
Vagrantを利用し2台の仮想マシンを生成します、1台はAnsible Towerをセットアップ、もう1台にPrometheusを構築します。
Ansible Towerノードでの操作
本記事では、Ansible Towerのセットアップ作業については割愛させていただきます。Ansible Towerのインストレーションについては、公式ドキュメントを参照してください。
Tokenの取得
Prometheusが情報を取得するためには、Prometheusが情報取得に利用するユーザーのTokenを取得する必要があります。以下のAPIエンドポイントにアクセスし、「POST」をクリックすることで新しいTokenが発行されます。
https://<TOWERのURL>/api/v2/users/<ユーザーのID>/tokens
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
以下の画面が表示されれば成功です、おめでとうございます!
「- insert metric at cursor」をクリックすると、様々な情報を表示させることができます。Tower関連の情報は、「awx_*」のアイテムを選択し、「Execute」をクリックすることで表示できます。
(オプション) 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の起動
インストールが完了したら、systemctlコマンドでGrafanaのサービスを起動します。
# systemctl start grafana-server
ではGrafanaのWeb UIにアクセスしてみましょう。以下のURLから接続することができます。
http://192.168.100.20:3000
アクセスすると、以下のようなログイン画面が表示されるので、ID/パスワードともに「admin」と入力し、ログインします。
初回ログイン時は、パスワードの変更を求められます。新しいパスワードを入力し、「Save」をクリックします。
Grafanaの設定
まず、GrafanaとPrometheusを連携させる必要があります。「Add data source」から、Prometheusをデータソースとして選択し、「Select」をクリックします。
次に、詳細な設定を入力します。「HTTP」セクションのURLにPrometheusのURLを記述し、「Save & Test」をクリックします。これで、Prometheusから情報を取得することができるようになります。
最後に、実際に取得した情報を確認するDashboardを設定します。「New dashboard」をクリックし、新しくDashboardを作成します。
「New Panel」の設定で、「Add Query」をクリックします。ここでさきほどPrometheusで確認していたようなmetricsの情報をDashboardに表示させることができます。
では、サンプルとしてAnsible Towerで実行しているジョブと、Pendingになっているジョブの数を監視するパネルを作成してみましょう。
「Metrics」を選択し、Prometheusの時と同様に確認したい情報を選択します。ここでは、「awx_running_jobs_total」と「awx_pending_jobs_total」をグラフ形式で表示させます。
この設定を保存すると、以下のように新たにDashboardが確認され、作成したパネルの内容を確認することができます。これ以外にも監視できる情報は数多くあり、Prometheus側のexporterを追加することでPostgreSQLの状態などを監視することもできますので、いろいろと試してみてください。
Automation Analytics
ここではPrometheus + Grafanaによる監視の一例をご紹介しましたが、Red Hatでは「Automation Analytics」という機能を提供しています。こちらを利用することでより詳細なAnsible Towerの監視が可能になります。
Automation Analyticsについては別の機会にまた改めて記事として取り上げたいと思いますので、ぜひ利用をご検討いただければと思います。
Happy Automation & Monitoring!