19.1 Linux监控平台介绍

监控存在的原因 ●站点出了问题,没有人知道,等用户发现了,才提醒供应商;对公司影响很大

●常见开源监控软件

○cacti、nagios、zabbix、smokeping、open-falcon等等 //主流 nagios、zabbix

○ cacti、smokeping偏向于基础监控,成图非常漂亮 //比较适合监控网络设备

●cacti、nagios、zabbix服务端监控中心,需要php环境支持,其中zabbix和cacti都需要mysql作为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而可以成图

●因为zabbix配置简单,优势明显,早起使用nagios的企业,慢慢的转向使用zabbix

●nagios,需要更改配置文件,并不支持web界面一键执行,nagios和zabbix相比,nagios 更注重的是某一个监控的状态,不关注历史;zabbix,则是把每一次监控的数值反馈出来,方便后期数据图去分析监控整个状态;nagios不支持mysql,需要安装插件以后才支持web界面;zabbix 支持mysql,可以成图,可以记录历史数据

●zabbix 在web界面下管理得非常彻底,可以增加监控节点,报警预知等等

●open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,监控的思想和结构值得研究 ●后续以介绍zabbix为主

19.2 zabbix监控介绍

●C/S架构,基于C++开发,监控中心支持web界面配置和管理 ●单server节点可以支持上万台客户端 ●最新版本3.4 ,官网文档https://www.zabbix.com/manuals ●5个组件 ○zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操作数据 ○数据存储 存放数据,比如mysql ○web界面 也叫web UI ,在web界面下操作配置是zabbix简单易用的主要原因 ○zabbix-proxy 可选组件,它可以代替zabbix-server的功能,减轻server的压力 ○zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报

19.3/19.4/19.6 安装zabbix

官网下载地址:https://www.zabbix.com/download, 最新版为3.4

准备两台机器做演示:一台服务端192.168.66.131 一台客户端192.168.66.132 默认yum安装的zabbix版本是2.2的太旧,所以选择安装官方提供的repo源,服务端和客户端都需要安装一下,进入官网后选择对应版本,官网有安装教程可以参考,这里我选择的是centos7,zabbix3.4,数据库为mysql的版本,安装对应版本的yum源

rpm -i https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm 

安装完成后在/etc/yumrepo.d/目录可以看到zabbix.repo的yum源 服务端192.168.66.131

[root@server yum.repos.d]# cd /etc/yum.repos.d/
[root@server yum.repos.d]# ll
总用量 44
-rw-r--r--  1 root root 1664 5月  13 18:18 CentOS-Base.repo
-rw-r--r--  1 root root 1664 5月  11 14:46 CentOS-Base.repo.bak
-rw-r--r--  1 root root  410 8月  28 2017 zabbix.repo

客户端192.168.66.132

[root@client ~]# cd /etc/yum.repos.d/
[root@client yum.repos.d]# ll
总用量 40
-rw-r--r--. 1 root root 1664 8月  30 2017 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 8月  30 2017 CentOS-CR.repo
-rw-r--r--  1 root root  410 8月  28 2017 zabbix.repo

一、服务端安装zabbix 1、安装完yum源,在服务端192.168.66.131上使用yum安装zabbix,需要安装如下的包

[root@server ~]# yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql 

●注:该过程会连带安装PHP和httpd

○zabbix-agent:客户端程序
○zabbix-get:服务端上命令行获取客户端检测项目的工具
○zabbix-server-mysql:zabbix-server MySQL版
○zabbix-web:web界面
○zabbix-web-mysql:web界面MySQL相关

因为zabbix需要保存数据,所以要用到mysql 如果mysql之前没有安装的话,需要根据lamp那一章的mysql安装方法安装mysql,也可以直接yum安装mysql 因为我们之前已经安装过mysql,这里就省略了 先看下mysql有没有启动起来

[root@server ~]# ps aux |grep mysqld
root       1248  0.0  0.1 113304  1620 pts/0    S    16:01   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql/ --pid-file=/data/mysql//localhost.localdomain.pid
mysql      1461  0.0 45.6 1296372 456352 pts/0  Sl   16:01   0:01 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/var/log/mysqld.log --pid-file=/data/mysql//localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306
root       1876  0.0  0.0 112720   968 pts/0    R+   16:33   0:00 grep --color=auto mysqld

