设为首页 收藏本站
查看: 999|回复: 0

[经验分享] saltstack的深入-配置zabbix所需的server,web,agent

[复制链接]

尚未签到

发表于 2018-8-1 07:19:13 | 显示全部楼层 |阅读模式
操作内容:  
一、基础环境
  
1、使用tvm-cobbler安装一个tvm-zabbix虚拟机来做实验。在“配置zabbix所需的mysql-server”的基础上继续操作
  
2、网络:
  
eth0:host-only(用于虚拟内网,手动固定IP,这样从宿主机可以直接连接到这个vm)
  
eth1:NAT(用于上外网,动态IP)
  
[root@tvm-zabbix ~]# cd /etc/sysconfig/network-scripts/
  
[root@tvm-zabbix network-scripts]# cat ifcfg-eth0
  
DEVICE=eth0
  
TYPE=Ethernet
  
ONBOOT=yes
  
NM_CONTROLLED=yes
  
BOOTPROTO=none
  
IPADDR=192.168.56.200
  
PREFIX=24
  
GATEWAY=192.168.56.1
  
DNS1=192.168.56.254
  

  
[root@tvm-zabbix network-scripts]# cat ifcfg-eth1
  
DEVICE=eth1
  
TYPE=Ethernet
  
ONBOOT=yes
  
NM_CONTROLLED=yes
  
BOOTPROTO=dhcp
  
DNS1=192.168.56.254
  

  
[root@tvm-zabbix ~]# df -h
  
Filesystem      Size  Used Avail Use% Mounted on
  
/dev/sda3        36G  1.8G   32G   6% /
  
tmpfs           499M   12K  499M   1% /dev/shm
  
/dev/sda1       194M   29M  155M  16% /boot
  
/dev/sdb1        99G  188M   94G   1% /data
  

  

  
使用域名:
  
[root@tvm-yum ~]# cat /etc/dnsmasq.d/office.conf |grep zbx-m
  
address=/zbx-m.office.test/192.168.56.200
  

  
3、repo
  
我们在自己的office这个repo中已经增加了几个rpm包:
  
[root@tvm-zabbix ~]# yum search --disablerepo='*' --enablerepo='office' zabbix
  
Loaded plugins: fastestmirror, security
  
Loading mirror speeds from cached hostfile
  
======================================================================================= N/S Matched: zabbix ========================================================================================
  
percona-zabbix-templates.noarch : Percona Monitoring Plugins for Zabbix
  
zabbix-agent.x86_64 : Zabbix Agent
  
zabbix-get.x86_64 : Zabbix Get
  
zabbix-java-gateway.x86_64 : Zabbix java gateway
  
zabbix-sender.x86_64 : Zabbix Sender
  
zabbix-server.x86_64 : Zabbix server common files
  
zabbix-server-mysql.x86_64 : Zabbix server compiled to use MySQL database
  
zabbix-web.noarch : Zabbix Web Frontend
  
zabbix-web-mysql.noarch : Zabbix web frontend for MySQL
  
zabbix.x86_64 : Enterprise-class open source distributed monitoring solution.
  

  
  Name and summary matches only, use "search all" for everything.
  

  

  
二、配置
  
1、文件结构
  
[root@tvm-saltmaster base]# tree zabbix/
  
zabbix/
  
├── agent.sls
  
├── server.sls
  
└── web.sls
  

  
0 directories, 3 files
  

  
[root@tvm-saltmaster base]# tree conf.d/zabbix/
  
conf.d/zabbix/
  
├── httpd_zabbix.conf
  
├── php_zabbix.ini
  
├── README.txt
  
├── scripts
  
│?? ├── check_conn.py
  
│?? └── nginx_status
  
├── tpl.zabbix_agentd.conf
  
├── tpl.zabbix_server.conf
  
├── zabbix_agentd.conf
  
├── zabbix_agentd.d
  
│?? ├── userparameter_default.conf
  
│?? ├── userparameter_dell.conf
  
│?? ├── userparameter_nginx.conf
  
