DevOps

Ansibleを使って、zabbix-agentをインストール(解説)

2017年8月18日

目次Category


Ansibleを使って、zabbix-agentをインストールします。

その際のAnsibleの構成ファイルについて解説したいと思います。少し醜いかもしれませんが、ご容赦ください。

まず、zabbix-agentをインストールする場合の手順を簡単に。


■Zabbix agentのインストール

A.zabbixのyumリポジトリの登録
rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm

B.インストール
yum -y install zabbix-agent

C.zabbixのyumリポジトリの無効化
vi /etc/yum.repos.d/zabbix.repo
—(下記を変更)—————————
[zabbix]
name=Zabbix Official Repository – $basearch
baseurl=http://repo.zabbix.com/zabbix/2.4/rhel/6/$basearch/
enabled=1

enabled=0

[zabbix-non-supported]
name=Zabbix Official Repository non-supported – $basearch
baseurl=http://repo.zabbix.com/non-supported/rhel/6/$basearch/
enabled=1

enabled=0


D.ZabbixサーバのIPアドレスを設定
vi /etc/zabbix/zabbix_agentd.conf

Server=127.0.0.1

Server=zabbixサーバのIPアドレスを指定 (XXX.XXX.XXX.XXX)


次にAnsibleのファイル構成/ファイル内容の解説です。


■ファイル構成

以下のようなファイル構成となります。


/opt/temp
├─ ansible.cfg…⑧
├─ zabbix-agent.yml…①
├─ prd…③
├─ group_vars
| └─ all
| └─ vars.yml…⑦
└─ roles
└─ zabbix
└─ agent
├─ tasks
| └─ main.yml…②
├─ templates
| ├─ zabbix_agent.j2…⑥
| └─ zabbix_agentd.conf.j2…④
└─ handlers
└─main.yml…⑤

次に各ファイルの内容説明です。
次に示すファイル内容で作成します。詳細は個々に説明します。


■各ファイル 説明

①【zabbix-agent.yml】

– hosts: all…すべてのサーバに対して
  serial: 1…上記hostsに対して、1台ごとに処理を実行する(同時実行を1)
  roles: 
    – zabbix/agent…②を実行


②【roles/zabbix/agent/tasks/main.yml】

# zabbix/agent …コメント文
 【zabbixのyumリポジトリの登録確認】 
# Install …コメント文
– name: Check Zabbix Repository…タスク名 標準出力に表示され
  become: yes…root権限で実行(Ansible1.9から使用可能。=sudo: yes)
  stat: path=”/etc/yum.repos.d/zabbix.repo”…statモジュールで[“/etc/yum.repos.d/zabbix.repo”]のパスを確認
  register: is_zabbix_repo …上記の結果を「is_zabbix_repo」に格納
 【zabbixのyumリポジトリの登録】 
– name: Install Zabbix Repository…タスク名 標準出力に表示される
become: yes…root権限で実行
  yum: …yumモジュール
    state: present …指定のバージョンでリポジトリの登録実施 ※複数サーバある場合は「present」指定が望ましい
    name: “http://repo.zabbix.com/zabbix/3.0/rhel/6/x86_64/zabbix-release-3.0-1.el6.noarch.rpm”…yumモジュール zabbixのyumリポジトリの登録 rpmのURL
  when: not is_zabbix_repo.stat.exists…ファイルが存在しなかったらタスクを実行する。
  
– name: Check zabbix_agentd…タスク名 標準出力に表示される
  become: yes…root権限で実行
  stat: path=”/usr/sbin/zabbix_agentd”… statモジュールで[“/usr/sbin/zabbix_agentd”]のパスを確認
  register: is_zabbix_agentd… 上記の結果を「is_zabbix_agentd」に格納
  
– block:…block ディレクティブ。when句の条件下でタスクが実行される。
    become: yes【zabbixのyumリポジトリの有効化】                 …タスク名 標準出力に表示される
    become: yes… root権限で実行
    replace:…replaceモジュール 置換
    dest: “/etc/yum.repos.d/zabbix.repo”…「”/etc/yum.repos.d/zabbix.repo”」に対して置換を行う。
    regexp: “enabled=.*”…置換対象文字列(pythonの正規表現に従う)
    replace: “enabled=1”…置換文字列 “enabled=.*” ⇒ “enabled=1”
 【zabbix-agentのインストール】
  – name: Install zabbix-agent…タスク名 標準出力に表示される
    become: yes…root権限で実行
    yum: 
    state: present…yumモジュール 指定のバージョンでインストール実施※複数サーバある場合は「present」指定が望ましい
    name: “zabbix-agent-{{ zabbix_version }}-1.el6.x86_64”…yumモジュール インストールするパッケージ名。変数は、group_vars/all/vars.yml⑦より参照される。
 【zabbixのyumリポジトリの無効化】
  – name: Disable Zabbix Repository…タスク名 標準出力に表示され
    become: yes… root権限で実行
    replace:…replaceモジュール 置換
    dest: “/etc/yum.repos.d/zabbix.repo”…「”/etc/yum.repos.d/zabbix.repo”」に対して置換を行う。
    regexp: “enabled=.*”…置換対象文字列(pythonの正規表現に従う)
    replace: “enabled=0”…置換文字列 “enabled=.*” ⇒ “enabled=1”
  when: not is_zabbix_agentd.stat.exists…ファイルが存在しなかったらタスクを実行する。
  