2、接下来还需要编辑下mysql的配置文件,设定一个默认的字符集 vim /etc/my.cnf //需要增加一行配置

character_set_server = utf8

如果不设置中文的话,到时候web界面中文显示就会有问题

[root@server ~]# cat /etc/my.cnf
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/data/mysql/
socket=/tmp/mysql.sock
user=mysql
default-time-zone=system
default-storage-engine=InnoDB
log-error=/var/log/mysqld.log
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character_set_server = utf8           #增加这一行,#设置默认字符集--目的是辅助web界面中文显示

3、重启mysql服务,让刚才的配置生效

[root@server mysql]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL. SUCCESS! 

4、登陆mysql,创建zabbix数据库,创建用户并授权

mysql> create database zabbix character set utf8;
Query OK, 1 row affected (0.00 sec)

mysql> grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by '123456';
Query OK, 0 rows affected (0.02 sec)

5、向创建的zabbix数据库中导入原始数据: 默认数据放在/usr/share/doc/zabbix-server-mysql-3.4.11/create.sql.gz这个压缩包,注意,版本不同可能目录有所不同

[root@server mysql]# cd /usr/share/doc/zabbix-server-mysql-3.4.11/
[root@server zabbix-server-mysql-3.4.11]# ll
总用量 2104
-rw-r--r-- 1 root root      98 6月  25 16:57 AUTHORS
-rw-r--r-- 1 root root  848475 6月  25 16:57 ChangeLog
-rw-r--r-- 1 root root   17990 6月  25 16:57 COPYING
-rw-r--r-- 1 root root 1267039 6月  25 17:01 create.sql.gz
-rw-r--r-- 1 root root      52 6月  25 16:57 NEWS
-rw-r--r-- 1 root root     188 6月  25 16:57 README
[root@server zabbix-server-mysql-3.4.11]# gzip -d create.sql.gz       #解压这个包
[root@server zabbix-server-mysql-3.4.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README
#导入数据
[root@server zabbix-server-mysql-3.4.11]# mysql -uroot -p123456 zabbix < /usr/share/doc/zabbix-server-mysql-3.4.11/create.sql 
Warning: Using a password on the command line interface can be insecure.
#可能数据量比较大,需要等待

6、启动zabbix-server服务:

[root@server zabbix-server-mysql-3.4.11]# systemctl start zabbix-server
[root@server zabbix-server-mysql-3.4.11]# ps aux |grep zabbix
zabbix     4103  0.0  0.3 259448  3372 ?        S    17:00   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
root       4106  0.0  0.0 112720   968 pts/0    R+   17:00   0:00 grep --color=auto zabbix

查看监听的端口,默认服务端监听的端口为10051,客户端为10050

[root@server zabbix-server-mysql-3.4.11]# netstat -lnp |grep zabbix

发现服务启动了,并没有监听端口,说明不正常,查看zabbix日志,默认在/var/log/zabbix/zabbix_server.log

[root@server zabbix-server-mysql-3.4.11]# tail /var/log/zabbix/zabbix_server.log 
  4103:20180726:171112.474 [Z3001] connection to database 'zabbix' failed: [2002] Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

发现错误提示,连不上mysql,是因为我们并没有在zabbix指定mysql的一些参数,修改zabbix的服务端配置文件 7、指定数据库的位置(搜索关键字DBHost并修改)刚才在mysql中创建的zabbix数据库(搜索关键字DBName并修改),授权的用户(搜索关键字DBUser并修改)和密码(搜索关键字DBPassword并修改)

[root@server zabbix-server-mysql-3.4.11]# vi /etc/zabbix/zabbix_server.conf 
#根据在mysql授权的信息修改以下关键字的内容
DBHost=127.0.0.1
DBUser=zabbix
DBPassword=123456

注意:因为mysql和zabbix装在同一台机器上,这里可以写localhost或者127.0.0.1;如果是在生产环境上,有时候为了提升zabbix的性能,可能会把MySQL装在其他机器上,这是的DBHost,就需要写上mysql的ip 8、再查看进程和监听的端口

[root@server zabbix-server-mysql-3.4.11]# ps aux |grep zabbix
zabbix     4222  0.1  0.4 259552  4216 ?        S    17:26   0:00 /usr/sbin/zabbix_server -c /etc/zabbix/zabbix_server.conf
zabbix     4225  0.0  0.2 259552  2532 ?        S    17:26   0:00 /usr/sbin/zabbix_server: configuration syncer [waiting 60 sec for processes]
zabbix     4226  0.0  0.2 259552  2532 ?        S    17:26   0:00 /usr/sbin/zabbix_server: alerter #1 started
zabbix     4227  0.0  0.2 259552  2532 ?        S    17:26   0:00 /usr/sbin/zabbix_server: alerter #2 started
zabbix     4228  0.0  0.2 259552  2532 ?        S    17:26   0:00 /usr/sbin/zabbix_server: alerter #3 started
zabbix     4229  0.0  0.2 259552  2532 ?        S    17:26   0:00 /usr/sbin/zabbix_server: housekeeper [startup idle for 30 minutes]
zabbix     4230  0.0  0.2 259552  2744 ?        S    17:26   0:00 /usr/sbin/zabbix_server: timer #1 [processed 0 triggers, 0 events in 0.000000 sec, 0 maintenances in 0.000000 sec, idle 19 sec]
zabbix     4231  0.0  0.2 259552  2936 ?        S    17:26   0:00 /usr/sbin/zabbix_server: http poller #1 [got 0 values in 0.000410 sec, idle 5 sec]
zabbix     4232  0.0  0.5 363908  5136 ?        S    17:26   0:00 /usr/sbin/zabbix_server: discoverer #1 [processed 0 rules in 0.000385 sec, idle 60 sec]
zabbix     4233  0.0  0.2 259552  2916 ?        S    17:26   0:00 /usr/sbin/zabbix_server: history syncer #1 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     4234  0.0  0.2 259552  2916 ?        S    17:26   0:00 /usr/sbin/zabbix_server: history syncer #2 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     4235  0.0  0.2 259552  2916 ?        S    17:26   0:00 /usr/sbin/zabbix_server: history syncer #3 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     4236  0.0  0.2 259552  2916 ?        S    17:26   0:00 /usr/sbin/zabbix_server: history syncer #4 [synced 0 items in 0.000001 sec, idle 1 sec]
zabbix     4237  0.0  0.3 259552  3880 ?        S    17:26   0:00 /usr/sbin/zabbix_server: escalator #1 [processed 0 escalations in 0.000560 sec, idle 3 sec]
zabbix     4238  0.0  0.3 259552  3868 ?        S    17:26   0:00 /usr/sbin/zabbix_server: proxy poller #1 [exchanged data with 0 proxies in 0.000001 sec, idle 5 sec]
zabbix     4239  0.0  0.2 259552  2684 ?        S    17:26   0:00 /usr/sbin/zabbix_server: self-monitoring [processed data in 0.000004 sec, idle 1 sec]
zabbix     4240  0.0  0.2 259552  2920 ?        S    17:26   0:00 /usr/sbin/zabbix_server: task manager [processed 0 task(s) in 0.000391 sec, idle 5 sec]
zabbix     4241  0.0  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: poller #1 [got 0 values in 0.000002 sec, idle 5 sec]
zabbix     4242  0.1  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: poller #2 [got 0 values in 0.000001 sec, idle 5 sec]
zabbix     4243  0.0  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: poller #3 [got 0 values in 0.000001 sec, idle 5 sec]
zabbix     4244  0.0  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: poller #4 [got 0 values in 0.000001 sec, idle 5 sec]
zabbix     4245  0.0  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: poller #5 [got 0 values in 0.000001 sec, idle 5 sec]
zabbix     4246  0.0  0.5 366528  5312 ?        S    17:26   0:00 /usr/sbin/zabbix_server: unreachable poller #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     4247  0.0  0.3 259552  3632 ?        S    17:26   0:00 /usr/sbin/zabbix_server: trapper #1 [processed data in 0.000000 sec, waiting for connection]
zabbix     4248  0.0  0.3 259552  3632 ?        S    17:26   0:00 /usr/sbin/zabbix_server: trapper #2 [processed data in 0.000000 sec, waiting for connection]
zabbix     4249  0.0  0.3 259552  3632 ?        S    17:26   0:00 /usr/sbin/zabbix_server: trapper #3 [processed data in 0.000000 sec, waiting for connection]
zabbix     4250  0.0  0.3 259552  3632 ?        S    17:26   0:00 /usr/sbin/zabbix_server: trapper #4 [processed data in 0.000000 sec, waiting for connection]
zabbix     4251  0.0  0.3 259552  3632 ?        S    17:26   0:00 /usr/sbin/zabbix_server: trapper #5 [processed data in 0.000000 sec, waiting for connection]
zabbix     4252  0.0  0.2 262160  2716 ?        S    17:26   0:00 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000003 sec, idle 5 sec]
zabbix     4253  0.0  0.3 259552  3284 ?        S    17:26   0:00 /usr/sbin/zabbix_server: alert manager #1 [sent 0, failed 0 alerts, idle 5.009257 sec during 5.009258 sec]
zabbix     4254  0.0  0.3 259552  3036 ?        S    17:26   0:00 /usr/sbin/zabbix_server: preprocessing manager #1 [queued 0, processed 0 values, idle 5.002193 sec during 5.002195 sec]
zabbix     4255  0.0  0.2 259552  2592 ?        S    17:26   0:00 /usr/sbin/zabbix_server: preprocessing worker #1 started
zabbix     4256  0.0  0.2 259552  2592 ?        S    17:26   0:00 /usr/sbin/zabbix_server: preprocessing worker #2 started
zabbix     4257  0.0  0.2 259552  2592 ?        S    17:26   0:00 /usr/sbin/zabbix_server: preprocessing worker #3 started
root       4280  0.0  0.0 112720   972 pts/0    R+   17:26   0:00 grep --color=auto zabbix
[root@server zabbix-server-mysql-3.4.11]# netstat -lnp |grep zabbix
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      4222/zabbix_server  
tcp6       0      0 :::10051                :::*                    LISTEN      4222/zabbix_server  
unix  2      [ ACC ]     STREAM     LISTENING     35160    4254/zabbix_server:  /var/run/zabbix/zabbix_server_preprocessing.sock
unix  2      [ ACC ]     STREAM     LISTENING     35176    4253/zabbix_server:  /var/run/zabbix/zabbix_server_alerter.sock

