目录
3.1 Ubuntu 安装 Zabbix Proxy 6.0
4. 总结自定义监控,监控linux, nginx, 并基于短信/email报警。
5. 完成部署zabbix agent脚本,可适配rocky和ubuntu系统。
6. 完成命令行脚本,可以基于zabbix api添加zabbix agent到zabbix web。
1. 总结zabbix安装过程(选择课程演示版本)。
#官网选择版本下载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
#安装Zabbix server,Web前端,agent
apt update & apt install zabbix-server-mysql zabbix-frontend-php zabbix-nginx-conf zabbix-sql-scripts zabbix-agent
#创建初始数据库
mysql -uroot -p
mysql> create database zabbix character set utf8mb4 collate utf8mb4_bin;
mysql> create user zabbix@localhost identified by '123456';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;#导入初始架构和数据
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
#关闭变量
mysql> set global log_bin_trust_function_creators = 0;
mysql> exit;#配置数据库
vim /etc/zabbix/zabbix_server.conf
DBPassword=123456
#配置php
vim /etc/zabbix/nginx.conf
listen 8080;
server_name zabbix.huang.com;
#启动zabbix进程
systemctl enable --now zabbix-server zabbix-agent nginx php8.1-fpm
2. 总结 zabbix主动模式和被动模式简介及实现
- 被动模式: Server 向 Agent 请求获取监控项的数据,Agent返回数据。此为默认模式,如果有100个监控项,则需要100次交互
- 主动模式: Agent 请求 Server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy,如有100个监控项,只需要1次交互即可
实现zabbix主动模式
#在 Zabbix Agent 配置主动模式
vim /etc/zabbix/zabbix_agentd.conf
Server = 10 .0.0.100 # 被动模式指向 Zabbix Server 的 IP 或 FQDNServerActive = 10 .0.0.100 # 主动模式指向 Zabbix Server 的 IP 或 FQDNHostname = 10 .0.0.200 # 当前主机的 IP, 此项必须和 Zabbix Server 中设置的主机名称相同Timeout = 30 # 建议修改#重启服务systemctl restart zabbix-agent.service使用主动模式需要将主机监控项也更改为主动模式的监控项
3. 总结 zabbix proxy主动及被动案例
- 监控远程区域设备,尤其是多机房和多个云环境时
- 监控网络不稳定区域,避免跨网段监控的告警不及时
- 当需要监控设备众多时,使用它来减轻 Zabbix Server 的压力
- 简化分布式监控的维护,无需各位创建 Zabbix Server,统一管理策略
3.1 Ubuntu 安装 Zabbix Proxy 6.0
[root@ubuntu2204 ~] #wgethttps://repo.zabbix.com/zabbix/6.0/ubuntu/pool/main/z/zabbix-release/zabbixrelease_6.0-4%2Bubuntu22.04_all.deb[root@ubuntu2204 ~] #dpkg -i zabbix-release_6.0-4+ubuntu22.04_all.deb[root@ubuntu2204 ~] #sed -i.bak's/repo.zabbix.com/mirrors.tuna.tsinghua.edu.cn\/zabbix/'/etc/apt/sources.list.d/zabbix.list[root@ubuntu2204 ~] #apt update[root@ubuntu2204 ~] #apt -y install zabbix-proxy-mysql zabbix-sql-scripts
3.2 准备数据库
#创建数据库和授权,导入数据结构[root @zabbix -proxy-active ~] #apt -y install mysql-server[root @zabbix -proxy-active ~] #mysqlmysql> select version();+-----------+| version() |+-----------+| 8.0.17 |+-----------+1 row in set ( 0.00 sec)mysql> create database zabbix_proxy_active character set utf8 collate utf8_bin;mysql> create user proxy @'localhost' identified by '123456' ;mysql> grant all on zabbix_proxy_active.* to proxy @'localhost' ;mysql> set global log_bin_trust_function_creators = 1 ;mysql> quit ;[root @zabbix -proxy-active ~] #zcat /usr/share/doc/zabbix-proxymysql/schema.sql.gz | mysql -uproxy -p123456 -h10.0.0.101 zabbix_proxy_active[root @ubuntu2204 ~] #mysqlmysql> set global log_bin_trust_function_creators = 0 ;mysql> exit
3.3 修改proxy配置文件
[root@zabbix-proxy-active ~] #grep '^[^#]' /etc/zabbix/zabbix_proxy.confProxyMode = 0 # 主动模式为 0 ,被动模式为 1, 默认为 0 即主动模式Server = 10 .0.0.100 # 指向 Zabbix ServerHostname = zabbix-proxy-active # 此名称必须和后面 Web 管理页的 agent 代理程序名称相同DBHost = localhost #MySQL 服务器地址DBName = zabbix_proxy_active #MySQL 数据库名DBUser = proxy # 连接 MySQL 的用户DBPassword = 123456 # 连接 MySQL 的用户密码LogFile = /var/log/zabbix/zabbix_proxy.logLogFileSize = 0DebugLevel = 4 # 指定日志级别,默认为 3 ,值越大日志越详细EnableRemoteCommands = 1 # 开启远程命令,允许 server 到 proxy 上执行命令,在故障自愈时使用PidFile = /var/run/zabbix/zabbix_proxy.pidSocketDir = /var/run/zabbixProxyLocalBuffer = 360 # 当 proxy 将数据发送给 server 后将数据仍在本地保存多少时间 ,默认不保留ProxyOfflineBuffer = 720 # 当 proxy 和 server 无法连接时将数据在本地保存多长时间 , 默认1 小时HeartbeatFrequency = 60 #server 端用来检测 proxy 可用性的心跳信息的时间间隔 , 被动模式无效ConfigFrequency = 60 # 每间隔多少时间到 server 获取监控项,在 agent 更新端监控项,只在主动模式有效 , 默认 3600sDataSenderFrequency = 60 # 数据发送的间隔时间,只在主动模式有效 , 默认 1s, 建议加长JavaGateway = 10 .0.0.101 # 指向 JAVA gateway 主机StartJavaPollers = 10 # 指定开启的进程数 , 默认为 0 ,即不开启SNMPTrapperFile = /var/log/snmptrap/snmptrap.logCacheSize = 8M # 当主机数量很多时,会将获取的监控项存放在缓存中,生产中设置 2GStartDBSyncers = 4 # 启动多少个线程和数据库连接HistoryCacheSize = 16M # 保存 agent 发送过来的监控数据的内存空间大小,生产中设置2GHistoryIndexCacheSize = 4M # 历史数据的索引Timeout = 30 # 获取数据的最长等待时间ExternalScripts = /usr/lib/zabbix/externalscriptsLogSlowQueries = 3000 # 慢查询时长# 默认 zabbix-proxy.service 不自动启动,设置服务开机自启[root@zabbix-proxy-active ~] #systemctl enable --now zabbix-proxy.service#在 Zabbix Server 上配置 Zabbix Agent 使用主动代理或被动代理
4. 总结自定义监控,监控linux, nginx, 并基于短信/email报警。
#cat /etc/zabbix/zabbix_agentd.conf#cat /etc/zabbix/zabbix_agent2.confUserParameter = <key>,<shell command>Include = /etc/zabbix/zabbix_agentd.d/*.conf# 或者创建独立的自定义文件#cat /etc/zabbix/zabbix_agentd.d/*.conf#cat /etc/zabbix/zabbix_agent2.d/*.confUserParameter = <key>,<shell command>
范例:取根文件系统的空间利用率
[root@centos8 ~] #cat /etc/zabbix/zabbix_agentd.d/test.conf[root@centos8 ~] #cat /etc/zabbix/zabbix_agent2.d/test.confUserParameter = root_filesystem_use,df|awk -F ' +|%' '$7 == "/" {print $5 }'# 客户端测试[root@centos8 ~] #zabbix_agent -t root_filesystem_use[root@centos8 ~] #zabbix_agent2 -t root_filesystem_use# 重启服务后服务器端才能获取数据[root@centos8 ~] #systemctl restart zabbix-agent.service# 服务器端测试[root@zabbix-server ~] #yum -y install zabbix-get[root@zabbix-server ~] #apt -y install zabbix-get[root@zabbix-server ~] #zabbix_get -s 10.0.0.38 -p 10050 -k"root_filesystem_use"
可以创建自定义模板,灵活配置主机
使用流程:
- 创建模板,模板必须属于某个主机组(一般属于主机组Templates)
- 在模板中创建监控项、图形、触发器
- 创建需要监控的主机,然后关联对应的模板
- 更改模板的监控项目,所以使用模板的都会自动更改
- 导出模板,后期可以至其他系统继续使用
4.1 监控linux
#添加主机
4.2 监控nginx
#安装和配置nginx
#Ubuntu 系统[root@ubuntu2204 ~] #apt update && apt -y install nginx[root@ubuntu2204 ~] #vim /etc/nginx/sites-enabled/defaultserver {.....# 添加下面三行, Zabbix 默认监控 /basic_status, 此处为 /status ,需要和 zabbix 的模板定义的路径要保持一致location /status {stub_status;}......}[root@ubuntu2204 ~] #nginx -s reload# 红帽系统[root@centos8 ~] #yum -y install nginx[root@centos8 ~] #vim /etc/nginx/nginx.confhttp {server {location / {}# 添加下面三行, Zabbix 默认监控 /basic_status, 此处为 /status ,需要和 zabbix 的模板定义的路径要保持一致location = /status {stub_status;}}}[root@centos8 ~] #systemctl enable --now nginx
#关联内置模板,修改宏定义
Zabbix 内置宏定义{$NGINX.STUB_STATUS.PATH}默认值为 basic_status,修改为nginx配置文件中的status
#查看监控数据
4.3 邮箱告警
- 在邮箱上开启SMTP功能,利用此邮箱实现发送报警邮件
- 创建报警媒介类型实现发信人功能:管理-->报警媒介类型-->创建报警媒介类型
# 可以修改两个消息模板# 问题主题 : 告警 : {EVENT.NAME}告警主机: {HOST.NAME1}告警服务 : {ITEM.NAME1}告警 Key1: {ITEM.KEY1} : {ITEM.VALUE1}告警 Key2: {ITEM.KEY2} : {ITEM.VALUE2}严重级别 : {TRIGGER.SEVERITY}# 恢复 Problem Recovery主题 : 恢复 : {EVENT.DURATION}: {EVENT.NAME}恢复主机: {HOST.NAME1}恢复服务: {ITEM.NAME1}恢复 Key1 : {ITEM.KEY1} : {ITEM.VALUE1}恢复 Key2: {ITEM.KEY2} : {ITEM.VALUE2}
创建完成,可以看到下面信息
测试是否邮件正常,有时QQ邮箱不成功,可以尝试其它邮箱,如163邮箱
5. 完成部署zabbix agent脚本,可适配rocky和ubuntu系统。
ZABBIX_VER = 5 .0.13FILE = zabbix- ${ZABBIX_VER} .tar.gzINSTALL_DIR = /apps/zabbix_agentSERVER = 10 .0.0.100HOST = `hostname -I`. /etc/os-releasecolor () {RES_COL = 60MOVE_TO_COL = "echo -en \\033[ ${RES_COL} G"SETCOLOR_SUCCESS = "echo -en \\033[1;32m"SETCOLOR_FAILURE = "echo -en \\033[1;31m"SETCOLOR_WARNING = "echo -en \\033[1;33m"SETCOLOR_NORMAL = "echo -en \E[0m"echo -n " $1 " && $MOVE_TO_COLecho -n "["if [ $2 = "success" -o $2 = "0" ] ;then${SETCOLOR_SUCCESS}echo -n $" OK "elif [ $2 = "failure" -o $2 = "1" ] ;then${SETCOLOR_FAILURE}echo -n $"FAILED"else${SETCOLOR_WARNING}echo -n $"WARNING"fi${SETCOLOR_NORMAL}echo -n "]"echo}check(){wgethttps://cdn.zabbix.com/zabbix/sources/stable/ ${ZABBIX_VER%.*} /zabbix- $ZABBIX_VER.tar.gz[ -e ${FILE} ] || { color " $FILE 文件不存在 , 请检查 " 1 ; exit 1 ; }}prepare (){if [ $ID = "centos" $ID = "rocky" ];thenyum -y install gcc make pcre-devel || { color "zabbix agent 相关包安装失败 , 请检查 " 1 ;exit; }elseapt -y install gcc make || { color "zabbix agent 相关包安装失败 , 请检查 " 1;exit; }fiid zabbix &> /dev/null || useradd -r zabbix}install() {tar xf $FILEcd zabbix- $ZABBIX_VER./configure --prefix = ${INSTALL_DIR} --enable-agentmake && make install}config () {sed -i .bak -e "s/Server=127.0.0.1/Server= $SERVER /" -e "s/Hostname=Zabbixserver/Hostname= $HOST /" ${INSTALL_DIR} /etc/zabbix_agentd.confecho 'PATH=${INSTALL_DIR}/bin/:${INSTALL_DIR}/sbin/:$PATH' >/etc/profile.d/zabbix_agent.sh}service (){cat > /lib/systemd/system/zabbix-agent.service <<EOF[Unit]Description = Zabbix AgentAfter = syslog.targetAfter = network.target[Service]Type = forkingRestart = on-failurePIDFile = /tmp/zabbix_agentd.pidKillMode = control-groupExecStart = ${INSTALL_DIR} /sbin/zabbix_agentd -c${INSTALL_DIR} /etc/zabbix_agentd.confExecStop = /bin/kill -SIGTERM $MAINPIDRestartSec = 10sUser = zabbixGroup = zabbix[Install]WantedBy = multi-user.targetEOFsystemctl daemon-reloadsystemctl enable --now zabbix-agent.servicesystemctl is-active zabbix-agent.service && color "Zabbix Agent 安装完成并启动 "0}checkprepareinstallconfigservice
6. 完成命令行脚本,可以基于zabbix api添加zabbix agent到zabbix web。
ZABBIX_SERVER=zabbix.wang.org
TOKEN=$(./zabbix-api-token.sh| awk -F'"' '{print $8}')
HOST=10.0.0.106
curl -s -XPOST -H "Content-Type: application/json-rpc" -d '
{
"jsonrpc": "2.0",
"method": "host.create",
"params": {
"host": "'web-api-$HOST'",
"name": "'web-api-$HOST'",
"interfaces": [
{
"type": 1,
"main": 1,
"useip": 1,
"ip": "'$HOST'",
"dns": "",
"port": "10050"
}
],
"groups": [
{
"groupid": "2"
}
],
"templates": [
{
"templateid": "10001"
}
]
},
"id": 1,
"auth": "'$TOKEN'"
}' http://${ZABBIX_SERVER}/zabbix/api_jsonrpc.php | python3 -m json.tool
7. 基于课程演示,构建一个漂亮的grafana大盘。
# 下载安装grafana
wget https://dl.grafana.com/enterprise/release/grafana-enterprise_11.1.0_amd64.deb
apt-get install -y adduser libfontconfig1 musl
dpkg -i grafana-enterprise_11.1.0_amd64.deb#启动服务,默认监听端口3000
systemctl enable --now grafana-server.service
页面展示
#官方网站下载zabbix插件
#下载指令
grafana-cli plugins install alexanderzobnin-zabbix-app
#添加目录权限,否则grafana页面不会显示安装成功
chown -R grafana.grafana /var/lib/grafana/plugins/
#重启服务
systemctl restart grafana-server.service
#在grafana界面启动zabbix插件
#添加数据源
在URL填写以下信息:
# 基于 nginxhttp: //zabbix-server/api_jsonrpc.php# 基于 apachehttp: //zabbix-server/zabbix/api_jsonrpc.php
填写zabbix账号密码,点击保存和测试,显示成功
上面页面-dashboards,导入自带的dashboards
官网导入其他制作好的模板
https://grafana.com/grafana/dashboards
寻找合适模板,导入ID或下载文件拖入
界面如下,根据需要调整监控项