saltstack源碼安裝zabbix_agent

    公司現有的監控使用zabbix,saltstack客戶端服務端安裝好後,客戶端不需要每臺機器逐檯安裝,當然修改zabbix配置文件,直接用salt完成,今天測試了salt源碼安裝zabbix_agent,效果還行;

    老規矩,top.sls

[root@cacti salt]# cat top.sls 

base:

   '*':

       - zabbix

#目錄樹

[root@cacti salt]# tree zabbix/

zabbix/

├── conf.sls

├── files

│?? ├── conf.sh

│?? ├── zabbix-2.4.7.tar.gz

│?? ├── zabbix_agentd

│?? └── zabbix_agentd.conf

├── init.sls

└── install.sls

通過一陣子的salt學習,寫sls文件要建立這樣的思想:

1、按sls文件類別劃分成:引用文件,安裝文件,配置文件,最好獨立分成這三部分,出錯了更容易排查:

2、配置前需要考慮幾個使用到的功能,最好有份手動安裝的配置文檔,以此配置,然後開始sls編寫:

    需要使用到的功能有:

        使用狀態模塊:file、cmd、service、user、group等

        使用狀態間關係:require、unless、template等

        sls文件之間的互相引用:include

[root@cacti zabbix]# cat init.sls 

include:

   - zabbix.conf

   - zabbix.install

[root@cacti zabbix]# cat install.sls 

zabbix_source:

   file.managed:

       - name: /usr/local/src/zabbix-2.4.7.tar.gz

       - source: salt://zabbix/files/zabbix-2.4.7.tar.gz

       - user: root

       - group: root

       - mode: 644

   cmd.run:

       - cwd: /usr/local/src

       - name: tar xf zabbix-2.4.7.tar.gz && chown -R root.root zabbix-2.4.7

       - require:

             - file: zabbix_source

zabbix_user:

   group.present:

       - name: zabbix

       - gid: 201

   user.present:

       - name: zabbix

       - fullname: zabbix

       - uid: 201

       - gid: 201

       - createhome: False

       - shell: /sbin/nologin

       - unless: id zabbix

zabbix_pkginstall:

   pkg.installed:

       - pkgs:

             - gcc

             - gcc-c++

             - autoconf

             - automake

             - mod_ssl

             - net-snmp-devel

             - libcurl-devel

             - zlib

             - zlib-devel

zabbix_commpile:

   cmd.run:

       - name: cd /usr/local/src/zabbix-2.4.7 && ./configure --prefix=/usr/local/zabbix --enable-agent && make && make install

       - require:

             - file: zabbix_source

             - user: zabbix_user

[root@cacti zabbix]# cat conf.sls 

include:

    - zabbix.install

/usr/local/zabbix/etc/zabbix_agentd.conf:

    file.managed:

        - name: /usr/local/zabbix/etc/zabbix_agentd.conf

        - user: root

        - mode: 644

        - source: salt://zabbix/files/zabbix_agentd.conf

        - template: jinja   #引用jinja模版

        - require: 

              - pkg: zabbix_pkginstall

salt://zabbix/files/conf.sh:

    cmd.script:

        - env:

             - BATCH: 'yes'

        - unless: test -d /usr/local/etc/zabbix_agentd.conf.d

        - require:

             - cmd: zabbix_commpile

zabbix_agentd:

    file.managed:

        - name: /etc/init.d/zabbix_agentd

        - user: root

        - mode: 755

        - source: salt://zabbix/files/zabbix_agentd

    cmd.run:

        - name:

            - /sbin/chkconfig --add zabbix_agentd

        - unless: /sbin/chkconfig --list zabbix_agentd

    service.running:

        - enable: True

##        - reload: True  #此處不需要reload

        - watch:

             - file: /usr/local/zabbix/etc/zabbix_agentd.conf

    因爲zabbix_agentd客戶端配置文件/usr/local/zabbix/etc/zabbix_agentd.conf,在每個客戶端中配置選項Hostname= 各不相同,這就可以把初始化中grains的變量值或者pillar自定義的變量值配置到/usr/local/zabbix/etc/zabbix_agentd.conf中,我這裏只以配置文件中Hostname選項爲例:

[root@cacti zabbix]# vim files/zabbix_agentd.conf

Hostname={{ grains['host'] }} 這樣就可以獲取到了系統的hostname,

更多用法可以使用salt 'minions' grains.items查看,或者salt 'minions' pillar.items

[root@cacti zabbix]# cat files/conf.sh 

#!/bin/bash

#

mkdir /usr/local/etc/zabbix_agentd.conf.d

mkdir /var/log/zabbix && chown -R zabbix.zabbix /var/log/zabbix

ln -s /usr/local/zabbix/bin/* /usr/bin/

ln -s /usr/local/zabbix/sbin/* /usr/sbin/

zabbix_agentd 和zabbix_agentd.conf 可以從源碼安裝包中獲取,另外zabbix_agentd的sysv腳本需要修改zabbix_agentd的安裝目錄纔可以。

一切妥當,最後執行salt 'minions' state.highstate




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章