说明服务已经正常 9、启动httpd服务,安装zabbix会顺带把httpd服务安装上,因为一会要在web界面下去安装和配置zabbix,如果之前有启动过web服务,如:nginx需要关掉,否则80会被占用

[root@server zabbix-server-mysql-3.4.11]# systemctl start httpd
[root@server zabbix-server-mysql-3.4.11]# ps aux |grep httpd
root       4125  1.6  1.5 398912 15568 ?        Ss   17:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4127  0.0  0.7 398912  7744 ?        S    17:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4128  0.0  0.7 398912  7744 ?        S    17:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4129  0.0  0.7 398912  7744 ?        S    17:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4130  0.0  0.7 398912  7744 ?        S    17:03   0:00 /usr/sbin/httpd -DFOREGROUND
apache     4131  0.0  0.7 398912  7744 ?        S    17:03   0:00 /usr/sbin/httpd -DFOREGROUND
root       4133  0.0  0.0 112720   972 pts/0    R+   17:03   0:00 grep --color=auto httpd
[root@server zabbix-server-mysql-3.4.11]# netstat -lnp |grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      4125/httpd  

10、可以把httpd和zabbix-server服务设置为开机启动

[root@server zabbix-server-mysql-3.4.11]# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
[root@server zabbix-server-mysql-3.4.11]# systemctl enable zabbix-server
Created symlink from /etc/systemd/system/multi-user.target.wants/zabbix-server.service to /usr/lib/systemd/system/zabbix-server.service.

