1. 程式人生 > >使用ansible自動化安裝zabbix3.0

使用ansible自動化安裝zabbix3.0

[背景]

最近需要使用ansible自動化部署zabbix的server端和agent端,所以研究了一下。去年的時候,曾經接觸過ansible,嘗試用來部署openstack,但是那時候剛剛開始實習,啥也沒鼓搗出來,後期會繼續鼓搗。

[環境]
(1)OS版本:CentOS7
(2)zabbix版本:3.0.4(當前最新版本)
(3)資料庫:Mysql
(4)網路環境:無法連線外網

(5)zabbix安裝方式:由於沒網,採用原始碼包編譯安裝。

[安裝參考]
我的安裝指令碼都是按照之前部落格的步驟來寫的,連結:
[程式碼詳細]
這裡主要是server端的程式碼解釋,agent端比較簡單,就不解釋了。

執行方式:先ansible-playbook main.yml,然後在http://ip/zabbix上進行GUI安裝,然後執行ansible-playbook after-setup.yml。

(1)mian.yml是各種playbook的集合,使用include讓playbook的執行順序更加明顯,程式碼如下:

---
- hosts: zabbix
  become: yes
  vars_files:
    - default_vars.yml
  tasks:
    - name: install many packages
      include: prepare.yml
      tags:
        - setup1

    - name: set environment parameters
      include: set-env.yml
      tags:
        - setup2

    - name: import tables to zabbix database
      include: set-zabbix.yml
      tags:
        - setup3

    - name: install zabbix && modify config
      include: install-zabbix.yml
      tags: 
        - setup4

  handlers:
    - include: handlers.yml

(2)default_vars.yml是變數檔案,可以在其中修改引數。

(3)prepare.yml主要是安裝一堆package,主要是basic、mysql、php和apache的package。因為我的虛擬機器是裸機,一開始安裝zabbix以及後期報錯缺了不少包,所以我決定一股腦都安裝起來。

(4)set-env.yml是防火牆埠設定、selinux設定、資料庫建立等。

(5)set-zabbix.yml是複製原始碼包、匯入資料庫表。

(6)install-zabbix.yml是編譯安裝zabbix、php配置和系統配置等。

(7)after-setup.yml的程式碼如下:

---
#Step5: after GUI setup
- hosts: zabbix
  remote_user: root
  vars_files:
    - default_vars.yml
  tasks:
    - name: copy zabbix.conf.php
      template: src=zabbix.conf.php.j2 dest={{html_dir}}/conf/zabbix.conf.php
      tags:
        - zabbix-conf-php
        - others
      notify:
        - restart zabbix_server
  handlers:
    include: handlers.yml
主要功能是,在gui安裝完後,配置zabbix.conf.php檔案,這一步不能提前做,否則無法登陸zabbix。

[模組詳細]
一開始寫指令碼的時候,我幾乎都使用的shell模組,然後用creates避免重複執行shell;
後期使用的模組主要有:
(1)shell:使用&&相當於管道符,執行多個shell命令
(2)lineinfile:確認檔案中是否包含某行
(3)mysql_db:需要依賴MySQL-python包,用於建立資料庫
(4)mysql_user:需要依賴MySQL-python包,用於建立資料庫user
(5)service:用於服務重啟
(6)file:可以用於建立檔案、資料夾、建立軟連結之類的
我覺得模組雖好,但是使用的功能範圍較小,我比較懶,大多數還是使用的shell。

另外tags這個屬性也不錯,在跑playbook時,可以使用tags,控制需要跑的task。用法:ansible-playbook main.yml --tags="setup1"

[ansible tips]
ansible的官方文件非常全面,但是我覺得直接看文件還是很boring的,可以先看看別人寫的程式碼,然後相應的去文件中查詢不理解的地方。

(1)使用yum install ansible安裝,若不成功則可能需要配置epel 源。安裝完畢,可使用ansible --version命令,檢視安裝的版本。
(2)hosts檔案的預設路徑是/etc/ansible/,在hosts中定義機器的別名、ip等,分配機器在不同的[group]中,常用的引數有ansible_ssh_host、ansible_ssh_private_key_file、ansible_ssh_port、ansible_ssh_user。這些引數也可以在ansible.cfg中定義,引數大同小異。
(3)ssh公鑰登入或者金鑰檔案配置完後,使用ansible -m ping 機器別名或群組名,eg:
# ansible -m ping zabbix
vagrant4 | success >> {
    "changed": false,
    "ping": "pong"
}
輸出"ping": "pong",即代表連線成功。
(4)執行playbook的命令是ansible-playbook test.yml,編寫playbook時要注意縮排空格,"-",":"等字元。另外,playbook對於雙引號好像沒有嚴格要求使用,轉義字元\建議不要使用,其實也沒必要使用。
(5)ansible具有冪等性,若執行playbook過程中報錯,不會回滾。再次執行playbook時,已執行成功的task一般也不會重複操作。(這裡的不會重複操作的task是指使用ansible模組的task,如果使用shell命令,可以使用creates關鍵字避免重複操作。)

[程式碼地址]
我寫的指令碼放在github上,可能還會有修改。

另外github上也有寫的很好的原始碼,是dj-wasabi的,對系統和資料庫相容性都非常好,而且直接跳過了web的GUI安裝,安裝成功後可以直接登陸。我在CentOS7上跑下來,基本上只有缺一兩個安裝包和mysql沒啟動的一些小bug,但是需要網路,從zabbix官網上下載rpm包;在ubuntu14.04上跑下來,全程沒有報錯,但是server的log裡面報錯了,可能也是缺包的問題。