salt 使用state文件来配置zabbix客户端文件
salt 调用pillar数据配置zabbix_agentd的配置文件
先拷贝zabbix的安装包到minion端
[root@cong-33 src]# scp zabbix-3.0.12.tar.gz 192.168.1.126:/usr/local/src/ ##我的机器做了密钥互信,所以不用密码
这里先不用salt安装zabbix,(还不会。。。。)
解压,编译安装zabbix
[root@cong-55 src]# tar xf zabbix-3.0.12.tar.gz [root@cong-55 src]# cd zabbix-3.0.12 [root@cong-55 zabbix-3.0.12]# ./configure --prefix=/usr/local/zabbix/ --enable-agent [root@cong-55 zabbix-3.0.12]# make && make install
在master的file_roots目录下配置好zabbix_agentd的配置文件
[root@cong-33 salt]# cat /srv/salt/file/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 LogRemoteCommands=1 Server=192.168.1.33 ServerActive=192.168.1.33 Hostname={{ hostname }} UnsafeUserParameters=1 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf PidFile=/var/run/zabbix/zabbix_agentd.pid LogFile=/var/log/zabbix/zabbix_agentd.log LogFileSize=0 [root@cong-33 salt]#
再编写pillar文件设置获取minion的hostname内容
[root@cong-33 salt]# cat /srv/salt/pillar/top.sls base: '*': - ip - user - uid - httpd - hostname [root@cong-33 salt]# cat /srv/salt/pillar/hostname.sls hostname: {{ grains['nodename'] }} [root@cong-33 salt]# salt 'cong-55' pillar.item hostname ##记得刷新pillar到minion端 cong-55: ---------- hostname: cong-55 [root@cong-33 salt]#
master端编写sls文件来拷贝zabbix_agentd的配置文件到minion
[root@cong-33 salt]# cat /srv/salt/zabbix_agentd.sls zabbix_agentd: ##sls的执行ID,可自定义 file.managed: - source: salt://file/zabbix/zabbix_agentd.conf ##源文件路径 - name: /usr/local/zabbix/etc/zabbix_agentd.conf ##目标文件路径 - template: jinja - defaults: hostname: {{ pillar['hostname'] }} ##设置hostname的key,在文件中可以调用这个key的值 [root@cong-33 salt]#
单独执行sls文件
[root@cong-33 salt]# salt 'cong-55' state.sls zabbix_agentd ##后面的文件名可以不加sls的后缀 cong-55: ---------- ID: zabbix_agentd Function: file.managed Name: /usr/local/zabbix/etc/zabbix_agentd.conf Result: True Comment: File /usr/local/zabbix/etc/zabbix_agentd.conf updated Started: 12:17:57.332941 Duration: 184.585 ms Changes: ---------- diff: ##因为编译好的zabbix_agentd配置文件是有内容的,salt把文件替换会显示增加和减少的内容 --- 。。。。。。。。 -# TLSPSKFile= +EnableRemoteCommands=1 +LogRemoteCommands=1 +Server=192.168.1.33 +ServerActive=192.168.1.33 +Hostname=cong-55 +UnsafeUserParameters=1 +Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf Summary for cong-55 ------------ Succeeded: 1 (changed=1) Failed: 0 ------------ Total states run: 1 Total run time: 184.585 ms [root@cong-33 salt]#
在minoin端查看
文件已经替换了,而且hostname也填充进去了
[root@cong-55 salt]# cat /usr/local/zabbix/etc/zabbix_agentd.conf LogFile=/tmp/zabbix_agentd.log EnableRemoteCommands=1 LogRemoteCommands=1 Server=192.168.1.33 ServerActive=192.168.1.33 Hostname=cong-55 UnsafeUserParameters=1 Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/*.conf [root@cong-55 salt]#
修改sls文件,让其可以执行更多的操作
配置拷贝过去后执行zabbix_agentd启动脚本,启动zabbix_agentd 服务
[root@cong-33 salt]# cat zabbix_agentd.sls zabbix_agentd_conf: file.managed: - source: salt://file/zabbix/zabbix_agentd.conf - name: /usr/local/zabbix/etc/zabbix_agentd.conf - template: jinja - defaults: hostname: {{ pillar['hostname'] }} zabbix_agentd: file.managed: - source: salt://file/zabbix/zabbix_agentd ##zabbix_agentd启动脚本,拷贝到minion端 - name: /etc/init.d/zabbix_agentd - mode: 755 service.running: ##运行zabbix_agentd服务 - name: zabbix_agentd - require: ##依赖,如果下面的文件存在,才会执行启动服务 - file: /etc/init.d/zabbix_agentd [root@cong-33 salt]#
后面发现minion没有zabbix用户,zabbix不能运行在root用户上。
好,我们使用sls来添加zabbix用户,然后再启动zabbix-agentd服务
修改sls文件
[root@cong-33 salt]# cat zabbix_agentd.sls zabbix_agentd_conf: ##sls执行的一个ID,可以自定义,在添加用户的情况下,如果不知道添加用户的名称,自动会取ID的值做用户名 file.managed: ##文件管理的函数,这里是拷贝文件到minion服务器 - source: salt://file/zabbix/zabbix_agentd.conf ##指定源文件路径,这里是salt的file_roots的路径 - name: /usr/local/zabbix/etc/zabbix_agentd.conf ##目标文件路径 - template: jinja - defaults: hostname: {{ pillar['hostname'] }} ##设定一个变量名。在文件中可以继承这个变量的值 zabbix_agentd: file.managed: - source: salt://file/zabbix/zabbix_agentd - name: /etc/init.d/zabbix_agentd - mode: 755 service.running: ##服务启动函数 - name: zabbix_agentd - require: ##依赖,如果下面的zabbix用户存在才会执行服务启动 - user: zabbix user.present: ##用户函数 - home: /usr/local/zabbix ##用户家目录 - shell: /bin/nologin ##用户shell环境 - name: zabbix ##用户名称,如果不指定,会取ID的值 - uid: 188 ##uid - gid: 188 ##gid - require: ##依赖下面的组名,组名存在才会执行这个添加用户的操作 - group: zabbix group.present: ##组函数 - name: zabbix ##组名称 - gid: 188 ##组ID - require: ##依赖,下面这个文件存在,才会执行添加组的操作 - file: /usr/local/zabbix/etc/zabbix_agentd.conf [root@cong-33 salt]#
执行sls文件
[root@cong-33 salt]# salt 'cong-55' state.sls zabbix_agentd cong-55: ---------- ID: zabbix_agentd_conf Function: file.managed Name: /usr/local/zabbix/etc/zabbix_agentd.conf Result: True Comment: File /usr/local/zabbix/etc/zabbix_agentd.conf is in the correct state Started: 15:54:28.866611 Duration: 57.703 ms Changes: ---------- ID: zabbix_agentd Function: file.managed Name: /etc/init.d/zabbix-agent Result: True Comment: File /etc/init.d/zabbix-agent is in the correct state Started: 15:54:28.924459 Duration: 16.151 ms Changes: ---------- ID: zabbix_agentd Function: group.present Name: zabbix Result: True Comment: Group zabbix is present and up to date Started: 15:54:28.948580 Duration: 1.704 ms Changes: ---------- ID: zabbix_agentd Function: user.present Name: zabbix Result: True Comment: User zabbix is present and up to date Started: 15:54:28.950437 Duration: 7.137 ms Changes: ---------- ID: zabbix_agentd Function: service.running Name: zabbix-agent Result: True Comment: Started Service zabbix-agent Started: 15:54:28.957773 Duration: 113.605 ms Changes: ---------- zabbix-agent: True Summary for cong-55 ------------ Succeeded: 5 (changed=1) Failed: 0 ------------ Total states run: 5 Total run time: 196.300 ms [root@cong-33 salt]#
原本自己写的zabbix_agentd启动脚本,手动可以起来,但是使用sls文件起不来,
后来就使用zabbix rpm包的启动脚本,修改一下就可以用来,但是注意一下目录的权限的一些配置要不会报错。
先手动执行看看行不行,在用sls来启动
服务起不来就看minion的salt日志,
因为zabbix的配置中,每个机器的IP,Hostname 都不一样,如果是大批量机器,那么手动就不合适了,
使用pillar来获取每个机器的IP,HostName,然后填写进zabbix的配置文件中,在拷贝过去