11、在web界面配置zabbix 打开浏览器,输入服务端的ip加目录打开zabbix的web界面,如果不能打开,检查防火墙配置和selinux
我的地址为192.168.66.131/zabbix,进入到zabbix安装欢迎页面 点击next step 这里有个fail提示,是因为没有在php的配置文件里定义时区,修改php配置文件php.ini,并重启httpd服务

[root@server ~]# vi /etc/php.ini
date.timezone = Asia/Shanghai                           #设置这一行
[root@server ~]# systemctl restart httpd

刷新刚才的页面,可以看到已经显示ok 点击next step,填写数据库相关的信息,(刚才在mysql中授权的) 点击next step,填写详细信息 点击next step,让你确认信息 点击next step,会提示配置完成 点击finish到 登录界面,默认的用户名 admin 密码 zabbix,登陆完成后到zabbix的控制台页面 更改admin的登陆密码,并把语言设置成中文 点击Administration-user-选择需要更改的用户admin 点击admin-change password-输入修改的密码-Language选择chinese 点击upadte-并刷新页面让其显示中文 这时候可以退出用修改的密码重新登陆下,至此服务端安装完成 二、客户端安装 安装端只需要安装zabbix-agent,用来采集和上报数据给服务端,因为之前已经安装过zabbix的yum源 1、直接yum 安装zabbix-agent

