zabbix官网:www.zabbix.com
本次实验用到一个物理主机,两个虚拟机
物理主机ip -->172.25.47.250
虚拟机server1 -->172.25.47.1—>服务端
虚拟机server2 --> 172.25.47.2—>客户端
此处检测都是被动监测,即server(主)->agent(被),server主动去监控agent
一、zabbix安装
1.下载zabbix安装包,放置在物理主机的/var/www/html/4.0目录下(搭建yum仓库)
注意:此处需要给目录权限
2.虚拟机配置yum源[root@server1 ~]# cd /etc/yum.repos.d/
[root@server1 yum.repos.d]# ls
exam.repo redhat.repo
[root@server1 yum.repos.d]# vim zabbix.repo
[zabbix]
name=zabbix
baseurl=http://172.25.47.250/4.0
gpgcheck=0
[root@server1 yum.repos.d]# yum clean all
[root@server1 yum.repos.d]# yum repolist
3.配置数据库
[root@server1 ~]# yum install mariadb-server -y ##安装数据库
[root@server1 ~]# systemctl enable mariadb
[root@server1 ~]# systemctl start mariadb
[root@server1 ~]# mysql_secure_installation ##安全初始化(此处设定密码为westos)
[root@server1 ~]# mysql -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';
4.安装zabbix(后端和前端不用装在一个机器上,此处只是为了看效果,故安装在一个机子)
[root@server1 ~]# yum install zabbix-server-mysql -y ##后端服务
[root@server1 zabbix]# yum install zabbix-web-mysql -y ##前端web
5.导入数据并查看
[root@server1 ~]# cd /usr/share/doc/zabbix-server-mysql-4.0.5/
[root@server1 zabbix-server-mysql-4.0.5]# zcat create.sql.gz ##查看数据文件
[root@server1 zabbix-server-mysql-4.0.5]# ls
AUTHORS ChangeLog COPYING create.sql.gz NEWS README
[root@server1 zabbix-server-mysql-4.0.5]# zcat create.sql.gz |mysql -uzabbix -p zabbix ##导入数据库(此过程可能会比较慢,请耐心等待)
[root@server1 zabbix-server-mysql-4.0.5]# mysql -p ##查看,此时可以看到数据被导入
MariaDB [(none)]> show databases;
MariaDB [(none)]> use zabbix
MariaDB [zabbix]> show tables;
6.修改zabbix配置文件
[root@server1 zabbix-server-mysql-4.0.5]# cd /etc/zabbix/
[root@server1 zabbix]# ls
web zabbix_server.conf
[root@server1 zabbix]# vim zabbix_server.conf ##配置文件
124 DBPassword=westos ##用户密码
[root@server1 zabbix]# systemctl start zabbix-server ##开启zabbix
[root@server1 zabbix]# systemctl enable zabbix-server ##开机自启
[root@server1 zabbix]# ps ax ##查看开启进程
[root@server1 zabbix]# cd /etc/httpd/conf.d/
[root@server1 conf.d]# vim zabbix.conf
20 php_value date.timezone Asia/Shanghai
[root@server1 conf.d]# systemctl start httpd
[root@server1 conf.d]# systemctl enable httpd
7.浏览器访问http://172.25.47.1/zabbix,进入zabbix的web界面
一直点击下一步到下面界面,此处密码配置的是westos
再下一步到下面界面,此处name本实验是Zabbix server
下面界面是最信息的最后一次可修改
登陆zabbix(默认帐号是Admin,密码是zabbix)
进入zabbix
8.此时可以看到有报,进行解决
安装zabbix的agent
[root@server2 ~]# yum install -y zabbix-agent
[root@server2 ~]# systemctl start zabbix-agent
[root@server2 ~]#systemctl enable zabbix-agent
[root@server2 ~]# netstat -antlp | grep :10050 ##此时10050端口开启
再次页面刷新,可以看到告警消失
9.由于zabbix监控界面是英文的,此处可以改成中文界面
点击界面右上角图标
进行语言选择
更新后,可以看到改成中文界面
二、agent
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server
1、添加agent
1)配置yum源(由于server1已经配置,此处直接复制即可)
[root@server2 ~]# scp root@172.25.47.1:/etc/yum.repos.d/zabbix.repo /etc/yum.repos.d/
[root@server2 ~]# yum clean all
[root@server2 ~]# yum repolist
2)安装并修改配置文件
[root@server2 ~]# yum install zabbix-agent -y
[root@server2 ~]# vim /etc/zabbix/zabbix_agentd.conf
98 Server=172.25.47.1 ##开启自动发现
105 # Default:
106 # ListenPort=10050 ##表示开启的默认端口是10050
139 ServerActive=172.25.47.1 ##开启自动注册
150 Hostname=server2 ##主机名
[root@server2 ~]# systemctl enable zabbix-agent
[root@server2 ~]# systemctl start zabbix-agent
[root@server2 ~]# cd /var/log/zabbix/
[root@server2 zabbix]# ls
zabbix_agentd.log
[root@server2 zabbix]# cat zabbix_agentd.log
3)添加agent
配置–> 主机–>创建主机,到下面界面进行填写
添加完成后,点击模板,进行选择添加,完成后进行更新
可以看到配置成功
2、自动发现(自动发现是server端去发现客户端)
实验之前先删除server2主机
1)点击动作–>事件源选择自动发现—>创建动作
点击操作,添加操作
2)点击自动发现—>创建发现规则
填写名称和ip范围,并添加
3)点击监测—>自动发现,可以看到server2已经被添加
如果仪表盘出现告警,修改服务的配置文件
[root@server1 ~]# cd /etc/zabbix/
[root@server1 zabbix]# vim zabbix_server.conf
243 # Default:
244 # StartDiscoverers=1 ##此数字默认是1,如有需要可往大改
3、自动注册(自动注册是客户端主动去server上添加)
做自动注册之前,先删除调前一个实验自动发现的server2主机
1)点击配置—>事件源选择自动注册—>创建动作
名称自取,主机名注意是自己的
2)操作
添加两个操作,点击添加
3)重启agent
[root@server2 zabbix]# systemctl restart zabbix-agent
4)此时,主机server2已经添加
三、API
简介
Zabbix API允许以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问
广泛用于
- 创建新的应用程序以使用Zabbix;
- 将Zabbix与第三方软件集成;
- 自动执行常规任务。
Zabbix API是基于Web的API,作为Web前端的一部分提供。它使用JSON-RPC 2.0协议,这意味着两件事:
- API包含一组独立的方法
- 客户端和API之间的请求和响应使用JSON格式进行编码。
大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据
实验
做API之前,先删除之前注册的server2,并停掉自动注册
1、创建脚本,查看zabbix监控系统的API接口
1)创建脚本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d ' ##利用curl命令模拟json格式的post请求
{
"jsonrpc": "2.0", ##这是标准的JSON RPC参数以标示协议版本。所有的请求都会保持不变
"method": "user.login", ##利用用户登陆的方式获取API
"params": {
"user": "Admin", ##zabbix监控系统的用户名和密码
"password": "zabbix"
},
"id": 1, ##这个字段用于绑定JSON请求和响应。响应会跟请求有相同的"id"。在一次性发送多个请求时很有用,这些也不需要唯一或者连续
"auth": null
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
# 采用POST方法向http://example.com/zabbix/api_jsonrpc.php发送此JSON对象. http://example.com/zabbix/是Zabbix前端地址。
# api_jsonrpc.php是调用API的PHP脚本。可在安装可视化前端的目录下找到。
2)执行脚本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 1,
"jsonrpc": "2.0",
"result": "2d3f669b3084fa9a8f105b5b8b03e2de" ##API令牌
}
2、创建脚本,查看zabbix主机和被监控主机信息
1)编写脚本
[root@server1 ~]# vim zabbix-api.sh
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": "5cc8887ef4235a10d7a2ca40465e6a21" ##此处是zabbix的API令牌
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
2)执行脚本
[root@server1 ~]# sh zabbix-api.sh
3、添加主机脚本
1)编写脚本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create", ## 调用host.create方法
"params": {
"host": "server2", ## 被监控的主机名
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "172.25.47.2", ## 被监控主机的ip
"dns": "",
"port": "10050" ## zabbix-agent的端口号
}
],
"groups": [
{
"groupid": "2" ## 建立的主机加入的群组id
}
],
"templates": [
{
"templateid": "10001" ## 建立的主机使用的模版id
}
]
},
"id": 3,
"auth": "2d3f669b3084fa9a8f105b5b8b03e2de"
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
groupid和templateid的获得方法如下:
2)执行脚本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 3,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10270" ##生成的主机的id号
]
}
}
3)查看结果
在监控界面此时可以看到server2主机添加
4、删除监控主机的脚本
1)创建脚本
[root@server1 ~]# vim zabbix-api.sh
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete", ##调用host.delete方法
"params": [
"10270" ##删除的主机的id号
],
"id": 4,
"auth": "2d3f669b3084fa9a8f105b5b8b03e2de"
}' http://172.25.47.1/zabbix/api_jsonrpc.php |python -m json.tool
2)执行脚本
[root@server1 ~]# sh zabbix-api.sh
{
"id": 4,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10270"
]
}
}
3)查看结果
此时监控页面的server2主机已经被删除
四、监控http、nginx、mysql服务
实验之前确保server2是被监控客户机
1、监控http服务
1)安装http服务
[root@server2 zabbix]# yum install httpd -y
[root@server2 zabbix]# systemctl enable httpd
[root@server2 zabbix]# systemctl start httpd
2)在监控页面进行配置
点击:主机—配置—模板—选择 ---- Template App HTTP Service,并进行添加和更新
更新之后,可以看到server2上http已经被监控
2、监控nginx
注意,实验之前应先关停http,因为apacha和nginx都是用的80端口,同时开会有影响。
1)安装nginx
[root@server2 ~]# ls
nginx-1.15.8.tar.gz
[root@server2 ~]# tar zxf nginx-1.15.8.tar.gz
[root@server2 ~]# cd nginx-1.15.8
[root@server2 nginx-1.15.8]# yum install gcc pcre-devel zlib-devel -y
[root@server2 nginx-1.15.8]# vim auto/cc/gcc
# debug
#CFLAGS="$CFLAGS -g"
[root@server2 nginx-1.15.8]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module ##安装一个stub_status模块
[root@server2 nginx-1.15.8]# make && make install
[root@server2 nginx-1.15.8]# cd /usr/local/nginx/conf/
[root@server2 conf]# vim nginx.conf
48 location /status {
49 stub_status on; ##Nginx中的stub_status模块主要用于查看Nginx的一些状态信息
50 access_log off; ##关闭日志记录
51 allow 127.0.0.1; ##本行与下一行表示,只允许本机访问
52 deny all;
53 }
[root@server2 conf]# ln -s /usr/local/nginx/sbin/nginx /sbin/
[root@server2 conf]# nginx -t
[root@server2 conf]# nginx
2)用curl进行测试
[root@server2 conf]# curl -s http://127.0.0.1/status
Active connections: 1
server accepts handled requests
7 7 3
Reading: 0 Writing: 1 Waiting: 0
[root@server2 conf]# curl -s http://127.0.0.1/status |grep Active
Active connections: 1
[root@server2 conf]# curl -s http://127.0.0.1/status |grep Active|awk '{print $3}'
1
3)添加nginx监控项
[root@server2 conf]# cd /etc/zabbix/zabbix_agentd.d/
[root@server2 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@server2 zabbix_agentd.d]# cp userparameter_mysql.conf userparameter_nginx.conf
[root@server2 zabbix_agentd.d]# vim userparameter_nginx.conf
UserParameter=nginx.active,curl -s http://127.0.0.1/status |grep Active|awk '{print $3}' ##获取连接数(nginx.active为key值,获得的连接数为value值)
UserParameter=nginx.accept,curl -s http://127.0.0.1/status |awk NR==3 |awk '{print $1}' ##获取接受请求数
[root@server2 zabbix_agentd.d]# systemctl restart zabbix-agent
4) 在zabbix server端获取数据
[root@server1 ~]# yum install zabbix-get -y
[root@server1 ~]# zabbix_get -s 172.25.47.2 -p 10050 -k "nginx.active"
1
[root@server1 ~]# zabbix_get -s 172.25.47.2 -p 10050 -k "nginx.accept"
45
5)监控界面配置
1>创建两个监控项
点击配置–主机–点击server2主机–监控项–创建监控项
2>添加图形
配置–主机–点击server2主机–图形 --创建图形
3>预览
此时监控界面有信息,但是会看到页面底下有乱码,
解决方法,换字体
[root@server1 fonts]# pwd
/usr/share/zabbix/fonts ##下在字体到这个目录下
[root@server1 fonts]# ls
graphfont.ttf simkai.ttf ##下载一个字体
[root@server1 fonts]# cd ..
[root@server1 zabbix]# cd include/
[root@server1 include]# vim defines.inc.php
:%s/graphfont/simkai/g ##让系统识别用哪个字体
刷新监控页面,可以看到显示正常
3、监控mysql
1)监控页面配置(此处server1安装了mysql,故此处对server1操作,即Zabbix server主机)
配置步骤:点击配置–主机–(Zabbix server)监控项–(Zabbix server)模板–添加Tempate DB MySQL模板–更新
配置前可以看到,监控项是88项
添加后可以看到监控项从原来的88项变成102项
2)配置数据库
[root@server1 ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@server1 zabbix_agentd.d]# ls
userparameter_mysql.conf
[root@server1 zabbix_agentd.d]# cat userparameter_mysql.conf ##查看数据库两个选项的key-value
3)编写获取key-value的读取规则
[root@server1 zabbix_agentd.d]# mkdir /var/lib/zabbix
[root@server1 zabbix_agentd.d]# cd /var/lib/zabbix/
[root@server1 zabbix]# ls
[root@server1 zabbix]# vim .my.cnf
[mysql]
user = root
password = westos
[mysqladmin]
user = root
password = westos
[root@server1 zabbix]# systemctl restart zabbix-agent ##重启,读取配置文件
4)测试
[root@server1 zabbix]# zabbix_get -s 172.25.47.1 -p 10050 -k mysql.ping ##没有返回值,是正常情况
zabbix_get [4019]: Check access restrictions in Zabbix agent configuration
看监控界面
点击:主机—Zabbix server —图形—MYSQL operations—预览
可以看有监控图形信息
4、导入监控模板
此处导入的是监控mysql的模板,实验前,先清除上一实验添加的监控mysql的模板
1)安装模板
[root@server1 ~]# ls
percona-zabbix-templates-1.1.8-1.noarch.rpm zabbix-api.sh
[root@server1 ~]# rpm -q php php-mysql ##由于percona的监控脚本是使用php写的,所以需要准备好php运行环境
php-5.4.16-42.el7.x86_64
php-mysql-5.4.16-42.el7.x86_64
[root@server1 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
2) 复制文件到agent目录下
[root@server1 ~]# cd /var/lib/zabbix/percona/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]# systemctl restart zabbix-agent ##重启agent
3)修改php脚本
[root@server1 templates]# cd ..
[root@server1 percona]# cd scripts/
[root@server1 scripts]# ls
get_mysql_stats_wrapper.sh ss_get_mysql_stats.php
[root@server1 scripts]# vim ss_get_mysql_stats.php
30 $mysql_user = 'root';
31 $mysql_pass = 'westos';
执行脚本,返回值是0
[root@server1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
0
4) 清除缓存文件
执行脚本会产生缓存,需要清理
[root@server1 scripts]# cd /tmp/
[root@server1 tmp]# ls
localhost-mysql_cacti_stats.txt ##产生的缓存
systemd-private-534822e83d4a47189351d6015519fc74-httpd.service-y8uyZp
systemd-private-534822e83d4a47189351d6015519fc74-mariadb.service-5bZ4qE
systemd-private-72062f78859e44b79bdd16ea1a6c7b7b-httpd.service-r2upDe
systemd-private-72062f78859e44b79bdd16ea1a6c7b7b-mariadb.service-bDoBVh
systemd-private-c8a2ee5c445a4ef0ac8f1a6b6f174bb0-httpd.service-kwerxT
systemd-private-c8a2ee5c445a4ef0ac8f1a6b6f174bb0-mariadb.service-0MdS9H
#可以看到此缓存文件的是root用户执行产生的,会与zabbix用户在执行时产生冲突
[root@server1 tmp]# ll localhost-mysql_cacti_stats.txt
-rw-r--r-- 1 root root 1347 May 4 07:01 localhost-mysql_cacti_stats.txt
#删除缓存文件
[root@server1 tmp]# rm -fr localhost-mysql_cacti_stats.txt