└── zabbix_server.conf
  

  
2 directories, 13 files
  

  

  
2、sls配置
  
1)init
  
===================================================init
  
[root@tvm-saltmaster base]# cat zabbix/init.sls
  
include:
  
  - agent
  
===================================================init end
  

  
2)server
  
===================================================server
  
[root@tvm-saltmaster base]# cat zabbix/server.sls
  
## 安装mysql db for zabbix, zabbix-server
  
#
  
# via pc @ 2015/8/13
  

  
zabbix-server-mysql-create:
  
  cmd.run:
  
## for zabbix db
  
# mysql> create database zabbix character set utf8 collate utf8_bin;
  
# msyql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
  
    - onlyif: s_zbx_pwd='zabbix'; zbx_tables=$(mysql -uzabbix -p${s_zbx_pwd} -e 'use zabbix;show tables;' |wc -l); test $zbx_tables -eq 0;
  
    - name: cd /usr/share/doc/zabbix-server-mysql-2.4.6/create/;
  
        s_zbx_pwd='zabbix';
  
        mysql -uzabbix -p${s_zbx_pwd} zabbix <schema.sql;
  
        mysql -uzabbix -p${s_zbx_pwd} zabbix <images.sql;
  
        mysql -uzabbix -p${s_zbx_pwd} zabbix <data.sql;
  

  

  
zabbix-server-mysql:
  
  pkg.installed:
  
## for local-office.repo
  
#
  
    - fromrepo: office,epel,base
  
    - name: zabbix-server-mysql
  
    - skip_verify: True
  
    - refresh: True
  
    - require_in:
  
      - file: /etc/zabbix/zabbix_server.conf
  
  service.running:
  
    - name: zabbix-server
  
    - enable: True
  
    - restart: True
  
    - watch:
  
      - file: zabbix-server-conf
  
    - require:
  
      - pkg: zabbix-server-mysql
  

  

  
zabbix-server-conf:
  
  file.managed:
  
    - name: /etc/zabbix/zabbix_server.conf
  
    - source: salt://conf.d/zabbix/zabbix_server.conf
  
    - template: jinja
  

  

  
## for iptables
  
zabbix-10051:
  
  cmd.run:
  
    - unless: grep 'zabbix-server added' /etc/sysconfig/iptables
  
    - name:
  
        sed -i
  
        '/-A INPUT -i lo -j ACCEPT/a\## zabbix-server added.
  
        \n-A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
  
        \n-A INPUT -p udp -m state --state NEW -m udp --dport 10051 -j ACCEPT
  
        ' /etc/sysconfig/iptables
  

  
zabbix-10051-tcp:
  
  cmd.run:
  
    - unless: /sbin/iptables -nL |grep 'tcp dpt:10051'
  
    - name: /sbin/iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
  

  
zabbix-10051-udp:
  
  cmd.run:
  
    - unless: /sbin/iptables -nL |grep 'udp dpt:10051'
  
    - name: /sbin/iptables -I INPUT -p udp -m state --state NEW -m udp --dport 10051 -j ACCEPT
  

  
===================================================server end
  

  
3)web
  
===================================================web
  
[root@tvm-saltmaster base]# cat zabbix/web.sls
  
## 安装zabbix-web-mysql
  
#
  
# via pc @ 2015/8/13
  

  
zabbix-web-mysql:
  
  pkg.installed:
  
## for local-office.repo
  
#
  
    - fromrepo: office,epel,base
  
    - name: zabbix-web-mysql
  
    - skip_verify: True
  
    - refresh: True
  
  service.running:
  
    - name: httpd
  
    - enable: True
  
    - reload: True
  
    - watch:
  
      - file: zabbix-web-conf
  
      - file: zabbix-web-php
  
    - require:
  
      - pkg: zabbix-web-mysql
  

  
zabbix-web-conf:
  
  file.managed:
  
    - name: /etc/httpd/conf.d/zabbix.conf
  
    - source: salt://conf.d/zabbix/httpd_zabbix.conf
  
    - require:
  
      - pkg: zabbix-web-mysql
  

  