[root@client ~]# yum install -y zabbix-agent

2、安装完成后修改zabbix-agent配置文件

[root@client  ~]# vim /etc/zabbix/zabbix_agentd.conf 
//修改如下字段
Server=192.168.66.131
#指定服务端主机IP(设置客户端的监控主机白名单)

ServerActive=192.168.66.131
#该参数决定监控的主动/被动模式
#如果只改参数Server,则只能采用被动模式(只能等待服务端来采集信息)
#主动模式:客户端主动向服务端发送信息

Hostname=testclient
#该参数用于设定客户端主机的名字,用于服务端添加监控服务
#如果服务端所监控的机器和其Hostname不一致,服务端将无法识别该机器
#因为zabbix是通过IP进行监控的,该参数不会对监控造成太大影响
#加上该参数有利于更好的辨别服务端监控是哪台主机的状态

3、启动zabbix-agent服务并查看进程和端口(默认10050)

[root@client ~]# systemctl start zabbix-agent
[root@client ~]# ps aux |grep zabbix
zabbix     1446  0.0  0.1  82780  1276 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
zabbix     1447  0.0  0.1  82780  1320 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd: collector [idle 1 sec]
zabbix     1448  0.0  0.1  82780  1844 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd: listener #1 [waiting for connection]
zabbix     1449  0.0  0.1  82780  1844 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd: listener #2 [waiting for connection]
zabbix     1450  0.0  0.1  82780  1844 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd: listener #3 [waiting for connection]
zabbix     1451  0.0  0.2  82908  2224 ?        S    18:20   0:00 /usr/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
root       1453  0.0  0.0 112720   968 pts/0    R+   18:20   0:00 grep --color=auto zabbix
[root@client ~]# netstat -lnp |grep zabbix
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      1446/zabbix_agentd  
tcp6       0      0 :::10050                :::*                    LISTEN      1446/zabbix_agentd 

至此,客户端安装完成

19.5 忘记Admin密码如何做

有时候我们会忘记zabbix页面的admin密码,因为zabbix数据都是保存在数据库中,所以可以在数据库中会修改 步骤: ○登陆mysql ○进入zabbix数据库 use zabbix; ○修改users表中Admin用户的密码,格式如下,括号里面是密码 update users set passwd=md5('123456') where alias='Admin';

mysql> use zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

mysql>  update users set passwd=md5('123456') where alias='Admin';
Query OK, 0 rows affected (0.00 sec)
Rows matched: 1  Changed: 0  Warnings: 0

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

更改完成后,用更改的新密码登陆server端的web页面

19.7 主动模式和被动模式

•主动或者被动是相对客户端来讲的

• 被动模式,服务端会主动连接客户端获取监控项目数据,客户端被动地接受连接,并把监控信息传递给服务端

• 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收即可。

• 当客户端数量非常多时,建议使用主动模式,这样可以降低服务端的压力。

• 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式

主动模式和被动模式所针对的对象是客户端,意思是客户端主动向服务端上报数据和由服务端到客户端采集数据。数据的提交时间在监控中心设置。

配置建议

采用主动模式可以减轻服务器的压力。 当服务端有公网IP,客户端只有内网IP但是可以连接外网(使用iptables的nat表规则实现),这种场景适合使用主动模式

19.8 添加监控主机

