第二周作业

各版本zabbix安装

安装

官方下载链接

!!! warning 注意事项

  1. font-end 为 apache, 前端访问地址: http://host/zabbix
  2. font-end 为 nginx (zabbix 6.0 后支持), 前端访问地址 http://host_name/
    !!!

rpm系包安装

# 安装6.0LTS / Rocky Linux 8 / server, fronted, agent / mysql / Apache

1. 关闭epel源的zabbix项
[epel]
...
excludepkgs=zabbix*

2. 安装zabbix仓库
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
dnf clean all

3. 安装
dnf install zabbix-server-mysql \
zabbix-web-mysql zabbix-apache-conf \
zabbix-sql-scripts zabbix-selinux-policy \
zabbix-agent mysql-server mysql

4. 创建数据库
mysql -uroot -p
>  password
>  mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; -- 创建用户zabbix设定字符集等
>  mysql> create user zabbix@localhost identified by 'alopex'; -- 修改用户zabbix的密码
>  mysql> grant all privileges on zabbix.* to zabbix@localhost; -- localhost修改为对应的主机
>  mysql> set global log_bin_trust_function_creators = 1; -- 允许在MySQL服务器中创建并使用自定义函数
>  mysql> quit;

5. 导入数据库脚本
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -uroot -p
>  password
>  mysql> set global log_bin_trust_function_creators = 0;  -- 关闭在MySQL服务器中创建并使用自定义函数
>  mysql> quit;

6. 修改zabbix server的DB密码
 /etc/zabbix/zabbix_server.conf
 DBPassword=alopex

7. 设置zabbix开机启动
systemctl restart zabbix-server zabbix-agent httpd php-fpm mysqld.service
systemctl enable zabbix-server zabbix-agent httpd php-fpm mysqld.service

8. 打开zabbix UI访问界面,初始化数据库
...


dpkg系包安装

# 安装6.0LTS / ubuntu 22.04 / server, fronted, agent / mysql / Nginx

1. 安装zabbix仓库
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
apt update

2. 安装
apt install zabbix-server-mysql \
zabbix-frontend-php zabbix-nginx-conf \
zabbix-sql-scripts zabbix-agent \
mysql-server mysql-client

3. 创建数据库
mysql -uroot -p
>  password
>  mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin; -- 创建用户zabbix设定字符集等
>  mysql> create user zabbix@localhost identified by 'alopex'; -- 修改用户zabbix的密码
>  mysql> grant all privileges on zabbix.* to zabbix@localhost; -- localhost修改为对应的主机
>  mysql> set global log_bin_trust_function_creators = 1; -- 允许在MySQL服务器中创建并使用自定义函数
>  mysql> quit;

4. 导入数据库脚本
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
mysql -uroot -p
>  password
>  mysql> set global log_bin_trust_function_creators = 0;  -- 关闭在MySQL服务器中创建并使用自定义函数
>  mysql> quit;

5. 修改zabbix server的DB密码
 /etc/zabbix/zabbix_server.conf
 DBPassword=alopex

6. 关闭apache2
systemctl disable --now apache2
 
6. 配置PHP前端 
/etc/zabbix/nginx.conf 
listen 8080;
server_name my_zabbix.com;  # 修改服务器名称

7. 追加hosts解析
echo "ip.ip.ip.ip my_zabbix.com"  | sudo tee -a /etc/hosts
 
7. 设置zabbix开机启动
systemctl restart zabbix-server zabbix-agent nginx php8.1-fpm mysql-service
systemctl enable zabbix-server zabbix-agent nginx php8.1-fpm mysql-service
 
8. 打开zabbix UI访问界面,初始化数据库
...


主动模式和被动模式比较与实现

被动模式(默认)

项目 说明
通信方式 被动模式下,Zabbix Agent被动地等待来自Zabbix Server或Proxy的连接请求和数据收集指令。
工作特点 1) 定期被Zabbix Server或Proxy主动连接和查询
2) 监控本地资源和应用程序状态
3) 将收集的数据发送给Server或Proxy
适用场景 1) 中小规模环境,无需分布式监控
2) 防火墙限制,Agent无法主动连接Server
3) 监控对象数量有限
系统负载 相对较低,Agent处理请求的负载较小
Agent监听端口 10050 (TCP) - 与Zabbix Server/Proxy通信
10049 (TCP) - 与Zabbix Server通信(仅被动模式)
Server/Proxy端口 10051 (TCP) - Zabbix Proxy的Trapper接收主动数据
10025 (TCP) - Server与Proxy、其他组件通信
10020 (TCP/UDP) - Server的SNMP Trapper与Agent通信
数据更新频率 由Zabbix Server或Proxy控制,默认60秒刷新一次被动项目。可根据需求进行配置调整。

主动模式

