选择yum源和安装版本
由于zabbix每六个月会发布一个新的稳定版本,在此期间,还会发布长期支持版LTS (Long Term Support), 长期支持版本往往有较长时间的支持,遇到了问题也能更容易解决,所以如果使用yum安装的方式,建议使用LTS版本。目前的LTS版本是3.0, 在不久之后将会推出4.0的LTS版本,所以这里选择使用zabbix3.0最为示例。系统版本为CentOS7.2。
如果使用手动安装,需要添加3.0的yum源:
1
<code>yum </code><code>install</code> <code>http:</code><code>//repo</code><code>.zabbix.com</code><code>/zabbix/3</code><code>.0</code><code>/rhel/7/x86_64/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>
使用salt安装的sls文件(仅供参考):
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<code>zabbix-server-rhel:</code>
<code> </code><code>file</code><code>.managed:</code>
<code> </code><code>- name: </code><code>/tmp/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>
<code> </code><code>cmd.run:</code>
<code> </code><code>- name: rpm -i </code><code>/tmp/zabbix-release-3</code><code>.0-1.el7.noarch.rpm</code>
<code> </code><code>- unless: </code><code>test</code> <code>-f </code><code>/etc/yum</code><code>.repos.d</code><code>/zabbix</code><code>.repo</code>
<code>zabbix-server-</code><code>install</code><code>:</code>
<code> </code><code>pkg.installed:</code>
<code> </code><code>- pkgs:</code>
<code> </code><code>- httpd</code>
<code> </code><code>- mariadb-server </code>
<code> </code><code>- gcc </code>
<code> </code><code>- gcc-c++</code>
<code> </code><code>- glibc </code>
<code> </code><code>- mariadb-devel </code>
<code> </code><code>- libxml2-devel </code>
<code> </code><code>- libcurl </code>
<code> </code><code>- curl </code>
<code> </code><code>- libcurl-devel </code>
<code> </code><code>- fping</code>
<code> </code><code>- net-snmp</code>
<code> </code><code>- net-snmp-libs </code>
<code> </code><code>- net-snmp-utils </code>
<code> </code><code>- net-snmp-devel</code>
<code> </code><code>- libssh2-devel </code>
<code> </code><code>- OpenIPMI-devel</code>
<code> </code><code>- java-1.8.0-openjdk-devel</code>
<code> </code><code>- zabbix-server-mysql</code>
<code> </code><code>- zabbix-agent</code>
<code> </code><code>- zabbix-web</code>
<code> </code><code>- zabbix-web-mysql</code>
<code> </code><code>- zabbix-get</code>
<code> </code><code>- require:</code>
<code> </code><code>- cmd: zabbix-server-rhel</code>
<code>zabbix-db-config:</code>
<code> </code><code>- name: </code><code>/etc/my</code><code>.cnf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/my</code><code>.cnf</code>
<code> </code><code>service.running:</code>
<code> </code><code>- name: mariadb</code>
<code> </code><code>- </code><code>enable</code><code>: True</code>
<code> </code><code>- pkg: zabbix-server-</code><code>install</code>
<code> </code><code>- name: mysql -e </code><code>"DROP USER ''@'localhost';"</code> <code>&& mysql -e </code><code>"DROP USER ''@'$(hostname)'"</code> <code>&& mysql -e </code><code>"DROP DATABASE test"</code> <code>&& mysql -e </code><code>"DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');"</code> <code>&& mysql -e </code><code>" create database zabbix;grant all on zabbix.* to zabbix@localhost identified by'zabbix';"</code> <code>&& mysql -e </code><code>"UPDATE mysql.user SET Password = PASSWORD('zabbix') WHERE User = 'root';"</code> <code>&& mysql -e </code><code>"FLUSH PRIVILEGES"</code>
<code> </code><code>- onlyif: mysql -e </code><code>"show databases;"</code>
<code> </code><code>- service: zabbix-db-config</code>
<code>zb-server-db-</code><code>import</code><code>:</code>
<code> </code><code>- name: zcat </code><code>/usr/share/doc/zabbix-server-mysql-</code><code>*</code><code>/create</code><code>.sql.gz | mysql zabbix -uzabbix -pzabbix</code>
<code> </code><code>- unless: </code><code>"mysql -uzabbix -pzabbix -e 'select alias from zabbix.users;'"</code>
<code> </code><code>- cmd: zabbix-db-config</code>
<code>zb-web-config:</code>
<code> </code><code>- name: </code><code>/etc/httpd/conf</code><code>.d</code><code>/zabbix</code><code>.conf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix</code><code>.conf</code>
<code> </code><code>- user: root</code>
<code> </code><code>- group: root</code>
<code> </code><code>- mode: 644</code>
<code> </code>
<code>zb-web-service:</code>
<code> </code><code>- name: httpd</code>
<code> </code><code>- reload: True</code>
<code> </code><code>- </code><code>watch</code><code>:</code>
<code> </code><code>- </code><code>file</code><code>: zb-web-config</code>
<code>zb-agent-service:</code>
<code> </code><code>- name: zabbix-agent</code>
<code>zb-server-service:</code>
<code> </code><code>- name: </code><code>mkdir</code> <code>-p </code><code>/etc/zabbix/alertscripts</code>
<code> </code><code>- unless: </code><code>test</code> <code>-d </code><code>/etc/zabbix/alertscripts</code>
<code> </code><code>- name: </code><code>/etc/zabbix/zabbix_server</code><code>.conf</code>
<code> </code><code>- </code><code>source</code><code>: salt:</code><code>//zabbix/files/zabbix_server</code><code>.conf</code>
<code> </code><code>- template: jinja</code>
<code> </code><code>- defaults:</code>
<code> </code><code>DBHost: localhost</code>
<code> </code><code>DBName: zabbix</code>
<code> </code><code>DBUser: zabbix</code>
<code> </code><code>DBPassword: zabbix</code>
<code> </code><code>- name: zabbix-server</code>
对应的配置文件都放在zabbix/files/目录下。如果使用手动安装,可以参照sls文件中的步骤完成安装。
使用snmp对交换机进行监控
zabbix 可以通过多种方式对多种设备进行监控。只要是支持SNMP协议的设备,就可以对其进行监控,如我们可以通过zabbix 监控网络设备如路由器,交换机,打印机等。对安装支持snmp的操作系统我们也可以对其进行监控。
简单介下绍对华为交换机的监控。
查看交换机支持的SNMP版本,设置团体名:
<code><sw5752p>display snmp-agent sys-info </code>
<code> </code><code>The contact person </code><code>for</code> <code>this managed node: </code>
<code> </code><code>R&D Beijing, Huawei Technologies co.,Ltd.</code>
<code> </code><code>The physical location of this node: </code>
<code> </code><code>Beijing China</code>
<code> </code><code>SNMP version running </code><code>in</code> <code>the system: </code>
<code> </code><code>SNMPv2c</code>
交换机支持v2c,如果交换机使用的是v3版本或者其他版本可以通过修改交换机版本,也可以配置的方式来使用snmpv3。
更改为v2c 版本:
<code>[sw5752p]undo snmp-agent sys-info version v3</code>
<code>[sw5752p]snmp-agent sys-info version v2c</code>
配置团体名:
<code>[sw5752p]snmp-agent community </code><code>read</code> <code>sw5752-public</code>
在zabbix服务器上,我们可以通过snmp相关命令来获取交换机的状态信息:
<code># snmpwalk -v 2c -c sw5752-public 192.168.1.2 sysUpTime.0</code>
<code>DISMAN-EVENT-MIB::sysUpTimeInstance = Timeticks: (197075041) 22 days, 19:25:50.41</code>
在zabbix 上添加交换机为一个host,选择snmp:
<a href="https://s3.51cto.com/oss/201710/31/f35b40518c52ed02726ac8dd190dff10.jpg" target="_blank"></a>
添加需要的模板:
<a href="https://s1.51cto.com/oss/201710/31/15737544725082427d37b41a640bcc0b.jpg" target="_blank"></a>
设置团体名:
<a href="https://s5.51cto.com/oss/201710/31/3065611f6f5545c07205a23d8b40e66a.jpg" target="_blank"></a>
在主机界面,我们可以看到已经添监控中:
使用agent 对主机进行监控
在大多数情况下,我们都会使用zabbix的agent来监控服务状态。需要对被监控的客户端安装agent,并配置它与服务端通信。
1、安装agent
在zabbix的官方网站上下载与服务端对应版本的agent安装包进行安装。
安装完成后,我们需要修改配置文件,让它与主机通信,再此之前需要统一主机名,主机名要可识别。
修改之后,配置文件要有如下几个参数:
<code>[root@node2 ~]</code><code># grep "^[a-Z]"/etc/zabbix/zabbix_agentd.conf</code>
<code>PidFile=</code><code>/var/run/zabbix/zabbix_agentd</code><code>.pid</code>
<code>LogFile=</code><code>/var/log/zabbix/zabbix_agentd</code><code>.log</code>
<code>LogFileSize=0</code>
<code>Server=192.168.1.3 </code><code>#服务端主机IP</code>
<code>ServerActive=192.168.1.3 </code><code>#服务端主机IP</code>
<code>Hostname= node2 </code><code>#本机主机名</code>
<code>Include=</code><code>/etc/zabbix/zabbix_agentd</code><code>.d/*.conf </code><code>#自定义配置文件路径</code>
<code>#UserParameter=login-users,uptime|awk -F" " '{print $6}' #此行为自定义,默认注释状态</code>
如果客户端配置了iptables,需要加入一条iptables规则:
<code>iptables -A INPUT -m state --stateNEW -m tcp -p tcp --dport 10050 -j ACCEPT</code>
启动客户端服务.
2、在服务端加入要监控的客户端服务器
打开服务端web管理界面,默认账户为Admin, 密码为 zabbix
创建一个主机组:
<a href="https://s1.51cto.com/oss/201710/31/89031720b1982eec5bf0893ce55d99e0.jpg" target="_blank"></a>
如果此时没有主机,这不会有选择列表,这里可以看到之前所创建的主机:
<a href="https://s5.51cto.com/oss/201710/31/f991b39bff9df91e4b6edada203714d7.jpg" target="_blank"></a>
设置主机信息和所属组:
<a href="https://s2.51cto.com/oss/201710/31/b9a6b7867b76ecd4ebe3328f61c99b0f.jpg" target="_blank"></a>
在
在zabbix3.0版本中,会默认添加本地的bases模板,在低版本中需要手动搜索OS Linux模板添加,这两者都是一样的,在此模板中会对一些基础的服务器状态进行监控:
<a href="https://s1.51cto.com/oss/201710/31/5ef3a295df6d33a04c92c1591639706c.jpg" target="_blank"></a>
自定义监控项
自定义监控项需要有两个主要步骤:
修改配置文件,编写自定义监控内容。
在server端加上自定义的监控key值。
1、例如我们要加入一个监控,监控当前状态下系统有多少人同时登录(系统自带的模板也有此功能)
可以使用此命令来获取用户的实时在线数量:
<code>uptime|</code><code>awk</code> <code>-F </code><code>" "</code><code>'{print $4}'</code>
修改配置文件:
vim /etc/zabbix/zabbix_agentd.conf
找到UserParameter这一行,打开注释,设置监控的键值和获取键值的方式:
UserParameter=login-users,uptime|awk-F " " '{print $6}'
语法说明:
UserParameter=KEY,COMMAND
定义一个键值,后面为获得此键值的执行命令,键值的命名对于整个系统必须是唯一的,两者之间逗号隔开,命令也可以是脚本。用户自定义的数据最大可以返回512KB的数据。
提示:如果系统需要自定义多个模板,可以单独创建一个文件,存放路径Include=/usr/local/etc/zabbix_agentd.userparams.conf
配置完成之后,重启zabbix-agent.
2、配置server端
首先在server测试看能否获取到agent端所返回的KEY值,server端上执行:
使用zabbix-get命令:
zabbix_get -s 192.168.1.10 -klogin-users
如果返回值正常,则key 添加成功。
打开server web配置界面,在客户端主机上添加监控项:
创建监控项目:
<a href="https://s2.51cto.com/oss/201710/31/551549e610b93d59ac00ea5f43fd7099.jpg" target="_blank"></a>
<a href="https://s2.51cto.com/oss/201710/31/f8ab9e4bccdefc89c8bc0487f9bc4673.jpg" target="_blank"></a>
添加成功后,在这个客户端的items中就可以看到添加的选项:
<a href="https://s5.51cto.com/oss/201710/31/d6f2d3cef22bf749dc07925ddfaa2933.jpg" target="_blank"></a>
创建主机图形:
<a href="https://s3.51cto.com/oss/201710/31/a7a84634e018630099ae038a283a12b7.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/31/87b2f9cfecc8c1f69b3f106291b0d768.jpg" target="_blank"></a>
添加刚刚创建的监控项,可以自定义图形的样式:
<a href="https://s1.51cto.com/oss/201710/31/ea9381e485e2872f61f2e3639780bf12.jpg" target="_blank"></a>
此时通过监控的主界面,进入图形界面,就可以直接看到系统绘制的状态图:
<a href="https://s3.51cto.com/oss/201710/31/80c3ff04a5584a3e1dc167880efb71f6.jpg" target="_blank"></a>
创建触发器
当监控的项目到某一个阈值时,需要触发一些动作,下面触发器:
<a href="https://s4.51cto.com/oss/201710/31/d30fde19899bbf05f89c6887596211be.jpg" target="_blank"></a>
进入触发器的配置界面,点击添加规则按钮就可以设置触发规则:
<a href="https://s5.51cto.com/oss/201710/31/431dbea56b5eed6cee0b9680f5571d94.jpg" target="_blank"></a>
触发器规则配置界面:
<a href="https://s4.51cto.com/oss/201710/31/1d3fa2f9d42291d533b8d893b7827bb1.jpg" target="_blank"></a>
添加成功后,查看添加的项目:
<a href="https://s5.51cto.com/oss/201710/31/0dec1099fe7a85ac2dcad549aad9456e.jpg" target="_blank"></a>
可以对创建的触发器添加报警声音:在userprofile,中设置即可。
<a href="https://s4.51cto.com/oss/201710/31/7df6d1287f92bd02a49ea28aab57d17e.jpg" target="_blank"></a>
创建触发行为:当出现故障时,条件触发报警行为时,自动发送邮件或者手机短信报警。
系统默认自带了一个未被启用的模板,可以重新编辑此模板,也可以添加一个新的模板来定义action的行为。
<a href="https://s3.51cto.com/oss/201710/31/97a45308a2c391bf478ff3645969c133.jpg" target="_blank"></a>
<a href="https://s3.51cto.com/oss/201710/31/e6d02eae9c3aabdc6889c334db57dc08.jpg" target="_blank"></a>
然后定义发送的内容和收件人:
<a href="https://s4.51cto.com/oss/201710/31/0c89051a377c157fdf3cbe781eaf0f79.jpg" target="_blank"></a>
<a href="https://s1.51cto.com/oss/201710/31/e475b7fbd805d1fce6d71e3438d597a3.jpg" target="_blank"></a>
自定义媒体介质:在系统中默认自带的有mail,短信等报警通知机制,一般常用的是mail功能.
<a href="https://s5.51cto.com/oss/201710/31/ed71acf5dd7a8df4d3071a53f9514ec3.jpg" target="_blank"></a>
这里定义的是发件箱的信息,在admin账户中,我们还要配置收件箱的信息:
<a href="https://s5.51cto.com/oss/201710/31/7cca194e92d3c599803d22de2e950481.jpg" target="_blank"></a>
我们也可以通过编写一个发邮件的脚本或者程序来实现,在系统中配置上执行此脚本的触发机制就可以了。
<a href="https://s2.51cto.com/oss/201710/31/8c864c367a57a097a173f750b89331b0.jpg" target="_blank"></a>
ZABBIX3.0以上的版本需要自定义三个脚本参数,才可以将邮件信息传入脚本:
<a href="https://s5.51cto.com/oss/201710/31/012861788bd0c80dc09d7b62ad76a73b.jpg" target="_blank"></a>
<a href="https://s4.51cto.com/oss/201710/31/3b68e855fad41b3483d8b11f6e79e1c3.jpg" target="_blank"></a>
在server端创建此脚本并加上执行权限,这个脚本的存放路径,在zabbix的配置文件中可以指定:
# grep"AlertScriptsPath"/usr/local/zabbix_server/etc/zabbix_server.conf|grep -v "#"
AlertScriptsPath=/etc/zabbix/alertscripts
将发邮件或者任何动作的脚本放在此目录下,也可以直接使用python编写发邮件的脚本。
注意:脚本中一定要接受三个参数 $1 $2 $3,分别为收件人,发送的主题和内容。对应的参数是 {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE}
编辑用户属性,指定发送报警信息的方式:
对于不同的组,如果有新加的设备和服务器,要添加权限给组,否则其他的组成员无法管理这些新加设备:
<a href="https://s2.51cto.com/oss/201710/31/8eac04c1b084f950fbb8593d88180f8e.jpg" target="_blank"></a>
当设置的报警被触发成功后,会提示已经发送成功:
<a href="https://s3.51cto.com/oss/201710/31/a4a6ca1aa9a8df2c1ce195e08cf5b695.jpg" target="_blank"></a>
如果这里没有设置成功,看一下action模板是否开启,actions中设置是否正确,查看系统日志信息:
tail -f /var/log/zabbix/zabbix_server.log
附上邮件python发送脚本:
<code>#! /usr/bin/envpython</code>
<code># coding:utf-8</code>
<code> </code>
<code>from</code> <code>email importencoders</code>
<code>from</code> <code>email.headerimport Header</code>
<code>fromemail.mime.text </code><code>import</code> <code>MIMEText</code>
<code>from</code> <code>email.utilsimport parseaddr, formataddr</code>
<code>import</code> <code>smtplib</code>
<code>import</code> <code>sys</code>
<code>defsend_mail(_to_email,_subject,_message):</code>
<code> </code><code>smtp_host </code><code>=</code> <code>'smtp.ym.163.com'</code> <code>#邮箱服务器</code>
<code> </code><code>from_email </code><code>=</code> <code>'[email protected]'</code> <code>#用户名</code>
<code> </code><code>passwd </code><code>=</code> <code>'12345password'</code> <code>#密码</code>
<code> </code><code>msg </code><code>=</code><code>MIMEText(_message,</code><code>'plain'</code><code>,</code><code>'utf-8'</code><code>)</code>
<code> </code><code>msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>_subject</code>
<code> </code><code>smtp_server </code><code>=</code><code>smtplib.SMTP_SSL(smtp_host,</code><code>994</code><code>) </code><code># 994为开启SSL的端口号</code>
<code> </code><code>smtp_server.login(from_email,passwd)</code>
<code> </code><code>smtp_server.sendmail(from_email,[_to_email],msg.as_string())</code>
<code> </code><code>smtp_server.quit()</code>
<code>if</code> <code>__name__ </code><code>=</code><code>=</code><code>'__main__'</code><code>:</code>
<code> </code><code>send_mail(sys.argv[</code><code>1</code><code>],sys.argv[</code><code>2</code><code>],sys.argv[</code><code>3</code><code>])</code>
自定义模板
对于一些系统不带的监控项目,我们需要自定义一个模板,然后在模板中添加自定义的监控项目。
<a href="https://s2.51cto.com/oss/201710/31/72d0e5fa90561881a44528de8c0f6395.jpg" target="_blank"></a>
<a href="https://s5.51cto.com/oss/201710/31/4fcce13850f97f9445353b6b49460e54.jpg" target="_blank"></a>
之后就可以给当前自定义的模板添加 applications,items,trigger等组件.
注意:这里自定义的模板里所加的自定义监控项中,如果是需要修改agent端的配置文件,那么所有使用这个模板的agent端都要修改配置,可以将配置信息编写成单独文件和脚本都放在系统设定的路径下。
# grep "Include"/etc/zabbix/zabbix_agentd.conf
Include=/etc/zabbix/zabbix_agentd.d/*.conf
zabbix 客户端主动模式配置
在zabbix的默认配置中,agent端是被动模式的,server端是主动模式,server端主动发送请求给agent端获取需要的数据,但是当我们有大量的机器需要监控时,仅仅依靠server端去大量的主动发送数据请求是不合适的,所以需要配置agent端主动发送数据给server端才是最佳的方案。
在配置agent端为主动模式时,需要两步操作:
克隆需要的模板,并将模板类型从agent 改为 agent-active状态。
修改agent端的配置文件,注释掉被动模式配置,打开主动模式配置,并设置Activeserver.
本文转自 酥心糖 51CTO博客,原文链接:http://blog.51cto.com/tryingstuff/1977879