该配置在服务端的web界面监控中心进行。先添加主机群组,再添加主机 点击配置-主机群组-创建主机群组 填写组名-并点击添加 这样就可以在主机群组里面看到刚创建的主机群组luo 点击配置-主机-创建主机 填写主机名称-可见的名称-ip地址 客户端主机名称(在客户端zabbix配置文件:/etc/zabbix/zabbix_agentd.conf中的Hostname参数),该名称要和客户端配置文件中的名称一致;指定主机群组;指定客户端IP,如果该IP有对应的域名,则需要添加到“DNS名称”中,如果没有可以不填。有需要的话还可以进行模板、IPMI、宏等配置,配置完成后点击“添加”,跳转到主机列表: ●参数解析: ○应用集:监控项目的组集合 ○监控项:所有的监控项目 ○触发器:监控规则(不填规则颜色不同,会体现在首页主机状态中) ○图形:根据监控历史数据绘制的图标 ○自动发现规则:zabbix自动监控的文件系统的信息、网卡信息(该部分自定义比较繁琐,所以使用自己动发现规则) ○Web场景:在此可设置对主机上的某个站点进行监控 这里因为新添加的主机还没设置,所以都是空的

19.9 添加自定义模板

zabbix自带了很多监控模板,我们可以点击某个模板然后克隆给别的模板,也可以点击详细的监控项复制给某个模板 在“模板”中创建一个新模板,自定义监控规则,然后应用到监控主机中,方便个性化管理。后续有监控主机加进来,可以直接应用模板 添加模板的思路:创建模板——指定其所属模板组(也可以链接到其他模板) 点击配置-模板-创建模板 填写模板的名字,可见名称,这里我们选择Templates群组 添加完成后,点击刚才创建的模板aaa-链接的模板 链接指示器点击选择-选中Template OS Linux(对应系统的版本) 点击添加把刚才选择的加入到链接的模板中-点击更新 更新完后,要模板aaa里面可以看到多了很多项目 点击新创建的aaa模板-链接的模板-取消链接-更新,方便后续自定义规则 更新后可以看到aaa后面链接的模板已经没有了,但是应用集那些还保留着 可以删除模板中一些不必要监控项-点击aaa模板的监控项-勾选不需要的监控项-点击删除 应用集里面包含的是监控项目的集合,删除后监控项有些应用集已经空了,也可以删除掉 点击应用集-勾选监控项后面没有数据的-点击删除 到此这个模板已经弄好了,而且这个模板没有连接任何的模板 接下来的操作就是去把刚刚建的主机和这个模板链接起来,做进一步的细化,比如监控项,触发器在做些挑战

19.10 处理图形中的乱码

将自定义模板应用到监控主机testclient中: 点击配置——主机——选择要添加的主机——模板——选择——添加—更新 设置完成后查看监控主机-图形——预览,发现图形界面下有乱码: 这种有规律的显示框框其实不算乱码,只是缺少字库文件引起的,解决办法是上传一个支持中文的字库文件到服务端,更改zabbix的默认链接字库,让其链接到新的字库文件,

#zabbix的默认字库文件是在/usr/share/zabbix/fonts/下,
#这个路径是在zabbix的/usr/share/zabbix/include/defines.inc.php配置文件中定义的
[root@server ~]# ls /usr/share/zabbix/fonts/
graphfont.ttf

我们用xsftp上传一个windowns中的支持中文字库文件到服务端,路径在C:\Windows\Fonts下,把字库文件复制到桌面然后上传到服务端的zabbix字体文件目录/usr/share/zabbix/fonts/,上传过程省略

[root@server ~]# cd /usr/share/zabbix/fonts/
[root@server fonts]# ls
graphfont.ttf   simhei.ttf
[root@server fonts]# mv graphfont.ttf graphfont.ttf.bak
[root@server fonts]# ln -s STXINGKA.TTF graphfont.ttf
[root@server fonts]# ll
总用量 9528
lrwxrwxrwx 1 root root      10 7月  26 20:30 graphfont.ttf -> simhei.ttf
lrwxrwxrwx 1 root root      33 7月  26 15:52 graphfont.ttf.bak -> /etc/alternatives/zabbix-web-font
-rw-r--r-- 1 root root 9753388 7月  26 20:30 simhei.ttf

这样新的字库文件已经链接到默认的字库文件上了 刷新页面,看是否正常显示 可以看到已经正常显示中文,有绿色的线,说明已经有数据产生

19.11 自动发现

