一、zabbix的介绍
1、zabbix的介绍
abbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD,OS X等平台上。
zabbix server可以单独监视远程服务器的服务状态;同时也可以与zabbix agent配合,可以轮询zabbix agent主动接收监视数据(agent方式),同时还可被动接收zabbix agent发送的数据(trapping方式)。
zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。zabbix agent可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows (2000/2003/XP/Vista)等系统之上。
2、zabbix的主要特点:
安装与配置简单,学习成本低
支持多语言(包括中文)
免费开源
自动发现服务器与网络设备
分布式监视以及WEB集中管理功能
可以无agent监视
用户安全认证和柔软的授权方式
通过WEB界面设置或查看监视结果
email等通知功能
3、zabbix的组件及进程:
Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
Proxy:可选组件,常用于分布监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;
Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;
4、一个监控系统运行的大概的流程是这样的:
zabbix agent需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agent收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。
5、常见进程:
默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、 zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。下面来分别介绍下他们各自的作用。
zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
zabbix_get
zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。
zabbix_sender
zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。
zabbix_server
zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server.当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。
zabbix_proxy
zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。
zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
6、zabbix监控环境中基本概念:
1、主机(host):要监控的网络设备,可由IP或DNS名称指定;
2、主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
3、监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;
4、触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";
5、事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
6、动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;
7、报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
8、媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
9、通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
10、远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
11、模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
12、应用(application):一组item的集合;
13、web场景(web scennario):用于检测web站点可用性的一个活多个HTTP请求;
14、前端(frontend):Zabbix的web接口;
7、zabbix的介绍
监控的功能:数据采集,数据存储,数据展示(可视化),报警
监控那些东西:操作系统的监控,硬件设备(交换机),java应用
还有 cacti,nagios和zabbix合成监控三剑客
cacti:主要用的是数据的展示,数据库使用rrd回环数据库(创建的时候内存已经确定,满了后就会覆盖原先的内容,可以求出数据聚合值,特点永远填不满)
nagios:主要特点是报警,主要是脚本
zabbix结合了两者的特点,分布式的
prometheus:普罗米修斯,适合作云上的监控(动态),golang开发的,缺少图形展示,
二、zabbix的安装部署
实验环境:
server1:172.25.85.1(rhel7.3版本),zabbix server
server8:172.25.85.1(rhel7.3版本),zabbix agent
1、安装zabbix及依赖性
[root@server1 Untitled Folder]# ls
fping-3.10-4.el7.x86_64.rpm
iksemel-1.4-2.el7.x86_64.rpm
php-bcmath-5.4.16-42.el7.x86_64.rpm
php-mbstring-5.4.16-42.el7.x86_64.rpm
zabbix-agent-3.4.6-1.el7.x86_64.rpm
zabbix-server-mysql-3.4.6-1.el7.x86_64.rpm
zabbix-web-3.4.6-1.el7.noarch.rpm
zabbix-web-mysql-3.4.6-1.el7.noarch.rpm
yum install -y zabbix-server-mysql-4.0.5-1.el7.x86_64.rpm zabbix-web-mysql-4.0.5-1.el7.noarch.rpm zabbix-web-4.0.5-1.el7.noarch.rpm zabbix-agent-4.0.5-1.el7.x86_64.rpm php-bcmath-5.4.16-42.el7.x86_64.rpm php-mbstring-5.4.16-42.el7.x86_64.rpm fping-3.10-1.el7.x86_64.rpm iksemel-1.4-2.el7.centos.x86_64.rpm
2、安装并配置数据库
yum install -y mariadb-server
systemctl start mariadb
mysql_secure_installation
[root@server1 ~]# mysql -uroot -pwestos
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';
Query OK, 0 rows affected (0.00 sec)
同步数据库
[root@server1 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password:
3、配置zabbix
Zabbix与数据库联系
[root@server1 ~]# cd /etc/zabbix/
[root@server1 zabbix]# ls
web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf
[root@server1 zabbix]# vim zabbix_server.conf
DBName=zabbix
DBUser=zabbix
DBPassword=westos
4、开启各种服务
开启zabbix服务和客户端
[root@server1 zabbix]# systemctl start zabbix-server
[root@server1 zabbix]# systemctl start zabbix-agent
修改时区域
[root@server1 zabbix]# cd /etc/httpd/conf.d/
[root@server1 conf.d]# ls
autoindex.conf php.conf README userdir.conf welcome.conf zabbix.conf
[root@server1 conf.d]# vim zabbix.conf
php_value date.timezone Asia/Shanghai
开启httpd服务
[root@server1 conf.d]# systemctl start httpd
测试:
在浏览器中输入172.25.85.1/zabbix访问:
安装完成,登录查看 用户为Admin,密码为zabbix
调节为中文
查看server端的监控已经打开
5、现在要实现server对agent的监控
首先要在zabbix-server端开启监控的端口
配置 -> 主机 -> 创建主机 -> 配置如下 -> 模板
6、在server2安装,zabbix-agent,并配置连接server1
[root@server2 4.0]# yum install -y zabbix-agent-4.0.5-1.el7.x86_64.rpm
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~直接启动虚拟机~~~~~~~~~~~~~~~~~~~~~
[root@foundation85 kiosk]# virsh start server3
Domain server3 started
[root@foundation85 kiosk]# virsh shutdown server3
Domain server3 is being shutdown
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf ##修改配置文件
Server=172.25.85.1 ##服务器为server1
ServerActive=172.25.85.1 ##主动发送监控
Hostname=server2
[root@server2 ~]# systemctl start zabbix-agent ##启动
测试:
[root@server2 ~]# netstat -antlp ##10050端口被监听
tcp6 0 0 :::10050 :::* LISTEN 2139/zabbix_agentd
三、zabbix批量监控
为了满足监控企业成千上万台服务器,因此我们需要使用zabbix批量监控来实现。批量监控有两种方式:自动发现和自动注册
自动发现:由服务端主动发起,zabbix server开启发现进程,定时扫描局域网中的IP服务器、设备
1、自动发现
1)删除原来的server2
2)配置自动发现动作
3).配置自动发现规则
配置–>自动发现–>创建发现规则
填写如下,主要是ip范围和检查项(zabbix),完成后添加启用
结果发现,server出现一个自动发现一个设备。
2、自动注册
自动注册:由客户端主动发起,客户端必须安装并启动agent,否则无法被自动注册添加至主机列表
实验前关闭自动发现
具体配置如下:
1)配置一个server3:172.25.85.3
[root@server3 ~]# rpm -ivh zabbix-agent-4.0.5-1.el7.x86_64.rpm
warning: zabbix-agent-4.0.5-1.el7.x86_64.rpm: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-4.0.5-1.el7 ################################# [100%]
[root@server3 ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.85.1 ##服务器为server1
ServerActive=172.25.85.1 ##主动发送监控
Hostname=server3
[root@server3 ~]# systemctl start zabbix-agent
2).创建自动注册动作
点击配置–>事件源–>自动注册–>创建动作
3)结果
[root@server3 ~]# systemctl restart zabbix-agent
四、API的方式部署zabbix
1)添加api
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' http://172.25.85.1/zabbix/api_jsonrpc.php | python -m json.tool
[root@server1 ~]# chmod +x zabbix-api ##执行权限
查询结果
[root@server1 ~]# ./zabbix-api
{
"id": 1,
"jsonrpc": "2.0",
"result": "3185af4b974ae14e5571f0b343ea59c9"
}
2)查看zabbix-server的状态
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 2,
"auth": "3185af4b974ae14e5571f0b343ea59c9" ##与前面的结果以只
}' http://172.25.85.1/zabbix/api_jsonrpc.php | python -m json.tool
查询结果
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": [
{
"host": "Zabbix server",
"hostid": "10084",
"interfaces": [
{
"interfaceid": "1",
"ip": "127.0.0.1"
}
]
},
{
"host": "server2",
"hostid": "10264",
"interfaces": [
{
"interfaceid": "3",
"ip": "172.25.38.2"
}
]
},
{
"host": "server3",
"hostid": "10265",
"interfaces": [
{
"interfaceid": "4",
"ip": "172.25.38.3"
}
]
}
]
}
3)删除server3
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10265"
],
"id": 2,
"auth": "3185af4b974ae14e5571f0b343ea59c9"
}' http://172.25.38.1/zabbix/api_jsonrpc.php | python -m json.tool
执行完成后,在web界面没有server3
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10265"
]
}
}
4)创建
[root@server1 ~]# vim zabbix-api
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server3",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.38.3",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": "3185af4b974ae14e5571f0b343ea59c9"
}' http://172.25.38.1/zabbix/api_jsonrpc.php | python -m json.tool
执行
[root@server1 ~]# ./zabbix-api
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10266"
]
}
}
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
五、http和nginx的监控
1、server2监控httpd,有模板,添加监控
1)安装httpd,并开启
[root@server2 4.0]# yum install httpd -y
[root@server2 4.0]# systemctl start httpd
2)添加模板
添加http监控模板
2、server3监控nginx,没有模板,自己创建
1)server3安装nginx
tar zxf nginx-1.15.8.tar.gz
yum install -y gcc make pcre-devel zlib-devel
[root@server3 ~]# cd nginx-1.15.8
[root@server3 nginx-1.15.8]# vim auto/cc/gcc
[root@server3 nginx-1.15.8]#
# debug
#CFLAGS="$CFLAGS -g"
[root@server3 nginx-1.15.8]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
make && make install
2)、编辑nginx配置文件,并重新启动
[root@server3 nginx-1.15.8]# vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
allow 127.0.0.1; ##访问权限访问本机
deny all;
}
[root@server3 nginx-1.15.8]# /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@server3 nginx-1.15.8]# /usr/local/nginx/sbin/nginx
3)、测试,访问本机
[root@server3 nginx-1.15.8]# curl http://127.0.0.1/status
Active connections: 1
server accepts handled requests
1 1 1
Reading: 0 Writing: 1 Waiting: 0
[root@server3 nginx-1.15.8]# curl http://127.0.0.1/status
Active connections: 1
server accepts handled requests
2 2 2
Reading: 0 Writing: 1 Waiting: 0
[root@server3 nginx-1.15.8]# curl http://127.0.0.1/status
Active connections: 1
server accepts handled requests
3 3 3
Reading: 0 Writing: 1 Waiting: 0
4)、编写shell脚本
实际的监控过程
user -> webui -> zabbix server -> zabbix agent -> shell -> zabbix server -> mysql -> webui
[root@server3 nginx-1.15.8]# cd /etc/zabbix/zabbix_agentd.d/
[root@server3 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@server3 zabbix_agentd.d]# cp userparameter_mysql.conf userparameter_nginx.conf ##复制模板
[root@server3 zabbix_agentd.d]# vim userparameter_nginx.conf
UserParameter=nginx.active,curl -s http://127.0.0.1/status | grep Active | awk '{print $3}'
curl -s http://127.0.0.1/status | grep Active | awk '{print $3}'
[root@server3 zabbix_agentd.d]# systemctl restart zabbix-agent
5)、server1测试
[root@server1 4.0]# yum install -y zabbix-get-4.0.5-1.el7.x86_64.rpm
[root@server1 4.0]# zabbix_get -s 172.25.38.3 -p 10050 -k "nginx.active"
1
6)、web界面
配置 -> 主机 -> server3 -> 监控项 -> 创建监控项目 -> 添加监控项目 -> 图形 - > 添加图形 -> 查看图形
7)、修改字体
发现图形中字体乱码,需要修改字体
cd /usr/share/zabbix/include/
vim defines.inc.php
%s/graphfont/simkai/g
修改后的图形
8)、server3再添加一个监控
[root@server3 zabbix_agentd.d]# vim userparameter_nginx.conf
UserParameter=nginx.active,curl -s http://127.0.0.1/status | grep Active | awk '{print $3}'
UserParameter=nginx.accept,curl -s http://127.0.0.1/status | awk NR==3 | awk '{print $1}'
[root@server3 zabbix_agentd.d]# systemctl restart zabbix-agent
server1查看
[root@server1 include]# zabbix_get -s 172.25.38.3 -p 10050 -k "nginx.accept"
29
9)、web界面添加
测试:并发访问
[root@foundation38 4.0]# ab -c 100 -n 1000 http://172.25.38.3/index.html
查看图形
curl -s http://127.0.0.1/status | awk NR==3 | awk '{print $1}'
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
六、导入新的mysql监控
因为zabbix自带的数据库监控太少
1、配置目录
[root@server1 ~]# mkdir /var/lib/zabbix
[root@server1 ~]# cd /var/lib/zabbix/
[root@server1 zabbix]# vim .my.cnf
[mysql]
host = localhost
user = root
password = westos
socket = /var/lib/mysql/mysql.sock
[mysqladmin]
host = localhost
user = root
password = westos
socket = /var/lib/mysql/mysql.sock
[root@server1 zabbix]# systemctl restart zabbix-agent
2、mysql监控的模块的导入
[root@server1 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
warning: percona-zabbix-templates-1.1.8-1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID cd2efd2a: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:percona-zabbix-templates-1.1.8-1 ################################# [100%]
Scripts are installed to /var/lib/zabbix/percona/scripts
Templates are installed to /var/lib/zabbix/percona/templates
[root@server1 ~]# cd /var/lib/zabbix/percona/scripts/
[root@server1 scripts]# ls
get_mysql_stats_wrapper.sh ss_get_mysql_stats.php
[root@server1 scripts]# cd ../templates/
[root@server1 templates]# ls
userparameter_percona_mysql.conf
zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.8.xml
[root@server1 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@server1 templates]# vim userparameter_percona_mysql.conf
[root@server1 scripts]# vim ss_get_mysql_stats.php.cnf
<?php
$mysql_user = 'root';
$mysql_pass = 'westos';
[root@server1 scripts]# systemctl restart zabbix-agent
[root@server1 scripts]# cd /etc/zabbix/zabbix_agentd.d/
[root@server1 zabbix_agentd.d]# ls
userparameter_mysql.conf userparameter_percona_mysql.conf
[root@server1 zabbix_agentd.d]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
[root@server1 tmp]# ls
localhost-mysql_cacti_stats.txt
systemd-private-86bf5885ecbe4d60bad58b6ab05da7be-httpd.service-USjs9L
systemd-private-86bf5885ecbe4d60bad58b6ab05da7be-mariadb.service-EGbVpd
[root@server1 tmp]# ll localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1311 Mar 10 08:44 localhost-mysql_cacti_stats.txt
[root@server1 tmp]# cat localhost-mysql_cacti_stats.txt
[root@server1 tmp]# cd /etc/zabbix/zabbix_agentd.d/
[root@server1 zabbix_agentd.d]# vim /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh
ITEM=$1
HOST=localhost
DIR=`dirname $0`
CMD="/usr/bin/php -q $DIR/ss_get_mysql_stats.php --host $HOST --items gg"
CACHEFILE="/tmp/$HOST-mysql_cacti_stats.txt"
3)手动添加
修改使用的模块
导入后发现监控项比以前多了许多