1. 总结各系统版本的zabbix安装。
编译zabbix #使用ubuntu系统
apt -y install libmysqlclient-dev libsnmp-dev libevent-dev openjdk-8-jdk openjdk-8-jre libcurl3-dev
创建账号和组
groupadd zabbix
useradd -g zabbix zabbix
下载源码并解压
tar xf zabbix-5.0.40.tar.gz
cd zabbix-5.0.40/
mkdir /data/zabbix_server
编译安装:
./configure --prefix=/data/zabbix_server --enable-server --enable-agent --enable-java --with-mysql --with-net-snmp --with-libcurl --with-libxml
make -j 2 && make install
查看一下
tree /data/zabbix_server/
配置路径:
echo 'PATH=/data/zabbix_server/bin:$PATH' > /etc/profile.d/zabbix.sh
echo 'PATH=/data/zabbix_server/sbin:$PATH' >> /etc/profile.d/zabbix.sh
bash /etc/profile.d/zabbix.sh
source /etc/profile
准备数据库:
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user 'zabbix'@'10.0.0.%' identified by '123456';
mysql> grant all privileges on zabbix.* to 'zabbix'@'10.0.0.%';
如果是mysql与zabbix不在同一主机输入
ALTER USER zabbix@'10.0.0.%' IDENTIFIED WITH mysql_native_password BY '123456';
重启服务:
systemctl restart mysql.service
设置远程连接:
vim /etc/mysql/mysql.conf.d/mysqld.cnf
bind-address = 0.0.0.0
mysqlx-bind-address = 0.0.0.0
同步数据库:
讲下面的三个文件数据全部同步到mysql当中
zabbix-5.0.40/database/mysql/data.sql
zabbix-5.0.40/database/mysql/images.sql
zabbix-5.0.40/database/mysql/schema.sql
这里需要注意,导入的顺序必须正确,否则无法导入成功:
mysql -uzabbix -p123456 -h10.0.0.5 zabbix < zabbix-5.0.40/database/mysql/schema.sql
mysql -uzabbix -p123456 -h10.0.0.5 zabbix < zabbix-5.0.40/database/mysql/images.sql
mysql -uzabbix -p123456 -h10.0.0.5 zabbix < zabbix-5.0.40/database/mysql/data.sql
修改zabbix server配置文件
vim /data/zabbix_server/etc/zabbix_server.conf
ListenPort=10051
LogFile=/tmp/zabbix_server.log
DBHost=10.0.0.5
DBName=zabbix
DBUser=zabbix
DBPassword=123456
DBPort=3306
启动相关业务
zabbix_server -c /data/zabbix_server/etc/zabbix_server.conf
将源码包中的所有关于php页面的文件拷贝到nginx中
cp -a zabbix-5.0.40/ui/* /data/nginx/html/
chmod -R 777 /data/nginx/html/
chown -R zabbix.zabbix /data/zabbix_server/
创建zabbix service文件:
killall zabbix_server
vim /lib/systemd/system/zabbix-server.service
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/data/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/sysconfig/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/data/zabbix_server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=0
[Install]
WantedBy=multi-user.target
开启服务:
systemctl daemon-reload
systemctl enable --now zabbix-server.service
配置zabbix agent的service文件
如果zabbix agent在运行,没有就不用终止了
killall zabbix_agentd
创建文件:
vim /lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/data/zabbix_server/sbin/zabbix_agentd -c /data/zabbix_server/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
开启服务:
systemctl daemon-reload
systemctl enable --now zabbix-agent.service
2. 总结 zabbix主动模式和被动模式简介及实现
Zabbix主动和被动模式原理:
Zabbix监控流程中Agent收集数据分为主动和被动两种模式
主动模式和被动模式都是相对Zabbix agent而言的
Zabbix默认是被动模式,如果有100个监控项,被动模式需要zabbix server找到zabbix agent要100次
主动模式是zabbix server给zabbix agent发送一个包括100次监控项的任务清单,zabbix Agent根据任务清单,采集好100监控项的值,主动汇报给zabbix server这100个监控项,zabbix Agent 主动模式只需要发送一次数据,大大提高了传输效率
被动模式:server向agent请求获取监控项的数据,agent返回数据,此为默认模式,如果有100个监控项则需要100次交互
主动模式:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy,如有100个监控项,只需要1次交互即可
注意:两种模式可以在zabbix server上同时存在,可以将一个部分监控项设为主动,其他设为被动模式,主动需要配置,默认是被动模式不需要配置
实现主动被动模式
Zabbix server主动和被动模式无需配置即可支持,还可以支持多个主动和被动模式的zabbix Agent同时存在
vim /data/zabbix_agent/etc/zabbix_agentd.conf
Server=<Zabbix Server> #被动模式指向zabbix server的IP或FQDN,默认模式
ServerActive=<Zabbix Server> #主动模式指向 Zabbix server的IP或FQDN
Hostname=<当前主机IP> #当前主机的IP,此项必须和Zabbix Server中设置的主机名相同
修改:
ServerActive=10.0.0.4 #向服务器端汇报
Hostname=主机IP #跟web主机名称必须一样
在zabbix web界面需要单独设置主机的监控项,默认模式下是被动的不需要设置,主动就得去设置
如果是新添加的监控项,需要在类型上选择“zabbix客户端(主动式)”
如果是修改被动的监控项,按照以下步骤批量修改:
最后呈现结果
特别注意:如果是主动模式,主机的名称必须是Hostname同样的地址:
3. 总结 zabbix proxy主动及被动案例
Zabbix Proxy 是一种用于收集 Zabbix Agent 数据的代理服务器,可以减轻 Zabbix Server 的负载。Zabbix Proxy 可以配置为主动模式或被动模式,具体取决于使用场景和需求。
在主动模式下,Zabbix Proxy 会主动从 Zabbix Agent 收集数据,并将数据存储在本地数据库中。然后,Zabbix Proxy 会将数据发送给 Zabbix Server。这种模式适用于监控大量主机和网络不稳定区域的情况,可以减轻 Zabbix Server 的负载,并确保数据的及时性和可靠性。
首先安装zabbix proxy,安装完成之后需要设置mysql单独给zabbix proxy创建一个账号
这次的实验mysql和zabbix proxy放在一个机器上了
mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin;
mysql> create user proxy@'10.0.0.%' identified by '123456';
mysql> grant all on zabbix_proxy_active.* to proxy@'10.0.0.%';
导入数据库:
mysql -uproxy -p123456 -h10.0.0.9 zabbix_proxy_active < zabbix-5.0.40/database/mysql/schema.sql
修改proxy配置文件
vim /data/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=0 #开启主动模式,1是被动模式
Server=10.0.0.4 #指向zabbix server服务器的地址
ServerPort=10051 #开启端口
Hostname=Zabbix-proxy #主机的名字,在web界面上也需要需要用这个名字
DBHost=10.0.0.9 #指定msyql数据库IP地址
DBName=zabbix_proxy_active #指定mysql数据库名称
DBUser=proxy #Mysql用户名
DBPassword=123456 #数据库密码
重启服务:
systemctl restart zabbix-proxy.service
重启之后会开启一个10051端口
开始到zabbix server web界面配置代理:
在zabbix Agent上修改配置,切换到一个agent服务器,修改配置文件
vim /data/zabbix_agent/etc/zabbix_agentd.conf
ServerActive=10.0.0.9 #服务器的指向指向zabbix-proxy
Server=10.0.0.9 #被动模式也修改成zabbix-proxy
systemctl restart zabbix-agent.service
监控项里的设置必须是主动模式,否则即使连接上了也不会生效
接下里将主机的监控修改成代理的监控,也就是agent的机器让zabbix-proxy监控
4. 总结自定义监控,监控win, nginx, 并基于短信/微信报警。
先去配置agent客户端配置文件:#以下操作实现的是如何自定义监控,基于短信微信报警因为个别原因无法完成
vim /data/zabbix_agent/etc/zabbix_agentd.conf
找到
# Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
修改成:
Include=/data/zabbix_agent/etc/zabbix_agentd.conf.d/*.conf
在zabbix_agentd.conf.d/的目录下配置自定义的配置文件
cd /data/zabbix_agent/etc/zabbix_agentd.conf.d/到这个目录下开始创建文件
创建文件开始配置:
vim user_login.conf
输入:
UserParameter=user.logn.count,who|wc -l
保存并客户端测试:
zabbix_agentd -t user.logn.count
user.logn.count [t|2]
t 文本,与s相同,最大长度不受限制
s 文本,最大长度不受限制
d 带小数的数字
u 无符号整数
m 不支持状态,表示该监控项的设置有错误或权限问题服务端测试
服务器端开始检测:
zabbix_get -s 10.0.0.6 -k user.logn.count
先去创建一个模板取好“名字”然后应用
之后点击模板,然后再开始创建监控项
找到模板点击应用
创建完成之后开始监控项
回到模板主页面点击创建好的监控项,开始创建自定义的监控项:
开始创建模板监控项:
如果是把监控项添加到了主机上的话需要:
点击下面的测试就会先去测试当前的监控是否有效,如果正常将会显示结果
点击添加就会正常使用
UserParameter=tcp.state[*], netstat -nat | grep -c $1
也就是$1识别[*]中的内容,如果是其中一个选项grep -c 就会输出$1的位置选项
但是再web界面的键值上是需要加参数的
5. 完成1键安装zabbix agent脚本,可以用于ubuntu系统。
#!/bin/bash
#判断当前用户是否为root用户
if [ `whoami` = "root" ];then
echo "当前用户为root用户,将进行以下程序"
else
echo "当前不是root用户,请更换为root用户"
exit
fi
#定义agent配置文件变量
VERSION=5.0.40
SERVER=10.0.0.5
HOST_NAME=10.0.0.6
PORT=10050
#安装编译所需依赖包
install_apt(){
apt update
apt -y install libmysqlclient-dev libsnmp-dev libevent-dev openjdk-8-jdk openjdk-8-jre libcurl3-dev
}
#创建zabbix用户以及用户组
zabbix_user(){
groupadd zabbix
useradd -g zabbix -s /sbin/nologin zabbix
}
#下载源码包并解压
wget_agent(){
# wget https://cdn.zabbix.com/zabbix/sources/stable/5.0/zabbix-$VERSION.tar.gz
tar xf zabbix-$VERSION.tar.gz
cd zabbix-$VERSION/
mkdir -pv /data/zabbix_agent
}
#编译安装
make_agent(){
./configure --prefix=/data/zabbix_agent --enable-agent
make -j 2 && make install
}
#配置路径以及设置配置文件
zabbix_config(){
echo 'PATH=/data/zabbix_agent/sbin:$PATH' > /etc/profile.d/zabbix.sh
export GLOBAL_VARIABLE=/data/zabbix_agent/sbin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
bash /etc/profile.d/zabbix.sh
. /etc/profile.d/zabbix.sh
sed -i -e "/^Server=127.0.0.1/c Server=$Server" -e "/^Hostname=Zabbix server/c Hostname=$HOST_NAME" -e "/^# ListenPort=10050/c ListenPort=$PORT" /data/zabbix_agent/etc/zabbix_agentd.conf
cat > /lib/systemd/system/zabbix-agent.service <<EOF
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/data/zabbix_agent/sbin/zabbix_agentd -c /data/zabbix_agent/etc/zabbix_agentd.conf
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now zabbix-agent.service
zabbix_agentd -V
}
install_apt
zabbix_user
wget_agent
make_agent
zabbix_config
6. 完成1键脚本,可以基于zabbix api添加zabbix agent到zabbix web。
#!/bin/bash
# 定义Zabbix API相关参数
ZABBIX_URL="http://10.0.0.5/zabbix/api_jsonrpc.php"
USERNAME="zabbix"
PASSWORD="123456"
AGENT_NAME="zabbix"
AGENT_IP="10.0.0.5"
AGENT_PORT="10051"
# 生成随机的agent id和主机名称
AGENT_ID=$(echo "random_agent_id" | sha256sum | cut -d' ' -f1)
HOST_NAME=$(echo "Random Host Name ${AGENT_ID}")
# 定义Zabbix API请求数据
DATA='{
"jsonrpc": "2.0",
"method": "host.add",
"params": {
"hostid": null,
"name": "'${HOST_NAME}'",
"ip": "'${AGENT_IP}'",
"port": '${AGENT_PORT}',
"status": 0,
"agent": "Zabbix Agent",
"interfaces": [
{
"type": 1,
"main": 1,
"ip": "'${AGENT_IP}'",
"port": '${AGENT_PORT}',
"useip": 1,
"dns": "",
"ip_dns": "127.0.0.1"
}
],
"description": "Zabbix Agent ${AGENT_NAME}",
"inventory_mode": 0,
"custom_inventory_script": "",
"host_metadata": {
"os": "Linux",
"os_full": "Ubuntu",
"os_short": "UBUNTU",
"app_os": "",
"app_os_full": "",
"app_os_short": ""
}
},
"auth": "'${USERNAME}:'${PASSWORD}",
"id": 1
}'