构建zabbix监控实验-基础篇
Zabbix 配置
实验环境:
Zabbix server:192.168.1.10
Zabbix agent:192.168.1.11
Zabbix agent:192.168.1.12
安装 Zabbix Server、Web 前端和 Agent
zabbix 下载地址:https://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/, 下载4.4.6版本到window本机,这个版本里面rpm包比较全,通过sftp上传到服务器192.168.1.10。
进入dos命令窗口,然后进入到d:\linux\zabbix目录
D:\Linux\zabbix>sftp root@192.168.1.10
如果出现报错:ECDSA host key for 192.168.1.10 has changed and you have requested strict checking.Host key verification failed
使用如下命令生成key存储本地解决
D:\Linux\zabbix>ssh-keygen -R 192.168.1.10
Sftp登录后,使用put * 将目录中的文件全部上传到server的zabbix目录
sftp> cd /zabbix
sftp> ls
sftp> put *
到server 192.168.1.10查看
[root@node1 zabbix]# ls
安装所有的rpm 包
[root@node1 zabbix]# yum -y install *.rpm
使用yum安装,会将所需要的依赖包一起下载安装上。
安装创建初始数据库(mariadb)
[root@node1 zabbix]# yum -y install mariadb mariadb-server
启动数据库
[root@node1 zabbix]# systemctl start mariadb.service
初始化数据库
[root@node1 zabbix]# mysql_secure_installation
这里可以mariadb的root 密码设置为zabbix。其余根据提示进行选择输入
登录数据库
[root@localhost zabbix]# mysql -u root –pzabbix
MariaDB [(none)]> create database zabbix default character set utf8 collate utf8_bin;
MariaDB [(none)]> create user zabbix@localhost identified by 'zabbix';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'zabbix' WITH GRANT OPTION;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'zabbix'@'%' IDENTIFIED BY 'zabbix' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
执行以上命令后数据库将允许root 和zabbix 用户远程使用navicat等工具登录访问。退出数据库,然后导入初始架构和数据,根据安装版本来确定zabbix-server-mysql-4.4.6 folder的名称
[root@node1 zabbix]# zcat /usr/share/doc/zabbix-server-mysql-4.4.6/create.sql.gz | mysql -uzabbix -p zabbix
Enter password:
使用navicat访问mariadb:
为 Zabbix Server 配置数据库
[root@node1 zabbix]# vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
为 Zabbix 前端配置 PHP
[root@node1 zabbix]# vi /etc/httpd/conf.d/zabbix.conf
更改时区为Asia/Shanghai
启动 Zabbix Server 和 Agent 进程
[root@node1 zabbix]# systemctl start zabbix-server zabbix-agent httpd
[root@node1 zabbix]# netstat -antp
系统监听10050,10051端口则表示启动成功
将zabbix 设置为开机自启
[root@node1 zabbix]# systemctl enable zabbix-server zabbix-agent httpd
http://192.168.1.10/zabbix/setup.php
点击next step, 检查都OK
点击next step,输入密码zabbix,database port 为3306, 如果这里使用默认0,可以通过修改配置文件的方式更改此端口,配置文件:/etc/zabbix/web/zabbix.conf.php
点击next step,在name选框输入服务器名:zabbix_server, 可自定义
点击下一步
点击finish,然后跳转登录页面,然后登录zabbix,这里使用的username 是Admin,而不是zabbix,页面配置的zabbix是连接数据库用的。
Login后看到的页面
可以根据需求就页面设置为中文
Zabbix 监控功能的实现
手动添加主机到监控集群
这里将会使用到2台agent机器,
Agent1 :192.168.1.10, 同server共享 (node1)
Agent2:192.168.1.11 (node2)
在192.168.1.11根下创建zabbix目录
[root@node2 ~]# cd /
[root@node2 /]# mkdir -p zabbix
Node1将zabbix-agent-4.4.6-1.el7.x86_64.rpm 包发送到node2
[root@node1 zabbix]# scp zabbix-agent-4.4.6-1.el7.x86_64.rpm root@192.168.1.11:/zabbix
Node2安装agent
[root@node2 zabbix]# yum -y install zabbix-agent-4.4.6-1.el7.x86_64.rpm
回到zabbix web端
配置à 主机 à 创建主机
然后可以添加主机
添加agent2监控
回到主机群
回到2个节点1,2,配置 zabbix agent
Node1: server and agent
[root@node2 zabbix]# vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=192.168.1.11 #用可解析的主机名或者IP
Node2: agent
[root@node2 zabbix]# vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.10
ServerActive=192.168.1.10
Hostname=192.168.1.11 #用node2的可解析主机名或者IP
启动agent,监听10050端口即成功
[root@node2 zabbix]# systemctl start zabbix-agent.service
[root@node2 zabbix]# systemctl enable zabbix-agent
回到zabbix web端,监控à图形 àLinux server àzabbix-2 à CPU Jumps
添加自动发现
自动发现是为监控集群而配置,被监控的机器需要安装zabbix-agent,适合于大规模的监控。
先创建动作:
配置à 动作 à事件源:自动发现 à 创建动作
在新的触发条件中选择需要的条件,这里选择 IP 范围,在线/不在线和服务端口即可,然后点击添加。下一步是配置操作,默认标题和消息内容都可以保持不变,这里主要配置的是类似与手动添加主机的操作:
添加主机
添加到主机群组
链接到模板:添加http 和 os相关的即可
启动主机
然后创建自动发现规则:
配置 à自动发现 à创建发现规则
配置页面:
名称:web-test
IP范围:192.168.1.11-20
更新间隔: 2s #
检查: ICMP ping # 这里配置能ping 通主机即可
其余都选择IP为标志
启用后,新的主机将会被自动添加
Zabbix API
Zabbix API 是基于 Web 的 API,作为 Web 前端的一部分提供。
- API 包含一组独立的方法
- 客户端和 API 之间的请求和响应通过使用 JSON 格式进行编码
大多数 API 至少包含四种方法分别是( 检 索 、 创 建 、 更 新 、 删 除 数 据 \color{#FF0000}{检索、创建、更新、删除数据} 检索、创建、更新、删除数据):
- get
- create
- update
- delete
当我们在完成前端的安装配置之后,就可以通过远程 HTTP 请求来调用 API
验证 API 请求
在 访 问 Z a b b i x 中 的 任 何 数 据 之 前 , 需 要 登 陆 并 获 取 身 份 验 证 令 牌 。 我 们 可 以 通 过 u s e r . l o g i n 方 法 完 成 \color{#FF0000}{在访问 Zabbix 中的任何数据之前,需要登陆并获取身份验证令牌。我们可以通过 user.login 方法完成} 在访问Zabbix中的任何数据之前,需要登陆并获取身份验证令牌。我们可以通过user.login方法完成
1. 在 zabbix 主机中创建脚本:
[root@node3 zabbix]# vi 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://192.168.1.10/zabbix/api_jsonrpc.php | python -m json.tool
2. 执行脚本
[root@node3 zabbix]# chmod +x zabbix-api
[root@node3 zabbix]# ./zabbix-api
{
"id": 1,
"jsonrpc": "2.0",
"result": "081ae25e17ad2fe21332fa4793fbacd3" #获取到的token
}
每执行一次获取一次认证令牌,获取后后续的操作可以沿用
API检索主机
查看监控的server情况
需要再写脚本zabbix-get
[root@node3 zabbix]# vi zabbix-get
curl -s -XPOST -H "Content-Type: application/json-rpc" -d'
{
"jsonrpc": "2.0",
"method": "host.get",
"params": {
"output": [
"hostid",
"host"
],
"selectInterfaces": [
"interfaceid",
"ip"
]
},
"id": 1,
"auth": "081ae25e17ad2fe21332fa4793fbacd3" #上一个脚本执行得到的token
}' http://192.168.1.10/zabbix/api_jsonrpc.php | python -m json.tool
执行脚本
[root@node3 zabbix]# chmod +x zabbix-get
[root@node3 zabbix]# ./zabbix-get
API删除主机
[root@node3 zabbix]# vi zabbix-delete-host
curl -s -XPOST -H "Content-Type: application/json-rpc" -d'
{
"jsonrpc": "2.0",
"method": "host.delete",
"params": [
"10305"
],
"id": 2,
"auth": "421ea739392c207f54d792c1ea08d44a"
}' http://192.168.1.10/zabbix/api_jsonrpc.php | python -m json.tool
[root@node3 zabbix]# ./zabbix-delete-host
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10323"
]
}}
打开刷新页面,可以看到一个host 被删除
API创建主机到监控项
[root@node3 zabbix]# vi zabbix-create
curl -s -XPOST -H "Content-Type: application/json-rpc" -d'
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "server7",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "192.168.1.17",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 2,
"auth": "081ae25e17ad2fe21332fa4793fbacd3"
}' http://192.168.1.10/zabbix/api_jsonrpc.php | python -m json.tool
[root@node3 zabbix]# chmod +x zabbix-create
[root@node3 zabbix]# ./zabbix-create
{
"id": 2,
"jsonrpc": "2.0",
"result": {
"hostids": [
"10325"
]
}
}
打开页面查看结果
zabbix监控nginx活跃数
安装nginx
在192.168.1.12 (node3)主机中安装配置nginx。
使用sftp上传安装包
安装依赖包
[root@node3 zabbix]# yum install -y gcc zlib-devel pcre-devel
解压nginx包并关闭debug
[root@node3 zabbix]# tar -zxf nginx-1.19.5.tar.gz
[root@node3 zabbix]# vi nginx-1.19.5/auto/cc/gcc
# debug
#FLAGS="$CFLAGS -g"
安装nginx
[root@node3 zabbix]# cd nginx-1.19.5/
[root@node3 nginx-1.19.5]# ./configure --prefix=/usr/local/nginx --with-http_stub_status_module
[root@node3 nginx-1.19.5]# make && make install
编辑配置文件,在监听80端口的server下增加下面的内容
[root@node3 nginx-1.19.5]# vi /usr/local/nginx/conf/nginx.conf
location /status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
检查语法并启动nginx
[root@node3 nginx-1.19.5]# /usr/local/nginx/sbin/nginx -t
[root@node3 nginx-1.19.5]# /usr/local/nginx/sbin/nginx
[root@node3 nginx-1.19.5]# curl http://127.0.0.1/status
Zabbix获取活跃连接数
Node3主机中的用户自定义配置的目录中配置,增加自定义配置以下内容:
首先在配置文件中启用识别自定义脚本,默认UnsafeUserParameters=0,改为1
然后由两种方式来处理自定义文件:
方式一:
[root@node3 zabbix]# vi zabbix_agentd.conf
# Default:
UnsafeUserParameters=1
UserParameter=nginx.status[*],/etc/zabbix/zabbix_agentd.d/nginx-status.sh $1
指定了键值nginx.status[*],以及配置文件的位置和名称nginx-status.sh,$1 为位置参数
[root@node3 nginx-1.19.5]# cd /etc/zabbix/zabbix_agentd.d/
[root@node3 zabbix_agentd.d]# vi nginx-status.sh
#!/bin/bash
HOST="127.0.0.1"
PORT="80"
function ping {
/sbin/pidof nginx |wc -l
}
function active {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |grep Active |awk '{print $NF}'
}
function reading {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |grep Reading |awk '{print $2}'
}
function writing {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |grep Writing |awk '{print $4}'
}
function accepts {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |awk NR==3 |awk '{print $1}'
}
function handled {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |awk NR==3 |awk '{print $2}'
}
function requests {
/usr/bin/curl "http://$HOST:$PORT/status/" 2>/dev/null |awk NR==3 |awk '{print $3}'
}
#执行函数
$1
方式二:
主配置文件中只将用户参数打开即可,UnsafeUserParameters=1
[root@node3 zabbix]# vi zabbix_agentd.conf
# Default:
UnsafeUserParameters=1
[root@node3 nginx-1.19.5]# cd /etc/zabbix/zabbix_agentd.d/
[root@node3 zabbix_agentd.d]# vi 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}'
UserParameter=nginx.handled,curl -s http://127.0.0.1/status | awk NR==3 |awk '{print $2}'
UserParameter=nginx.requests,curl -s http://127.0.0.1/status | awk NR==3 |awk '{print $3}'
每一项表示一个键值获取参数。
重启agent:
[root@node3 zabbix_agentd.d]# systemctl restart zabbix-agent.service
在server (node1)中获取活跃连接数,node1中已安装zabbix-get-4.4.6-1.el7.x86_64.rpm包。执行命令检查是否可以正常获取。
方式一:
[root@node1 zabbix]# zabbix_get -s 192.168.1.12 -p 10050 -k "nginx.status[requests]"
方式二:
[root@node1 zabbix]# zabbix_get -s 192.168.1.12 -p 10050 -k "nginx.active"
Zabbix server主机的图形化界面中配置 zabbix3 的监控项
配置à主机群 à选中node3à监控项à创建监控项
配置名称,键值,更新间隔即可。监控nginc的键值由agent指定,而不是zabbix自带的,因此需要根据配置文件中的名称来填写。
按同样的方式添加accept,handled,和 requests,添加后效果如下:
配置à主机群 à选中node3à图形à创建图形
名称可自定义,监控项选择上一步配置的nginx-active, nginx-accept,nginx-handled,nginx-requests.
可以在node2中写一个循环访问nginx,产生监控数据。
[root@node2 ~]# while 2>1; do curl http://192.168.1.12:80;sleep 1; done
回到zabbix home 页:
监测 à图形à群组:linux serverà主机:192.168.1.12à图形:nginx-status
收集数据后,刷新页面可得到对应的监控图形。
问题解析:
如果添加监控项后,出现状态为不支持的,问题出在配置文件或者是所填的键值不对。查找配置文件,对应修改之后生效
本文来自博客园,作者:逆流的鱼2016,转载请注明原文链接:https://www.cnblogs.com/orange2016/p/14226099.html