はじめに
はじめまして、インフラ担当のfasahikoです。
今回のブログでは、「Ansibleを利用してZabbixサーバの設定を行う」をテーマに書きたいと思います。
Zabbixで監視を行っている且つ、Ansibleで設定を管理したい方(かなりピンポイントですが)を対象に、
AnsibleのインストールからZabbixモジュールを利用した設定までをご紹介したいと思います。
日々の運用を楽にするために、少しでもお役に立てれば幸いです。
- はじめに
- 導入のきっかけ
- Ansibleとは
- Ansible Zabbixモジュールとは
- Ansible,Zabbix-apiのインストール
- Ansible Zabbixモジュールでの自動化
- 終わりに
導入のきっかけ
今回ブログテーマのZabbixの設定自動化を導入した背景ですが、現在担当している商材では管理対象サーバが多く、
メンテナンスや構成変更時、新規サーバ構築時などにZabbixのGUIでポチポチと設定を行うことが苦痛に感じたことが発端です。
ZabbixのGUI操作で行うと1時間かかる設定作業が、Ansibleでの自動化で数分で設定できるので、運用をかなり楽にすることが出来たと思います。
次項から、今回のテーマであるAnsibleとZabbixモジュールについての概要を紹介します。
Ansibleとは
インフラ構成管理ツールとして多く利用されているためご存知の方も多いと思いますが、
Ansibleとはどのようなものなのか簡単におさらいをしておきます。
- Ansibleとは
Ansibleとは、システム設定やソフトウェアの導入(インストール)などを自動化、効率化する構成管理ツールの一つ。米レッドハット(Red Hat)社が開発・販売しており、オープンソースソフトウェアとしても公開されている。 IT用語辞典 e-wordsより抜粋
Ansibleは、Playbookというファイル群(ファイルの形式はYAML)に管理対象のサーバ構成を記載していきます。
Ansbileで管理できる設定や対象機器は多岐に渡っており、できないことはほぼないのではと思えるくらい構成管理用のモジュール(機能)が豊富に用意されています。
Ansible Zabbixモジュールとは
次に、Ansible Zabbixモジュールについてです。
AnsibleでZabbix上の設定を管理するためのモジュール群で、設定箇所毎にモジュールが開発されています。
現在、Ansible公式のモジュール一覧を参照すると以下のようなZabbixモジュールが用意されているようです。
・zabbix_action
・zabbix_group
・zabbix_group_info
・zabbix_host
・zabbix_host_info
・zabbix_hostmacro
・zabbix_maintenance
・zabbix_map
・zabbix_proxy
・zabbix_screen
・zabbix_template
等、詳しくはAnsible公式ドキュメントに載っています。 今回は上記の中から"zabbix_host"モジュール、"zabbix_maintenance"モジュールの実装例について紹介します。
Ansible,Zabbix-apiのインストール
それでは、実際にAnsibleのインストールからZabbixモジュールの利用までを見ていきたいと思います。
今回はCentOS7の上にAnsibleをインストールします。
以下のコマンドを実行し、Ansible本体とZabbixモジュール利用時に必要となるzabbix-apiをインストールします。
$ yum install epel-release $ yum install python-pip $ pip install ansible $ pip install zabbix-api
Ansible Zabbixモジュールでの自動化
ホスト設定
Ansibleとzabbix-apiのインストールが完了したので、早速Zabbixサーバ上のホスト設定をAnsibleで実行したいと思います。
まずは簡単に、以下のようなコードを作成して設定されるか実際にテストしてみます。
それぞれのパラメータについては公式に解説がありますが、以下のような形でそれぞれZabbixサーバのホスト設定に登録するパラメータを記載します。
$ zabbix_host_set.yml - hosts: localhost # Ansible接続先をlocalhostに指定 tasks: - name: Create host on zabbix local_action: # zabbix_hostモジュール利用時はlocal_action: にてローカルでのタスク実行とする module: zabbix_host # 利用モジュールの指定 server_url: "http://192.168.1.10/zabbix" # ZabbixサーバのURL login_user: admin # Zabbixサーバのユーザ login_password: admin # Zabbixサーバのパスワード host_name: "test-vm01.localdomain" # 登録するホスト名 host_groups: # 登録するホストグループ - test link_templates: # ホストに割り当てる監視テンプレート - Template_OS_Linux_Monitor status: enabled # 監視の有効化・無効化の選択 state: present # ホストの設定の有無、『present』はホストを登録、『absent』であれば削除になる interfaces: # 監視対象ホストのインターフェース設定 - type: 1 main: 1 useip: 1 ip: "192.168.1.21" dns: "" port: 10050
設定したいホストの情報を上記の通りPlaybookに記載し、以下コマンドを実行します。
$ ansible-playbook zabbix_host_set.yml
コマンドの実行完了後、Zabbixサーバ側を見てみると確かに追加されています。
上記の通り追加はできましたが、このままだとPlaybookに登録対象の設定をベタ書きしており
複数台の登録に対応できないのでもう少しAnsibleの関数を上手く利用できる形にしたいと思います。
以下のような構成でコードを再作成しました。
|-- inventories | `-- hosts |-- roles | `-- zabbix | `-- tasks | `-- host_setting.yml |-- zabbix_host_set.yml
それぞれのファイルの中身は以下の通りです。
- inventories/hosts
対象はテストサーバとして2台を設定しています。
$ inventories/hosts [test_server] 192.168.1.21 # ホスト名はtest-vm01.localdomain 192.168.1.22 # ホスト名はtest-vm02.localdomain
- zabbix_host_set.yml
上述のテストではhostsをhosts: localhost
としていましたが、
test_serverにAnsibleで接続する形hosts: test_server
に変更し、かつgather_facts:True
として
test_serverのサーバ構成情報を取得・利用できるようにしています。
$ zabbix_host_set.yml --- - hosts: test_server gather_facts: True tasks: - include_role: name: zabbix tasks_from: host_setting.yml
- roles/zabbix/tasks/host_setting.yml
前述の通りgather_facts:True
としてfact変数を利用できる形にしていたので、
可変部分のパラメータ設定(host_name,ip)はそのfact変数から取ってこれるようにしています。
(対象サーバのIPアドレスやホスト名はfact変数を利用せず、varsファイル内で変数定義をすべきなのですが、
導入時点では対象サーバ個々の構成管理は出来ていなかったため、実行時に対象サーバに接続し都度取得できるよう以下のようなコードとしました。)
$ roles/zabbix/tasks/host_setting.yml --- - name: Create host on Zabbix local_action: module: zabbix_host server_url: "http://192.168.1.10/zabbix" login_user: admin login_password: admin host_name: "{{ ansible_fqdn }}" host_groups: - test link_templates: - Template_OS_Linux_Monitor status: enabled state: present interfaces: - type: 1 main: 1 useip: 1 ip: "{{ ansible_eth0.ipv4.address }}" dns: "" port: 10050
以下のコマンドで実行してみます。
$ ansible-playbook -i inventories/hosts zabbix_host_set.yml
Zabbixサーバ側を確認するとホスト名やIPアドレスも誤りなく登録されています。
実際に私が利用したケースでは、Zabbix上のホスト設定のIPアドレス部分の更新が必要となったため、
上記のようなコードで設定を一括更新しました。
御覧の通り実装はすごく簡単なため、似たような手動の運用がある場合はすぐに切り替えることをお勧めします。
メンテナンス設定
次に簡単ではありますが、メンテナンス設定時に利用するzabbix_maintenanceモジュールについて記載します。
Zabbix上のホストグループ単位でメンテナンス設定を入れる場合は必要性はあまり感じませんが、
特定のホストグループ内の数十台だけにメンテナンス設定したいといった場合はかなり役立つと思います。
具体的には以下の形でコードを作成しました。
$ add_zabbix_maintenance.yml - hosts: localhost connection: local tasks: - name: Create maintenance Setting connection: local zabbix_maintenance: # 利用モジュールの指定 name: Maintenance for VersionUP # メンテナンスの名前 state: present # メンテナンス設定の有無、『present』は登録、『absent』であれば削除になる collect_data: yes # メンテナンスタイプの『データ収集あり』か『データ収集なし』の設定 minutes: 300 # メンテナンス期間(ここでは設定反映時点から300分間のメンテナンス設定となる) server_url: http://192.168.1.10/zabbix login_user: admin login_password: admin host_names: # メンテナンス設定を行うホスト - test-vm01.localdomain - test-vm02.localdomain
メンテナンス設定対象のホスト名を最後のhost_names以下に羅列し、
以下のコマンドを実行します。
$ ansible-playbook add_zabbix_maintenance.yml
実行後、確かに意図した通りのメンテナンス設定が入っており、指定したホストもメンテナンス対象に指定されています。
ただし、実行した時間からメンテナンス設定が開始となります。
この部分についてはメンテナンスの開始・終了時間が指定できればと惜しく思ったところです。
他力本願でお恥ずかしいですが今後のモジュールのメンテナンスに期待したいと思います。
終わりに
Ansible Zabbixモジュールを用いたZabbixサーバ上の設定自動化を紹介しました。
Zabbixサーバ設定を自動化するにはZabbixAPIを利用する方法も考えられますが、
APIは使い慣れていないけど、Ansibleなら使っているといった方にはこのZabbixモジュールを利用する方が導入しやすいと思います。
今回は設定作業をAnsible Zabbixモジュールで自動化した形ですが、Ansible本来の目的はコードでの構成管理です。
そのため今後は、Zabbixモジュールを用いてZabbixサーバ自体の構成管理を進めていければと考えています。
以上、最後までお読み頂きましてありがとうございました。
エンジニア中途採用サイト
ラクスでは、エンジニア・デザイナーの中途採用を積極的に行っております!
ご興味ありましたら是非ご確認をお願いします。
https://career-recruit.rakus.co.jp/career_engineer/カジュアル面談お申込みフォーム
どの職種に応募すれば良いかわからないという方は、カジュアル面談も随時行っております。
以下フォームよりお申込みください。
rakus.hubspotpagebuilder.comラクスDevelopers登録フォーム
https://career-recruit.rakus.co.jp/career_engineer/form_rakusdev/イベント情報
会社の雰囲気を知りたい方は、毎週開催しているイベントにご参加ください!
◆TECH PLAY
techplay.jp
◆connpass
rakus.connpass.com