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