zabbix-web-php:
  
  file.managed:
  
    - name: /etc/php.ini
  
    - source: salt://conf.d/zabbix/php_zabbix.ini
  
    - require:
  
      - pkg: zabbix-web-mysql
  

  
## for iptables
  
zabbix-80:
  
  cmd.run:
  
    - unless: grep 'zabbix-web added' /etc/sysconfig/iptables
  
    - name:
  
        sed -i
  
        '/-A INPUT -i lo -j ACCEPT/a\## zabbix-web added.
  
        \n-A INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  
        ' /etc/sysconfig/iptables
  
    - require:
  
      - pkg: zabbix-web-mysql
  

  
zabbix-80-tcp:
  
  cmd.run:
  
    - unless: /sbin/iptables -nL |grep 'tcp dpt:80'
  
    - name: /sbin/iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 80 -j ACCEPT
  
    - require:
  
      - pkg: zabbix-web-mysql
  

  
===================================================web end
  

  
4)agent
  
===================================================agent
  
[root@tvm-saltmaster base]# cat zabbix/agent.sls
  
## 安装zabbix-agent
  
#
  
# via pc @ 2015/8/17
  

  
zabbix-agent:
  
  pkg.installed:
  
## for local-office.repo
  
#
  
    - fromrepo: office
  
    - name: zabbix-agent
  
    - skip_verify: True
  
    - refresh: True
  
    - version: 2.4.6-1.el6
  

  
userparameter_mysql.conf:
  
  file.absent:
  
    - name: /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-agent-start:
  
  service.running:
  
    - name: zabbix-agent
  
    - enable: True
  
    - restart: True
  
    - watch:
  
      - file: /etc/zabbix/zabbix_agentd.conf
  
      - file: /etc/zabbix/zabbix_agentd.d
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-agent-conf:
  
  file.managed:
  
    - name: /etc/zabbix/zabbix_agentd.conf
  
    - source: salt://conf.d/zabbix/zabbix_agentd.conf
  
    - template: jinja
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-agent-dir:
  
  file.recurse:
  
    - name: /etc/zabbix/zabbix_agentd.d
  
    - source: salt://conf.d/zabbix/zabbix_agentd.d/
  
    - mkdirs: True
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-agent-scripts:
  
  file.recurse:
  
    - name: /etc/zabbix/scripts
  
    - source: salt://conf.d/zabbix/scripts/
  
    - mkdirs: True
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-agent-conf-monit:
  
  file.managed:
  
    - name: /etc/monit.d/zabbix-agent.conf
  
    - source: salt://conf.d/monit/zabbix-agent.conf
  
    - require:
  
      - pkg: zabbix-agent
  

  

  

  
## for iptables
  
zabbix-10050:
  
  cmd.run:
  
    - unless: grep 'zabbix-agent added' /etc/sysconfig/iptables
  
    - name:
  
        sed -i
  
        '/-A INPUT -i lo -j ACCEPT/a\## zabbix-agent added.
  
        \n-A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
  
        \n-A INPUT -p udp -m state --state NEW -m udp --dport 10050 -j ACCEPT
  
        ' /etc/sysconfig/iptables
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-10050-tcp:
  
  cmd.run:
  
    - unless: /sbin/iptables -nL |grep 'tcp dpt:10050'
  
    - name: /sbin/iptables -I INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
  
    - require:
  
      - pkg: zabbix-agent
  

  
zabbix-10050-udp:
  
  cmd.run:
  
    - unless: /sbin/iptables -nL |grep 'udp dpt:10050'
  
    - name: /sbin/iptables -I INPUT -p udp -m state --state NEW -m udp --dport 10050 -j ACCEPT
  
    - require:
  
      - pkg: zabbix-agent
  

  
===================================================agent end
  

  
3、conf配置
  
1)README.txt
  
===================================================README.txt
  
[root@tvm-saltmaster base]# cat conf.d/zabbix/README.txt
  
