一.zabbix server的nginx监控

nginx部署

在server5上进行:

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;
}

rabbit监控 zabbix监控api_rabbit监控

启动服务

nginx或nginx -s reload
curl http://127.0.0.1/status

因为配置文件写了,只允许本机,其他机子被拒绝 如下:

rabbit监控 zabbix监控api_zabbix_02

rabbit监控 zabbix监控api_运维_03

获取信息

我们先在shell中测试一次,抓取是否成果!

curl -s http://localhost/status | grep Active | awk '{print $3}'

    1

接下来,编写一个nginx脚本,通过agent获取信息!

cd /etc/zabbix/zabbix_agentd.d/
cp userparameter_mysql.conf userparameter_nginx.conf

把刚才在shell测试的抓取指令写进去:
vim userparameter_nginx.conf

rabbit监控 zabbix监控api_运维_04

完成之后,重启agent

systemctl restart zabbix-agent.service

接下来在server7上操作 防止出现乱码而找到相应的字体:
我们需要一个模板simkai.ttf

cd /usr/share/zabbix/fonts/
get simkai.ttf
rm -fr graphfont.ttf
ln -s simkai.ttf graphfont.ttf

ll graphfont.ttf

rabbit监控 zabbix监控api_数据库_05

安装zabbix-get 并测试

yum install -y zabbix-get
zabbix_get -s 172.25.76.5 -p 10050 -k "nginx.active"

rabbit监控 zabbix监控api_zabbix_06

接下来需要图形化添加监控

网页访问172.25.76.7/zabbix

先点击server5

rabbit监控 zabbix监控api_数据库_07

点击右上角的创建监控:

rabbit监控 zabbix监控api_数据库_08

注意键值必须和刚才指令get到的保持一致!

解析来创建图形:

rabbit监控 zabbix监控api_zabbix_09

可以选择图形类别

rabbit监控 zabbix监控api_运维_10

rabbit监控 zabbix监控api_运维_11

创建完成,点击更新,查看图形结果

当出现数值时表明图形添加成功。

rabbit监控 zabbix监控api_运维_12

添加更多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}'

rabbit监控 zabbix监控api_运维_13

添加到之前的配置文件里面

vim userparameter_nginx.conf
	UserParameter=nginx.active,curl -s http://localhost/status | grep Active | awk '{print $3}'
UserParameter=nginx.accept,curl -s http://localhost/status | awk NR==3 | awk '{print $1}'
UserParameter=nginx.handle,curl -s http://localhost/status | awk NR==3 | awk '{print $2}'
UserParameter=nginx.request,curl -s http://localhost/status | awk NR==3 | awk '{print $3}'

重启agent端服务读取脚本

systemctl restart zabbix-agent.service

我们在server7验证一下配置是否成功 能输出数字,不报错即可

zabbix_get -s 172.25.76.5 -p 10050 -k "nginx.accept"
37
zabbix_get -s 172.25.76.5 -p 10050 -k "nginx.handle"
38
zabbix_get -s 172.25.76.5 -p 10050 -k "nginx.request"
39

web界面手动添加监控项,然后添加到图形中。
将刚才的生成的三个键置名称添加进去
分别添加三个监控项nginx_accept,nginx_handle,nginx_request
方法和刚才的active一样

然后图形nginx_status添加监控项点击添加:

rabbit监控 zabbix监控api_数据库_14

选中

完成之后,预览一下图形

rabbit监控 zabbix监控api_数据库_15

二.Zabbix监控添加mysql

因为之前在server7搭建了mysql,为了节省资源,我们直接使用server7
agent可以通过mysql的密码认证,在zabbix下建立隐藏文件,说明具体命令执行的用户、密码、socket

mkdir  /var/lib/zabbix
cd /var/lib/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

mysqladmin password 	westos
systemctl restart zabbix-agent.service

添加模板

在网页进行操作:

rabbit监控 zabbix监控api_运维_16

手动测试

只有有返回值说明就OK了

rabbit监控 zabbix监控api_zabbix_17

但是由于自带的mysq模板监控项太少了,所以我们需要手动添加模板

倒入外部模板

删掉刚才添加的mysql模板
回到主机执行以下命令

rpm -ivh percona-zabbix-templates-1.1.8-1.noarch.rpm
cd /var/lib/zabbix/percona/templates/
cp userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
systemctl restart zabbix-agent.service
cd ..
cd scripts/
vim ss_get_mysql_stats.php 
	$mysql_user = 'root';
	$mysql_pass = 'westos';
	$mysql_port = 3306;
	$mysql_socket = NULL;
	$mysql_flags = 0;
	$mysql_ssl  = FALSE;   # Whether to use SSL to connect to MySQL.
	$mysql_ssl_key  = '/etc/pki/tls/certs/mysql/client-key.pem';
	$mysql_ssl_cert = '/etc/pki/tls/certs/mysql/client-cert.pem';
	$mysql_ssl_ca   = '/etc/pki/tls/certs/mysql/ca-cert.pem';
	$mysql_connection_timeout = 5;

