
前回の記事で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を利用しています。
[code lang=text]
$ git clone https://github.com/sios-tech/azure.sios.jp.git
$ cd azure.sios.jp/citest_zabbix-agent
[/code]
github上のディレクトリ構成は下図のようになっています。
ここではターゲットのサーバを testweb01
としています。
[code lang=text]
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
[/code]
Ansible実行環境の準備
Ansibleにお願いするタスクはインストールと構成です。そして今後のAgentサーバーの増減や設定変更を構成管理をしてもらいます。まずAnsibleをインストールします。今回zabbix-agentのインストールをはじめとし、幾つかの roleをAnsible Galaxyから再利用しています。これも合わせて準備します。
[code lang=text]
$ 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
[/code]
次にzabbix-agentインストール、構成対象ホストをインベントリファイルに登録します。ここでは testweb01
としています。(IPアドレスでも大丈夫です)サーバーが追加する場合はこちらに記述を追加していきます。
[code lang=text]
$ vim hosts
—
[testservers]
testweb01
#testweb02
#testdb01
[zabbix-agent:children]
testservers
—
[/code]
Zabbix Serverの情報を定義します。今回利用するroleは dj-wasabi.zabbix-agent です。変数の定義は こちらを参考に 定義していきます。
group_var
はzabbix-agetnグループとして共有される variable を定義します。
[code lang=text]
$ 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
—
[/code]
zabbix-agentインストール対象ホスト固有の情報を定義します。接続情報もここに記述します。Ansibleのzabbixモジュールをつかってzabbix-serverへのホスト登録まで可能ですので、ここでzabbixのあてる監視テンプレートとグループも定義してしまいます。サーバーが増える場合はhostsファイルと同じホスト名のファイルを追加していきます。
[code lang=text]
$ 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
—
[/code]
Serverspec 初回実行環境の準備
Serverspecにお願いするタスクはZabbix-agentインストール後のテストです。まずServerspecインストールします
[code lang=text]
$ sudo yum install ruby
$ sudo gem install serverspec rake highline
[/code]
作業フォルダを作成して serverspec-init
を実行します。ここでは実行対象ホストを testweb01
としています。※ github上には作成したファイルを含んでいますが確認のため記載します。
[code lang=text]
$ 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
[/code]
テストはzabbix-agentが利用できる状態かどうかを確認するサンプルになっています。
- zabbix-agentパッケージが追加されているか
- zabbix-agentサービスが起動している、自動起動設定になっているか
- zabbix-agentのport(10050)がlistenしているか
[code]
$ 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
[/code]
またリモートホストに対してSSHのログイン情報に環境変数を使えるようにするには spec_helper.rb
を修正 する必要がありました。(こちらもgithubのサンプルに取り込んでいます。)
Jekins CIからの初回実行
では ansible と serverspecを実行してみます。各々の登録コマンドはこちらで実行しました。
ansible
[code lang=text]
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
[/code]
serverspec
[code lang=text]
cd /home/username/azure.sios.jp/citest_zabbix-agent/serverspec
USER=loginuser LOGIN_PASSWORD=loginpassword /usr/local/bin/rake
[/code]
実行結果です。成功しました。
Zabbix-agentも即時で登録されて、監視が開始されているという。素晴らしい。
ここまでできたら Ansible と Serverspecのファイルを gitにcommit/push してしまいます。
2回目以降の運用について、とまとめ
2回目以降はチームのgitの運用に則ってファイルを更新します。レビュー完了後にmergeしてjenkinsにcloneをする、そしてジョブを実行します。ブランチが更新された時点でWebhookでJenkinsがcloneと実行までを自動でやるやり方が多いでしょうか。今回は公開リポジトリということもありパスワード情報を含むのでそこまでは実施しませんでしたが、いかがでしょうか。サーバーにログインすることなく、Gitリポジトリを確認すればサーバーの構成が確認でき、Gitからサーバーの構成変更をアプローチできるというのは大変便利です。今後zabbix-agentに限らず色々応用を効かせた検証をしてみたいと思います。
—
Kentaro Morone


コメント投稿