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的配置文件中,在拷贝过去

 

 

 

 

 

posted @ 2017-11-22 16:22  LYCong  阅读(461)  评论(0编辑  收藏  举报