# 简化配置文件:
  
grep ^[^#] tpl.zabbix_agentd.conf >zabbix_agentd.conf
  
grep ^[^#] tpl.zabbix_server.conf >zabbix_server.conf
  
===================================================README.txt end
  
2)httpd_zabbix.conf
  
对比默认文件,仅修改了timezone这行:
  
php_value date.timezone Asia/Shanghai
  
附上完整的配置:
  
===================================================httpd_zabbix.conf
  
[root@tvm-saltmaster base]# cat conf.d/zabbix/httpd_zabbix.conf
  
#
  
# Zabbix monitoring system php web frontend
  
#
  

  
Alias /zabbix /usr/share/zabbix
  

  
<Directory "/usr/share/zabbix">
  
    Options FollowSymLinks
  
    AllowOverride None
  
    Order allow,deny
  
    Allow from all
  

  
    php_value max_execution_time 300
  
    php_value memory_limit 128M
  
    php_value post_max_size 16M
  
    php_value upload_max_filesize 2M
  
    php_value max_input_time 300
  
    php_value date.timezone Asia/Shanghai
  
</Directory>
  

  
<Directory "/usr/share/zabbix/conf">
  
    Order deny,allow
  
    Deny from all
  
    <files *.php>
  
        Order deny,allow
  
        Deny from all
  
    </files>
  
</Directory>
  

  
<Directory "/usr/share/zabbix/api">
  
    Order deny,allow
  
    Deny from all
  
    <files *.php>
  
        Order deny,allow
  
        Deny from all
  
    </files>
  
</Directory>
  

  
<Directory "/usr/share/zabbix/include">
  
    Order deny,allow
  
    Deny from all
  
    <files *.php>
  
        Order deny,allow
  
        Deny from all
  
    </files>
  
</Directory>
  

  
<Directory "/usr/share/zabbix/include/classes">
  
    Order deny,allow
  
    Deny from all
  
    <files *.php>
  
        Order deny,allow
  
        Deny from all
  
    </files>
  
</Directory>
  
===================================================httpd_zabbix.conf end
  

  
3)php_zabbix.ini
  
和昨天配置mysql时用到的一致。
  
===================================================php_zabbix.ini end
  
[root@tvm-saltmaster base]# cat conf.d/zabbix/php_zabbix.ini |grep -E 'timezone|mysql.sock' |grep -v ';'
  
date.timezone = Asia/Shanghai
  
mysql.default_socket = /data/mysql/mysql.sock
  
mysqli.default_socket = /data/mysql/mysql.sock
  
===================================================php_zabbix.ini end
  

  
4)zabbix_agentd.conf
  
===================================================zabbix_agentd.conf
  
[root@tvm-saltmaster base]# cat conf.d/zabbix/zabbix_agentd.conf
  
PidFile=/var/run/zabbix/zabbix_agentd.pid
  
LogFile=/var/log/zabbix/zabbix_agentd.log
  
LogFileSize=5
  
Server=zbx-m.office.test
  
ListenIP={{ grains['ip_interfaces']['eth0'][0] }}
  
ServerActive=zbx-m.office.test
  
Hostname={{ grains['id'] }}
  
Include=/etc/zabbix/zabbix_agentd.d/
  
UnsafeUserParameters=1
  
===================================================zabbix_agentd.conf end
  

  
5)zabbix_server.conf
  
===================================================zabbix_server.conf
  
[root@tvm-saltmaster base]# cat conf.d/zabbix/zabbix_server.conf
  
LogFile=/var/log/zabbix/zabbix_server.log
  
LogFileSize=10
  
PidFile=/var/run/zabbix/zabbix_server.pid
  
DBHost=localhost
  
DBName=zabbix
  
DBUser=zabbix
  
DBPassword=zabbix
  
DBSocket=/data/mysql/mysql.sock
  
DBPort=3306
  
SNMPTrapperFile=/var/log/snmptt/snmptt.log
  
AlertScriptsPath=/usr/lib/zabbix/alertscripts
  