ln -s /opt/rh/rh-php72/root/usr/bin/php /usr/bin/php #创建软链接

rabbit监控 zabbix监控api_rabbit监控_18

注意:

大家可以通过 which php 查看是否输出 /usr/bin/php 如果是这个 则忽略此步骤

因为/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh

这里的脚本会读取这个php路径但 我们的主机后来下载的php链接可能不指向这个路径 所以需要手动创建软链接

重启服务:

systemctl restart zabbix-agent

手动测试如下:

/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gg
zabbix_get -s 127.0.0.1 -p 10050 -k "MySQL.Key-read-requests"

rabbit监控 zabbix监控api_数据库_19

注意:
手动测试之后会生成一个txt文件,这个文件生成的默认权限是root,因为访问的时候是用zabbix用户访问的所以需要权限是zabbix的,所以需要删除调手动测试生成的文件

cd /tmp/
ls
cat localhost-mysql_cacti_stats.txt
rm -fr localhost-mysql_cacti_stats.txt

rabbit监控 zabbix监控api_rabbit监控_20

现在导入外部模板。模板是我在网上下载好的,所以直接导入
把之前的模板取消链接并清理掉

点击导入:

rabbit监控 zabbix监控api_数据库_21

rabbit监控 zabbix监控api_zabbix_22

导入文件,然后把复合图形打钩
把模板下载到真机上即可,直接选择
然后点击导入

接着选择zabbix server导入模板

选择zabbix server

rabbit监控 zabbix监控api_nginx_23

最后点击更新

完成之后,发现zabbix server的监控项变多了

rabbit监控 zabbix监控api_nginx_24

注意

这时候,点击触发器,需要禁用一个触发器

往下寻找,如下图,点击已启用,变为不启用

rabbit监控 zabbix监控api_rabbit监控_25

完成之后,进到tmp之下,自动生成了前面删掉的文件,而且用文件所属权是zabbix

rabbit监控 zabbix监控api_运维_26

可以看图形的监控如下:
如果没有数据,可以等待一会再看

rabbit监控 zabbix监控api_rabbit监控_27

三.zabbix server 的tomcat+jave 监控

我们在server7上搭建tomcat java 服务

yum install java-1.8.0-openjdk.x86_64 -y  
systemctl enable --now zabbix-java-gateway
cd /etc/zabbix
vim zabbix_server.conf

	JavaGateway=172.25.76.7 #设定java监听网关指向zabbix-server主机
	StartJavaPollers=5 # Java轮询器

systemctl restart zabbix-server.service 
netstat -antlp| grep :10052

rabbit监控 zabbix监控api_nginx_28

在server6操作如下:

tar zxf apache-tomcat-8.5.24.tar.gz -C /usr/local/
cd /usr/local/
ln -s apache-tomcat-8.5.24/ tomcat
ls
cd tomcat/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'

yum install -y java
./startup.sh #开启脚本
netstat -antlp|grep 8888

点击server6,选择模板

将java加入模板

rabbit监控 zabbix监控api_rabbit监控_29

将JMX端口写入:

rabbit监控 zabbix监控api_zabbix_30

然后更新

查看监控图形,出现数据

rabbit监控 zabbix监控api_运维_31

四.Zabbix-agent主动模式 (全克隆) (5.0已可以直接添加active模板)

在server5上操作,

vim /etc/zabbix/zabbix_agentd.conf 
 StartAgents=3

systemctl restart zabbix-agent.service

选择全克隆

rabbit监控 zabbix监控api_nginx_32

在后面加 -Active后选择添加

rabbit监控 zabbix监控api_数据库_33


点击 新添加的模版 殿监控项后全选

rabbit监控 zabbix监控api_运维_34

选择批量更新

rabbit监控 zabbix监控api_运维_35

监控项内的 类型选择主动式后 更新

rabbit监控 zabbix监控api_zabbix_36

添加模板

rabbit监控 zabbix监控api_运维_37

五.Zabbix + proxy分布式

准备一台虚拟机server4,安装zabbix+proxy安装包,配置zabbix+proxy分布式!

yum list zabbix-*
yum install -y zabbix-proxy-mysql.x86_64

修改配置文件

