最近公司新上架了50臺服務器,系統包括centos7.3和centos6.8,如今須要在這50臺服務器中安裝zabbix客戶端,因爲本人比較懶,因此就想到了自動化工具ansible。python
具體是實現方法以下:c++
一、playbook代碼以下:
web
[root@deploy playbook-test]# cat zabbix-agent.yml shell
- hosts: web remote_user: root gather_facts: yes vars: IPDD: "{{ ansible_default_ipv4['address'] }}" tasks: - name: 開始拷貝源碼包 copy: #src: "/tmp/zabbix-2.2.23.tar.gz" #dest: "/tmp/zabbix-2.2.23.tar.gz" src: "{{ item.src }}" dest: "{{ item.dest }}" with_items: - { src: "/tmp/zabbix-2.2.23.tar.gz", dest: "/tmp/zabbix-2.2.23.tar.gz" } #- { src: "/tmp/zabbix-2.2.23.tar.gz", dest: "/tmp/zabbix-2.2.23.tar.gz" } #- { src: "/PATH/to/FILE", dest: "/tmp/zabbix-2.2.23.tar.gz" } - name: 開始解壓源碼包 unarchive: src: "/tmp/zabbix-2.2.23.tar.gz" dest: "/tmp" copy: no - name: 建立zabbix組 group: name: zabbix gid: 201 system: yes state: present - name: 建立zabbix用戶 user: name: zabbix comment: Monitor User uid: 201 group: zabbix shell: /sbin/nologin - name: 安裝GCC-C++ yum: name: gcc-c++ state: latest - name: 開始安裝zabbix客戶端 shell: cd /tmp/zabbix-2.2.23 && ./configure --sysconfdir=/etc/zabbix/ --sbindir=/usr/local/sbin/ --enable-agent && make && make install - name: 拷貝centos6啓動腳本 copy: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0755 with_items: - { src: "/tmp/zabbix-2.2.23/misc/init.d/fedora/core5/zabbix_agentd", dest: "/etc/init.d/zabbix_agentd" } when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "6" - name: 拷貝centos7啓動腳本 copy: src: "{{ item.src }}" dest: "{{ item.dest }}" mode: 0644 with_items: - { src: "/tmp/zabbix_agentd.service", dest: "/lib/systemd/system/zabbix_agentd.service" } when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "7" - name: systemctl daemon-reload command: systemctl daemon-reload when: ansible_distribution == 'CentOS' and ansible_distribution_major_version == "7" - name: 拷貝配置文件 template: src: /tmp/zabbix_agentd.conf.j2 dest: /etc/zabbix/zabbix_agentd.conf tags: - change-conf notify: - restart zabbix-agent handlers: - name: restart zabbix-agent service: name=zabbix_agentd state=restarted enabled=yes
二、準備源碼包及相關配置文件
centos
root@deploy tmp]# ll服務器
total 15160 drwxr-xr-x 13 1039 1039 4096 Jul 30 2018 zabbix-2.2.23 -rw-r--r-- 1 root root 15504361 Jul 4 01:28 zabbix-2.2.23.tar.gz -rw-r--r-- 1 root root 7465 Jul 6 01:48 zabbix_agentd.conf.j2 -rw-r--r-- 1 root root 412 Jul 6 01:13 zabbix_agentd.service
[root@deploy tmp]# grep -Ev "^#|^$" /etc/ansible/hosts ssh
[web] 192.168.131.10 192.168.131.15 192.168.131.129
[root@deploy tmp]# grep -Ev "^#|^$" zabbix_agentd.conf.j2 tcp
PidFile=/tmp/zabbix_agentd.pid LogFile=/tmp/zabbix_agentd.log Server=192.168.131.100 ListenPort=10023 ServerActive=192.168.131.100 Hostname={{ IPDD }} Timeout=30
[root@deploy tmp]# cat zabbix_agentd.service ide
[Unit] Description=Zabbix Agent After=syslog.target After=network.target [Service] Environment="CONFFILE=/etc/zabbix/zabbix_agentd.conf" EnvironmentFile=-/etc/sysconfig/zabbix-agent Type=forking Restart=on-failure PIDFile=/tmp/zabbix_agentd.pid KillMode=control-group ExecStart=/usr/local/sbin/zabbix_agentd -c $CONFFILE ExecStop=/bin/kill -SIGTERM $MAINPID RestartSec=10s [Install] WantedBy=multi-user.target
三、測試ansible主機與客戶端通訊是否正常(ansible主機須要和客戶端主機作ssh互信)工具
[root@deploy playbook-test]# ansible web -m ping
192.168.131.15 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } 192.168.131.10 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" } 192.168.131.129 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python" }, "changed": false, "ping": "pong" }
四、執行劇本(批量部署)
[root@deploy playbook-test]# ansible-playbook zabbix-agent.yml
五、測試客戶端機器zabbix-agent是否成功安裝並啓動
[root@deploy playbook-test]# ansible web -m shell -a "ps -ef |grep zabbix_agentd|grep -v grep"
192.168.131.10 | CHANGED | rc=0 >> zabbix 26025 1 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 26026 26025 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 26027 26025 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 26028 26025 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 26029 26025 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 26030 26025 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: active checks #1 [idle 1 sec] 192.168.131.15 | CHANGED | rc=0 >> zabbix 25956 1 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf zabbix 25957 25956 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 25958 25956 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 25959 25956 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 25960 25956 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 25961 25956 0 13:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: active checks #1 [idle 1 sec] 192.168.131.129 | CHANGED | rc=0 >> zabbix 11258 1 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd zabbix 11260 11258 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: collector [idle 1 sec] zabbix 11261 11258 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #1 [waiting for connection] zabbix 11262 11258 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #2 [waiting for connection] zabbix 11263 11258 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: listener #3 [waiting for connection] zabbix 11264 11258 0 06:49 ? 00:00:00 /usr/local/sbin/zabbix_agentd: active checks #1 [getting list of active checks][object Object]
結果顯示在客戶端機器上已經有zabbix_agentd的進程在運行。
六、若是須要變動配置內容,好比更改zabbix客戶端的監聽端口爲10023,此時不須要將整個playbook都執行一遍能夠在playbook相應的任務下加入tag,執行時使用「--tags」參數,指定要執行的playbook片斷。
[root@deploy playbook-test]# grep -Ev "^#|^$" /tmp/zabbix_agentd.conf.j2
PidFile=/tmp/zabbix_agentd.pid LogFile=/tmp/zabbix_agentd.log Server=192.168.131.100 ListenPort=10023 ServerActive=192.168.131.100 Hostname={{ IPDD }} Timeout=30
[root@deploy playbook-test]# ansible-playbook zabbix-agent.yml --tags change-conf
PLAY [web] ************************************************************************************************************************************************** TASK [Gathering Facts] ************************************************************************************************************************************** ok: [192.168.131.15] ok: [192.168.131.10] ok: [192.168.131.129] TASK [拷貝配置文件] *********************************************************************************************************************************************** changed: [192.168.131.15] changed: [192.168.131.10] changed: [192.168.131.129] RUNNING HANDLER [restart zabbix-agent] ********************************************************************************************************************** changed: [192.168.131.15] changed: [192.168.131.10] changed: [192.168.131.129] PLAY RECAP ************************************************************************************************************************************************** 192.168.131.10 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.131.129 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0 192.168.131.15 : ok=3 changed=2 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0[object Object]
結果顯示配置文件已替換成功,而且跳過了其餘步驟,只執行了拷貝配置文件的任務,配置文件改變,觸發了重啓zabbix agent的handler。
七、查看客戶端監聽的端口是否發生了變化
[root@deploy playbook-test]# ansible web -m shell -a "netstat -antlp | grep zabbix "
192.168.131.15 | CHANGED | rc=0 >> tcp 0 0 0.0.0.0:10023 0.0.0.0:* LISTEN 26358/zabbix_agentd 192.168.131.10 | CHANGED | rc=0 >> tcp 0 0 0.0.0.0:10023 0.0.0.0:* LISTEN 26427/zabbix_agentd 192.168.131.129 | CHANGED | rc=0 >> tcp 0 0 0.0.0.0:10023 0.0.0.0:* LISTEN 11615/zabbix_agentd
ansible批量部署zabbix客戶端到此結束,僅作記錄,能力有限,存在不少不足,不喜勿噴。
後期更新經過ansible批量修改線上服務器用戶密碼。