Jenkins CI & Ansible & Serverspec & Git でZabbix-agentのインストール、テスト、構成管理の実施

前回の記事でZabbix Serverを構築 しました。今回はZabbix-Agentのインストール記事を書こうと思いますが、せっかくなので Ansibleで構成をしてServerspecでテストします。ファイルはGitで管理し、Jesnkins CIがkickします。最近よくみかけるパティーンでしょうか。ここでは図の Git Server , CI Server , Zabbix-Server は既に用意してあるものとして、新規に Target Server への zabbix-agentのインストール、テスト、構成管理にフォーカスします。

CI Serverの初回準備

今回利用するAnsibleのplaybookをServerspecのファイルをGithubに公開しています。こちらを利用して進めます。OSはcentOS7を利用しています。

$ git clone https://github.com/sios-tech/azure.sios.jp.git
$ cd azure.sios.jp/citest_zabbix-agent

github上のディレクトリ構成は下図のようになっています。
ここではターゲットのサーバを testweb01 としています。

azure.sios.jp/citest_zabbix-agent
├── ansible
│   ├── ansible.cfg
│   ├── group_vars
│   │   └── zabbix-agent
│   ├── hosts
│   ├── host_vars
│   │   └── testweb01
│   ├── localhost.yml
│   ├── requirements.yml
│   ├── roles
│   │   └── localhost
│   │       └── tasks
│   │           └── main.yml
│   └── zabbix-agent.yml
└── serverspec
├── Rakefile
└── spec
├── spec_helper.rb
└── testweb01
└── zabbix-agent_spec.rb

Ansible実行環境の準備

Ansibleにお願いするタスクはインストールと構成です。そして今後のAgentサーバーの増減や設定変更を構成管理をしてもらいます。まずAnsibleをインストールします。今回zabbix-agentのインストールをはじめとし、幾つかの roleをAnsible Galaxyから再利用しています。これも合わせて準備します。

$ sudo yum install -y epel-release
$ sudo yum install -y --enablerepo=epel ansible
$ git clone https://github.com/sios-tech/azure.sios.jp.git
$ cd azure.sios.jp/citest_zabbix-agent/ansible
$ sudo ansible-galaxy install -r requirements.yml
$ ansible-playbook localhost.yml

次にzabbix-agentインストール、構成対象ホストをインベントリファイルに登録します。ここでは testweb01 としています。(IPアドレスでも大丈夫です)サーバーが追加する場合はこちらに記述を追加していきます。

$ vim hosts
---
[testservers]
testweb01
#testweb02
#testdb01
[zabbix-agent:children]
testservers
---

Zabbix Serverの情報を定義します。今回利用するroleは dj-wasabi.zabbix-agent です。変数の定義は こちらを参考に 定義していきます。

group_var はzabbix-agetnグループとして共有される variable を定義します。

$ vim group_vars/zabbix-agent 
---
# file: group_vars/testservers
agent_server: cisvr01
agent_serveractive: cisvr01
agent_listenport: 10050
zabbix_url: https://cisvr01
zabbix_api_use: true
zabbix_api_user: Admin
zabbix_api_pass: zabbix
zabbix_api_create_hosts: True
zabbix_host_status: enabled
zabbix_selinux: True
---

zabbix-agentインストール対象ホスト固有の情報を定義します。接続情報もここに記述します。Ansibleのzabbixモジュールをつかってzabbix-serverへのホスト登録まで可能ですので、ここでzabbixのあてる監視テンプレートとグループも定義してしまいます。サーバーが増える場合はhostsファイルと同じホスト名のファイルを追加していきます。

$ vim host_vars/testweb01
---
ansible_ssh_host: testweb01
ansible_ssh_port: 22
ansible_ssh_user: username
ansible_ssh_pass: userpassword
#ansible_ssh_private_key_file: ~/path/to/key.pem
zabbix_host_groups:
- Linux servers
zabbix_link_templates:
- Template OS Linux
---

Serverspec 初回実行環境の準備

Serverspecにお願いするタスクはZabbix-agentインストール後のテストです。まずServerspecインストールします

$ sudo yum install ruby
$ sudo gem install serverspec rake highline

作業フォルダを作成して serverspec-init を実行します。ここでは実行対象ホストを testweb01 としています。※ github上には作成したファイルを含んでいますが確認のため記載します。

$ mkdir workingdir; cd workingdir
$ serverspec-init
Select OS type:
1) UN*X
2) Windows
Select number: 1
Select a backend type:
1) SSH
2) Exec (local)
Select number: 1
Vagrant instance y/n: n
Input target host name: testweb01
+ spec/
+ spec/testweb01/
+ spec/testweb01/sample_spec.rb
+ spec/spec_helper.rb
+ Rakefile
+ .rspec

テストはzabbix-agentが利用できる状態かどうかを確認するサンプルになっています。

  • zabbix-agentパッケージが追加されているか
  • zabbix-agentサービスが起動している、自動起動設定になっているか
  • zabbix-agentのport(10050)がlistenしているか
$ cat azure.sios.jp/citest_zabbix-agent/serverspec/spec/testweb01/zabbix-agent_spec.rb 
require 'spec_helper'
describe package('zabbix-agent'), :if => os[:family] == 'redhat' do
it { should be_installed }
end
describe service('zabbix-agent'), :if => os[:family] == 'redhat' do
it { should be_enabled }
it { should be_running }
end
describe port(10050) do
it { should be_listening }
end

またリモートホストに対してSSHのログイン情報に環境変数を使えるようにするには spec_helper.rb を修正 する必要がありました。(こちらもgithubのサンプルに取り込んでいます。)

Jekins CIからの初回実行

では ansible と serverspecを実行してみます。各々の登録コマンドはこちらで実行しました。

ansible

ANSIBLE_CONFIG=/home/username/azure.sios.jp/citest_zabbix-agent/ansible/ansible.cfg \
ansible-playbook -i /home/username/azure.sios.jp/citest_zabbix-agent/ansible/hosts \
/home/username/azure.sios.jp/citest_zabbix-agent/ansible/zabbix-agent.yml

serverspec

cd /home/username/azure.sios.jp/citest_zabbix-agent/serverspec
USER=loginuser LOGIN_PASSWORD=loginpassword /usr/local/bin/rake

実行結果です。成功しました。

scrennshot4

Zabbix-agentも即時で登録されて、監視が開始されているという。素晴らしい。

scrennshot1

ここまでできたら Ansible と Serverspecのファイルを gitにcommit/push してしまいます。

2回目以降の運用について、とまとめ

2回目以降はチームのgitの運用に則ってファイルを更新します。レビュー完了後にmergeしてjenkinsにcloneをする、そしてジョブを実行します。ブランチが更新された時点でWebhookでJenkinsがcloneと実行までを自動でやるやり方が多いでしょうか。今回は公開リポジトリということもありパスワード情報を含むのでそこまでは実施しませんでしたが、いかがでしょうか。サーバーにログインすることなく、Gitリポジトリを確認すればサーバーの構成が確認でき、Gitからサーバーの構成変更をアプローチできるというのは大変便利です。今後zabbix-agentに限らず色々応用を効かせた検証をしてみたいと思います。


Kentaro Morone

Be the first to comment

コメント投稿

Your email address will not be published.


*