目录
一.zabbix server的nginx监控
nginx部署
链接: nginx包 提取码: vuck
在server2上进行:
tar zxf nginx-1.20.1.tar.gz
cd nginx-1.20.1
yum install gcc pcre-devel opensll-devel -y
./configure --prefix=/usr/local/nginx --with-http_ssl_module --with-http_stub_status_module
make
make install
完成之后,
cd /usr/local/nginx/
ln -s /usr/local/nginx/sbin/nginx /usr/local/bin
vim /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
启动服务
nginx或者nginx -s reload
curl http://127.0.0.1/status
因为配置文件写了,只允许本机,其他机子被拒绝!!如下:
获取信息
我们先在shell中测试一次,抓取是否成果!
curl -s http://localhost/status | grep Active | awk '{print $3}'
接下来,编写一个nginx脚本,通过agent获取信息!
cd /etc/zabbix/zabbix_agentd.d/
cp userparameter_mysql.conf userparameter_nginx.conf
把刚才在shell测试的抓取指令写进去:
vim userparameter_nginx.conf
完成之后,重启agent
systemctl restart zabbix-agent.service
接下来在server1上操作:
我们需要一个模板simkai.ttf
cd /usr/share/zabbix/fonts/
get simkai.ttf
rm -fr graphfont.ttf
ln -s simkai.ttf graphfont.ttf
ll graphfont.ttf
安装zabbix-get
yum install -y zabbix-get
zabbix_get -s 172.25.0.2 -p 10050 -k "nginx.active"
OK,接下来需要图形化添加监控
网页访问172.25.1.1/zabbix
先点击server2
点击右上角的创建监控:
注意键值必须和刚才指令get到的保持一致!
解析来创建图形:
可以选择图形类别
创建完成,点击更新,查看图形结果
当出现数值时表明图形添加成功。
添加更多nginx监控项:
curl -s http://localhost/status | awk NR==3 | awk '{print $1}'
curl -s http://localhost/status | awk NR==3 | awk '{print $2}'
curl -s http://localhost/status | awk NR==3 | awk '{print $3}'
添加到之前的配置文件里面
vim userparameter_nginx.conf
重启agent端服务读取脚本
systemctl restart zabbix-agent.service
我们在server1验证一下配置是否成功!
能输出数字,不报错即可!
zabbix_get -s 172.25.0.2 -p 10050 -k "nginx.accept"
zabbix_get -s 172.25.0.2 -p 10050 -k "nginx.handle"
zabbix_get -s 172.25.0.2 -p 10050 -k "nginx.request"
web界面手动添加监控项,然后添加到图形中。
将刚才的生成的三个键置名称添加进去!
分别添加三个监控项nginx_accept,nginx_handle,nginx_request
然后图形nginx_status添加监控项点击添加:
选中
完成之后,预览一下图形
二.Zabbix监控添加mysql
因为之前在server1搭建了mysql,为了节省资源,我们直接使用server1!
agent可以通过mysql的密码认证,在zabbix下建立隐藏文件,说明具体命令执行的用户、密码、socket:
[root@server1 ~]# mkdir /var/lib/zabbix
[root@server1 ~]# cd /var/lib/zabbix/
[root@server1 zabbix]# vim .my.cnf
[mysql]
user=root
password=westos
socket=/var/lib/mysql/mysql.sock
[mysqladmin]
user=root
password=westos
socket=/var/lib/mysql/mysql.sock
[root@server1 zabbix]# mysqladmin password westos
[root@server1 zabbix]# systemctl restart zabbix-agent.service
添加模板
在网页进行操作:
查看图像
手动测试
只有有返回值说明就OK了
但是由于自带的mysq模板监控项太少了,所以我们需要手动添加模板
倒入外部模板
删掉刚才添加的mysql模板
下载需要的导入工具
链接:percona 提取码: bru2
[root@server1 ~]# rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
[root@server1 ~]# cd /var/lib/zabbix/percona/templates/
[root@server1 templates]# cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
[root@server1 templates]# systemctl restart zabbix-agent.service
[root@server1 templates]# cd ..
[root@server1 percona]# cd scripts/
[root@server1 scripts]# vim ss_get_mysql_stats.php
修改真实的用户和密码如下:
重启服务:
systemctl restart zabbix-agent
手动测试如下:
[root@server1 scripts]# /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
[root@server1 scripts]# zabbix_get -s 127.0.01 -p 10050 -k "MySQL.Key-read-requests"
注意:手动测试之后会生成一个txt文件,这个文件生成的默认权限是root,因为访问的时候是用zabbix用户访问的!所以需要权限是zabbix的,所以需要删除调手动测试生成的文件!!
[root@server1 scripts]# cd /tmp/
[root@server1 tmp]# ls
[root@server1 tmp]# cat localhost-mysql_cacti_stats.txt
[root@server1 tmp]#ll localhost-mysql_cacti_stats.txt
[root@server1 tmp]# rm -fr localhost-mysql_cacti_stats.txt
现在导入外部模板。模板是我在网上下载好的,所以直接导入
链接: 模板提取码: wysw
把之前的模板取消链接并清理掉
接下来导入新的模板!
点击导入:
导入文件,然后把复合图形打钩!!
把模板下载到真机上即可,直接选择
然后点击导入!
接着选择zabbix server导入模板!
选择zabbix server
点击选择
选择
然后点击添加
在点击更新,如下,添加成功!
最后点击更新
完成之后,发现zabbix server的监控项变多了
注意这时候,点击触发器,需要禁用一个触发器!
往下寻找,如下图,点击已启用,变为不启用!!
完成之后,进到tmp之下,自动生成了前面删掉的文件,而且用文件所属权是zabbix
可以看图形的监控如下:
如果没有数据,可以等待一会再看!!
三.zabbix server 的tomcat+jave 监控
我们在server1上搭建tomcat java 服务
链接:tomcat包 提取码: jqj6
[root@server1 bin]# yum install java-1.8.0-openjdk.x86_64 -y
[root@server1 bin]#systemctl enable --now zabbix-java-gateway
[root@server1 bin]# cd /etc/zabbix
vim zabbix_java_gateway.conf
[root@server1 zabbix]# netstat -antlp| grep :10052
vim zabbix_java_gateway.conf
修改内容如下:
重启服务:
在server3操作如下:
[root@server3 ~]# tar zxf apache-tomcat-7.0.37.tar.gz -C /usr/local/
[root@server3 ~]# cd /usr/local/
[root@server3 local]# ln -s apache-tomcat-7.0.37/ tomcat
[root@server3 local]# ls
[root@server3 local]# cd tomcat
[root@server3 tomcat]# cd bin/
[root@server3 bin]# vim catalina.sh ##创建8888端口
CATALINA_OPTS='-Dcom.sun.management.jmxremote.port=8888
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false'
[root@server3 bin]# yum install -y java
[root@server3 bin]# ./startup.sh
[root@server3 bin]# netstat -antlp|grep 8888
然后安装java
yum install -y java
开启脚本
查看端口
点击server3,选择模板
点击选择
将java加入模板
将JMX端口写入:
然后更新!
测试点击主机发现JMX绿色亮了!
查看监控图形,出现数据
四.Zabbix-agent主动模式 (全克隆)
在server2上操作,
vim zabbix_agentd.conf
systemctl restart zabbix-agent.service
netstat -antlp | grep :10050
访问网页,点击模板如下:
全克隆
然后左下角全选
点击下面的批量更新,监控项的类型一定要选对
添加模板
然后点击添加
更新
查看图形!
五.Zabbix + proxy分布式
准备一台虚拟机server4,安装zabbix+proxy安装包,配置zabbix+proxy分布式!
yum list zabbix-*
yum install -y zabbix-proxy-mysql.x86_64
修改配置文件
vim /etc/zabbix/zabbix_proxy.conf
DBName=zabbix_proxy #数据库中的库名称
DBHost=172.25.0.1 #数据库位置
DBUser=zabbix #访问数据库的身份
DBPassword=westos #访问数据库的密码
将生成的数据库信息传给数据库位置server1中
cd /usr/share/doc/zabbix-proxy-mysql-4.0.5/
scp schema.sql.gz server1:
开启server4的服务
systemctl start zabbix-proxy.service
查看服务进程是否开启
ps ax
接着将server4的主机名改为proxy
hostnamectl set-hostname proxy
在server1,2,3,4的本地解析都把server4解析proxy如下图:
接着在server1上打开数据库
创建mysql数据库zabbix_proxy,并将库的所有权利给zabbix用户,授权后刷新
create database zabbix_proxy character set utf8 collate utf8_bin;
grant all on zabbix_proxy.* to zabbix@'%' identified by 'westos';
flush privileges;
将schema.sql.gz 文件解压后导入 zabbix_proxy 库中
zcat schema.sql.gz | mysql -pwestos zabbix_proxy
测试web创建agent代理程序
然后输入代理名称,代理地址,点添加
在server4的配置文件里面继续修改一下:
vim /etc/zabbix/zabbix_proxy.conf
Server=172.25.0.1 #分布式服务位于zabbix-server端
ServerPort=10051 #默认端口为10051
Hostname=proxy #主机名为proxy,需要与添加的proxy名保持一致
systemctl restart zabbix-proxy.service
看一下日志:server1,server4
cat /var/log/zabbix/zabbix_proxy.log
看到server4日志显示:成功接受server1的信息
server1日志显示:成功发送信息给server4
然后再网页上点击主机server3
往下拖,选择proxy代理
点击更新
将server3的服务指向proxy
原理:
通过proxy连接server,agent(3)----> proxy(4) ----> server(1)
vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.0.4
ServerActive=172.25.0.4
systemctl restart zabbix-agent.service
接着来到服务器端查看一下日志
server4显示
cat /var/log/zabbix/zabbix_server.log
设定server3中的java导入proxy后日志变化
server1端查看日志显示不能找到
若是遇到报错,怎么办?
刷新zabbix-server 数据修改缓存
server1
zabbix_server -R config_cache_reload
接着在server4修改配置文件
vim /etc/zabbix/zabbix_proxy.conf
JavaGateway=172.25.0.1 #java服务监听端口指向zabbix-server端
StartJavaPollers=5 #Java轮询器为5,实际设置根据需求
systemctl restart zabbix-proxy.service
可以把server3也重启一下服务agent
server3通过server4的proxy成功连接到zabbix-server端,并且所有服务恢复启用。
最后等待一会,web界面两个都亮了就OK
六.Zabbix+睿象云报警
需要用到server1,2,3
server1为zabbix-server主机,server2、3为zabbix-agent主机。且已经连接完成。那么需要把刚才的代理去掉!
首先需要server1能够上网
在真机开启路由策略
iptables -t nat -I POSTROUTING -s 172.25.0.0/24 -j MASQUERADE
server1检测是否能上网:
打开浏览器,进入睿象云,先注册账号,绑定邮箱(一定要绑定!!)CA - >添加集成---->监控工具
生成了Appkey
图
接下来需要我们在server1上操作:
注:一定要解压在这个目录下!!!
进入报警文件读取目录,解压云报警插件,进入解压目录
获取睿象云 Cloud Alert agent包:
链接: ca探针包 提取码: k9p3
cd /usr/lib/zabbix/alertscripts
tar zxf ca_zabbix_release-2.1.0.tar.gz
cd cloudalert/bin/
./install.sh ****************(自己生成的key)
处填入您新建应用时生成的appkey
在安装过程中根据安装提示,输入zabbix管理/监控/web登陆地址、管理员用户名、密码。
当显示安装成功,就说明已经配置完成
然后到web上的zabbix把之前的报警媒介禁用
然后把动作打开:
到睿象云新建通知策略
选择如下,通知人选择自己,若是没有,邮箱没有绑定!!
设置后出现:
禁用一个触发器
接着开始测试:
[root@server2 ~]# systemctl stop zabbix-agent.service
在zabbix上查看
发现出现了报警而且发送到了睿象云
然后再睿象云上也可以看到报警信息过来了!
手机上短信,微信都来了!!
短信如下
当认领了告警之后,会在睿象云提示处理中
重启服务server2 agent
systemctl restart zabbix-agent.service
在zabbix上查看问题端口状态显示 已解决
睿象云也显示解决!
显示已关闭!!
微信也发送来了
七.使用API
介绍
Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
创建新的应用程序以使用Zabbix;
将Zabbix与第三方软件集成;
自动执行常规任务。
大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。
获取身份验证
在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。然后,你的JSON请求将如下所示:
[root@server1 ~]# curl -XPOST http://172.25.0.1/zabbix/api_jsonrpc.php -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "user.login",
"params": {
"user": "Admin",
"password": "zabbix"
},
"id": 1,
"auth": null
}' | python -m json.tool
参数的意义
jsonrpc - API使用的JSON-RPC协议的版本; Zabbix API实现的JSON-RPC版本是2.0;
method - 被调用的API方法名;
params - 将被传递给API方法的参数;
id - 请求的任意标识符;
auth -用户认证令牌; 因为我们还没有一个,它的设置null。
如果你正确提供了凭据,API返回的响应将包含用户身份验证令牌:
检索主机
[root@server1 ~]# vim zabbix.api
curl -XPOST http://172.25.0.1/zabbix/api_jsonrpc.php -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 1,
"auth":"09dc3830f5e6780328c9f4a6fc60c503"
}' | python -m json.tool
一定要使用刚才获得的身份验证!
sh zabbix.api执行脚本
删除主机
object host.delete(array hosts)
(array) 要删除的主机的ID.
curl -XPOST http://172.25.0.1/zabbix/api_jsonrpc.php -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10265"
],
"id": 1,
"auth":"09dc3830f5e6780328c9f4a6fc60c503"
}' | python -m json.tool
hostid 和前面查出来的保持一致
执行脚本
然后观察结果,删除成功!!
创建主机
需要把动作里的,自动注册禁用,不然执行脚本报错也会成功创建server3
对象 host.create(对象/数组 hosts)
curl -s -XPOST http://172.25.0.1/zabbix/api_jsonrpc.php -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.0.3",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"auth": "09dc3830f5e6780328c9f4a6fc60c503",
"id": 1
}' | python -m json.tool
组的查询方式:
templateid查询方法:
执行脚本,然乎观察
sh zabbix.api
在web页面查看server3是否添加成功