ExternalScripts=/usr/lib/zabbix/externalscripts
  
===================================================zabbix_server.conf end
  

  

  

  
三、执行
  
[root@tvm-saltmaster base]# salt 'tvm-zabbix' state.sls zabbix.server --output-file='/tmp/z1.log'
  
[root@tvm-saltmaster base]# salt 'tvm-zabbix' state.sls zabbix.web --output-file='/tmp/z2.log'
  
[root@tvm-saltmaster base]# salt 'tvm-zabbix' state.sls zabbix.agent --output-file='/tmp/z3.log'
  

  

  

  
四、配置zabbix-web
  
1、访问:
  
http://192.168.56.200/zabbix
  
根据引导一步步操作,然后登录web页面。
  

  
2、我们来使用下“Active agent auto-registration”的功能
  
1)configuration-action页面,找到右上方“Create action”下面有个下拉框“Event Source”,选择:“Auto registration”
  
2)点击“Create action”创建一个动作
  
3)在“Action”选项卡输入一个“Name”:test auto registration
  
4)在“Conditions”选项卡新增一个条件:Host name like tvm
  
5)在“Operations”选项卡新增操作:
  
Add to host groups: Linux servers
  
Link to templates: Template OS Linux
  

  
保存。
  

  
3、配置zabbix-web报警
  
1)脚本(调用在“saltstack的深入-管理python-pip”这篇提到的发送邮件的脚本:sendEmail)
  
[root@tvm-zabbix ~]# cat /usr/lib/zabbix/alertscripts/mailman.sh
  
#!/bin/bash
  
#
  
# 2015/8/18
  

  
export LANG="en_US.UTF-8"
  

  
echo -e "`date +%F' '%T` \n$1 $2 $3 \n\n"  >>/var/log/zabbix/mail_send.log
  

  
/usr/bin/sendEmail -o message- \
  
-s smtp.xxx.com \
  
-xu username \
  
-xp password \
  
-f from@company.com \
  
-t "$1" \
  
-u "$2" \
  
-m "$3" >>/var/log/zabbix/mail_detail.log 2>&1 &
  

  
[root@tvm-zabbix ~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/mailman.sh \
  
&& chmod 700 /usr/lib/zabbix/alertscripts/mailman.sh \
  
&& ls -l /usr/lib/zabbix/alertscripts/mailman.sh
  
-rwx------ 1 zabbix zabbix 240 Aug 18 17:08 /usr/lib/zabbix/alertscripts/mailman.sh
  

  
2)在web上操作:增加Media types
  
Administrator-Media types-Email
  
选择
  
Type: Script
  
Script name: mailman.sh
  

  
3)在web上操作:给用户增加media
  
Administrator-Users-user-Media
  
新增一个邮箱。
  

  
4)增加action
  
1)configuration-action页面,找到右上方“Create action”下面有个下拉框“Event Source”,选择:“Triggers”
  
2)创建一个,注意operations中增加操作时,
  
Operation type: Send message
  
Send to Users: 选择用户
  
Send only to: Email
  

  

  
测试符合预期。
  

  

  

  
五、Q&A
  
【Q】:当某个主机的hostname被更改后,此时salt通过grains获取的id会变化吗?如果会,多久才产生变化呢?对zabbix-agent的配置管理和zabbix-agent的自动注册如何改进?
  
A:使用{{ grains['id'] }}来取minion的值,而不是fqdn或host,这样得到的值不会产生变化,除非这个minion的配置做了变更。
  

  

  
ZYXW、参考
  
1、老大提供的saltstack相关资料。
  
2、zabbix doc
  
https://www.zabbix.com/documentation/2.4/manual/installation/install_from_packages#red_hat_enterprise_linux_centos
  
3、salt doc
  
http://docs.saltstack.com/en/latest/ref/states/all/salt.states.pkg.html

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-544394-1-1.html 上篇帖子: 运维自动化 SaltStack 安装 下篇帖子: saltstack的深入-管理python-pip
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表