监控软件--zabbix
同类产品:nagios、cacti
简介:能够部署企业级监控平台。
监控范围
1)zabbix + SNMP 监控网络设备
防火墙、交换机
2)zabbix + agent 监控
服务器:raid插槽 CPU 内存插槽 温度 风扇
操作系统:centos7 centos6 各种windows
应用软件:几乎所有的应用软件都可以监控
3)zabbix + ping(fping) 监控
节点的存活状态
4)zabbix + port 监控
服务的存活状态
5)zabbix + web 监控
服务的存活状态
6)zabbix + 数据收集 展示各个节点、服务的运行状态
zabbix 取到的值必须是数
官方网站:zabbix
zabbix的架构:
zabbix server 监控端
zabbix server:负责与被监控端或z proxy通信,将采集到的监控数据保存到z mysql中,然后通过web界面展示;
zabbix mysql:负责保存z server采集到的监控数据,数据类型是数,注意硬盘IO
zabbix proxy:部署在被监控端的x机房内部,在agent看来,就是z server,将采集到的数据传输给异地的z server。
zabbix agent 被监控端
部署步骤:
一、服务端配置
-
部署 z mysql
[root@zmysql ~]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[root@zmysql ~]# wget http://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
[root@zmysql ~]# ls /etc/yum.repos.d/zabbix.repo
/etc/yum.repos.d/zabbix.repo[root@zmysql ~]# yum install -y mariadb mariadb-server zabbix-server-mysql
[root@zmysql /usr/share/mysql]# cp my-huge.cnf /etc/my.cnf
cp: overwrite '/etc/my.cnf'? y[root@zmysql ~]# vim /etc/my.cnf
server-id = 72
log_slave_updates
binlog-ignore-db = mysql
datadir = /data/mysql[root@zmysql ~]# mkdir -p /data/mysql
[root@zmysql ~]# chown -R mysql:mysql /data/mysql/[root@zmysql ~]# systemctl start mariadb
[root@zmysql ~]# systemctl enable mariadb[root@zmysql ~]# cd /data/mysql/
[root@zmysql /data/mysql]# ls[root@zmysql ~]# mysql
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all on zabbix.* to zabbix@'172.16.%' identified by '12345';
MariaDB [(none)]> flush privileges;
MariaDB [(none)]> quit导入数据:
[root@zmysql ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.15/
[root@zmysql /usr/share/doc/zabbix-server-mysql-3.4.15]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@zmysql /usr/share/doc/zabbix-server-mysql-3.4.15]# gunzip create.sql.gz
[root@zmysql /usr/share/doc/zabbix-server-mysql-3.4.15]# mysql zabbix < create.sql[root@zmysql ~]# mysql zabbix
MariaDB [zabbix]> show tables;
看到导入的表,OK! -
部署 z server
[root@zmysql ~]# scp zabbix-release-3.4-2.el7.noarch.rpm 172.16.0.71:/root/
[root@zserver ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
[root@zserver ~]# yum install -y httpd php php-mysql php-gd libjpeg* php-ldap php-odbc php-pear php-xml php-xmlpc php-mbstring php-bcmath php-mhash zabbix-server-mysql zabbix-web-mysql zabbix-java-gateway zabbix-get
支持中文:
[root@zserver /usr/share/fonts]# mkdir simkai在windows C:\Windows\Fonts
楷体常规
把字体文件导入该目录下[root@zserver /usr/share/fonts/simkai]# ls
SIMKAI.TTF
[root@zserver /usr/share/fonts/simkai]# mv SIMKAI.TTF simkai.ttf[root@zserver /usr/share/zabbix/include]# vim defines.inc.php
53 define('ZBX_FONTPATH', '/usr/share/fonts/simkai');
54 define('ZBX_GRAPH_FONT_NAME', 'simkai')
启动httpd
[root@zserver ~]# vim /etc/httpd/conf/httpd.conf
164 DirectoryIndex index.php index.html
[root@zserver ~]# vim /etc/php.ini
384 max_execution_time = 300
394 max_input_time = 300
672 post_max_size = 16M
878 date.timezone = Asia/Shanghai
[root@zserver ~]# systemctl start httpd
[root@zserver ~]# systemctl enable httpd
编辑配置文件:
[root@zserver /etc/zabbix]# vim zabbix_java_gateway.conf
9 LISTEN_IP="0.0.0.0"
17 LISTEN_PORT=10052
35 START_POLLERS=50
zabbix用于监控java程序的配置
[root@zserver /etc/zabbix]# vim zabbix_server.conf
zabbix的主配置文件
91 DBHost=172.16.0.72
100 DBName=zabbix
116 DBUser=zabbix
124 DBPassword=12345
131 DBSocket=/var/lib/mysql/mysql.sock
139 DBPort=3306
z server 连接 z mysql 的配置
261 JavaGateway=localhost
269 JavaGatewayPort=10052
277 StartJavaPollers=50
z server 连接 java程序的配置
z server 启动多少个线程与监控java程序的应用连接
启动服务:
[root@zserver ~]# systemctl start zabbix-java-gateway
[root@zserver ~]# systemctl enable zabbix-java-gateway
[root@zserver ~]# systemctl start zabbix-server
[root@zserver ~]# systemctl enable zabbix-server
[root@zserver ~]# systemctl restart httpd
[root@zserver ~]# netstat -antp | grep 1005[12]
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1426/zabbix_server
tcp6 0 0 :::10051 :::* LISTEN 1426/zabbix_server
tcp6 0 0 :::10052 :::* LISTEN 1388/java
错误日志
[root@zserver ~]# cd /var/log/zabbix/
[root@zserver /var/log/zabbix]# ls
zabbix_java_gateway.log
zabbix_server.log
浏览器访问:http://172.16.0.71/zabbix/
用户名:Admin
密码: zabbix
二、监控节点配置
-
zabbix agent -- centos7
[root@zmysql ~]# scp zabbix-release-3.4-2.el7.noarch.rpm 172.16.0.31:/root/
[root@nginx1 ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
[root@nginx1 ~]# yum install -y zabbix-agent zabbix-sender
[root@nginx1 ~]# cd /etc/zabbix/
[root@nginx1 /etc/zabbix]# ls
zabbix_agentd.conf zabbix_agentd.d
[root@nginx1 /etc/zabbix]# vim zabbix_agentd.conf
97 Server=172.16.0.71
## z server的IP
138 ServerActive=172.16.0.71:10051
## z server的IP:port
149 Hostname=SY172.16.0.31
## 定义本机的主机名[root@nginx1 ~]# systemctl start zabbix-agent
[root@nginx1 ~]# systemctl enable zabbix-agent[root@nginx1 ~]# netstat -antp | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1050/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 1050/zabbix_agentd添加主机:
主机名称:配置文件中定义的
可见的名称:有意义 项目名-角色-IP
群组:如果没有,需要创建
接口:
主机群组:自带一部分,zabbix原生模板
定义主机组:按照项目规划
模板:
原生模板
从第三方 git-hub上下载的
自定义模板
应用集:一类监控项的归纳
监控项:负责从 z agent 取到监控数据的
名称:有代表意义,中间不要带 "空格"
触发器:这个监控项有几个触发器
键值:使用键值才能从agent取到数据
间隔:z server 间隔多长时间去 agent 取一次数据
历史记录:历史数据的保存时间 建议 1w
趋势:在一段时间内,采集的数据是呈现上升或是下降
类型:监控项的类型
应用集
状态:已启用 停用的 未支持的
触发器:当z server采集到的数据达到触发器的阈值,就会触发报警
图形:展示采集到的数据
主机:监控对象
维护:在维护周期时间内,不会触发报警
动作:当触发器的阈值被触发以后,动作会给报警媒介发送消息,给报警接收人发送报警信息
自动发现:可以批量添加主机
z server使用 键值 采集agent数据,保存在 z mysql中,数据会以图谱的形式在web界面展示。
当采集到的数据达到触发器的阈值时,会触发报警动作,通过报警媒介给报警接收人发送消息。
三、自定义模板
-
使用原生键值
(1)CPU
CPU 的负载
system.cpu.load[,avg1]
CPU 的 idle
system.cpu.util[,idle]
(2)内存
vm.memory.size[<mode>]
剩余
vm.memory.size[pavailable]
使用
vm.memory.size[pused]
总
vm.memory.size[total](3)交换分区
空闲百分比 system.swap.size[,pfree]
使用百分比 system.swap.size[,pused](4)硬盘
读 vfs.dev.read[<device>,<type>,<mode>]
vfs.dev.read[/dev/mapper/centos-root,sps]写 vfs.dev.write[<device>,<type>,<mode>] vfs.dev.write[/dev/mapper/centos-root,sps]
分区的使用情况
inode vfs.fs.inode[fs,<mode>]
vfs.fs.inode[/,pfree]
block vfs.fs.size[fs,<mode>]
vfs.fs.size[/,pfree](5) 网卡的IO
In net.if.in[ens32]
Out net.if.out[ens32]
在 z server 校验键值
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k vfs.fs.size[/,pfree]
97.152441
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k vfs.fs.inode[/,pfree]99.832706
四、监控服务的端口和状态:
端口:
apache tcp/80
nginx tcp/80
mysql tcp/3306
tomcat tcp/8080
NFS tcp/2049
ftp tcp/21
net.tcp.listen[port]
监控端口的监听状态
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k net.tcp.listen[80]
1
net.tcp.port[<ip>,port]
监控端口是否可以被连接
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k net.tcp.port[,80]
1
net.tcp.service[service,<ip>,<port>]
监控服务是不是down了
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k net.tcp.service[http,,80]
1
五、监控mysql-server
1 安装软件
[root@nginx1 ~]# scp zabbix-release-3.4-2.el7.noarch.rpm 172.16.0.51:/root/
[root@mysqlA1 ~]# rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm
[root@mysqlA1 ~]# yum install -y zabbix-agent zabbix-sender
2 写配置文件
[root@nginx1 ~]# scp /etc/zabbix/zabbix_agentd.conf 172.16.0.51:/etc/zabbix/
[root@mysqlA1 ~]# vim /etc/zabbix/zabbix_agentd.conf
Hostname=SY172.16.0.51
3 启动服务
[root@mysqlA1 ~]# systemctl start zabbix-agent
[root@mysqlA1 ~]# systemctl enable zabbix-agent
[root@mysqlA1 ~]# netstat -antp | grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1295/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 1295/zabbix_agentd
4 浏览器添加主机
-
二进制安装需要注意userparameter_mysql.conf
[root@mysqlA1 /etc/zabbix/zabbix_agentd.d]# ls
userparameter_mysql.conf[root@mysqlA1 /etc/zabbix/zabbix_agentd.d]# vim userparameter_mysql.conf
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -N | awk '{print $$2}'
UserParameter= 自定义键值 mysql.status[*] 键值;* 通配符 , 键值 和 shell命令的分隔符
(1) root 密码
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix mysql -u root -p'密码' -N 2> /dev/null | awk '{print $$2}'(2) bin包安装
UserParameter=mysql.status[*],echo "show global status where Variable_name='$1';" | HOME=/var/lib/zabbix /usr/local/mysql/bin/mysql -u root -p'密码' -N 2> /dev/null | awk '{print $$2}'
六、监控nginx状态
NginxStatus
在虚拟主机里面添加:
location /NginxStatus {
stub_status on;
}
[root@nginx1 /usr/local/nginx]# ./sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@nginx1 /usr/local/nginx]# ./sbin/nginx -s reload
[root@nginx1 ~]# curl http://127.0.0.1/NginxStatus
Active connections: 1 要这个
server accepts handled requests
4 4 2
Reading: 0 Writing: 1 Waiting: 0
[root@nginx1 ~]# curl http://127.0.0.1/NginxStatus 2> /dev/null | awk '/Active/{print $NF}'
1
自定义键值:
[root@nginx1 /etc/zabbix/zabbix_agentd.d]# vim userparameter_nginx.conf
UserParameter=nginx.active,curl http://127.0.0.1/NginxStatus 2> /dev/null | awk '/Active/{print $NF}'
[root@nginx1 ~]# systemctl restart zabbix-agent
z server测试:
[root@zserver ~]# zabbix_get -s 172.16.0.31 -p 10050 -k nginx.active
1
七、配置报警
1. 数据采集 已经完成
2. 配置触发器
(1)资源类
cpu
load
idle剩余率
15 警告级别
10 严重级别
5 错误(灾难)级别
当前最新的idle剩余率<=15 并且 5分钟之内一直在持续这个状态
last() <=15 and max(5m) <=15
内存剩余率
15 警告级别
10 严重级别
5 错误(灾难)级别
当前最新的内存剩余率 <= 15
last(#1) <=15
last(0) <=15
last() <=15
硬盘inode和block剩余率
15 警告级别
10 严重级别
5 错误(灾难)级别
网卡流量
swap的剩余率
(2)服务和节点状态
服务的端口
0 关闭
1 正常
节点的状态
0 不通
1 通
函数:
last() 最新的值
sum() 求和
min() 最小值
max() 最大值
表达式:
时间单位是 秒
1m = 60
数据单位是 字节
1k = 1024
3. 报警媒介
邮件
微信
短信
4. 报警动作
报警的消息:
简单直接
描述清楚
谁的什么现在是[警告]级别,当前值的多少。
谁 {HOST.NAME1} 主机信息 可见的名称
什么{ITEM.NAME1} 监控项信息 监控项的名称
多少{ITEM.VALUE1} 值
报警消息
{HOST.NAME1}的{ITEM.NAME1}现在是[警告]级别,当前值是{ITEM.VALUE1}。
恢复消息
{HOST.NAME1}的{ITEM.NAME1}使用率由[警告]恢复正常。
报警消息
{HOST.NAME1}的{ITEM.NAME1}现在是[严重]级别,当前值是{ITEM.VALUE1}。
恢复消息
{HOST.NAME1}的{ITEM.NAME1}使用率由[严重]恢复正常。
报警消息
{HOST.NAME1}的{ITEM.NAME1}现在是[灾难]级别,当前值是{ITEM.VALUE1}。
恢复消息
{HOST.NAME1}的{ITEM.NAME1}使用率由[灾难]恢复正常。
测试报警:
[root@nginx1 ~]# dd if=/dev/zero of=/dev/null
消耗CPU
[root@nginx1 /tmp]# dd if=/dev/zero of=f1 bs=1M count=2048
消耗block
八、部署 z proxy
1. 安装
[root@nginx1 ~]# scp zabbix-release-3.4-2.el7.noarch.rpm 172.16.0.70:/root/
[root@zproxy ~]# yum install -y zabbix-proxy-mysql zabbix-get zabbix-java-gateway mariadb-server
2. 配置
(1)mariadb
[root@zproxy ~]# systemctl start mariadb
[root@zproxy ~]# systemctl enable mariadb
MariaDB [(none)]> create database zabbix_proxy character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all on zabbix_proxy.* to zabbix@'localhost' identified by '12345';
MariaDB [(none)]> flush privileges;
导入数据库:
[root@zproxy ~]# cd /usr/share/doc/zabbix-proxy-mysql-3.4.15/
[root@zproxy /usr/share/doc/zabbix-proxy-mysql-3.4.15]# ls
AUTHORS ChangeLog COPYING NEWS README schema.sql.gz
[root@zproxy /usr/share/doc/zabbix-proxy-mysql-3.4.15]# gunzip schema.sql.gz
[root@zproxy /usr/share/doc/zabbix-proxy-mysql-3.4.15]# mysql zabbix_proxy < schema.sql
[root@zproxy ~]# mysql zabbix_proxy
MariaDB [zabbix_proxy]> show tables;
看到表,OK
(2)z proxy
[root@zproxy /etc/zabbix]# vim zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0"
LISTEN_PORT=10052
START_POLLERS=50
[root@zproxy /etc/zabbix]# vim zabbix_proxy.conf
## 连接 z server
ProxyMode=0
Server=172.16.0.71
ServerPort=10051
Hostname=SYproxy
## 连接数据库
DBHost=localhost
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=12345
DBSocket=/var/lib/mysql/mysql.sock
DBPort=3306
## 间隔多长时间,向z server 传输数据
ConfigFrequency=3
DataSenderFrequency=1
## 连接java
JavaGateway=localhost
JavaGatewayPort=10052
StartJavaPollers=50
[root@zproxy ~]# systemctl start zabbix-java-gateway
[root@zproxy ~]# systemctl enable zabbix-java-gateway
[root@zproxy ~]# systemctl start zabbix-proxy
[root@zproxy ~]# systemctl enable zabbix-proxy
[root@zproxy ~]# netstat -antp | grep 1005[12]
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 1653/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 1653/zabbix_proxy
tcp6 0 0 :::10052 :::* LISTEN 1615/java