更改网卡的自动发现规则监控时间间隔: 点击更新 为了让它尽快生效,重启服务端和客户端的zabbix服务 ●z服务端

[root@server ~]# systemctl restart zabbix-server

●客户端

[root@server ~]# systemctl restart zabbix-server

查看监控效果 在实际应用中时间间隔不要设置太短,一面增加服务器压力。

更改图形界面颜色

在模板——自发现规则——图形原型中更改 zabbix可以利用discovery模块,实现自动发现主机、自动将主机添加到主机组、自动加载模版、自动创建项目、自动创建监控图像。具体操作如下:

(1)依次选择:配置-->自动发现-->创建发现规则。创建客户端发现规则。如下图所示: 参数解释:

Name(名称):规则名称,自定义名称
Discovery by proxy(由agent代理发现):通过代理搜索
IP range(ip范围):zabbix_server搜索区域的IP范围
Update interval(更新间隔):更新的间隔
Checks(检查):检测方式,如果用ping方式去发现主机,则zabbix_server需要安装fping。此处使用agent方式发现。使用zabbix agentd方式的时候,要使用key,这里key为:system.uname。也可以在zabbix_agentd配置文件中自定义key。
Device uniqueness criteria(设备唯一性标准):以IP地址作为被发现主机的标识

设置好检查之后,点”添加“,检查添加完成后,勾选”已启用“,最后点底部的“添加” 自定义key(键值)

在所有的agentd端编辑zabbix_agentd.conf文件,定义key

定义key语法:
UserParameter=<key>,<shell command> 比如: UserParameter=get.os.type,head /etc/redhat-release

(2)客户端都需要安装zabbix-agent,修改zabbix-agent配置文件,修改Server和ServerActive的字段 的IP为服务端的IP

(3)创建发现Action

zabbix发现规则创建后,被发现的IP主机不会自动添加至zabbix监控列表,必须添加发现动作。设置如下:

依次选择:配置-->动作-->事件源(自动发现)-->创建动作。如下图: 设置好新的触发条件主机ip后,点击”添加“,然后点击”操作“: 根据实际需要添加”操作“,上图中添加了两个操作。最后点击”添加“即可,设置完成如下图:

19.12 添加自定义监控项目

需求:监控某台web的80端口连接数,并出图 1、首先被监控主机上要安装zabbix-agent,

yum install -y zabbix-agent

2、在被监控的主机上编写脚本,名称假设为:estab.sh

比如,被监控的主机是:192.168.66.132(testclient)已开启80端口,脚本内容如下:

[root@client ~]# mkdir /myscript
[root@client ~]# chmod -R 777 /myscript
[root@client ~]# cd /myscript/
[root@client myscript]# vim estab.sh     #添加如下内容
#!/bin/bash
#
#获取80端口的并发连接数
netstat -ant | grep ':80' | grep -ci established
:wq保存退出
[root@client myscript]# chmod +x !$
chmod +x estab.sh
[root@lnmp-server myscript]# ll
总用量 4
-rwxr-xr-x 1 root root 97 7月  26 21:51 estab.sh

编辑zabbix agent配置文件,添加以下内容:

   UnsafeUserParameters=1  :1表示自定义脚本,0为不使用自定义脚本
    UserParameter=my.estab.count[*],/myscript/estab.sh :自定义监控项的key为:my.estab.count,后面的[*]里面写脚本的参数,如果没有参数则可以省略,脚本:/myscript/estab.sh,用绝对路径。

在agent配置文件中添加上面两行内容:

[root@client myscript]# vim /etc/zabbix/zabbix_agentd.conf   #在最后面添加下面两行,使用上面自定义的脚本
...
    UnsafeUserParameters=1
    UserParameter=my.estab.count[*],/myscript/estab.sh
...

重启zabbix_agentd服务:

[root@client myscript]# systemctl restart zabbix-agent

到服务端用命令行方式验证一下自定义的key和脚本是否可用:

[root@localhost ~]# zabbix_get -s 192.168.66.132 -p 10050 -k 'my.estab.count'
0

结果是0,因为没有机器访问80端口 参数解释:

-s:被监控的ip
-p:端口,agentd服务的默认端口是10050
-k:自定义的key