项目 说明
通信方式 主动模式下,Zabbix Agent主动连接Zabbix Server,不需要Server端主动查询。
工作特点 1) 主动连接并主动将监控数据发送给Zabbix Server
2) 可在防火墙后工作,只需开启出站连接
3) 支持主动发送Trapper数据给Zabbix Server
适用场景 1) 分布式大规模环境,大量被监控对象
2) 防火墙限制,只允许主动出站连接
3) 监控对象分散在广域网络中
系统负载 相比被动模式,Agent端负载较高,需要主动建立连接。
Agent监听端口 不适用,没有监听端口。
Server端口 10051 (TCP) - Zabbix Server Trapper接收主动数据
数据更新频率 由Agent端控制,可根据配置进行主动更新,默认120秒。

配置

配置

!!! abstract 配置信息

  • 被动模式 (默认模式)

    • agent端文件配置 /etc/zabbix/zabbix_agentd.conf
      Server=192.168.100.136 # 指向zabbix server
    • 重启服务

      systemctl restart zabbix-agent.service

    • 前端配置

  • 主动模式

    • agent端文件配置 /etc/zabbix/zabbix_agentd.conf
      Server=192.168.100.136 # !强制! 指向zabbix server
      ServerActive=192.168.100.136 # !强制! zabbix服务器IP地址
      Hostname=192.168.100.77 # !强制! 当前主机IP,必须与zabbix server前端主机名称(Host name)相同
      Timeout=30   # (建议配置 超时时间)
    • 重启服务

      systemctl restart zabbix-agent.service

    • 前端配置

    主动模式模板Linux by Zabbix agent active的agent.ping监控项ZBX标记不会变绿,需要修改
    为被动模式ZBX标记才能被绿 (可以通过添加 agent.ping 变绿)
    !!!

proxy主动被动模式案例

原理

通过zabbix proxy将数据发送给zabbix server,一来减轻了zabbix server的负担,二来可以实现分布式监控,将分散在各处的数据汇集到同一个监控上。
zabbix proxy 是一个数据收集器,它不计算触发器不处理事件不发送报警

架构

  • zabbix proxy仅仅需要一条tcp连接到zabbix server,所以防火墙上仅仅需要加上一条规则即可。
  • zabbix proxy数据库必须和server分开,否则数据会被破坏,毕竟这两个数据库的表大部分都相同。总之记住,数据库分开即可。
  • proxy收集到数据之后,首先将数据缓存在本地,然后在一定得时间之后传递给zabbix server
  • 这个时间由proxy配置文件中参数ProxyLocalBuffer and ProxyOfflineBuffer决定。

安装proxy

# Rocky8 / Mysql
1. 导入官方源
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-6.0-4.el8.noarch.rpm
sed -i.bak 's/repo.zabbix.com/mirrors.aliyun.com\/zabbix/' /etc/yum.repos.d/zabbix.repo
dnf clean all

2. 安装源
dnf install zabbix-proxy-mysql zabbix-sql-scripts zabbix-selinux-policy mysql-server

3. 创建数据库
# mysql -uroot -p
password
mysql> create database zabbix_proxy character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by 'alopex';
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;

4. 导入数据库脚本
cat /usr/share/zabbix-sql-scripts/mysql/proxy.sql | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix_proxy
mysql -uroot -p
password
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;

5. 配置数据库密码 
> /etc/zabbix/zabbix_proxy.conf
DBPassword=alopex

6. 启动zabbix-proxy
systemctl restart zabbix-proxy
systemctl enable zabbix-proxy

工作模式