vim /etc/zabbix/zabbix_proxy.conf
Server=172.25.76.7 #分布式服务位于zabbix-server端
ServerPort=10051 #默认端口为10051
Hostname=proxy #主机名为proxy,需要与添加的proxy名保持一致,并且所有zabbix的服务机都需要做解析
DBHost=172.25.76.7 #数据库位置
DBName=zabbix_proxy #数据库中的库名称
DBUser=zabbix #访问数据库的身份
DBPassword=westos #访问数据库的密码
JavaGateway=172.25.76.7 #java服务监听端口指向zabbix-server端
StartJavaPollers=5 #Java轮询器为5,实际设置根据需求

将生成的数据库信息传给数据库位置server7中

cd /usr/share/doc/zabbix-proxy-mysql-4.0.36/
scp schema.sql.gz server7:

接着将server4的主机名改为proxy

hostnamectl set-hostname proxy

在server4567的本地解析都把server4解析proxy如下图:

rabbit监控 zabbix监控api_数据库_38

接着在server7上打开数据库
创建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

开启server4的服务

systemctl start zabbix-proxy.service

查看服务进程是否开启

ps ax

rabbit监控 zabbix监控api_数据库_39

测试web创建agent代理程序

rabbit监控 zabbix监控api_运维_40

输入代理名称,代理地址,点添加

看一下日志:server7,server4

cat /var/log/zabbix/zabbix_proxy.log

rabbit监控 zabbix监控api_nginx_41

看到server4日志显示:成功接受server1的信息

然后再网页上点击主机server6

往下拖,选择proxy代理

rabbit监控 zabbix监控api_运维_42

点击更新

rabbit监控 zabbix监控api_zabbix_43

将server6的服务指向proxy
原理:
通过proxy连接server,agent(6)----> proxy(4) ----> server(7)

server6:

vim /etc/zabbix/zabbix_agentd.conf
Server=172.25.76.4
ServerActive=172.25.76.4

systemctl restart zabbix-agent.service

接着来到服务器端查看一下日志
server4显示

cat /var/log/zabbix/zabbix_proxy.log

设定server6中的java导入proxy后日志变化

rabbit监控 zabbix监控api_数据库_44

server7端查看日志显示不能找到

rabbit监控 zabbix监控api_数据库_45

若是遇到报错,怎么办?
刷新zabbix-server 数据修改缓存

server7:

zabbix_server -R config_cache_reload

可以把server6也重启一下服务agent

server6通过server4的proxy成功连接到zabbix-server端,并且所有服务恢复启用。

最后等待一会,web界面两个都亮了就OK

rabbit监控 zabbix监控api_nginx_46

六.Zabbix+睿象云报警

需要用到三台虚拟机 server7为zabbix-server主机,server67为zabbix-agent主机。且已经连接完成。那么需要把刚才的代理去掉

首先需要server1能够上网
在真机开启路由策略

iptables -t nat -I POSTROUTING -s 172.25.0.0/24 -j MASQUERADE

打开浏览器,进入睿象云,先注册账号,绑定邮箱(一定要绑定)CA - >添加集成---->监控工具

rabbit监控 zabbix监控api_rabbit监控_47


生成了Appkey

接下来需要我们在server7上操作:

注:一定要解压在这个目录下
进入报警文件读取目录,解压云报警插件,进入解压目录

cd /usr/lib/zabbix/alertscripts
tar zxf ca_zabbix_release-4.0.0.tar.gz

cd cloudalert/bin/
./install.sh ****************(自己生成的key)

填入您新建应用时生成的appkey

在安装过程中根据安装提示,输入zabbix管理/监控/web登陆地址、管理员用户名、密码。

当显示安装成功,就说明已经配置完成

rabbit监控 zabbix监控api_rabbit监控_48

然后到web上的zabbix把之前的报警媒介禁用

rabbit监控 zabbix监控api_运维_49

然后把动作打开:选择触发器

rabbit监控 zabbix监控api_nginx_50

到睿象云新建通知策略

选择如下,通知人选择自己,若是没有,邮箱没有绑定

rabbit监控 zabbix监控api_rabbit监控_51

设置后出现:

rabbit监控 zabbix监控api_zabbix_52


在这里禁用一个触发器

rabbit监控 zabbix监控api_nginx_53

接着在server5开始测试:

systemctl stop zabbix-agent.service

发现出现了报警而且发送到了睿象云和短信

rabbit监控 zabbix监控api_运维_54

rabbit监控 zabbix监控api_数据库_55

当认领了告警之后,会在睿象云提示处理中

rabbit监控 zabbix监控api_数据库_56

重启服务server2 agent

systemctl restart zabbix-agent.service

在zabbix上查看问题端口状态显示 已解决