3、针对该项目以图形展现 zabbix服务端添加该监控项目,因为是监控的主机为testclient,所以点击testclient的监控项: 点击创建监控项 进入监控项设置: 添加名称和键值,其他保持默认即可。点击添加,选择自定义监控的项目 4、创建自定义监控项图形: 点击testclient主机-图形-创建图形 名称:自定义 监控项:点击”添加“,选择监控项“监控80端口并发连接数”,点击“选择” 点击添加后,预览一下: 没有访问80端口,所以图形没数据 5、创建触发器 点击主机-触发器-创建触发器 名称:自定义,选择警告,点击添加: 监控项选择自定义 的监控项,配置告警的阀值和间隔,点击插入,表达式会自动加上 最后点击添加即可

19.13/19.14 配置邮件告警

1、使用163或QQ邮箱发告警邮件。这里使用163邮箱。登陆163邮箱,开启POP3、IMAP、SMTP服务,开启并设置授权码。 2、到zabbix监控中心(web界面)设置报警媒介 管理-报警媒介类型 默认有3个报警媒介。我们这里新建一个,点击创建“媒介类型”: 名称:自定义

类型:选择”脚本“

脚本名称:mail.py,自定义

参数:{ALERT.SENDTO}、{ALERT.SUBJECT}、{ALERT.MESSAGE}

点击:添加”即可 3、在服务端定义脚本 脚本的路径是在zabbix的服务端配置文件中定义的

[root@localhost ~]# vi /etc/zabbix/zabbix_server.conf    #搜索关键字AlertScriptsPath

我们在这个目录创建mail.py的脚本

[root@localhost ~]# cd /usr/lib/zabbix/alertscripts
[root@localhost alertscripts]# vi mail.py   
[root@localhost alertscripts]# chmod 755 !$
chmod 755 mail.py

mail.py脚本内容如下, 根据你自己邮箱修改

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from  subprocess import *

def sendqqmail(username,password,mailfrom,mailto,subject,content):
    gserver = 'smtp.qq.com'
    gport = 25

    try:
        msg = MIMEText(unicode(content).encode('utf-8'))
        msg['from'] = mailfrom
        msg['to'] = mailto
        msg['Reply-To'] = mailfrom
        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)
        smtp.set_debuglevel(0)
        smtp.ehlo()
        smtp.login(username,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err


def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
##定义QQ邮箱的账号和密码,你需要修改成你自己的账号和密码(请不要把真实的用户名和密码放到网上公开,否则你会死的很惨)
    sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)

if __name__ == "__main__":
    main()

测试脚本是否可用

[root@server alertscripts]# python mail.py xxxxxx@163.com "13434343" "dfdfdf"

发送成功说明脚本没问题 4、配置用户 在监控中心(web端)创建一个接收告警邮件的“用户”,在创建用户前需要先创建一个“用户组”,在此使用一个已经存在的用户组。“管理”——“用户”——“创建用户”: 点击报警媒介,添加刚才新建的报警媒介 点击权限,确保群组对所有有读写权限 注意,如果权限不是读写,显示无,需要修改用户所在群组的权限,管理——用户群组——权限

配置完后添加即创建了新的用户,用来发送邮件 5、配置动作 设置触发器被触发后所要执行的的操作! 点出配置——动作——创建动作 进去后 消息内容可以更换为这个

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}
ID:{EVENT.ID}

点击触发器下面的添加后,条件里面就会显示添加的条件 点击操作 点击恢复操作(这一步是配置告警恢复后要做的动作) 点击确认操作(这一步是配置确认事件后做的动作) 检查都配置完成后,点击下面的添加,即完成了创建动作,在配置——动作——可以看到刚才添加的动作——状态为已启用

19.15 测试告警

配置完上面的用户和动作后,来测试来告警是否会自动发送邮件 将监控项目改成故障项目。

“配置”——“主机”——“触发器”——“创建触发器” 注: 该触发器只用于测试,完成测试后要删除! 点出添加可以增加表达式,我们故意把系统1分钟负载改成小于,让其报警 等待一会后,在监控中心,监测 中——仪表盘——问题面板里面可以看到问题已经发生 同时,邮箱也收到了邮件,说明告警自动发送邮件配置成功

扩展: Prometheus入门 https://www.hi-linux.com/posts/25047.html