zabbix agent定位类似

  • 主动模式:proxy周期性主动发送数据给server,大幅降低server的压力。(推介使用
  • 被动模式:server通过发送监控项指令向proxy请求数据

主动模式

zabbix server zabbix proxy zabbix agent (被监控主机)
192.168.100.136 192.168.100.34 192.168.100.

proxy文件

前端配置后,需要重启proxy

grep -v '^#\|^$' /etc/zabbix/zabbix_proxy.conf

ProxyMode=0  # 开启主动模式(默认)
Server=192.168.100.136 # zabbix server IP地址
Hostname=zabbix-proxy-active # proxy的名称,需和前端配置一致
LogFile=/var/log/zabbix/zabbix_proxy.log # 日志文件路径
LogFileSize=0 
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=alopex
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24 # 允许接受的agent网段

agent文件

grep -Ev '^#|^$' /etc/zabbix/zabbix_agentd.conf 

PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.100.136,192.168.100.34
ServerActive=192.168.100.136,192.168.100.34
Hostname=192.168.100.77
Timeout=20
Include=/etc/zabbix/zabbix_agentd.d/*.conf

前端配置


验证监控


被动模式

zabbix server zabbix proxy zabbix agent (被监控主机)
192.168.100.136 192.168.100.34 192.168.100.

proxy数据库修改

mysql -uroot

# 被动模式需要zabbix server主动连接,数据库不能仅由proxy访问
UPDATE mysql.user
SET Host = 'localhost'
WHERE User = 'zabbix';

grant all privileges on zabbix_proxy.* to zabbix@'192.168.100.%';

select host,user from mysql.user;

proxy文件

grep -v '^#\|^$' /etc/zabbix/zabbix_proxy.conf

ProxyMode=1  # 开启被动模式
Server=192.168.100.136 # zabbix server 主机IP
Hostname=zabbix-proxy-passive # 代理服务器名称,被动模式不要求和后面Web管理页的agent代理程序名称相同
LogFile=/var/log/zabbix/zabbix_proxy.log 
LogFileSize=0
PidFile=/run/zabbix/zabbix_proxy.pid
SocketDir=/run/zabbix
DBHost=192.168.100.34  # 修改为Proxy数据库 IP地址
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=alopex
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24

agent文件

grep -Ev '^#|^$' /etc/zabbix/zabbix_agentd.conf 

PidFile=/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.100.136,192.168.100.34  # 设置Proxy代理IP
Hostname=192.168.100.77
Timeout=20
Include=/etc/zabbix/zabbix_agentd.d/*.conf

前端配置

sudo grep -Ev '^#|^$' /etc/zabbix/zabbix_server.conf 
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/run/zabbix/zabbix_server.pid
SocketDir=/run/zabbix
DBName=zabbix
DBUser=zabbix
DBPassword=alopex
JavaGateway=192.168.100.121
StartJavaPollers=10
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
FpingLocation=/usr/bin/fping
Fping6Location=/usr/bin/fping6
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1,192.168.100.0/24  # 配置可通信IP地址段

验证监控

参考

zabbix proxy配置实战案例

一键zabbix agent脚本

#!/bin/bash

# 安装agent
wget https://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_6.0-4+ubuntu22.04_all.deb
dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb
sed -i 's!http://repo.zabbix.com!https://mirrors.aliyun.com/zabbix!' /etc/apt/sources.list.d/zabbix.list
apt update
apt install zabbix-agent

# 主动被动二选一
## 被动模式配置修改
if [ $# -ne 1 ]
then
   echo "Usage: bash script.sh <zabbix-server>"
   exit -1
fi
ZABBIX=${1}
sed -i "s/^Server=127.0.0.1/Server=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf

## 主动模式配置修改
#if [ $# -ne 2 ]
#then
#   echo "Usage: bash script.sh <zabbix-server> <Hostname>"
#   exit -1
#fi
#ZABBIX=${1}
#HOSTNAME=${2}
## sed -i "s/^Server=127.0.0.1/Server=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf
## sed -i "s/^ServerActive=127.0.0.1/ServerActive=${ZABBIX}/" /etc/zabbix/zabbix_agentd.conf
## sed -i "s/^Hostname=.*/Hostname=${HOSTNAME}/" /etc/zabbix/zabbix_agentd.conf

systemctl restart zabbix-agent

一键zabbix api添加zabbix agent

api_create (被动模式)

#!/bin/bash

HOST=$(hostname -I | awk '{print $1}')
ZABBIX_SERVER='my_zabbix.com'
nginx_URL="http://${ZABBIX_SERVER}/api_jsonrpc.php"
apache_URL="http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php"

# 选择web服务器类型指定URL
URL=$nginx_URL

token=$(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
}' $URL | cut -d ',' -f2 | cut -d '"' -f4)

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
  "host": "'$HOST'",
  "name": "'API-$HOST'",
  "interfaces": [
    {
      "type": 1,
      "main": 1,
      "useip": 1,
      "ip": "'$HOST'",
      "dns": "",
      "port": "10050"
    }
  ],
  "groups": [
    {
      "groupid": "2"
    }
  ],
  "templates": [
    {
      "templateid": "10001"
    }
  ]
},
"id": 1,
"auth": "'$token'"
}' $URL | python3 -m json.tool

api_create (主动模式)

#!/bin/bash

if [[ $# -ne 1 ]]
then
  echo "usage: bash script.sh <HOSTNAME>"
  exit -1
fi

HOST=$(hostname -I | awk '{print $1}')
HOSTNAME=${1}
ZABBIX_SERVER='my_zabbix.com'
nginx_URL="http://${ZABBIX_SERVER}/api_jsonrpc.php"
apache_URL="http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php"

# 选择web服务器类型指定URL
URL=$nginx_URL

token=$(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
}' $URL | cut -d ',' -f2 | cut -d '"' -f4)

curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
  "host": "'$HOSTNAME'",
  "name": "'$HOST'",
  "interfaces": [
    {
      "type": 1,
      "main": 1,
      "useip": 1,
      "ip": "'$HOST'",
      "dns": "",
      "port": "10050"
    }
  ],
  "groups": [
    {
      "groupid": "2"
    }
  ],
  "templates": [
    {
      "templateid": "10343"
    }
  ]
},
"id": 1,
"auth": "'$token'"
}' $URL | python3 -m json.tool