睿象云也显示解决

rabbit监控 zabbix监控api_nginx_57

七.使用API

官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/api
介绍

Zabbix API允许你以编程方式检索和修改Zabbix的配置,并提供对历史数据的访问。它广泛用于:
创建新的应用程序以使用Zabbix;
将Zabbix与第三方软件集成;
自动执行常规任务。

大多数API至少包含四种方法: get, create, update 和 delete ,分别是检索,创建,更新和删除数据,但是某些API提供一套完全不同的一组方法。

获取身份验证

在访问Zabbix中的任何数据之前,你需要登录并获取身份验证令牌。这可以使用该 user.login 方法完成。让我们假设你想要以标准Zabbix Admin用户身份登录。然后,你的JSON请求将如下所示:

curl -XPOST http://172.25.76.7/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返回的响应将包含用户身份验证令牌:

检索主机

vim zabbix.api
curl -XPOST http://172.25.76.7/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":"a18ea5b5518b5b13bff6bbd7ae39b3a8"
}' | python -m json.tool

一定要使用刚才获得的身份验证

rabbit监控 zabbix监控api_nginx_58

sh zabbix.api执行脚本

rabbit监控 zabbix监控api_nginx_59

删除主机

object host.delete(array hosts)
(array) 要删除的主机的ID.

curl -XPOST http://172.25.76.7/zabbix/api_jsonrpc.php -H "Content-Type: application/json-rpc" -d '
{
    "jsonrpc": "2.0",
    "method": "host.delete",
    "params": [
        "10274"
    ],
    "id": 1,
    "auth":"a18ea5b5518b5b13bff6bbd7ae39b3a8"
}' | python -m json.tool

hostid 和前面查出来的保持一致

rabbit监控 zabbix监控api_nginx_60

执行脚本

rabbit监控 zabbix监控api_rabbit监控_61

然后观察结果,删除成功

rabbit监控 zabbix监控api_数据库_62

创建主机

需要把动作里的,自动注册禁用,不然执行脚本报错也会成功创建server3
对象 host.create(对象/数组 hosts)

curl -s -XPOST http://172.25.76.7/zabbix/api_jsonrpc.php -H "Content-Type: application/json-rpc" -d '
{
    "jsonrpc": "2.0",
    "method": "host.create",
    "params": {
        "host": "server6",
        "interfaces": [
            {
                "type": 1,
                "main": 1,
                "useip": 1,
                "ip": "172.25.76.6",
                "dns": "",
                "port": "10050"
            }
        ],
        "groups": [
            {
                "groupid": "2"
            }
        ],
        "templates": [
            {
                "templateid": "10001"
            }
        ]
    },
    "auth": "a18ea5b5518b5b13bff6bbd7ae39b3a8",
    "id": 1
}' | python -m json.tool

组和templateid查询方法:

在上面的url里

rabbit监控 zabbix监控api_rabbit监控_63

八、Tidb+Zabbix的部署

在之前的数据库所在server7上进行替换

tar zxf tidb-latest-linux-amd64.tar.gz
 cd tidb-latest-linux-amd64
/bin/pd-server --name=pd1 --data-dir=pd1 --client-urls="http://172.25.76.7:2379" --peer-urls="http://172.25.76.7:2380" --initial-cluster="pd1=http://172.25.76.7:2380"

   netstat -antlp | grep 2379 #查看端口
   netstat -antlp | grep 2380

部署agent

./bin/tikv-server --pd="172.25.76.7:2379" --addr="172.25.76.7:20160" --data-dir=tikv1
 #开启zabbix及tidb
./bin/tidb-server 
ps ax | grep tidb 
netstat -antlp | grep 4000

因为在运行所以用ctrl+z打入后台

数据库连接tidb

从tidb的4000端口连接:

mysql -p 4000 -uroot -pwestos

MySQL [(none)]> create database zabbix character set utf8 collate utf8_bin;  ##创建数据库
MySQL [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';
Query OK, 1 row affected (0.29 sec)

MySQL [(none)]> grant all privileges on *.* to 'zabbix'@'%';  ##用户授权
Query OK, 0 rows affected (0.00 sec)
vim /etc/zabbix/zabbix_server.conf
DBPort=4000

cd /etc/zabbix/web/
vim zabbix.conf.php
	$DB['TYPE']		='MYSQL';
	$DB['SERVER']	='LOCALHOST';
	$DB['PORT']		='4000';
	$DB['DATABASE']	='zabbix';
	$DB['USER']		='zabbix';
	$DB['PASSWORD']	='westos';
 systemctl restart zabbix-server
 systemctl restart zabbix-agent

web访问查看结果就可以