公司的金山區云服務器是由我負責的,每一次新購買了金山區的服務器都要把這些新服務器添加到zabbix監控里,于是我就編寫了一個ansible的playbook,這樣以后就可以在執行playbook的時候“帶薪拉屎”了。
ansible主機準備:
1)準備一個已經填寫好zabbix_server同時hostname為空的zabbix_agentd.conf放在/root/路徑下;
2)把新購買的機器ip地址填寫到/etc/ansible/hosts里,原有的hosts要另外保存一份;
3)playbook跑完之后,具體的自定義項目比如pid、端口檢查等監控項就是自己單獨配置了;
4)別忘了去zabbix的web頁面確認;
整個playbook如下文:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | --- -?hosts:?all ?? tasks: ???????? -?name:?給新購買的機器安裝zabbix?2.2版本(2.2.14版本) ?????????? yum:?name=zabbix22?state=latest ?????????? yum:?name=zabbix22-agent?state=latest ?????????? ????????? -?name:?備份原來的zabbix_agentd.conf ?????????? shell:? mv ?/etc/zabbix/zabbix_agentd .conf? /etc/zabbix/zabbix_agentd .conf-bak ?????????? ????????? -?name:?將控制端上的zabbix_agent.conf下發到目標機器 ?????????? copy:?src= /root/zabbix_agentd .conf?dest= /etc/zabbix/ ?owner=root?group=root?mode=0777 ?????????? ????????? -?name:?對應更改Hostname ?????????? shell:? sed ?-i?s /Hostname = /Hostname =$( hostname )/? /etc/zabbix/zabbix_agentd .conf ?????????? notify:?Start?Zabbix-agent?Service ?? handlers: ???????? -?name:?Start?Zabbix-agent?Service ?????????? service:?name=zabbix-agent?start=restarted |
執行之后,會有一個提示,如圖:
ansible提示,最好使用template或者lineinfile模塊,而不要用sed命令。
既然ansible這么說,那咱們就用唄,而且再把上面的語言整理一下。如下文:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | --- -?hosts:?all ?? tasks: ???????? -?name:?給新購買的機器安裝zabbix?2.4版本 ?????????? yum:?name={{?item?}}?state=latest ?????????? with_items: ?????????? -?zabbix24 ?????????? -?zabbix24-agent ???????? -?name:?備份原來的zabbix_agentd.conf ?????????? shell:? mv ?/etc/zabbix/zabbix_agentd .conf? /etc/zabbix/zabbix_agentd .conf-bak ???????? -?name:?將控制端上的zabbix_agent.conf下發到目標機器 ?????????? copy:?src= /root/zabbix_agentd .conf?dest= /etc/zabbix/ ?owner=root?group=root?mode=0777 ???????? -?name:?在新的zabbix_agent.conf添加Hostname ?????????? lineinfile:?dest= /etc/zabbix/zabbix_agentd .conf?regexp=^Hostname?line=Hostname=`ansible_nodename`? ?????????? notify:?Start?Zabbix-agent?Service ?? handlers: ???????? -?name:?Start?Zabbix-agent?Service ?????????? service:?name=zabbix-agent?start=retarted |
多說一下lineinfile模塊,lineinfile模塊具備“文件備份、語句替換、語句刪除、新語句插入”功能。其格式是:
1 | lineinfile:?dest=目標文件絕對路徑??具體內容 |
其中具體內容可以是以下幾項:
1)backup=yes,將原來的dest文件備份,默認是No;
2)regexp= ,接正則表達式,本文用的是“^Hostname”,即匹配以Hostname開頭的行;
3)state= ,不單獨寫出來的話,默認是present,如果是state=absent,就是把regexp= 滿足的語句刪除;
4)line="要插入的話",如果前面沒有regexp匹配出來的語句,那么默認是把“要插入的話”插入到文件最后一行。
?本文轉自 蘇幕遮618 51CTO博客,原文鏈接:http://blog.51cto.com/chenx1242/1856628