# Copy Configure 
– name: Copy zabbix-agent Config…タスク名 標準出力に表示される
  become: yes…root権限で実行
  template:…templateモジュール 指定したテンプレートのファイルを設置する
  src: “{{ item }}.j2”…ローカルにあるJinja2テンプレートのパス ④
  dest: “/etc/zabbix/{{ item }}”…コピー先の絶対パス
  with_items:
   
…with_itemsモジュール タスクを繰り返し実行する
    – “zabbix_agentd.conf” …アイテムは、”zabbix_agentd.conf”のみなので1回実施
  notify: Restart zabbix-agent…タスクで状態に変更があった(ファイルの設置に成功した)場合に対応する 
  
– name: Copy Logrotate Config…タスク名 標準出力に表示される
  become: yes…root権限で実行
  template: …templateモジュール 指定したテンプレートのファイルを設置する
    src: “{{ item }}.j2”…ローカルにあるJinja2テンプレートのパス ⑥
    dest: “/etc/logrotate.d/{{ item }}”…コピー先の絶対パス
  with_items:…with_itemsモジュール タスクを繰り返し実行する
  – “zabbix-agent” …アイテムは、”zabbix_agentd.conf”のみなので1回実施


③【prd】

[prd:children]
test1_servers
test2_servers
test

[test]
test3_servers
test4_servers


④【roles/zabbix/agent/templates/zabbix_agentd.conf.j2】

・・・

編集したいファイルを用意します。Jinja2ファイルでないとだめなのでこのようなファイル識別子となります。

こちらは、一般的なファイルなので抜粋。


# This is a configuration file for Zabbix agent daemon (Unix)
# To get more information about Zabbix, visit http://www.zabbix.com

・・・

### Option: Server
# List of comma delimited IP addresses (or hostnames) of Zabbix servers.
# Incoming connections will be accepted only from the hosts listed here.
# If IPv6 support is enabled then ‘127.0.0.1’, ‘::127.0.0.1’, ‘::ffff:127.0.0.1’ are treated equally.
#
# Mandatory: no
# Default:
# Server=

Server=XXX.XXX.XXX.XXX・・・zabbixサーバのIPアドレスを指定 (XXX.XXX.XXX.XXX)

### Option: ListenPort
# Agent will listen on this port for connections from the server.
#
# Mandatory: no
# Range: 1024-32767
# Default:
# ListenPort=10050

・・・

⑤【roles/zabbix/agent/handlers/main.yml】

# zabbix/agent…コメント文
# Service…コメント文
– name: Restart zabbix-agentタスク名 標準出力に表示される
become: yes…root権限で実行行
service:…serviceモジュール リモートホストのサービスを制御する
name: “zabbix-agent”…”zabbix-agent”のサービスに対して実施
state: restarted…サービスを再起動する
enabled: yes…サーバ起動時に自動起動させるかどうか。 yesなので自動起動させる

 

⑥【roles/zabbix/agent/templates/zabbix-agent.j2】

・・・

編集したいファイルを用意します。

Jinja2ファイルでないとだめなのでこのようなファイル識別子となります。

/var/log/zabbix/zabbix_agentd.log 
{ 
missingok 
daily 
rotate {{ rotate }}…変数は、group_vars/all/vars.yml⑦より参照される。
compress 
dateext 
postrotate 
/bin/kill -HUP `cat /var/run/zabbix_agentd.pid 2> /dev/null` 2> /dev/null || true 
endscript 
} 

⑦【group_vars/all/vars.yml】
zabbix_version: “3.0.8”
rotate: 365


⑧【ansible.cfg】
デフォルトのままです。

では、実行。

■play book実行

$ cd /opt/temp

$ ansible-playbook -i prd zabbix-agent.yml


これだけで、対象サーバすべてに実施されます。

以上

この記事を書いた人

松葉 俊行

松葉 俊行

ビジネス基盤セクション 主任