PuppetDBの「深淵」を覗く:REST APIで実現するインフラの完全可視化術
こんにちは。インフラの海を渡り歩くSREの皆さん、あるいはこれからその荒波に飛び込もうとしている皆さん。
日々の運用で「今、全ノードでどのバージョンのパッケージが動いているか?」「コンプライアンス的にNGな設定が紛れ込んでいないか?」といった問いに対し、管理画面をポチポチとクリックして確認していませんか?
Puppetを使っているなら、PuppetDBという宝の山が手元にあるはずです。しかし、多くの現場では「Puppetが状態を記録する場所」として放置されています。もったいない。PuppetDBは単なるDBではなく、「インフラのリアルタイムな状態」を吐き出す高機能な検索エンジンなのです。
今日は、PuppetDBのAPIを叩き、インフラの状態を可視化する「深淵」への入り口をご案内します。
—
1. PuppetDBとは何か?(なぜREST APIなのか)
PuppetDBは、Puppetがカタログをコンパイルする際に生成される「事実(Facts)」や「リソースの状態」「レポート」を蓄積するバックエンドです。
なぜAPIを叩くのか? それは、「人間が管理画面を見る」時代から「システムが状態を推論し、自動で可視化する」時代へシフトするためです。APIを使えば、Grafanaでインフラの健康状態をグラフ化したり、Pythonスクリプトでコンプライアンス違反を検知してSlackに飛ばすといった「攻めの運用」が可能になります。
—
2. 基礎セットアップ:APIへの「扉」を開く
PuppetDBはデフォルトでSSL証明書による厳格な認証を求めてきます。まずは、ローカルからAPIを叩ける準備をしましょう。
ステップ1:証明書の準備
Puppet Master(あるいはPuppetDBサーバー)から以下のファイルを抽出します。
- `/etc/puppetlabs/puppet/ssl/certs/ca.pem`
- `/etc/puppetlabs/puppet/ssl/certs/<ホスト名>.pem`
- `/etc/puppetlabs/puppet/ssl/private_keys/<ホスト名>.pem`
ステップ2:最初のHelloWorld(APIを叩く)
`curl`でノードの一覧を取得してみましょう。これが「Hello World」です。
PuppetDBのAPIにノード一覧を問い合わせる
curl -X GET https://
–cacert ca.pem \
–cert <ホスト名>.pem \
–key <ホスト名>.pem
これがJSON形式で返ってきたら成功です。このJSONこそが、あなたのインフラの「現在の姿」そのものです。
—
3. 実践:インフラ状態を可視化するクエリ術
PuppetDBの真骨頂はクエリ言語(PQL)です。SQLに近い感覚で、リソースの状態を抽出できます。
例:特定のパッケージのバージョンを確認する
全ノードで `nginx` のバージョンが正しく揃っているか確認するクエリです。
resourcesエンドポイントを叩く
typeがPackage、titleがnginxのものを抽出
resources[certname, parameters] {
type = “Package” and title = “nginx”
}
これをプログラムに組み込めば、「バージョンが古いサーバーだけをリストアップする」といった自動化ツールが、わずか数十行のコードで書けてしまいます。
—
4. Prometheus / Grafanaとの連携(夢のダッシュボード)
APIを直接叩くのも良いですが、SREとしては「ダッシュボード」に落とし込みたいですよね。
1. Exporterの作成: PythonやGoで簡単なスクリプトを書き、APIからデータを取得してPrometheusの形式(メトリクス)に変換します。
2. Prometheusで収集: そのスクリプトを `node_exporter` のように配置し、Prometheusでスクレイプします。
3. Grafanaで可視化: 「非推奨設定を持つノード数」や「最終チェックからの経過時間」をパネルに表示します。
これで、朝イチでコーヒーを飲みながら、「昨晩のデプロイで構成が崩れていないか」が瞬時にわかるようになります。これが、手作業から解放される喜びです。
—
最後に:自動化は「愛」です
インフラをコードで管理する(IaC)ことの真の目的は、楽をすることだけではありません。「人間がミスをする余地をなくし、システムが常に正しい状態を維持し続けること」です。
PuppetDBのAPIを使いこなすことは、インフラの暗闇に光を当てる行為です。最初は難しく感じるかもしれませんが、一度この「インフラの状態をプログラムで制御する」感覚を掴めば、もう元の運用には戻れなくなるはずです。
「この設定、本当に全台に適用されているかな?」と不安になる夜は、もう終わりです。PuppetDBに問いかけ、APIで真実を掴み取りましょう。
さあ、あなたのインフラの深淵を、可視化してみませんか?応援しています。